From 8bba0008aa02e338d7dc68b13452d45cbbf80e88 Mon Sep 17 00:00:00 2001 From: Lennart Hensler Date: Fri, 22 Aug 2014 14:42:01 +0200 Subject: [PATCH] Implemented a mechanism to sort statistics and dimensions --- ...DeprecatedEnumsToFunctionDTOConverter.java | 26 +++++++++---------- .../datamining/data/HasTrackedLegContext.java | 4 +-- .../HasTrackedLegOfCompetitorContext.java | 2 +- .../data/HasTrackedRaceContext.java | 12 ++++----- .../sap/sailing/domain/base/Competitor.java | 4 +-- .../sailing/domain/base/WithNationality.java | 2 +- .../MultiDimensionalGroupingProvider.java | 5 +++- .../selection/SimpleStatisticProvider.java | 10 ++++--- java/com.sap.sse.datamining.shared/.classpath | 3 +-- .../.settings/org.eclipse.jdt.core.prefs | 6 ++--- .../META-INF/MANIFEST.MF | 2 +- .../shared/annotations/Connector.java | 2 ++ .../shared/annotations/Dimension.java | 2 ++ .../shared/annotations/Statistic.java | 2 ++ .../datamining/shared/dto/FunctionDTO.java | 4 ++- .../shared/impl/dto/FunctionDTOImpl.java | 15 ++++++++++- .../TestFunctionDTOConstruction.java | 12 ++++++--- .../factories/FunctionDTOFactory.java | 2 +- .../sse/datamining/functions/Function.java | 2 ++ ...AdditionalMethodWrappingFunctionData.java} | 10 +++++-- .../impl/functions/CompoundFunction.java | 22 ++++++++++++++-- .../functions/MethodWrappingFunction.java | 17 +++++++++--- 22 files changed, 116 insertions(+), 50 deletions(-) rename java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/{AdditionalFunctionData.java => AdditionalMethodWrappingFunctionData.java} (64%) diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/DeprecatedEnumsToFunctionDTOConverter.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/DeprecatedEnumsToFunctionDTOConverter.java index 09ee9686592..31b7a3e82d4 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/DeprecatedEnumsToFunctionDTOConverter.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/DeprecatedEnumsToFunctionDTOConverter.java @@ -25,11 +25,11 @@ public class DeprecatedEnumsToFunctionDTOConverter { switch (statisticType) { case Distance: functionDTO = new FunctionDTOImpl("getDistanceTraveled", HasTrackedLegOfCompetitorContext.class.getSimpleName(), "Double", - new ArrayList(), "Distance", false); + new ArrayList(), "Distance", false, 0); break; case Speed: functionDTO = new FunctionDTOImpl("getGPSFix -> getSpeed -> getKnots", HasGPSFixContext.class.getSimpleName(), - "double", new ArrayList(), "Speed", false); + "double", new ArrayList(), "Speed", false, 0); break; } statisticTypeToFunctionDTOMap.put(statisticType, functionDTO); @@ -40,47 +40,47 @@ public class DeprecatedEnumsToFunctionDTOConverter { switch (dimensionIdentifier) { case BoatClassName: functionDTO = new FunctionDTOImpl("getBoatClass -> getName", HasTrackedRaceContext.class.getSimpleName(), - String.class.getSimpleName(), new ArrayList(), "Boat Class Name", true); + String.class.getSimpleName(), new ArrayList(), "Boat Class Name", true, 0); break; case CompetitorName: functionDTO = new FunctionDTOImpl("getCompetitor -> getTeam -> getName", HasTrackedLegOfCompetitorContext.class.getSimpleName(), - String.class.getSimpleName(), new ArrayList(), "Competitor Name", true); + String.class.getSimpleName(), new ArrayList(), "Competitor Name", true, 0); break; case CourseAreaName: functionDTO = new FunctionDTOImpl("getCourseArea -> getName", HasTrackedRaceContext.class.getSimpleName(), - String.class.getSimpleName(), new ArrayList(), "Course Area Name", true); + String.class.getSimpleName(), new ArrayList(), "Course Area Name", true, 0); break; case FleetName: functionDTO = new FunctionDTOImpl("getFleet -> getName", HasTrackedRaceContext.class.getSimpleName(), - String.class.getSimpleName(), new ArrayList(), "Fleet Name", true); + String.class.getSimpleName(), new ArrayList(), "Fleet Name", true, 0); break; case LegNumber: functionDTO = new FunctionDTOImpl("getLegNumber", HasTrackedLegContext.class.getSimpleName(), - "int", new ArrayList(), "Leg Number", true); + "int", new ArrayList(), "Leg Number", true, 0); break; case LegType: functionDTO = new FunctionDTOImpl("getLegType", HasTrackedLegContext.class.getSimpleName(), - LegType.class.getSimpleName(), new ArrayList(), "Leg Type", true); + LegType.class.getSimpleName(), new ArrayList(), "Leg Type", true, 0); break; case Nationality: functionDTO = new FunctionDTOImpl("getCompetitor -> getTeam -> getNationality -> getThreeLetterIOCAcronym", HasTrackedLegOfCompetitorContext.class.getSimpleName(), - String.class.getSimpleName(), new ArrayList(), "Nationality", true); + String.class.getSimpleName(), new ArrayList(), "Nationality", true, 0); break; case RaceName: functionDTO = new FunctionDTOImpl("getRace -> getName", HasTrackedRaceContext.class.getSimpleName(), - String.class.getSimpleName(), new ArrayList(), "Race Name", true); + String.class.getSimpleName(), new ArrayList(), "Race Name", true, 0); break; case RegattaName: functionDTO = new FunctionDTOImpl("getRegatta -> getName", HasTrackedRaceContext.class.getSimpleName(), - String.class.getSimpleName(), new ArrayList(), "Regattay Name", true); + String.class.getSimpleName(), new ArrayList(), "Regattay Name", true, 0); break; case SailID: functionDTO = new FunctionDTOImpl("getCompetitor -> getBoat -> getSailID", HasTrackedLegOfCompetitorContext.class.getSimpleName(), - String.class.getSimpleName(), new ArrayList(), "Sail ID", true); + String.class.getSimpleName(), new ArrayList(), "Sail ID", true, 0); break; case Year: functionDTO = new FunctionDTOImpl("getYear", HasTrackedRaceContext.class.getSimpleName(), - "Integer", new ArrayList(), "Year", true); + "Integer", new ArrayList(), "Year", true, 0); break; } if (functionDTO != null) { diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegContext.java index ba1bf249c64..0faf8011de4 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegContext.java @@ -8,9 +8,9 @@ public interface HasTrackedLegContext extends HasTrackedRaceContext { public TrackedLeg getTrackedLeg(); - @Dimension(messageKey="LegType") + @Dimension(messageKey="LegType", ordinal=5) public LegType getLegType(); - @Dimension(messageKey="LegNumber") + @Dimension(messageKey="LegNumber", ordinal=6) public int getLegNumber(); } \ No newline at end of file diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegOfCompetitorContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegOfCompetitorContext.java index d5a2a378339..c7fca9e4bf8 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegOfCompetitorContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegOfCompetitorContext.java @@ -13,7 +13,7 @@ public interface HasTrackedLegOfCompetitorContext extends HasTrackedLegContext { @Connector(messageKey="Competitor") public Competitor getCompetitor(); - @Statistic(messageKey="DistanceTraveled", resultUnit=Unit.Meters, resultDecimals=0) + @Statistic(messageKey="DistanceTraveled", resultUnit=Unit.Meters, resultDecimals=0, ordinal=0) public Double getDistanceTraveled(); } \ No newline at end of file diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedRaceContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedRaceContext.java index ebde33cb0cb..eb2226089ff 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedRaceContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedRaceContext.java @@ -13,22 +13,22 @@ public interface HasTrackedRaceContext { public TrackedRace getTrackedRace(); - @Connector(messageKey="Regatta") + @Connector(messageKey="Regatta", ordinal=0) public Regatta getRegatta(); - @Connector(messageKey="CourseArea") + @Connector(messageKey="CourseArea", ordinal=2) public CourseArea getCourseArea(); - @Connector(messageKey="BoatClass") + @Connector(messageKey="BoatClass", ordinal=1) public BoatClass getBoatClass(); - @Connector(messageKey="Fleet") + @Connector(messageKey="Fleet", ordinal=3) public Fleet getFleet(); - @Connector(messageKey="Race") + @Connector(messageKey="Race", ordinal=4) public RaceDefinition getRace(); - @Dimension(messageKey="Year") + @Dimension(messageKey="Year", ordinal=10) public Integer getYear(); } \ No newline at end of file diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/Competitor.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/Competitor.java index 09fa00c5f0c..bab5f9f8a7d 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/Competitor.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/Competitor.java @@ -6,10 +6,10 @@ import com.sap.sse.datamining.shared.annotations.Connector; import com.sap.sse.common.Named; public interface Competitor extends Named, WithID, IsManagedBySharedDomainFactory { - @Connector(messageKey="Team") + @Connector(messageKey="Team", ordinal=8) Team getTeam(); - @Connector(messageKey="Boat") + @Connector(messageKey="Boat", ordinal=9) Boat getBoat(); Color getColor(); diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/WithNationality.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/WithNationality.java index fbcce202067..c145cdb6e59 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/WithNationality.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/WithNationality.java @@ -3,6 +3,6 @@ package com.sap.sailing.domain.base; import com.sap.sse.datamining.shared.annotations.Connector; public interface WithNationality { - @Connector + @Connector(ordinal=7) Nationality getNationality(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/MultiDimensionalGroupingProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/MultiDimensionalGroupingProvider.java index 08c1a7b311f..cc340cd3929 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/MultiDimensionalGroupingProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/MultiDimensionalGroupingProvider.java @@ -2,6 +2,7 @@ package com.sap.sailing.gwt.ui.datamining.selection; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Objects; @@ -40,7 +41,7 @@ public class MultiDimensionalGroupingProvider implements GroupingProvider, Stati private final List> dimensionToGroupByBoxes; private FunctionDTO currentStatisticToCalculate; - private Collection availableDimensions; + private List availableDimensions; public MultiDimensionalGroupingProvider(StringMessages stringMessages, DataMiningServiceAsync dataMiningService, ErrorReporter errorReporter, StatisticProvider statisticProvider) { @@ -82,6 +83,7 @@ public class MultiDimensionalGroupingProvider implements GroupingProvider, Stati @Override public void onSuccess(Collection dimensions) { availableDimensions.addAll(dimensions); + Collections.sort(availableDimensions); ValueListBox firstDimensionToGroupByBox = createDimensionToGroupByBox(); addDimensionToGroupByBoxAndUpdateAcceptableValues(firstDimensionToGroupByBox); if (!availableDimensions.isEmpty()) { @@ -146,6 +148,7 @@ public class MultiDimensionalGroupingProvider implements GroupingProvider, Stati if (dimensionToGroupByBox.getValue() != null) { acceptableValues.add(dimensionToGroupByBox.getValue()); } + Collections.sort(acceptableValues); acceptableValues.add(null); dimensionToGroupByBox.setAcceptableValues(acceptableValues); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/SimpleStatisticProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/SimpleStatisticProvider.java index 8063ca0f673..692ee06b5d1 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/SimpleStatisticProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/SimpleStatisticProvider.java @@ -3,6 +3,7 @@ package com.sap.sailing.gwt.ui.datamining.selection; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -64,11 +65,14 @@ public class SimpleStatisticProvider implements StatisticProvider { @Override public void onSuccess(Collection extractionFunctions) { if (!extractionFunctions.isEmpty()) { + List acceptableValues = new ArrayList<>(extractionFunctions); + Collections.sort(acceptableValues); + FunctionDTO currentExtractionFunction = getStatisticToCalculate(); - FunctionDTO valueToBeSelected = extractionFunctions.contains(currentExtractionFunction) ? currentExtractionFunction - : extractionFunctions.iterator().next(); + FunctionDTO valueToBeSelected = acceptableValues.contains(currentExtractionFunction) ? currentExtractionFunction + : acceptableValues.iterator().next(); extractionFunctionListBox.setValue(valueToBeSelected); - extractionFunctionListBox.setAcceptableValues(extractionFunctions); + extractionFunctionListBox.setAcceptableValues(acceptableValues); if (!valueToBeSelected.equals(currentExtractionFunction)) { notifyListeners(); diff --git a/java/com.sap.sse.datamining.shared/.classpath b/java/com.sap.sse.datamining.shared/.classpath index 8533223089a..098194ca4b7 100644 --- a/java/com.sap.sse.datamining.shared/.classpath +++ b/java/com.sap.sse.datamining.shared/.classpath @@ -1,8 +1,7 @@ - + - diff --git a/java/com.sap.sse.datamining.shared/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sse.datamining.shared/.settings/org.eclipse.jdt.core.prefs index c537b63063c..f42de363afa 100644 --- a/java/com.sap.sse.datamining.shared/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sse.datamining.shared/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,7 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.6 +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/java/com.sap.sse.datamining.shared/META-INF/MANIFEST.MF b/java/com.sap.sse.datamining.shared/META-INF/MANIFEST.MF index 3c0ff4d724f..dca4a1a608f 100644 --- a/java/com.sap.sse.datamining.shared/META-INF/MANIFEST.MF +++ b/java/com.sap.sse.datamining.shared/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: Shared Bundle-SymbolicName: com.sap.sse.datamining.shared Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Export-Package: com.sap.sse.datamining.shared, com.sap.sse.datamining.shared.annotations, com.sap.sse.datamining.shared.components, diff --git a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/annotations/Connector.java b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/annotations/Connector.java index bf53a785617..9c58f79821c 100644 --- a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/annotations/Connector.java +++ b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/annotations/Connector.java @@ -17,5 +17,7 @@ import java.lang.annotation.Target; public @interface Connector { public String messageKey() default ""; + + public int ordinal() default Integer.MAX_VALUE; } diff --git a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/annotations/Dimension.java b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/annotations/Dimension.java index 3718e39bfeb..714d40e1190 100644 --- a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/annotations/Dimension.java +++ b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/annotations/Dimension.java @@ -29,5 +29,7 @@ import java.lang.annotation.Target; public @interface Dimension { public String messageKey(); + + public int ordinal() default Integer.MAX_VALUE; } diff --git a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/annotations/Statistic.java b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/annotations/Statistic.java index 656a29b360a..f4ad10b9ed1 100644 --- a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/annotations/Statistic.java +++ b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/annotations/Statistic.java @@ -18,5 +18,7 @@ public @interface Statistic { public Unit resultUnit() default Unit.None; public int resultDecimals() default 0; + + public int ordinal() default Integer.MAX_VALUE; } diff --git a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/dto/FunctionDTO.java b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/dto/FunctionDTO.java index 37a7a7cb24d..01935dd8c41 100644 --- a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/dto/FunctionDTO.java +++ b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/dto/FunctionDTO.java @@ -3,7 +3,7 @@ package com.sap.sse.datamining.shared.dto; import java.io.Serializable; import java.util.List; -public interface FunctionDTO extends Serializable { +public interface FunctionDTO extends Serializable, Comparable { public boolean isDimension(); @@ -14,5 +14,7 @@ public interface FunctionDTO extends Serializable { public String getReturnTypeName(); public String getSourceTypeName(); + + public int getOrdinal(); } diff --git a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/FunctionDTOImpl.java b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/FunctionDTOImpl.java index dda6130cb20..e9c215c39fa 100644 --- a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/FunctionDTOImpl.java +++ b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/FunctionDTOImpl.java @@ -15,6 +15,7 @@ public class FunctionDTOImpl implements FunctionDTO { private String displayName; private boolean isDimension; + private int ordinal; /** * Constructor for the GWT-Serialization. Don't use this! @@ -23,7 +24,8 @@ public class FunctionDTOImpl implements FunctionDTO { FunctionDTOImpl() { } - public FunctionDTOImpl(String functionName, String sourceTypeName, String returnTypeName, List parameterTypeNames, String displayName, boolean isDimension) { + public FunctionDTOImpl(String functionName, String sourceTypeName, String returnTypeName, List parameterTypeNames, + String displayName, boolean isDimension, int ordinal) { this.functionName = functionName; this.sourceTypeName = sourceTypeName; this.returnTypeName = returnTypeName; @@ -31,6 +33,7 @@ public class FunctionDTOImpl implements FunctionDTO { this.displayName = displayName; this.isDimension = isDimension; + this.ordinal = ordinal; } @Override @@ -58,6 +61,16 @@ public class FunctionDTOImpl implements FunctionDTO { return isDimension; } + @Override + public int getOrdinal() { + return ordinal; + } + + @Override + public int compareTo(FunctionDTO f) { + return Integer.compare(this.getOrdinal(), f.getOrdinal()); + } + @Override public String toString() { return (isDimension() ? "Dimension " : "Function ") + sourceTypeName + "." + functionName + "(" + parametersAsString() + ") : " + returnTypeName; diff --git a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/TestFunctionDTOConstruction.java b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/TestFunctionDTOConstruction.java index 1e451baf9f6..84f4c012f7d 100644 --- a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/TestFunctionDTOConstruction.java +++ b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/TestFunctionDTOConstruction.java @@ -57,8 +57,9 @@ public class TestFunctionDTOConstruction { String displayName = functionName; boolean isDimension = true; + int ordinal = 0; - return new FunctionDTOImpl(functionName, sourceTypeName, returnTypeName, parameterTypeNames, displayName, isDimension); + return new FunctionDTOImpl(functionName, sourceTypeName, returnTypeName, parameterTypeNames, displayName, isDimension, ordinal); } @Test @@ -78,8 +79,9 @@ public class TestFunctionDTOConstruction { String displayName = functionName; boolean isDimension = false; + int ordinal = 0; - return new FunctionDTOImpl(functionName, sourceTypeName, returnTypeName, parameterTypeNames, displayName, isDimension); + return new FunctionDTOImpl(functionName, sourceTypeName, returnTypeName, parameterTypeNames, displayName, isDimension, ordinal); } @Test @@ -99,8 +101,9 @@ public class TestFunctionDTOConstruction { String displayName = functionName; boolean isDimension = false; + int ordinal = 0; - return new FunctionDTOImpl(functionName, sourceTypeName, returnTypeName, parameterTypeNames, displayName, isDimension); + return new FunctionDTOImpl(functionName, sourceTypeName, returnTypeName, parameterTypeNames, displayName, isDimension, ordinal); } @Test @@ -121,8 +124,9 @@ public class TestFunctionDTOConstruction { String displayName = functionName; boolean isDimension = false; + int ordinal = 0; - return new FunctionDTOImpl(functionName, sourceTypeName, returnTypeName, parameterTypeNames, displayName, isDimension); + return new FunctionDTOImpl(functionName, sourceTypeName, returnTypeName, parameterTypeNames, displayName, isDimension, ordinal); } } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/FunctionDTOFactory.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/FunctionDTOFactory.java index 09699050228..45050177cd8 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/FunctionDTOFactory.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/FunctionDTOFactory.java @@ -35,7 +35,7 @@ public class FunctionDTOFactory { String sourceTypeName = function.getDeclaringType().getSimpleName(); String returnTypeName = function.getReturnType().getSimpleName(); List parameterTypeNames = getParameterTypeNames(function); - return new FunctionDTOImpl(functionName, sourceTypeName, returnTypeName, parameterTypeNames, displayName, function.isDimension()); + return new FunctionDTOImpl(functionName, sourceTypeName, returnTypeName, parameterTypeNames, displayName, function.isDimension(), function.getOrdinal()); } private static List getParameterTypeNames(Function function) { diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/Function.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/Function.java index 2995363b17e..1c6ba362ef0 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/Function.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/Function.java @@ -43,5 +43,7 @@ public interface Function { public Unit getResultUnit(); public int getResultDecimals(); + + public int getOrdinal(); } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/AdditionalFunctionData.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/AdditionalMethodWrappingFunctionData.java similarity index 64% rename from java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/AdditionalFunctionData.java rename to java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/AdditionalMethodWrappingFunctionData.java index 98fff3c4d83..fd6040de0bf 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/AdditionalFunctionData.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/AdditionalMethodWrappingFunctionData.java @@ -2,16 +2,18 @@ package com.sap.sse.datamining.impl.functions; import com.sap.sse.datamining.shared.Unit; -public class AdditionalFunctionData { +public class AdditionalMethodWrappingFunctionData { private final String messageKey; private final Unit resultUnit; private final int resultDecimals; + private final int ordinal; - public AdditionalFunctionData(String messageKey, Unit resultUnit, int resultValueDecimals) { + public AdditionalMethodWrappingFunctionData(String messageKey, Unit resultUnit, int resultValueDecimals, int ordinal) { this.messageKey = messageKey; this.resultUnit = resultUnit; this.resultDecimals = resultValueDecimals; + this.ordinal = ordinal; } public String getMessageKey() { @@ -25,5 +27,9 @@ public class AdditionalFunctionData { public int getResultDecimals() { return resultDecimals; } + + public int getOrdinal() { + return ordinal; + } } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/CompoundFunction.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/CompoundFunction.java index 0be5bcad17f..b999c86ce43 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/CompoundFunction.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/CompoundFunction.java @@ -14,8 +14,9 @@ public class CompoundFunction extends AbstractFunction { private static final String SIMPLE_NAME_CHAIN_CONNECTOR = " -> "; private static final String LOCALIZED_NAME_CHAIN_CONNECTOR = " "; - private String name; - private List> functions; + private final String name; + private final List> functions; + private final int ordinal; public CompoundFunction(String name, List> functions, Class returnType) throws IllegalArgumentException { super(isLastFunctionADimension(functions)); @@ -23,6 +24,18 @@ public class CompoundFunction extends AbstractFunction { this.name = name; this.functions = new ArrayList<>(functions); + this.ordinal = calculateOrdinal(); + } + + private int calculateOrdinal() { + int ordinal = Integer.MAX_VALUE; + for (Function function : functions) { + int functionOrdinal = function.getOrdinal(); + if (functionOrdinal < ordinal) { + ordinal = functionOrdinal; + } + } + return ordinal; } private static boolean isLastFunctionADimension(List> functions) { @@ -138,6 +151,11 @@ public class CompoundFunction extends AbstractFunction { public int getResultDecimals() { return getLastFunction().getResultDecimals(); } + + @Override + public int getOrdinal() { + return ordinal; + } private Function getFirstFunction() { return functions.get(0); diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/MethodWrappingFunction.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/MethodWrappingFunction.java index 4ce4009d185..ca10e460fc2 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/MethodWrappingFunction.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/MethodWrappingFunction.java @@ -16,7 +16,7 @@ public class MethodWrappingFunction extends AbstractFunction returnType; - private AdditionalFunctionData additionalData; + private AdditionalMethodWrappingFunctionData additionalData; /** * Throws an {@link IllegalArgumentException}, if the return type of the method and the given returnType @@ -43,17 +43,21 @@ public class MethodWrappingFunction extends AbstractFunction extends AbstractFunction