diff --git a/src/main/java/org/olat/modules/forms/model/xml/ScaleType.java b/src/main/java/org/olat/modules/forms/model/xml/ScaleType.java index 26e3fd83b6de1c0855b55f9492c9e3184d599129..116691500e85a9a70dc3f36d2f79e766522080ac 100644 --- a/src/main/java/org/olat/modules/forms/model/xml/ScaleType.java +++ b/src/main/java/org/olat/modules/forms/model/xml/ScaleType.java @@ -32,31 +32,31 @@ import org.olat.core.gui.translator.Translator; public enum ScaleType { zeroToMax { @Override - public double getStepValue(int numberOfSteps, int step) { + public double getStepValue(int numberOfSteps, double step) { return step - 1; } }, oneToMax { @Override - public double getStepValue(int numberOfSteps, int step) { + public double getStepValue(int numberOfSteps, double step) { return step; } }, maxToOne { @Override - public double getStepValue(int numberOfSteps, int step) { + public double getStepValue(int numberOfSteps, double step) { return numberOfSteps + 1 - step; } }, maxToZero { @Override - public double getStepValue(int numberOfSteps, int step) { + public double getStepValue(int numberOfSteps, double step) { return numberOfSteps - step; } }, zeroBallanced { @Override - public double getStepValue(int numberOfSteps, int step) { + public double getStepValue(int numberOfSteps, double step) { double offset = (numberOfSteps - 1) / 2.0; return step - 1 - offset; } @@ -70,7 +70,7 @@ public enum ScaleType { * @param weight (optionl) * @return */ - public double getStepValue(int numberOfSteps, int step, Integer weight) { + public double getStepValue(int numberOfSteps, double step, Integer weight) { double stepValue = getStepValue(numberOfSteps, step); return weight != null ? stepValue * weight.intValue() @@ -78,7 +78,7 @@ public enum ScaleType { }; - abstract double getStepValue(int numberOfSteps, int step); + abstract double getStepValue(int numberOfSteps, double step); public String getKey() { return name(); diff --git a/src/main/java/org/olat/modules/quality/analysis/manager/StatisticsCalculator.java b/src/main/java/org/olat/modules/quality/analysis/manager/StatisticsCalculator.java index f53afe1fb41c9abdd2aeca5faa19af0a198c74f7..bec5eba1efa6310f65a5b226a14eb26807b7551e 100644 --- a/src/main/java/org/olat/modules/quality/analysis/manager/StatisticsCalculator.java +++ b/src/main/java/org/olat/modules/quality/analysis/manager/StatisticsCalculator.java @@ -103,7 +103,7 @@ public class StatisticsCalculator { log.debug("Raw grouped statistic: " + rawStatistic.toString()); Double rawAvg = rawStatistic.getRawAvg(); boolean rawAvgMaxGood = !rubric.isStartGoodRating(); - Double scaledAvg = getScaledAvg(rubric, rawAvg); + Double scaledAvg = rubric.getScaleType().getStepValue(rubric.getSteps(), rawAvg, rubric.getWeight()); RubricRating rating = evaluationFormManager.getRubricRating(rubric, scaledAvg); int steps = rubric.getSteps(); GroupedStatistic statistic = new GroupedStatisticImpl(rawStatistic.getIdentifier(), rawStatistic.getMultiKey(), @@ -112,24 +112,6 @@ public class StatisticsCalculator { return statistic; } - private Double getScaledAvg(Rubric rubric, Double rawAvg) { - Double scaledAvg = rawAvg; - switch (rubric.getScaleType()) { - case maxToOne: { - scaledAvg = rubric.getSteps() + 1 - rawAvg; - break; - } - case zeroBallanced: { - double offset = (rubric.getSteps() - 1) / 2.0; - scaledAvg = rawAvg - 1 - offset; - break; - } - default: - break; - } - return scaledAvg; - } - MultiTrendSeries<String> getTrendsByIdentifiers(GroupedStatistics<GroupedStatistic> statistics, TemporalGroupBy temporalGroupBy) { Set<TemporalKey> temporalKeys = new HashSet<>(); for (GroupedStatisticKeys groupedStatistic : statistics.getStatistics()) { diff --git a/src/test/java/org/olat/modules/forms/model/xml/ScaleTypeTest.java b/src/test/java/org/olat/modules/forms/model/xml/ScaleTypeTest.java index a6e867c7b88e7fee2c95d283e28afd5d2d29d4de..e18e0e3278635d01d5faf393c634cba6cae72508 100644 --- a/src/test/java/org/olat/modules/forms/model/xml/ScaleTypeTest.java +++ b/src/test/java/org/olat/modules/forms/model/xml/ScaleTypeTest.java @@ -98,5 +98,17 @@ public class ScaleTypeTest { softly.assertThat(ScaleType.zeroBallanced.getStepValue(7, 7)).isEqualTo(3); softly.assertAll(); } + + @Test + public void shouldGetWeightedValue() { + SoftAssertions softly = new SoftAssertions(); + softly.assertThat(ScaleType.oneToMax.getStepValue(6, 2, null)).isEqualTo(2); + softly.assertThat(ScaleType.oneToMax.getStepValue(6, 2, 2)).isEqualTo(4); + softly.assertThat(ScaleType.maxToOne.getStepValue(6, 3, 3)).isEqualTo(12); + softly.assertThat(ScaleType.zeroToMax.getStepValue(6, 2, 2)).isEqualTo(2); + softly.assertThat(ScaleType.maxToZero.getStepValue(6, 2, 1)).isEqualTo(4); + softly.assertThat(ScaleType.zeroBallanced.getStepValue(6, 3, 3)).isEqualTo(-1.5); + softly.assertAll(); + } }