From b3535677bebe3323f34ec762b928455d98d99c54 Mon Sep 17 00:00:00 2001 From: Lennart Hensler Date: Wed, 5 Nov 2014 16:43:06 +0100 Subject: [PATCH] The data retriever chain is now localized --- .../SailingDataRetrieverChainDefinitions.java | 12 ++-- .../gwt/ui/datamining/DataMiningService.java | 2 + .../ui/datamining/DataMiningServiceAsync.java | 3 + .../AbstractQueryDefinitionProvider.java | 3 +- ...ngQueryDefinitionProviderWithControls.java | 11 +++- ...trieverLevelSpecificSelectionProvider.java | 52 ++++++++++++++-- ...SingleRetrieverLevelSelectionProvider.java | 18 ++++++ .../gwt/ui/server/DataMiningServiceImpl.java | 18 +++++- .../dto/DataRetrieverChainDefinitionDTO.java | 51 ++++++++++++++-- .../shared/impl/dto/LocalizedTypeDTO.java | 61 +++++++++++++++++++ .../impl/TestDataRetrieverChainCreation.java | 28 ++++----- ...tDataRetrieverChainDefinitionRegistry.java | 6 +- .../impl/TestDimensionsValuesQuery.java | 6 +- .../impl/functions/TestFunctionProvider.java | 16 ++++- .../StringMessages_de.properties | 7 ++- .../StringMessages_en.properties | 7 ++- .../DataRetrieverChainDefinition.java | 4 +- .../functions/FunctionProvider.java | 5 +- .../DataRetrieverTypeWithInformation.java | 14 ++++- .../SimpleDataRetrieverChainDefinition.java | 8 +-- .../functions/RegistryFunctionProvider.java | 11 +++- 21 files changed, 290 insertions(+), 53 deletions(-) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/SingleRetrieverLevelSelectionProvider.java create mode 100644 java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/LocalizedTypeDTO.java diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SailingDataRetrieverChainDefinitions.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SailingDataRetrieverChainDefinitions.java index 5d86b208c9e..14216b8d29e 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SailingDataRetrieverChainDefinitions.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SailingDataRetrieverChainDefinitions.java @@ -31,22 +31,22 @@ public class SailingDataRetrieverChainDefinitions { RacingEventService.class, "SailingDomainRetrieverChain"); @SuppressWarnings("unchecked") Class> leaderboardGroupRetrieverType = (Class>) (Class) LeaderboardGroupRetrievalProcessor.class; - legOfCompetitorRetrieverChainDefinition.startWith(leaderboardGroupRetrieverType, LeaderboardGroup.class); + legOfCompetitorRetrieverChainDefinition.startWith(leaderboardGroupRetrieverType, LeaderboardGroup.class, "LeaderboardGroup"); @SuppressWarnings("unchecked") Class> regattaLeaderboardRetrieverType = (Class>) (Class) RegattaLeaderboardFilteringRetrievalProcessor.class; legOfCompetitorRetrieverChainDefinition.addAfter(leaderboardGroupRetrieverType, regattaLeaderboardRetrieverType, - RegattaLeaderboard.class); + RegattaLeaderboard.class, "RegattaLeaderboard"); @SuppressWarnings("unchecked") Class> raceRetrieverType = (Class>) (Class) TrackedRaceFilteringRetrievalProcessor.class; legOfCompetitorRetrieverChainDefinition.addAfter(regattaLeaderboardRetrieverType, raceRetrieverType, - HasTrackedRaceContext.class); + HasTrackedRaceContext.class, "Race"); @SuppressWarnings("unchecked") Class> legRetrieverType = (Class>) (Class) TrackedLegFilteringRetrievalProcessor.class; - legOfCompetitorRetrieverChainDefinition.addAfter(raceRetrieverType, legRetrieverType, HasTrackedLegContext.class); + legOfCompetitorRetrieverChainDefinition.addAfter(raceRetrieverType, legRetrieverType, HasTrackedLegContext.class, "Leg"); @SuppressWarnings("unchecked") Class> legOfCompetitorRetrieverType = (Class>) (Class) TrackedLegOfCompetitorFilteringRetrievalProcessor.class; legOfCompetitorRetrieverChainDefinition.addAfter(legRetrieverType, legOfCompetitorRetrieverType, - HasTrackedLegOfCompetitorContext.class); + HasTrackedLegOfCompetitorContext.class, "LegOfCompetitor"); dataRetrieverChainDefinitions.add(legOfCompetitorRetrieverChainDefinition); DataRetrieverChainDefinition gpsFixRetrieverChainDefinition = new SimpleDataRetrieverChainDefinition<>( @@ -54,7 +54,7 @@ public class SailingDataRetrieverChainDefinitions { @SuppressWarnings("unchecked") Class> gpsFixRetrieverType = (Class>) (Class) GPSFixRetrievalProcessor.class; gpsFixRetrieverChainDefinition.addAfter(legOfCompetitorRetrieverType, gpsFixRetrieverType, - HasGPSFixContext.class); + HasGPSFixContext.class, "GpsFix"); dataRetrieverChainDefinitions.add(gpsFixRetrieverChainDefinition); } 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 20cbc0429e7..025cd2385a3 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 @@ -16,6 +16,8 @@ public interface DataMiningService extends RemoteService { Collection getAllStatistics(String localeInfoName); Collection getDimensionsFor(FunctionDTO statisticToCalculate, String localeInfoName); + + Collection getDimensionsFor(DataRetrieverChainDefinitionDTO dataRetrieverChainDefinitionDTO, String localeInfoName); Collection getDataRetrieverChainDefinitionsFor(FunctionDTO statisticToCalculate, String localeInfoName); 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 0bb972d8e82..8368d3ff36a 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 @@ -17,6 +17,9 @@ public interface DataMiningServiceAsync { void getAllStatistics(String localeInfoName, AsyncCallback> callback); void getDimensionsFor(FunctionDTO statisticToCalculate, String localeInfoName, AsyncCallback> callback); + + void getDimensionsFor(DataRetrieverChainDefinitionDTO dataRetrieverChainDefinitionDTO, String localeInfoName, + AsyncCallback> callback); void getDataRetrieverChainDefinitionsFor(FunctionDTO statisticToCalculate, String localeInfoName, AsyncCallback> callback); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/AbstractQueryDefinitionProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/AbstractQueryDefinitionProvider.java index 693c7a71091..c7dbeb12fcb 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/AbstractQueryDefinitionProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/AbstractQueryDefinitionProvider.java @@ -94,7 +94,8 @@ public abstract class AbstractQueryDefinitionProvider implements QueryDefinition private boolean isQueryDefinitionConsistent(QueryDefinition queryDefinition) { String sourceTypeName = queryDefinition.getStatisticToCalculate().getSourceTypeName(); - if (!sourceTypeName.equals(queryDefinition.getDataRetrieverChainDefinition().getRetrievedDataTypeName())) { + if (queryDefinition.getDataRetrieverChainDefinition() == null || + !sourceTypeName.equals(queryDefinition.getDataRetrieverChainDefinition().getRetrievedDataTypeName())) { return false; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/BufferingQueryDefinitionProviderWithControls.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/BufferingQueryDefinitionProviderWithControls.java index 37fc3336416..510ac3ca7e8 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/BufferingQueryDefinitionProviderWithControls.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/BufferingQueryDefinitionProviderWithControls.java @@ -70,7 +70,7 @@ public class BufferingQueryDefinitionProviderWithControls extends AbstractQueryD mainPanel.add(createFunctionsPanel()); - selectionProvider = new RefreshingSelectionTablesPanel(stringMessages, dataMiningService, errorReporter, retrieverChainProvider); + selectionProvider = new RetrieverLevelSpecificSelectionProvider(stringMessages, dataMiningService, errorReporter, retrieverChainProvider); selectionProvider.addSelectionChangedListener(new SelectionChangedListener() { @Override public void selectionChanged() { @@ -78,6 +78,15 @@ public class BufferingQueryDefinitionProviderWithControls extends AbstractQueryD } }); mainPanel.add(selectionProvider.getEntryWidget()); + +// selectionProvider = new RefreshingSelectionTablesPanel(stringMessages, dataMiningService, errorReporter, retrieverChainProvider); +// selectionProvider.addSelectionChangedListener(new SelectionChangedListener() { +// @Override +// public void selectionChanged() { +// scheduleQueryDefinitionChanged(); +// } +// }); +// mainPanel.add(selectionProvider.getEntryWidget()); queryDefinitionReleaseTimer = new Timer() { @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/RetrieverLevelSpecificSelectionProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/RetrieverLevelSpecificSelectionProvider.java index 99e19209750..837743f25e1 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/RetrieverLevelSpecificSelectionProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/RetrieverLevelSpecificSelectionProvider.java @@ -2,10 +2,15 @@ package com.sap.sailing.gwt.ui.datamining.selection; import java.io.Serializable; import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Objects; import java.util.Set; +import com.google.gwt.i18n.client.LocaleInfo; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; @@ -20,26 +25,30 @@ import com.sap.sailing.gwt.ui.datamining.SelectionProvider; import com.sap.sse.datamining.shared.QueryDefinition; import com.sap.sse.datamining.shared.dto.FunctionDTO; import com.sap.sse.datamining.shared.impl.dto.DataRetrieverChainDefinitionDTO; +import com.sap.sse.datamining.shared.impl.dto.LocalizedTypeDTO; public class RetrieverLevelSpecificSelectionProvider implements SelectionProvider, DataRetrieverChainDefinitionChangedListener { private final StringMessages stringMessages; private final DataMiningServiceAsync dataMiningService; private final ErrorReporter errorReporter; - private final Set listeners; + private DataRetrieverChainDefinitionDTO retrieverChain; + private final ScrollPanel mainPanel; private final VerticalPanel contentPanel; + private final Map singleRetrieverLevelSelectionProviders; public RetrieverLevelSpecificSelectionProvider(StringMessages stringMessages, DataMiningServiceAsync dataMiningService, ErrorReporter errorReporter, DataRetrieverChainDefinitionProvider dataRetrieverChainDefinitionProvider) { this.stringMessages = stringMessages; this.dataMiningService = dataMiningService; this.errorReporter = errorReporter; - listeners = new HashSet<>(); + singleRetrieverLevelSelectionProviders = new HashMap<>(); + contentPanel = new VerticalPanel(); mainPanel = new ScrollPanel(contentPanel); @@ -48,14 +57,49 @@ public class RetrieverLevelSpecificSelectionProvider implements SelectionProvide @Override public void dataRetrieverChainDefinitionChanged(DataRetrieverChainDefinitionDTO newDataRetrieverChainDefinition) { - // TODO Auto-generated method stub + if (!Objects.equals(retrieverChain, newDataRetrieverChainDefinition)) { + retrieverChain = newDataRetrieverChainDefinition; + updateRetrievalLevels(); + } + } + + private void updateRetrievalLevels() { + contentPanel.clear(); + singleRetrieverLevelSelectionProviders.clear(); + boolean first = true; + for (LocalizedTypeDTO retrievedDataType : retrieverChain.getRetrievedDataTypesChain()) { + if (!first) { + contentPanel.add(new Label("|")); + } + first = false; + + SingleRetrieverLevelSelectionProvider singleRetrieverLevelSelectionProvider = new SingleRetrieverLevelSelectionProvider(retrievedDataType, stringMessages); + contentPanel.add(singleRetrieverLevelSelectionProvider); + singleRetrieverLevelSelectionProviders.put(retrievedDataType, singleRetrieverLevelSelectionProvider); + } + + udpateAvailableDimensions(); + } + + private void udpateAvailableDimensions() { + dataMiningService.getDimensionsFor(retrieverChain, LocaleInfo.getCurrentLocale().getLocaleName(), new AsyncCallback>() { + @Override + public void onFailure(Throwable caught) { + errorReporter.reportError("Error fetching the dimensions of the retrieval chain from the server: " + caught.getMessage()); + } + @Override + public void onSuccess(Collection result) { + // TODO Auto-generated method stub + + } + }); } @Override public Map> getFilterSelection() { // TODO Auto-generated method stub - return null; + return new HashMap<>(); } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/SingleRetrieverLevelSelectionProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/SingleRetrieverLevelSelectionProvider.java new file mode 100644 index 00000000000..7cd3b249cba --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/SingleRetrieverLevelSelectionProvider.java @@ -0,0 +1,18 @@ +package com.sap.sailing.gwt.ui.datamining.selection; + +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Label; +import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sse.datamining.shared.impl.dto.LocalizedTypeDTO; + +public class SingleRetrieverLevelSelectionProvider extends HorizontalPanel { + + private final LocalizedTypeDTO retrievedDataType; + + public SingleRetrieverLevelSelectionProvider(LocalizedTypeDTO retrievedDataType, StringMessages stringMessages) { + this.retrievedDataType = retrievedDataType; + + add(new Label(retrievedDataType.getDisplayName())); + } + +} 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 6fe20d10eb7..5e3257b6572 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 @@ -25,6 +25,7 @@ import com.sap.sse.datamining.shared.QueryResult; import com.sap.sse.datamining.shared.SSEDataMiningSerializationDummy; import com.sap.sse.datamining.shared.dto.FunctionDTO; import com.sap.sse.datamining.shared.impl.dto.DataRetrieverChainDefinitionDTO; +import com.sap.sse.datamining.shared.impl.dto.LocalizedTypeDTO; public class DataMiningServiceImpl extends RemoteServiceServlet implements DataMiningService { private static final long serialVersionUID = -7951930891674894528L; @@ -84,6 +85,14 @@ public class DataMiningServiceImpl extends RemoteServiceServlet implements DataM return functionsAsFunctionDTOs(dimensions, localeInfoName); } + @Override + public Collection getDimensionsFor(DataRetrieverChainDefinitionDTO dataRetrieverChainDefinitionDTO, + String localeInfoName) { + DataRetrieverChainDefinition dataRetrieverChainDefinition = getDataMiningServer().getDataRetrieverChainDefinitionRegistry().getDataRetrieverChainDefinition(RacingEventService.class, dataRetrieverChainDefinitionDTO.getId()); + Collection> dimensions = getDataMiningServer().getFunctionProvider().getDimensionsFor(dataRetrieverChainDefinition); + return functionsAsFunctionDTOs(dimensions, localeInfoName); + } + @Override public Collection getDataRetrieverChainDefinitionsFor(FunctionDTO statisticToCalculate, String localeInfoName) { Class baseDataType = getBaseDataType(statisticToCalculate); @@ -97,9 +106,14 @@ public class DataMiningServiceImpl extends RemoteServiceServlet implements DataM Collection DTOs = new ArrayList<>(); for (DataRetrieverChainDefinition dataRetrieverChainDefinition : dataRetrieverChainDefinitions) { - Collection retrievedDataTypesChain = new ArrayList<>(); + Collection retrievedDataTypesChain = new ArrayList<>(); for (DataRetrieverTypeWithInformation retrieverTypeWithInformation : dataRetrieverChainDefinition.getDataRetrieverTypesWithInformation()) { - retrievedDataTypesChain.add(retrieverTypeWithInformation.getRetrievedDataType().getSimpleName()); + String typeName = retrieverTypeWithInformation.getRetrievedDataType().getSimpleName(); + String displayName = retrieverTypeWithInformation.getRetrievedDataTypeMessageKey() != null && !retrieverTypeWithInformation.getRetrievedDataTypeMessageKey().isEmpty() ? + dataMiningStringMessages.get(locale, retrieverTypeWithInformation.getRetrievedDataTypeMessageKey()) : + typeName; + LocalizedTypeDTO localizedRetrievedDataType = new LocalizedTypeDTO(typeName, displayName); + retrievedDataTypesChain.add(localizedRetrievedDataType); } DTOs.add(new DataRetrieverChainDefinitionDTO(dataRetrieverChainDefinition.getUUID(), dataRetrieverChainDefinition.getLocalizedName(locale, dataMiningStringMessages), dataRetrieverChainDefinition.getDataSourceType().getSimpleName(), retrievedDataTypesChain)); diff --git a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/DataRetrieverChainDefinitionDTO.java b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/DataRetrieverChainDefinitionDTO.java index 5635453d818..95bfb4872c1 100644 --- a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/DataRetrieverChainDefinitionDTO.java +++ b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/DataRetrieverChainDefinitionDTO.java @@ -13,7 +13,7 @@ public class DataRetrieverChainDefinitionDTO implements Serializable, Comparable private String name; private String dataSourceTypeName; - private List retrievedDataTypesChain; + private List retrievedDataTypesChain; /** * Constructor for the GWT-Serialization. Don't use this! @@ -21,7 +21,7 @@ public class DataRetrieverChainDefinitionDTO implements Serializable, Comparable @Deprecated DataRetrieverChainDefinitionDTO() { } - public DataRetrieverChainDefinitionDTO(UUID id, String name, String dataSourceTypeName, Collection retrievedDataTypesChain) { + public DataRetrieverChainDefinitionDTO(UUID id, String name, String dataSourceTypeName, Collection retrievedDataTypesChain) { this.id = id; this.name = name; this.dataSourceTypeName = dataSourceTypeName; @@ -42,10 +42,10 @@ public class DataRetrieverChainDefinitionDTO implements Serializable, Comparable } public String getRetrievedDataTypeName() { - return retrievedDataTypesChain.get(retrievedDataTypesChain.size() - 1); + return retrievedDataTypesChain.get(retrievedDataTypesChain.size() - 1).getTypeName(); } - public List getRetrievedDataTypesChain() { + public List getRetrievedDataTypesChain() { return retrievedDataTypesChain; } @@ -53,5 +53,48 @@ public class DataRetrieverChainDefinitionDTO implements Serializable, Comparable public int compareTo(DataRetrieverChainDefinitionDTO d) { return this.getName().compareTo(d.getName()); } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((dataSourceTypeName == null) ? 0 : dataSourceTypeName.hashCode()); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((retrievedDataTypesChain == null) ? 0 : retrievedDataTypesChain.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + DataRetrieverChainDefinitionDTO other = (DataRetrieverChainDefinitionDTO) obj; + if (dataSourceTypeName == null) { + if (other.dataSourceTypeName != null) + return false; + } else if (!dataSourceTypeName.equals(other.dataSourceTypeName)) + return false; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + if (retrievedDataTypesChain == null) { + if (other.retrievedDataTypesChain != null) + return false; + } else if (!retrievedDataTypesChain.equals(other.retrievedDataTypesChain)) + return false; + return true; + } } diff --git a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/LocalizedTypeDTO.java b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/LocalizedTypeDTO.java new file mode 100644 index 00000000000..e5c4deeab7a --- /dev/null +++ b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/LocalizedTypeDTO.java @@ -0,0 +1,61 @@ +package com.sap.sse.datamining.shared.impl.dto; + +import java.io.Serializable; + +public class LocalizedTypeDTO implements Serializable { + private static final long serialVersionUID = -5976605483497225403L; + + private String typeName; + private String displayName; + + /** + * Constructor for the GWT-Serialization. Don't use this! + */ + @Deprecated + LocalizedTypeDTO() { } + + public LocalizedTypeDTO(String typeName, String displayName) { + this.typeName = typeName; + this.displayName = displayName; + } + + public String getTypeName() { + return typeName; + } + + public String getDisplayName() { + return displayName; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((displayName == null) ? 0 : displayName.hashCode()); + result = prime * result + ((typeName == null) ? 0 : typeName.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + LocalizedTypeDTO other = (LocalizedTypeDTO) obj; + if (displayName == null) { + if (other.displayName != null) + return false; + } else if (!displayName.equals(other.displayName)) + return false; + if (typeName == null) { + if (other.typeName != null) + return false; + } else if (!typeName.equals(other.typeName)) + return false; + return true; + } + +} diff --git a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDataRetrieverChainCreation.java b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDataRetrieverChainCreation.java index 9d1eb66559b..3d1a48c34a8 100644 --- a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDataRetrieverChainCreation.java +++ b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDataRetrieverChainCreation.java @@ -47,19 +47,19 @@ public class TestDataRetrieverChainCreation { public void initializeRetrieverChain() { dataRetrieverChainDefinition = new SimpleDataRetrieverChainDefinition<>((Class>)(Class) Collection.class, "TestRetrieverChain"); Class, Test_Regatta>> regattaRetrieverClass = (Class, Test_Regatta>>)(Class) TestRegattaRetrievalProcessor.class; - dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class); + dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class, "regatta"); Class> raceRetrieverClass = (Class>)(Class) TestRaceWithContextRetrievalProcessor.class; dataRetrieverChainDefinition.addAfter(regattaRetrieverClass, raceRetrieverClass, - Test_HasRaceContext.class); + Test_HasRaceContext.class, "race"); Class> legRetrieverClass = (Class>)(Class) TestLegOfCompetitorWithContextRetrievalProcessor.class; dataRetrieverChainDefinition.addAfter(raceRetrieverClass, legRetrieverClass, - Test_HasLegOfCompetitorContext.class); + Test_HasLegOfCompetitorContext.class, "legOfCompetitor"); } @Before @@ -99,21 +99,21 @@ public class TestDataRetrieverChainCreation { assertThat(dataRetrieverChainDefinition.getDataSourceType().equals(Collection.class), is(true)); Class, Test_Regatta>> regattaRetrieverClass = (Class, Test_Regatta>>)(Class) TestRegattaRetrievalProcessor.class; - dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class); + dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class, "regatta"); assertThat(dataRetrieverChainDefinition.getRetrievedDataType().equals(Test_Regatta.class), is(true)); Class> raceRetrieverClass = (Class>)(Class) TestRaceWithContextRetrievalProcessor.class; dataRetrieverChainDefinition.addAfter(regattaRetrieverClass, raceRetrieverClass, - Test_HasRaceContext.class); + Test_HasRaceContext.class, "race"); assertThat(dataRetrieverChainDefinition.getRetrievedDataType().equals(Test_HasRaceContext.class), is(true)); Class> legRetrieverClass = (Class>)(Class) TestLegOfCompetitorWithContextRetrievalProcessor.class; dataRetrieverChainDefinition.addAfter(raceRetrieverClass, legRetrieverClass, - Test_HasLegOfCompetitorContext.class); + Test_HasLegOfCompetitorContext.class, "legOfCompetitor"); assertThat(dataRetrieverChainDefinition.getRetrievedDataType().equals(Test_HasLegOfCompetitorContext.class), is(true)); } @@ -148,7 +148,7 @@ public class TestDataRetrieverChainCreation { (Class>)(Class) TestRaceWithContextRetrievalProcessor.class; dataRetrieverChainDefinition.addAfter(regattaRetrieverClass, raceRetrieverClass, - Test_HasRaceContext.class); + Test_HasRaceContext.class, "race"); } @SuppressWarnings("unchecked") @@ -156,15 +156,15 @@ public class TestDataRetrieverChainCreation { public void testStartingTwice() { DataRetrieverChainDefinition> dataRetrieverChainDefinition = new SimpleDataRetrieverChainDefinition<>((Class>)(Class) Collection.class, "TestRetrieverChain"); Class, Test_Regatta>> regattaRetrieverClass = (Class, Test_Regatta>>)(Class) TestRegattaRetrievalProcessor.class; - dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class); - dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class); + dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class, "regatta"); + dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class, "regatta"); } @SuppressWarnings("unchecked") @Test(expected=IllegalArgumentException.class) public void testStartingWithProcessorWithoutUsableConstructor() { DataRetrieverChainDefinition> dataRetrieverChainDefinition = new SimpleDataRetrieverChainDefinition<>((Class>)(Class) Collection.class, "TestRetrieverChain"); - dataRetrieverChainDefinition.startWith((Class, Test_Regatta>>)(Class) Processor.class, Test_Regatta.class); + dataRetrieverChainDefinition.startWith((Class, Test_Regatta>>)(Class) Processor.class, Test_Regatta.class, "regatta"); } @SuppressWarnings("unchecked") @@ -172,11 +172,11 @@ public class TestDataRetrieverChainCreation { public void testAddingProcessorWithoutUsableConstructor() { DataRetrieverChainDefinition> dataRetrieverChainDefinition = new SimpleDataRetrieverChainDefinition<>((Class>)(Class) Collection.class, "TestRetrieverChain"); Class, Test_Regatta>> regattaRetrieverClass = (Class, Test_Regatta>>)(Class) TestRegattaRetrievalProcessor.class; - dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class); + dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class, "regatta"); dataRetrieverChainDefinition.addAfter(regattaRetrieverClass, (Class>)(Class) Processor.class, - Test_HasRaceContext.class); + Test_HasRaceContext.class, "race"); } @SuppressWarnings("unchecked") @@ -184,7 +184,7 @@ public class TestDataRetrieverChainCreation { public void testAddingRetrieverThatDoesntMatch() { DataRetrieverChainDefinition> dataRetrieverChainDefinition = new SimpleDataRetrieverChainDefinition<>((Class>)(Class) Collection.class, "TestRetrieverChain"); Class, Test_Regatta>> regattaRetrieverClass = (Class, Test_Regatta>>)(Class) TestRegattaRetrievalProcessor.class; - dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class); + dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class, "regatta"); Class> raceRetrieverClass = (Class>)(Class) TestRaceWithContextRetrievalProcessor.class; @@ -192,7 +192,7 @@ public class TestDataRetrieverChainCreation { (Class>)(Class) TestLegOfCompetitorWithContextRetrievalProcessor.class; dataRetrieverChainDefinition.addAfter(raceRetrieverClass, legRetrieverClass, - Test_HasLegOfCompetitorContext.class); + Test_HasLegOfCompetitorContext.class, "legOfCompetitor"); } @Test(expected=IllegalArgumentException.class) diff --git a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDataRetrieverChainDefinitionRegistry.java b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDataRetrieverChainDefinitionRegistry.java index 2cd5fce43e4..ef95014cb3e 100644 --- a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDataRetrieverChainDefinitionRegistry.java +++ b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDataRetrieverChainDefinitionRegistry.java @@ -30,13 +30,13 @@ public class TestDataRetrieverChainDefinitionRegistry { public void initializeRetrieverChainsAndRegistry() { raceRetrieverChainDefinition = new SimpleDataRetrieverChainDefinition<>((Class>)(Class) Collection.class, "TestRaceRetrieverChain"); Class, Test_Regatta>> regattaRetrieverClass = (Class, Test_Regatta>>)(Class) TestRegattaRetrievalProcessor.class; - raceRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class); + raceRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class, "regatta"); Class> raceRetrieverClass = (Class>)(Class) TestRaceWithContextRetrievalProcessor.class; raceRetrieverChainDefinition.addAfter(regattaRetrieverClass, raceRetrieverClass, - Test_HasRaceContext.class); + Test_HasRaceContext.class, "race"); legRetrieverChainDefinition = new SimpleDataRetrieverChainDefinition>(raceRetrieverChainDefinition, "TestLegRetrieverChain"); @@ -44,7 +44,7 @@ public class TestDataRetrieverChainDefinitionRegistry { (Class>)(Class) TestLegOfCompetitorWithContextRetrievalProcessor.class; legRetrieverChainDefinition.addAfter(raceRetrieverClass, legRetrieverClass, - Test_HasLegOfCompetitorContext.class); + Test_HasLegOfCompetitorContext.class, "legOfCompetitor"); dataRetrieverChainDefinitionRegistry = new SimpleDataRetrieverChainDefinitionRegistry(); dataRetrieverChainDefinitionRegistry.add(raceRetrieverChainDefinition); diff --git a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDimensionsValuesQuery.java b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDimensionsValuesQuery.java index ce3d447e779..a18bb101d26 100644 --- a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDimensionsValuesQuery.java +++ b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDimensionsValuesQuery.java @@ -145,19 +145,19 @@ public class TestDimensionsValuesQuery { public void initializeDataRetrieverChain() { dataRetrieverChainDefinition = new SimpleDataRetrieverChainDefinition<>((Class>)(Class) Collection.class, "TestRetrieverChain"); Class, Test_Regatta>> regattaRetrieverClass = (Class, Test_Regatta>>)(Class) TestRegattaRetrievalProcessor.class; - dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class); + dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class, "regatta"); Class> raceRetrieverClass = (Class>)(Class) TestRaceWithContextRetrievalProcessor.class; dataRetrieverChainDefinition.addAfter(regattaRetrieverClass, raceRetrieverClass, - Test_HasRaceContext.class); + Test_HasRaceContext.class, "race"); Class> legRetrieverClass = (Class>)(Class) TestLegOfCompetitorWithContextRetrievalProcessor.class; dataRetrieverChainDefinition.addAfter(raceRetrieverClass, legRetrieverClass, - Test_HasLegOfCompetitorContext.class); + Test_HasLegOfCompetitorContext.class, "legOfCompetitor"); } @Before diff --git a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/TestFunctionProvider.java b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/TestFunctionProvider.java index acc1cdb4e4e..8eb6eb1ad05 100644 --- a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/TestFunctionProvider.java +++ b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/TestFunctionProvider.java @@ -83,6 +83,16 @@ public class TestFunctionProvider { FunctionProvider functionProvider = new RegistryFunctionProvider(functionRegistry); DataRetrieverChainDefinition> dataRetrieverChainDefinition = createDataRetrieverChainDefinition(); + Collection> expectedDimensions = functionRegistryUtil.getExpectedDimensionsFor(Test_HasRaceContext.class); + expectedDimensions.addAll(functionRegistryUtil.getExpectedDimensionsFor(Test_HasLegOfCompetitorContext.class)); + assertThat(functionProvider.getDimensionsFor(dataRetrieverChainDefinition), is(expectedDimensions)); + } + + @Test + public void testGetMinimizedDimensionsForDataRetrieverChainDefinition() { + FunctionProvider functionProvider = new RegistryFunctionProvider(functionRegistry); + DataRetrieverChainDefinition> dataRetrieverChainDefinition = createDataRetrieverChainDefinition(); + Collection> expectedDimensions = functionRegistryUtil.getExpectedDimensionsFor(Test_HasRaceContext.class); expectedDimensions.addAll(functionRegistryUtil.getExpectedDimensionsFor(Test_HasLegOfCompetitorContext.class)); assertThat(functionProvider.getMinimizedDimensionsFor(dataRetrieverChainDefinition), is(expectedDimensions)); @@ -92,19 +102,19 @@ public class TestFunctionProvider { public DataRetrieverChainDefinition> createDataRetrieverChainDefinition() { DataRetrieverChainDefinition> dataRetrieverChainDefinition = new SimpleDataRetrieverChainDefinition<>((Class>)(Class) Collection.class, "TestRetrieverChain"); Class, Test_Regatta>> regattaRetrieverClass = (Class, Test_Regatta>>)(Class) TestRegattaRetrievalProcessor.class; - dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class); + dataRetrieverChainDefinition.startWith(regattaRetrieverClass, Test_Regatta.class, "regatta"); Class> raceRetrieverClass = (Class>)(Class) TestRaceWithContextRetrievalProcessor.class; dataRetrieverChainDefinition.addAfter(regattaRetrieverClass, raceRetrieverClass, - Test_HasRaceContext.class); + Test_HasRaceContext.class, "race"); Class> legRetrieverClass = (Class>)(Class) TestLegOfCompetitorWithContextRetrievalProcessor.class; dataRetrieverChainDefinition.addAfter(raceRetrieverClass, legRetrieverClass, - Test_HasLegOfCompetitorContext.class); + Test_HasLegOfCompetitorContext.class, "legOfCompetitor"); return dataRetrieverChainDefinition; } diff --git a/java/com.sap.sse.datamining/resources/stringmessages/StringMessages_de.properties b/java/com.sap.sse.datamining/resources/stringmessages/StringMessages_de.properties index 42f748ed563..392004b817e 100644 --- a/java/com.sap.sse.datamining/resources/stringmessages/StringMessages_de.properties +++ b/java/com.sap.sse.datamining/resources/stringmessages/StringMessages_de.properties @@ -24,4 +24,9 @@ Race=Rennen Competitor=Teilnehmer Boat=Boot Team=Team -SailingDomainRetrieverChain=Segel-Domänen Datenbeschaffer \ No newline at end of file +SailingDomainRetrieverChain=Segel-Domänen Datenbeschaffer +LeaderboardGroup=Ranglisten Gruppe +RegattaLeaderboard=Regatta Rangliste +Leg=Schenkel +LegOfCompetitor=Schenkel eines Teilnehmers +GpsFix=GPS-Fix \ No newline at end of file diff --git a/java/com.sap.sse.datamining/resources/stringmessages/StringMessages_en.properties b/java/com.sap.sse.datamining/resources/stringmessages/StringMessages_en.properties index 2aa9ba59834..053e0e2e230 100644 --- a/java/com.sap.sse.datamining/resources/stringmessages/StringMessages_en.properties +++ b/java/com.sap.sse.datamining/resources/stringmessages/StringMessages_en.properties @@ -24,4 +24,9 @@ Race=Race Competitor=Competitor Boat=Boat Team=Team -SailingDomainRetrieverChain=Sailing Domain Retriever \ No newline at end of file +SailingDomainRetrieverChain=Sailing Domain Retriever +LeaderboardGroup=Leaderboard Group +RegattaLeaderboard=Regatta Leaderboard +Leg=Leg +LegOfCompetitor=Leg of competitor +GpsFix=GPS-Fix \ No newline at end of file diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataRetrieverChainDefinition.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataRetrieverChainDefinition.java index cb0b870bf9a..02f5d8ee37b 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataRetrieverChainDefinition.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataRetrieverChainDefinition.java @@ -25,12 +25,12 @@ public interface DataRetrieverChainDefinition { */ public Class getRetrievedDataType(); - public void startWith(Class> retrieverType, Class retrievedDataType); + public void startWith(Class> retrieverType, Class retrievedDataType, String retrievedDataTypeMessageKey); public void addAfter(Class> previousRetrieverType, Class> nextRetrieverType, - Class retrievedDataType); + Class retrievedDataType, String retrievedDataTypeMessageKey); public List> getDataRetrieverTypesWithInformation(); diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/FunctionProvider.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/FunctionProvider.java index 3f8d2fe4df8..7e240e6f214 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/FunctionProvider.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/FunctionProvider.java @@ -14,9 +14,10 @@ public interface FunctionProvider { public Collection> getStatisticsFor(Class sourceType); public Collection> getDimensionsFor(Class sourceType); + + public Collection> getDimensionsFor(DataRetrieverChainDefinition dataRetrieverChainDefinition); - public Collection> getMinimizedDimensionsFor( - DataRetrieverChainDefinition dataRetrieverChainDefinition); + public Collection> getMinimizedDimensionsFor(DataRetrieverChainDefinition dataRetrieverChainDefinition); /** * @return The first function, that matches the given DTO or null diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataRetrieverTypeWithInformation.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataRetrieverTypeWithInformation.java index 8b4513dfeaf..75d94390afd 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataRetrieverTypeWithInformation.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataRetrieverTypeWithInformation.java @@ -6,11 +6,14 @@ public class DataRetrieverTypeWithInformation { private final Class> retrieverType; private final Class retrievedDataType; + private final String retrievedDataTypeMessageKey; public DataRetrieverTypeWithInformation(Class> retrieverType, - Class retrievedDataType) { + Class retrievedDataType, + String retrievedDataTypeMessageKey) { this.retrieverType = retrieverType; this.retrievedDataType = retrievedDataType; + this.retrievedDataTypeMessageKey = retrievedDataTypeMessageKey; } public Class> getRetrieverType() { @@ -20,12 +23,16 @@ public class DataRetrieverTypeWithInformation { public Class getRetrievedDataType() { return retrievedDataType; } + public String getRetrievedDataTypeMessageKey() { + return retrievedDataTypeMessageKey; + } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((retrievedDataType == null) ? 0 : retrievedDataType.hashCode()); + result = prime * result + ((retrievedDataTypeMessageKey == null) ? 0 : retrievedDataTypeMessageKey.hashCode()); result = prime * result + ((retrieverType == null) ? 0 : retrieverType.hashCode()); return result; } @@ -44,6 +51,11 @@ public class DataRetrieverTypeWithInformation { return false; } else if (!retrievedDataType.equals(other.retrievedDataType)) return false; + if (retrievedDataTypeMessageKey == null) { + if (other.retrievedDataTypeMessageKey != null) + return false; + } else if (!retrievedDataTypeMessageKey.equals(other.retrievedDataTypeMessageKey)) + return false; if (retrieverType == null) { if (other.retrieverType != null) return false; diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/SimpleDataRetrieverChainDefinition.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/SimpleDataRetrieverChainDefinition.java index d18a49defc8..0a3fd717682 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/SimpleDataRetrieverChainDefinition.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/SimpleDataRetrieverChainDefinition.java @@ -56,14 +56,14 @@ public class SimpleDataRetrieverChainDefinition implements @Override public void startWith(Class> retrieverType, - Class retrievedDataType) { + Class retrievedDataType, String retrievedDataTypeMessageKey) { if (isInitialized()) { throw new UnsupportedOperationException("This retriever chain definition already has been started with '" + dataRetrieverTypesWithInformation.get(0).getRetrieverType().getSimpleName() + "'"); } checkThatRetrieverHasUsableConstructor(retrieverType); - DataRetrieverTypeWithInformation retrieverTypeWithInformation = new DataRetrieverTypeWithInformation<>(retrieverType, retrievedDataType); + DataRetrieverTypeWithInformation retrieverTypeWithInformation = new DataRetrieverTypeWithInformation<>(retrieverType, retrievedDataType, retrievedDataTypeMessageKey); dataRetrieverTypesWithInformation.add(retrieverTypeWithInformation); } @@ -75,7 +75,7 @@ public class SimpleDataRetrieverChainDefinition implements public void addAfter( Class> previousRetrieverType, Class> nextRetrieverType, - Class retrievedDataType) { + Class retrievedDataType, String retrievedDataTypeMessageKey) { if (!isInitialized()) { throw new UnsupportedOperationException("This retriever chain definition hasn't been started yet"); } @@ -89,7 +89,7 @@ public class SimpleDataRetrieverChainDefinition implements } checkThatRetrieverHasUsableConstructor(nextRetrieverType); - DataRetrieverTypeWithInformation retrieverTypeWithInformation = new DataRetrieverTypeWithInformation<>(nextRetrieverType, retrievedDataType); + DataRetrieverTypeWithInformation retrieverTypeWithInformation = new DataRetrieverTypeWithInformation<>(nextRetrieverType, retrievedDataType, retrievedDataTypeMessageKey); dataRetrieverTypesWithInformation.add(retrieverTypeWithInformation); } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/RegistryFunctionProvider.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/RegistryFunctionProvider.java index cbc5755ad92..7651ede70a5 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/RegistryFunctionProvider.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/RegistryFunctionProvider.java @@ -82,7 +82,16 @@ public class RegistryFunctionProvider implements FunctionProvider { } @Override - public Collection> getMinimizedDimensionsFor(DataRetrieverChainDefinition dataRetrieverChainDefinition) { + public Collection> getDimensionsFor(DataRetrieverChainDefinition dataRetrieverChainDefinition) { + Collection> dimensions = new HashSet<>(); + for (DataRetrieverTypeWithInformation dataRetrieverTypeWithInformation : dataRetrieverChainDefinition.getDataRetrieverTypesWithInformation()) { + dimensions.addAll(getDimensionsFor(dataRetrieverTypeWithInformation.getRetrievedDataType())); + } + return dimensions; + } + + @Override + public Collection> getMinimizedDimensionsFor(DataRetrieverChainDefinition dataRetrieverChainDefinition) { Collection> dimensions = new HashSet<>(); List> dataRetrieverTypesWithInformation = dataRetrieverChainDefinition.getDataRetrieverTypesWithInformation(); for (int i = dataRetrieverTypesWithInformation.size() - 1; i >= 0; i--) {