diff --git a/java/com.sap.sailing.datamining.shared/META-INF/MANIFEST.MF b/java/com.sap.sailing.datamining.shared/META-INF/MANIFEST.MF index e7b8053e644..6efd6fa23f8 100644 --- a/java/com.sap.sailing.datamining.shared/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.datamining.shared/META-INF/MANIFEST.MF @@ -9,4 +9,5 @@ Bundle-ActivationPolicy: lazy Bundle-ClassPath: . Require-Bundle: com.sap.sse.datamining.shared, com.sap.sailing.domain.common -Export-Package: com.sap.sailing.datamining.shared +Export-Package: com.sap.sailing.datamining.shared, + com.sap.sailing.datamining.shared.dto diff --git a/java/com.sap.sailing.datamining.shared/src/com/sap/sailing/datamining/shared/dto/DistanceDTO.java b/java/com.sap.sailing.datamining.shared/src/com/sap/sailing/datamining/shared/dto/DistanceDTO.java new file mode 100644 index 00000000000..ef52fc90aac --- /dev/null +++ b/java/com.sap.sailing.datamining.shared/src/com/sap/sailing/datamining/shared/dto/DistanceDTO.java @@ -0,0 +1,60 @@ +package com.sap.sailing.datamining.shared.dto; + +public class DistanceDTO { + + private double geographicalMiles; + private double seaMiles; + private double nauticalMiles; + private double meters; + private double kilometers; + private double centralAngleDegree; + private double centralAngleRadian; + + /** + * Do NOT use!
+ * Constructor for GWT-Serialization. + */ + @Deprecated + DistanceDTO() { + } + + public DistanceDTO(double geographicalMiles, double seaMiles, double nauticalMiles, double meters, + double kilometers, double centralAngleDegree, double centralAngleRadian) { + this.geographicalMiles = geographicalMiles; + this.seaMiles = seaMiles; + this.nauticalMiles = nauticalMiles; + this.meters = meters; + this.kilometers = kilometers; + this.centralAngleDegree = centralAngleDegree; + this.centralAngleRadian = centralAngleRadian; + } + + public double getGeographicalMiles() { + return geographicalMiles; + } + + public double getSeaMiles() { + return seaMiles; + } + + public double getNauticalMiles() { + return nauticalMiles; + } + + public double getMeters() { + return meters; + } + + public double getKilometers() { + return kilometers; + } + + public double getCentralAngleDegree() { + return centralAngleDegree; + } + + public double getCentralAngleRadian() { + return centralAngleRadian; + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningService.java index 48236405fb2..1390b217aa9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningService.java @@ -33,7 +33,7 @@ public interface DataMiningService extends RemoteService { QueryResultDTO> getDimensionValuesFor(DataMiningSession session, DataRetrieverChainDefinitionDTO dataRetrieverChainDefinitionDTO, int retrieverLevel, Iterable dimensionDTOs, Map>> filterSelectionDTO, String localeInfoName); - QueryResultDTO runQuery(DataMiningSession session, StatisticQueryDefinitionDTO queryDefinition); + QueryResultDTO runQuery(DataMiningSession session, StatisticQueryDefinitionDTO queryDefinition); SSEDataMiningSerializationDummy pseudoMethodSoThatSomeSSEDataMiningClassesAreAddedToTheGWTSerializationPolicy(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningServiceAsync.java index 7a376f566df..d68f1745ca6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningServiceAsync.java @@ -39,7 +39,7 @@ public interface DataMiningServiceAsync { Iterable dimensionDTOs, Map>> filterSelectionDTO, String localeInfoName, AsyncCallback>> callback); - void runQuery(DataMiningSession session, StatisticQueryDefinitionDTO queryDefinition, AsyncCallback> callback); + void runQuery(DataMiningSession session, StatisticQueryDefinitionDTO queryDefinition, AsyncCallback> callback); /** * This method does nothing, but is needed to ensure, that some classes for the data mining diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/AbstractResultDataProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/AbstractResultDataProvider.java new file mode 100644 index 00000000000..464f1e841f4 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/AbstractResultDataProvider.java @@ -0,0 +1,40 @@ +package com.sap.sailing.gwt.ui.datamining.presentation.dataproviders; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import com.sap.sse.datamining.shared.GroupKey; +import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO; + +public abstract class AbstractResultDataProvider { + + private final Class resultType; + + public AbstractResultDataProvider(Class resultType) { + this.resultType = resultType; + } + + public Class getResultType() { + return resultType; + } + + /** + * + * @return Collection of the keys for the provided data. + * The method toString() can be used to display the keys. + */ + public abstract Collection getDataKeys(); + + public Map getData(QueryResultDTO result, Object dataKey) { + Map data = new HashMap<>(); + Map results = result.getResults(); + for (GroupKey groupKey : results.keySet()) { + data.put(groupKey, getData(results.get(groupKey), dataKey)); + } + return data; + } + + protected abstract Number getData(ResultType result, Object dataKey); + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/DistanceDataProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/DistanceDataProvider.java new file mode 100644 index 00000000000..df555cbc1ef --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/DistanceDataProvider.java @@ -0,0 +1,55 @@ +package com.sap.sailing.gwt.ui.datamining.presentation.dataproviders; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import com.sap.sailing.datamining.shared.dto.DistanceDTO; + +public class DistanceDataProvider extends AbstractResultDataProvider { + + private final List dataKeys; + + public DistanceDataProvider() { + super(DistanceDTO.class); + dataKeys = new ArrayList<>(); + dataKeys.add("Geographical Miles"); + dataKeys.add("Sea Miles"); + dataKeys.add("Nautical Miles"); + dataKeys.add("Meters"); + dataKeys.add("Kilometers"); + dataKeys.add("Central Angle Degree"); + dataKeys.add("Central Angle Radian"); + } + + @Override + public Collection getDataKeys() { + return dataKeys; + } + + @Override + protected Number getData(DistanceDTO distance, Object dataKey) { + if (!(dataKey instanceof String)) { + throw new IllegalArgumentException("The given data key '" + dataKey + "' isn't valid"); + } + String dataKeyString = (String) dataKey; + switch (dataKeyString) { + case "Geographical Miles": + return distance.getGeographicalMiles(); + case "Sea Miles": + return distance.getSeaMiles(); + case "Nautical Miles": + return distance.getNauticalMiles(); + case "Meters": + return distance.getMeters(); + case "Kilometers": + return distance.getKilometers(); + case "Central Angle Degree": + return distance.getCentralAngleDegree(); + case "Central Angle Radian": + return distance.getCentralAngleRadian(); + } + throw new IllegalArgumentException("The given data key '" + dataKey + "' isn't valid"); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/NumberDataProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/NumberDataProvider.java new file mode 100644 index 00000000000..97a12078d24 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/NumberDataProvider.java @@ -0,0 +1,37 @@ +package com.sap.sailing.gwt.ui.datamining.presentation.dataproviders; + +import java.util.ArrayList; +import java.util.Collection; + +public class NumberDataProvider extends AbstractResultDataProvider { + + private final Collection dataKeys; + + public NumberDataProvider() { + super(Number.class); + dataKeys = new ArrayList<>(); + dataKeys.add("Double"); + dataKeys.add("Integer"); + } + + @Override + public Collection getDataKeys() { + return dataKeys; + } + + @Override + protected Number getData(Number number, Object dataKey) { + if (!(dataKey instanceof String)) { + throw new IllegalArgumentException("The given data key '" + dataKey + "' isn't valid"); + } + String dataKeyString = (String) dataKey; + switch (dataKeyString) { + case "Double": + return number.doubleValue(); + case "Integer": + return number.intValue(); + } + throw new IllegalArgumentException("The given data key '" + dataKey + "' isn't valid"); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/NumberLongProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/NumberLongProvider.java new file mode 100644 index 00000000000..ad8d36120d2 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/NumberLongProvider.java @@ -0,0 +1,22 @@ +package com.sap.sailing.gwt.ui.datamining.presentation.dataproviders; + +import java.util.Collection; +import java.util.Collections; + +public class NumberLongProvider extends AbstractResultDataProvider { + + public NumberLongProvider() { + super(Number.class); + } + + @Override + public Collection getDataKeys() { + return Collections.emptyList(); + } + + @Override + protected Number getData(Number number, Object dataKey) { + return Math.round(number.doubleValue()); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java index 6a5cde21dd0..1730b4b4344 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java @@ -22,6 +22,7 @@ import com.sap.sse.datamining.Query; import com.sap.sse.datamining.StatisticQueryDefinition; import com.sap.sse.datamining.components.AggregationProcessorDefinition; import com.sap.sse.datamining.components.DataRetrieverChainDefinition; +import com.sap.sse.datamining.data.QueryResult; import com.sap.sse.datamining.factories.DataMiningDTOFactory; import com.sap.sse.datamining.functions.Function; import com.sap.sse.datamining.impl.components.DataRetrieverTypeWithInformation; @@ -180,8 +181,8 @@ public class DataMiningServiceImpl extends RemoteServiceServlet implements DataM Map, Collection>> filterSelection = filterSelectionDTOAsFilterSelection(filterSelectionDTO); Locale locale = ResourceBundleStringMessages.Util.getLocaleFor(localeInfoName); Query> dimensionValuesQuery = dataMiningServer.createDimensionValuesQuery(retrieverChainDefinition, retrieverLevel, dimensions, filterSelection, locale); - QueryResultDTO> result = getDataMiningServer().runNewQueryAndAbortPreviousQueries(session, dimensionValuesQuery); - return result; + QueryResult> result = dataMiningServer.runNewQueryAndAbortPreviousQueries(session, dimensionValuesQuery); + return dataMiningServer.convertToDTO(result); } private Collection> functionDTOsAsFunctions(Iterable functionDTOs) { @@ -217,11 +218,12 @@ public class DataMiningServiceImpl extends RemoteServiceServlet implements DataM } @Override - public QueryResultDTO runQuery(DataMiningSession session, StatisticQueryDefinitionDTO queryDefinitionDTO) { - StatisticQueryDefinition queryDefinition = getDataMiningServer().getQueryDefinitionForDTO(queryDefinitionDTO); - Query query = getDataMiningServer().createQuery(queryDefinition); - QueryResultDTO result = getDataMiningServer().runNewQueryAndAbortPreviousQueries(session, query); - return result; + public QueryResultDTO runQuery(DataMiningSession session, StatisticQueryDefinitionDTO queryDefinitionDTO) { + DataMiningServer dataMiningServer = getDataMiningServer(); + StatisticQueryDefinition queryDefinition = dataMiningServer.getQueryDefinitionForDTO(queryDefinitionDTO); + Query query = dataMiningServer.createQuery(queryDefinition); + QueryResult result = dataMiningServer.runNewQueryAndAbortPreviousQueries(session, query); + return dataMiningServer.convertToDTO(result); } @Override diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataMiningServer.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataMiningServer.java index 8a6e7d7fc74..45153de495e 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataMiningServer.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataMiningServer.java @@ -19,6 +19,7 @@ import com.sap.sse.datamining.shared.DataMiningSession; import com.sap.sse.datamining.shared.dto.StatisticQueryDefinitionDTO; import com.sap.sse.datamining.shared.impl.dto.AggregationProcessorDefinitionDTO; import com.sap.sse.datamining.shared.impl.dto.FunctionDTO; +import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO; import com.sap.sse.i18n.ResourceBundleStringMessages; @@ -61,4 +62,6 @@ public interface DataMiningServer { public AggregationProcessorDefinition getAggregationProcessorDefinition(Class extractedType, String aggregationNameMessageKey); public AggregationProcessorDefinition getAggregationProcessorDefinitionForDTO(AggregationProcessorDefinitionDTO aggregatorDefinitionDTO); + public QueryResultDTO convertToDTO(QueryResult result); + } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataMiningServerImpl.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataMiningServerImpl.java index 680692e10d8..4db6a1db0dc 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataMiningServerImpl.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataMiningServerImpl.java @@ -32,6 +32,7 @@ import com.sap.sse.datamining.shared.DataMiningSession; import com.sap.sse.datamining.shared.dto.StatisticQueryDefinitionDTO; import com.sap.sse.datamining.shared.impl.dto.AggregationProcessorDefinitionDTO; import com.sap.sse.datamining.shared.impl.dto.FunctionDTO; +import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO; import com.sap.sse.i18n.ResourceBundleStringMessages; import com.sap.sse.i18n.impl.CompoundResourceBundleStringMessages; @@ -333,4 +334,10 @@ public class DataMiningServerImpl implements ModifiableDataMiningServer { return dataMiningQueryManager.runNewAndAbortPrevious(session, query); } + @Override + public QueryResultDTO convertToDTO(QueryResult result) { + return new QueryResultDTO(result.getState(), result.getResultType().getName(), result.getResults(), result.getAdditionalData()); + } + + }