Skip to content

Commit 7fde50b

Browse files
authored
return pattern values as percentages (#18)
* return pattern values as percentages * remove unnecessary variable & update framework name
1 parent 6079e92 commit 7fde50b

2 files changed

Lines changed: 47 additions & 49 deletions

File tree

src/main/java/org/eclipse/opensmartclide/architecturalpatterns/selection/PatternSelectionController.java

Lines changed: 46 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -13,52 +13,50 @@
1313

1414
@RestController
1515
public class PatternSelectionController {
16-
private final ArchitecturalPatternsJsonHandler surveyJsonHandler;
17-
18-
public PatternSelectionController(final ArchitecturalPatternsJsonHandler surveyJsonHandler) {
19-
this.surveyJsonHandler = surveyJsonHandler;
20-
}
21-
22-
@PostMapping(
23-
value = "/evaluation",
24-
consumes = MediaType.APPLICATION_JSON_VALUE,
25-
produces = MediaType.APPLICATION_JSON_VALUE
26-
)
27-
public Map<ArchitecturalPatterns, Integer> evaluateSurveyInput(@RequestBody List<String> input) {
28-
return calculatePatternValues(input);
29-
}
30-
31-
private HashMap<ArchitecturalPatterns, Integer> calculatePatternValues(final List<String> input) {
32-
// Initialize
33-
final JsonNode surveyEvaluationNode = surveyJsonHandler.getSurveyEvaluationNode();
34-
final HashMap<ArchitecturalPatterns, Integer> patternValues = initializePatternValues();
35-
36-
// Iterate over survey question IDs
37-
for (String id : input) {
38-
if (surveyEvaluationNode.get(id) == null) {
39-
throw new IllegalArgumentException("Invalid survey input received: " + id + "is not a valid question ID.");
40-
}
41-
JsonNode valuesJsonNode = surveyEvaluationNode.get(id);
42-
43-
for (ArchitecturalPatterns pattern : ArchitecturalPatterns.values()) {
44-
int newValue = patternValues.get(pattern) + valuesJsonNode.get(pattern.name()).asInt();
45-
// Update evaluation score for pattern
46-
patternValues.put(pattern, newValue);
47-
}
48-
}
49-
return patternValues;
50-
}
51-
52-
private HashMap<ArchitecturalPatterns, Integer> initializePatternValues() {
53-
return new HashMap<>(
54-
Map.of(
55-
ArchitecturalPatterns.LAYERED, 0,
56-
ArchitecturalPatterns.EVENT_DRIVEN, 0,
57-
ArchitecturalPatterns.MICROKERNEL, 0,
58-
ArchitecturalPatterns.MICROSERVICES, 0,
59-
ArchitecturalPatterns.SERVICE_ORIENTED, 0,
60-
ArchitecturalPatterns.SPACE_BASED, 0
61-
)
62-
);
63-
}
16+
private final ArchitecturalPatternsJsonHandler surveyJsonHandler;
17+
18+
public PatternSelectionController(final ArchitecturalPatternsJsonHandler surveyJsonHandler) {
19+
this.surveyJsonHandler = surveyJsonHandler;
20+
}
21+
22+
@PostMapping(value = "/evaluation", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
23+
public Map<ArchitecturalPatterns, Integer> evaluateSurveyInput(@RequestBody List<String> input) {
24+
return calculatePatternValues(input);
25+
}
26+
27+
private HashMap<ArchitecturalPatterns, Integer> calculatePatternValues(final List<String> input) {
28+
// Initialize
29+
final JsonNode surveyEvaluationNode = surveyJsonHandler.getSurveyEvaluationNode();
30+
final HashMap<ArchitecturalPatterns, Integer> patternValues = initializePatternValues();
31+
int totalValue = 0;
32+
33+
// Iterate over survey question IDs
34+
for (String id : input) {
35+
if (surveyEvaluationNode.get(id) == null) {
36+
throw new IllegalArgumentException(
37+
"Invalid survey input received: " + id + "is not a valid question ID.");
38+
}
39+
JsonNode valuesJsonNode = surveyEvaluationNode.get(id);
40+
41+
for (ArchitecturalPatterns pattern : ArchitecturalPatterns.values()) {
42+
int value = valuesJsonNode.get(pattern.name()).asInt();
43+
int newValue = patternValues.get(pattern) + value;
44+
// Update evaluation score for pattern
45+
patternValues.put(pattern, newValue);
46+
totalValue = totalValue + value;
47+
}
48+
}
49+
50+
for (Map.Entry<ArchitecturalPatterns, Integer> entry : patternValues.entrySet()) {
51+
double percentage = (entry.getValue() * 100) / (double) totalValue;
52+
patternValues.put(entry.getKey(), (int) percentage);
53+
}
54+
return patternValues;
55+
}
56+
57+
private HashMap<ArchitecturalPatterns, Integer> initializePatternValues() {
58+
return new HashMap<>(Map.of(ArchitecturalPatterns.LAYERED, 0, ArchitecturalPatterns.EVENT_DRIVEN, 0,
59+
ArchitecturalPatterns.MICROKERNEL, 0, ArchitecturalPatterns.MICROSERVICES, 0,
60+
ArchitecturalPatterns.SERVICE_ORIENTED, 0, ArchitecturalPatterns.SPACE_BASED, 0));
61+
}
6462
}

src/main/resources/jsonfiles/projectURLs.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"Java with Spring Boot and MySQL": {
2+
"Java_with_Spring_Boot_and_MySQL": {
33
"Layered": "https://github.com/che-samples/web-java-spring-boot",
44
"Event-driven": "https://github.com/spring-projects/spring-kafka",
55
"Microkernel": "https://github.com/devexpress-albania/microkernel",

0 commit comments

Comments
 (0)