diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties index f7f2eef1957..59a6853088f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties @@ -1342,4 +1342,4 @@ cantDisplayDataOfType=Can''t display data of type {0} shownDecimals=Shown Decimals openFullscreenView=Open fullscreen view closeFullscreenView=Close fullscreen view -analyse=Analyze \ No newline at end of file +analyze=Analyze \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties index e709b0b9d3c..423ec64b950 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties @@ -1331,4 +1331,4 @@ cantDisplayDataOfType=Daten des Typs {0} können nicht dargestellt werden shownDecimals=Angezeigte Nachkommastellen openFullscreenView=Vollbildansicht öffnen closeFullscreenView=Vollbildansicht schließen -analyse=Untersuche \ No newline at end of file +analyze=Untersuche \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties index 803ec3b221d..ed643b70473 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties @@ -1281,4 +1281,4 @@ cantDisplayDataOfType=Can''t display data of type {0} shownDecimals=Shown Decimals openFullscreenView=Open fullscreen view closeFullscreenView=Close fullscreen view -analyse=Analyze \ No newline at end of file +analyze=Analyze \ No newline at end of file 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 b266a8b46e3..1e46ada3fed 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 @@ -34,8 +34,8 @@ public interface DataMiningService extends RemoteService { ArrayList getDataRetrieverChainDefinitions(String localeName); ArrayList getDataRetrieverChainDefinitionsFor(FunctionDTO statisticToCalculate, String localeInfoName); - QueryResultDTO> getDimensionValuesFor(DataMiningSession session, DataRetrieverChainDefinitionDTO dataRetrieverChainDefinitionDTO, int retrieverLevel, - HashSet dimensionDTOs, HashMap>> filterSelectionDTO, String localeInfoName); + QueryResultDTO> getDimensionValuesFor(DataMiningSession session, DataRetrieverChainDefinitionDTO dataRetrieverChainDefinitionDTO, DataRetrieverLevelDTO retrieverLevel, + HashSet dimensionDTOs, HashMap>> filterSelectionDTO, String localeInfoName); QueryResultDTO runQuery(DataMiningSession session, StatisticQueryDefinitionDTO queryDefinition); 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 9db3fc198a1..68c2ca39efa 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 @@ -38,8 +38,8 @@ public interface DataMiningServiceAsync { void getDataRetrieverChainDefinitionsFor(FunctionDTO statisticToCalculate, String localeInfoName, AsyncCallback> callback); - void getDimensionValuesFor(DataMiningSession session, DataRetrieverChainDefinitionDTO dataRetrieverChainDefinitionDTO, int retrieverLevel, - HashSet dimensionDTOs, HashMap>> filterSelectionDTO, + void getDimensionValuesFor(DataMiningSession session, DataRetrieverChainDefinitionDTO dataRetrieverChainDefinitionDTO, DataRetrieverLevelDTO retrieverLevel, + HashSet dimensionDTOs, HashMap>> filterSelectionDTO, String localeInfoName, AsyncCallback>> callback); void runQuery(DataMiningSession session, StatisticQueryDefinitionDTO queryDefinition, AsyncCallback> callback); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/FilterSelectionProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/FilterSelectionProvider.java index ae8ddebe9b8..ebabcbdc56f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/FilterSelectionProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/FilterSelectionProvider.java @@ -5,13 +5,14 @@ import java.util.HashMap; import java.util.HashSet; import com.sap.sse.datamining.shared.dto.StatisticQueryDefinitionDTO; +import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO; import com.sap.sse.datamining.shared.impl.dto.FunctionDTO; public interface FilterSelectionProvider extends DataMiningComponentProvider, DataRetrieverChainDefinitionChangedListener { public void addSelectionChangedListener(FilterSelectionChangedListener listener); - public HashMap>> getSelection(); + public HashMap>> getSelection(); public void applySelection(StatisticQueryDefinitionDTO queryDefinition); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/PlainFilterSelectionPresenter.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/PlainFilterSelectionPresenter.java index 33c8d89586c..0af678fd269 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/PlainFilterSelectionPresenter.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/PlainFilterSelectionPresenter.java @@ -65,13 +65,12 @@ public class PlainFilterSelectionPresenter implements FilterSelectionPresenter, public void selectionChanged() { presentationPanel.clear(); - Map>> selection = filterSelectionProvider.getSelection(); - List sortedLevels = new ArrayList<>(selection.keySet()); + Map>> selection = filterSelectionProvider.getSelection(); + List sortedLevels = new ArrayList<>(selection.keySet()); Collections.sort(sortedLevels); boolean first = true; - for (Integer levelIndex : sortedLevels) { - Map> levelSelection = selection.get(levelIndex); - DataRetrieverLevelDTO retrieverLevel = retrieverChain.getRetrieverLevel(levelIndex); + for (DataRetrieverLevelDTO retrieverLevel : sortedLevels) { + Map> levelSelection = selection.get(retrieverLevel); RetrieverLevelFilterSelectionPresenter levelSelectionPresenter = new RetrieverLevelFilterSelectionPresenter(retrieverLevel, levelSelection); if (!first) { levelSelectionPresenter.getEntryWidget().getElement().getStyle().setMarginTop(5, Unit.PX); 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 dbc03b0eabf..d771174b6d9 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 @@ -36,6 +36,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.DataRetrieverChainDefinitionDTO; +import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO; import com.sap.sse.datamining.shared.impl.dto.FunctionDTO; import com.sap.sse.datamining.shared.impl.dto.ModifiableStatisticQueryDefinitionDTO; import com.sap.sse.gwt.client.ErrorReporter; @@ -178,7 +179,7 @@ public class BufferingQueryDefinitionProviderWithControls extends AbstractQueryD queryDTO.appendDimensionToGroupBy(dimension); } - for (Entry>> filterSelectionEntry : filterSelectionProvider.getSelection().entrySet()) { + for (Entry>> filterSelectionEntry : filterSelectionProvider.getSelection().entrySet()) { queryDTO.setFilterSelectionFor(filterSelectionEntry.getKey(), filterSelectionEntry.getValue()); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/DimensionFilterSelectionProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/DimensionFilterSelectionProvider.java index e755b5864cb..7964c236a31 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/DimensionFilterSelectionProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/DimensionFilterSelectionProvider.java @@ -34,6 +34,7 @@ import com.sap.sailing.gwt.ui.datamining.execution.SimpleManagedDataMiningQuerie import com.sap.sse.datamining.shared.DataMiningSession; import com.sap.sse.datamining.shared.GroupKey; import com.sap.sse.datamining.shared.impl.GenericGroupKey; +import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO; import com.sap.sse.datamining.shared.impl.dto.FunctionDTO; import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO; import com.sap.sse.gwt.client.ErrorReporter; @@ -158,15 +159,15 @@ class DimensionFilterSelectionProvider { final FunctionDTO dimension = getSelectedDimension(); HashSet dimensionDTOs = new HashSet<>(); dimensionDTOs.add(dimension); - HashMap>> filterSelectionDTO = retrieverLevelSelectionProvider.getCompleteFilterSelection(); - int retrieverLevel = retrieverLevelSelectionProvider.getRetrieverLevel(); + HashMap>> filterSelectionDTO = retrieverLevelSelectionProvider.getCompleteFilterSelection(); + DataRetrieverLevelDTO retrieverLevel = retrieverLevelSelectionProvider.getRetrieverLevel(); if (filterSelectionDTO.containsKey(retrieverLevel)) { filterSelectionDTO.get(retrieverLevel).remove(dimension); } busyIndicator.setVisible(true); counter.increase(); dataMiningService.getDimensionValuesFor(session, retrieverLevelSelectionProvider.getDataRetrieverChain(), - retrieverLevelSelectionProvider.getRetrieverLevel(), dimensionDTOs, filterSelectionDTO, + retrieverLevel, dimensionDTOs, filterSelectionDTO, LocaleInfo.getCurrentLocale().getLocaleName(), new ManagedDataMiningQueryCallback>(counter) { @Override protected void handleSuccess(QueryResultDTO> result) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/ListRetrieverChainFilterSelectionProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/ListRetrieverChainFilterSelectionProvider.java index fe7b3921ec4..0717ca15a26 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/ListRetrieverChainFilterSelectionProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/ListRetrieverChainFilterSelectionProvider.java @@ -177,15 +177,16 @@ public class ListRetrieverChainFilterSelectionProvider implements FilterSelectio } } - void updateFilterSelectionProviders(int beginningWithLevel, final FunctionDTO exceptForDimension) { + void updateFilterSelectionProviders(DataRetrieverLevelDTO beginningWithLevel, final FunctionDTO exceptForDimension) { + DataRetrieverLevelDTO currentLevel = beginningWithLevel; DataRetrieverLevelDTO retrieverLevelToUpdate = null; - for (int retrieverLevelIndex = beginningWithLevel; retrieverLevelIndex < retrieverChain.size(); retrieverLevelIndex++) { - DataRetrieverLevelDTO retrieverLevel = retrieverChain.getRetrieverLevel(retrieverLevelIndex); - if (selectionProvidersMappedByRetrievedDataType.containsKey(retrieverLevel)) { - retrieverLevelToUpdate = retrieverLevel; + do { + if (selectionProvidersMappedByRetrievedDataType.containsKey(currentLevel)) { + retrieverLevelToUpdate = currentLevel; break; } - } + currentLevel = retrieverChain.getNextRetrieverLevel(currentLevel); + } while (currentLevel != null); if (retrieverLevelToUpdate != null) { selectionProvidersMappedByRetrievedDataType.get(retrieverLevelToUpdate).updateAvailableData(exceptForDimension); @@ -201,8 +202,8 @@ public class ListRetrieverChainFilterSelectionProvider implements FilterSelectio } @Override - public HashMap>> getSelection() { - HashMap>> filterSelection = new HashMap<>(); + public HashMap>> getSelection() { + HashMap>> filterSelection = new HashMap<>(); for (RetrieverLevelFilterSelectionProvider selectionProvider : selectionProvidersMappedByRetrievedDataType.values()) { Map> levelFilterSelection = selectionProvider.getFilterSelection(); if (!levelFilterSelection.isEmpty()) { @@ -215,8 +216,8 @@ public class ListRetrieverChainFilterSelectionProvider implements FilterSelectio @Override public void applySelection(StatisticQueryDefinitionDTO queryDefinition) { for (RetrieverLevelFilterSelectionProvider selectionProvider : selectionProvidersMappedByRetrievedDataType.values()) { - Map>> filterSelection = queryDefinition.getFilterSelection(); - int retrieverLevel = selectionProvider.getRetrieverLevel(); + Map>> filterSelection = queryDefinition.getFilterSelection(); + DataRetrieverLevelDTO retrieverLevel = selectionProvider.getRetrieverLevel(); if (filterSelection.containsKey(retrieverLevel)) { selectionProvider.applySelection(filterSelection.get(retrieverLevel)); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/RetrieverLevelFilterSelectionProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/RetrieverLevelFilterSelectionProvider.java index b09d6d08c71..dcf1a9c93b0 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/RetrieverLevelFilterSelectionProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/RetrieverLevelFilterSelectionProvider.java @@ -19,7 +19,6 @@ import com.sap.sse.datamining.shared.DataMiningSession; import com.sap.sse.datamining.shared.impl.dto.DataRetrieverChainDefinitionDTO; import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO; import com.sap.sse.datamining.shared.impl.dto.FunctionDTO; -import com.sap.sse.datamining.shared.impl.dto.LocalizedTypeDTO; import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.shared.components.Component; import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent; @@ -142,7 +141,7 @@ public class RetrieverLevelFilterSelectionProvider implements Component>> getCompleteFilterSelection() { + HashMap>> getCompleteFilterSelection() { return retrieverChainSelectionProvider.getSelection(); } @@ -193,12 +192,8 @@ public class RetrieverLevelFilterSelectionProvider implements Component> getDimensionValuesFor(DataMiningSession session, DataRetrieverChainDefinitionDTO dataRetrieverChainDefinitionDTO, - int retrieverLevel, HashSet dimensionDTOs, HashMap>> filterSelectionDTO, String localeInfoName) { + DataRetrieverLevelDTO retrieverLevelDTO, HashSet dimensionDTOs, HashMap>> filterSelectionDTO, String localeInfoName) { DataMiningServer dataMiningServer = getDataMiningServer(); DataRetrieverChainDefinition retrieverChainDefinition = dataMiningServer.getDataRetrieverChainDefinition(dataRetrieverChainDefinitionDTO.getId()); + DataRetrieverLevel retrieverLevel = retrieverChainDefinition.getDataRetrieverLevel(retrieverLevelDTO.getLevel()); Iterable> dimensions = functionDTOsAsFunctions(dimensionDTOs); - Map, Collection>> filterSelection = filterSelectionDTOAsFilterSelection(filterSelectionDTO); + Map, Map, Collection>> filterSelection = filterSelectionDTOAsFilterSelection(filterSelectionDTO, retrieverChainDefinition); Locale locale = ResourceBundleStringMessages.Util.getLocaleFor(localeInfoName); Query> dimensionValuesQuery = dataMiningServer.createDimensionValuesQuery(retrieverChainDefinition, retrieverLevel, dimensions, filterSelection, locale); QueryResult> result = dataMiningServer.runNewQueryAndAbortPreviousQueries(session, dimensionValuesQuery); @@ -210,14 +211,16 @@ public class DataMiningServiceImpl extends RemoteServiceServlet implements DataM return functions; } - private Map, Collection>> filterSelectionDTOAsFilterSelection( - HashMap>> filterSelectionDTO) { - Map, Collection>> filterSelection = new HashMap<>(); - for (Integer retrieverLevel : filterSelectionDTO.keySet()) { - HashMap> retrievalLevelSelection = filterSelectionDTO.get(retrieverLevel); + private Map, Map, Collection>> filterSelectionDTOAsFilterSelection( + HashMap>> filterSelectionDTO, + DataRetrieverChainDefinition retrieverChainDefinition) { + Map, Map, Collection>> filterSelection = new HashMap<>(); + for (DataRetrieverLevelDTO retrieverLevelDTO : filterSelectionDTO.keySet()) { + HashMap> retrievalLevelSelection = filterSelectionDTO.get(retrieverLevelDTO); for (FunctionDTO dimensionDTO : retrievalLevelSelection.keySet()) { if (!retrievalLevelSelection.get(dimensionDTO).isEmpty()) { Function function = getDataMiningServer().getFunctionForDTO(dimensionDTO); + DataRetrieverLevel retrieverLevel = retrieverChainDefinition.getDataRetrieverLevel(retrieverLevelDTO.getLevel()); if (function != null) { if (!filterSelection.containsKey(retrieverLevel)) { filterSelection.put(retrieverLevel, new HashMap, Collection>()); diff --git a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/dto/StatisticQueryDefinitionDTO.java b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/dto/StatisticQueryDefinitionDTO.java index 3510fc7717e..8925e89f291 100644 --- a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/dto/StatisticQueryDefinitionDTO.java +++ b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/dto/StatisticQueryDefinitionDTO.java @@ -4,9 +4,11 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import com.sap.sse.datamining.shared.impl.dto.AggregationProcessorDefinitionDTO; import com.sap.sse.datamining.shared.impl.dto.DataRetrieverChainDefinitionDTO; +import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO; import com.sap.sse.datamining.shared.impl.dto.FunctionDTO; public interface StatisticQueryDefinitionDTO extends Serializable { @@ -14,7 +16,7 @@ public interface StatisticQueryDefinitionDTO extends Serializable { public String getLocaleInfoName(); public DataRetrieverChainDefinitionDTO getDataRetrieverChainDefinition(); - public HashMap>> getFilterSelection(); + public Map>> getFilterSelection(); public ArrayList getDimensionsToGroupBy(); public FunctionDTO getStatisticToCalculate(); public AggregationProcessorDefinitionDTO getAggregatorDefinition(); 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 97ff06bebe1..4316bef4e72 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 @@ -47,27 +47,53 @@ public class DataRetrieverChainDefinitionDTO implements Serializable, Comparable return retrieverLevels; } - public int size() { + public int getLevelAmount() { return retrieverLevels.size(); } - public DataRetrieverLevelDTO getRetrieverLevel(int retrieverLevel) { - return retrieverLevels.get(retrieverLevel); + /** + * @param levelIndex + * @return The retriever level for the given index or null, if the index is out of bounds. + */ + public DataRetrieverLevelDTO getRetrieverLevel(int levelIndex) { + if (levelIndex < 0 || levelIndex >= getLevelAmount()) { + return null; + } + return retrieverLevels.get(levelIndex); + } + + /** + * @param retrieverLevel + * @return The retriever level after the given one or null, if the given one is the last one in the chain. + */ + public DataRetrieverLevelDTO getNextRetrieverLevel(DataRetrieverLevelDTO retrieverLevel) { + return getRetrieverLevel(retrieverLevel.getLevel() + 1); + } + + /** + * @param retrieverLevel + * @return The retriever level before the given one or null, if the given one is the first one in the chain. + */ + public DataRetrieverLevelDTO getPreviousRetrieverLevel(DataRetrieverLevelDTO retrieverLevel) { + return getRetrieverLevel(retrieverLevel.getLevel() - 1); } @Override public int compareTo(DataRetrieverChainDefinitionDTO d) { return this.getName().compareTo(d.getName()); } + + @Override + public String toString() { + return getDataSourceTypeName() + " -> " + getRetrievedDataTypeName() + + "[ID: " + id + ", name: " + name + "]"; + } @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 + ((retrieverLevels == null) ? 0 : retrieverLevels.hashCode()); return result; } @@ -80,26 +106,11 @@ public class DataRetrieverChainDefinitionDTO implements Serializable, Comparable 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 (retrieverLevels == null) { - if (other.retrieverLevels != null) - return false; - } else if (!retrieverLevels.equals(other.retrieverLevels)) - return false; return true; } diff --git a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/DataRetrieverLevelDTO.java b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/DataRetrieverLevelDTO.java index 767023bce69..6bcc4aaa450 100644 --- a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/DataRetrieverLevelDTO.java +++ b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/DataRetrieverLevelDTO.java @@ -2,7 +2,7 @@ package com.sap.sse.datamining.shared.impl.dto; import java.io.Serializable; -public class DataRetrieverLevelDTO implements Serializable { +public class DataRetrieverLevelDTO implements Serializable, Comparable { private static final long serialVersionUID = 6911713148350359643L; private int retrieverLevel; @@ -32,6 +32,11 @@ public class DataRetrieverLevelDTO implements Serializable { public LocalizedTypeDTO getRetrievedDataType() { return retrievedDataType; } + + @Override + public int compareTo(DataRetrieverLevelDTO otherRetrieverLevel) { + return Integer.compare(getLevel(), otherRetrieverLevel.getLevel()); + } @Override public int hashCode() { diff --git a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/ModifiableStatisticQueryDefinitionDTO.java b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/ModifiableStatisticQueryDefinitionDTO.java index 05fe92030ce..e86a551aad1 100644 --- a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/ModifiableStatisticQueryDefinitionDTO.java +++ b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/ModifiableStatisticQueryDefinitionDTO.java @@ -15,7 +15,7 @@ public class ModifiableStatisticQueryDefinitionDTO implements StatisticQueryDefi private AggregationProcessorDefinitionDTO aggregatorDefinition; private ArrayList dimensionsToGroupBy; private DataRetrieverChainDefinitionDTO dataRetrieverChainDefinition; - private HashMap>> filterSelection; + private HashMap>> filterSelection; /** * Constructor for the GWT-Serialization. Don't use this! @@ -32,7 +32,7 @@ public class ModifiableStatisticQueryDefinitionDTO implements StatisticQueryDefi this.dimensionsToGroupBy = new ArrayList(); } - public void setFilterSelectionFor(Integer retrieverLevel, HashMap> levelFilterSelection) { + public void setFilterSelectionFor(DataRetrieverLevelDTO retrieverLevel, HashMap> levelFilterSelection) { filterSelection.put(retrieverLevel, levelFilterSelection); } @@ -51,7 +51,7 @@ public class ModifiableStatisticQueryDefinitionDTO implements StatisticQueryDefi } @Override - public HashMap>> getFilterSelection() { + public HashMap>> getFilterSelection() { return filterSelection; } 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 0d7fa1bf911..831ba68841d 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 @@ -19,6 +19,7 @@ import com.sap.sse.datamining.components.DataRetrieverChainDefinition; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.data.QueryResult; import com.sap.sse.datamining.functions.Function; +import com.sap.sse.datamining.impl.components.DataRetrieverLevel; import com.sap.sse.datamining.impl.components.SimpleDataRetrieverChainDefinition; import com.sap.sse.datamining.shared.GroupKey; import com.sap.sse.datamining.shared.impl.GenericGroupKey; @@ -95,8 +96,8 @@ public class TestDimensionsValuesQuery { raceDimensions.add(dimensionRaceName); raceDimensions.add(dimensionBoatClassName); raceDimensions.add(dimensionYear); - Map, Collection>> filterSelection = new HashMap<>(); - Query> dimensionsValueQuery = server.createDimensionValuesQuery(dataRetrieverChainDefinition, 1 /*race*/, raceDimensions, filterSelection, locale); + Map, Map, Collection>> filterSelection = new HashMap<>(); + Query> dimensionsValueQuery = server.createDimensionValuesQuery(dataRetrieverChainDefinition, dataRetrieverChainDefinition.getDataRetrieverLevel(/*race*/ 1), raceDimensions, filterSelection, locale); Map> expectedRaceResultData = buildExpectedRaceResultData(); QueryResult> result = dimensionsValueQuery.run(); @@ -106,7 +107,7 @@ public class TestDimensionsValuesQuery { legDimensions.add(dimensionLegNumber); legDimensions.add(dimensionCompetitorName); legDimensions.add(dimensionCompetitorSailID); - dimensionsValueQuery = server.createDimensionValuesQuery(dataRetrieverChainDefinition, 2 /*leg*/, legDimensions, filterSelection, locale); + dimensionsValueQuery = server.createDimensionValuesQuery(dataRetrieverChainDefinition, dataRetrieverChainDefinition.getDataRetrieverLevel(/*leg*/ 2), legDimensions, filterSelection, locale); Map> expectedLegResultData = buildExpectedLegResultData(); result = dimensionsValueQuery.run(); diff --git a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestStatisticQuery.java b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestStatisticQuery.java index 23df2c62c72..18f745b7248 100644 --- a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestStatisticQuery.java +++ b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestStatisticQuery.java @@ -82,7 +82,7 @@ public class TestStatisticQuery { definition.addDimensionToGroupBy(functionFactory.createMethodWrappingFunction(getLengthMethod)); Method getValueMethod = FunctionTestsUtil.getMethodFromClass(Number.class, "getValue"); - definition.setFilterSelection(0, functionFactory.createMethodWrappingFunction(getValueMethod), Arrays.asList(10, 100, 1000)); + definition.setFilterSelection(retrieverChain.getDataRetrieverLevel(0), functionFactory.createMethodWrappingFunction(getValueMethod), Arrays.asList(10, 100, 1000)); return definition; } 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 81b26007368..a3bb838afaa 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 @@ -55,8 +55,8 @@ public interface DataMiningServer { Class dataSourceType, Class retrievedDataType); public DataRetrieverChainDefinition getDataRetrieverChainDefinition(UUID id); - public Query> createDimensionValuesQuery(DataRetrieverChainDefinition dataRetrieverChainDefinition, int retrieverLevel, - Iterable> dimensions, Map, Collection>> filterSelection, Locale locale); + public Query> createDimensionValuesQuery(DataRetrieverChainDefinition dataRetrieverChainDefinition, DataRetrieverLevel retrieverLevel, + Iterable> dimensions, Map, Map, Collection>> filterSelection, Locale locale); public StatisticQueryDefinition getQueryDefinitionForDTO(StatisticQueryDefinitionDTO queryDefinitionDTO); public Query createQuery(StatisticQueryDefinition queryDefinition); public QueryResult runNewQueryAndAbortPreviousQueries(DataMiningSession session, Query query); diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/StatisticQueryDefinition.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/StatisticQueryDefinition.java index 51653faa2f3..aff2d0f0390 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/StatisticQueryDefinition.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/StatisticQueryDefinition.java @@ -8,6 +8,7 @@ import java.util.Map; import com.sap.sse.datamining.components.AggregationProcessorDefinition; import com.sap.sse.datamining.components.DataRetrieverChainDefinition; import com.sap.sse.datamining.functions.Function; +import com.sap.sse.datamining.impl.components.DataRetrieverLevel; public interface StatisticQueryDefinition { @@ -19,7 +20,7 @@ public interface StatisticQueryDefinition getDataRetrieverChainDefinition(); - public Map, Collection>> getFilterSelection(); + public Map, Map, Collection>> getFilterSelection(); public List> getDimensionsToGroupBy(); public Function getStatisticToCalculate(); public AggregationProcessorDefinition getAggregatorDefinition(); diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainBuilder.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainBuilder.java index 5b2244ddd91..ea6bd17e413 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainBuilder.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainBuilder.java @@ -1,5 +1,7 @@ package com.sap.sse.datamining.components; +import com.sap.sse.datamining.impl.components.DataRetrieverLevel; + /** * Used to construct a chain of retriever processors step by step. Allows to set the filter and result @@ -11,6 +13,11 @@ package com.sap.sse.datamining.components; */ public interface DataRetrieverChainBuilder { + /** + * @return true, if {@link #canStepFurther()} has been called. + */ + public boolean hasBeenInitialized(); + /** * @return true, if there's a next data retriever in the chain. */ @@ -30,9 +37,9 @@ public interface DataRetrieverChainBuilder { public Class getCurrentRetrievedDataType(); /** - * @return The current retriever level or -1 if {@link #stepFurther()} has not yet been called. + * @return The current retriever level or null if {@link #stepFurther()} has not yet been called. */ - public int getCurrentRetrieverLevel(); + public DataRetrieverLevel getCurrentRetrieverLevel(); /** * Sets the filter for the data retriever of the current level. diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainDefinition.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainDefinition.java index 24b56cd306d..f86b33ca928 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainDefinition.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainDefinition.java @@ -108,6 +108,12 @@ public interface DataRetrieverChainDefinition { */ public List> getDataRetrieverLevels(); + /** + * @param levelIndex + * @return The retriever level for the given index or null, if the index is out of bounds. + */ + public DataRetrieverLevel getDataRetrieverLevel(int levelIndex); + /** * Returns a {@link DataRetrieverChainBuilder}, that is used to construct the chain. {@link #endWith(Class, Class, Class, String)} * has to be called before you can use this method. Otherwise an exception will be thrown. diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/QueryFactory.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/QueryFactory.java index 5593b7f2b97..c966f427fa0 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/QueryFactory.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/QueryFactory.java @@ -22,6 +22,7 @@ import com.sap.sse.datamining.functions.ParameterizedFunction; import com.sap.sse.datamining.impl.AdditionalDimensionValuesQueryData; import com.sap.sse.datamining.impl.AdditionalStatisticQueryData; import com.sap.sse.datamining.impl.ProcessorQuery; +import com.sap.sse.datamining.impl.components.DataRetrieverLevel; import com.sap.sse.datamining.impl.components.GroupedDataEntry; import com.sap.sse.datamining.impl.criterias.AndCompoundFilterCriterion; import com.sap.sse.datamining.impl.criterias.CompoundFilterCriterion; @@ -49,7 +50,7 @@ public class QueryFactory { Processor> groupingProcessor = processorFactory.createGroupingProcessor(dataTypeToRetrieve, extractionProcessor, getParameterProvidersFor(queryDefinition.getDimensionsToGroupBy(), stringMessages, queryDefinition.getLocale())); DataRetrieverChainBuilder chainBuilder = queryDefinition.getDataRetrieverChainDefinition().startBuilding(executor); - Map> criteriaMappedByRetrieverLevel = createFilterCriteria(queryDefinition.getFilterSelection()); + Map, FilterCriterion> criteriaMappedByRetrieverLevel = createFilterCriteria(queryDefinition.getFilterSelection()); while (chainBuilder.canStepFurther()) { chainBuilder.stepFurther(); @@ -98,9 +99,9 @@ public class QueryFactory { } @SuppressWarnings("unchecked") - private Map> createFilterCriteria(Map, Collection>> filterSelection) { - Map> criteriaMappedByRetrieverLevel = new HashMap<>(); - for (Entry, Collection>> levelFilterSelection : filterSelection.entrySet()) { + private Map, FilterCriterion> createFilterCriteria(Map, Map, Collection>> filterSelection) { + Map, FilterCriterion> criteriaMappedByRetrieverLevel = new HashMap<>(); + for (Entry, Map, Collection>> levelFilterSelection : filterSelection.entrySet()) { for (Entry, Collection> levelFilterSelectionEntry : levelFilterSelection.getValue().entrySet()) { Function function = levelFilterSelectionEntry.getKey(); ParameterProvider parameterProvider = ParameterProvider.NULL; @@ -114,25 +115,25 @@ public class QueryFactory { ((CompoundFilterCriterion) criteriaMappedByRetrieverLevel.get(levelFilterSelection.getKey())).addCriteria(new FunctionValuesFilterCriterion<>(dataType, function, parameterProvider, filterValues)); } } - return (Map>)(Map) criteriaMappedByRetrieverLevel; + return criteriaMappedByRetrieverLevel; } - public Query> createDimensionValuesQuery(DataSource dataSource, - final DataRetrieverChainDefinition dataRetrieverChainDefinition, final int retrieverLevel, - final Iterable> dimensions, final Map, Collection>> filterSelection, final Locale locale, + public Query> createDimensionValuesQuery(DataSourceType dataSource, + final DataRetrieverChainDefinition dataRetrieverChainDefinition, final DataRetrieverLevel retrieverLevel, + final Iterable> dimensions, final Map, Map, Collection>> filterSelection, final Locale locale, final ResourceBundleStringMessages stringMessages, final ExecutorService executor) { @SuppressWarnings("unchecked") Class> resultType = (Class>)(Class) HashSet.class; - return new ProcessorQuery, DataSource>(dataSource, stringMessages, locale, resultType, new AdditionalDimensionValuesQueryData(dataRetrieverChainDefinition.getID(), dimensions)) { + return new ProcessorQuery, DataSourceType>(dataSource, stringMessages, locale, resultType, new AdditionalDimensionValuesQueryData(dataRetrieverChainDefinition.getID(), dimensions)) { @Override - protected Processor createChainAndReturnFirstProcessor(Processor>, Void> resultReceiver) { + protected Processor createChainAndReturnFirstProcessor(Processor>, Void> resultReceiver) { ProcessorFactory processorFactory = new ProcessorFactory(executor); Processor, Map>> valueCollector = processorFactory.createGroupedDataCollectingAsSetProcessor(/*query*/ this); - Map> criteriaMappedByRetrieverLevel = createFilterCriteria(filterSelection); - DataRetrieverChainBuilder chainBuilder = dataRetrieverChainDefinition.startBuilding(executor); - while (chainBuilder.getCurrentRetrieverLevel() < retrieverLevel) { + Map, FilterCriterion> criteriaMappedByRetrieverLevel = createFilterCriteria(filterSelection); + DataRetrieverChainBuilder chainBuilder = dataRetrieverChainDefinition.startBuilding(executor); + while (!chainBuilder.hasBeenInitialized() || chainBuilder.getCurrentRetrieverLevel().getLevel() < retrieverLevel.getLevel()) { chainBuilder.stepFurther(); if (criteriaMappedByRetrieverLevel.containsKey(chainBuilder.getCurrentRetrieverLevel())) { 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 4f237c6cd9c..868a547fc5c 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 @@ -33,6 +33,7 @@ import com.sap.sse.datamining.impl.components.management.StrategyPerQueryTypeMan 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.DataRetrieverLevelDTO; import com.sap.sse.datamining.shared.impl.dto.FunctionDTO; import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO; import com.sap.sse.i18n.ResourceBundleStringMessages; @@ -298,8 +299,8 @@ public class DataMiningServerImpl implements ModifiableDataMiningServer { AggregationProcessorDefinition aggregatorDefinition = getAggregationProcessorDefinitionForDTO(queryDefinitionDTO.getAggregatorDefinition()); queryDefinition = new ModifiableStatisticQueryDefinition<>(locale, retrieverChain, statisticToCalculate, aggregatorDefinition); - for (Entry>> levelSpecificFilterSelection : queryDefinitionDTO.getFilterSelection().entrySet()) { - Integer retrieverLevel = levelSpecificFilterSelection.getKey(); + for (Entry>> levelSpecificFilterSelection : queryDefinitionDTO.getFilterSelection().entrySet()) { + DataRetrieverLevel retrieverLevel = retrieverChain.getDataRetrieverLevel(levelSpecificFilterSelection.getKey().getLevel()); for (Entry> levelSpecificFilterSelectionEntry : levelSpecificFilterSelection.getValue().entrySet()) { Function dimensionToFilterBy = getFunctionForDTO(levelSpecificFilterSelectionEntry.getKey()); if (dimensionToFilterBy != null) { @@ -326,8 +327,8 @@ public class DataMiningServerImpl implements ModifiableDataMiningServer { } @Override - public Query> createDimensionValuesQuery(DataRetrieverChainDefinition dataRetrieverChainDefinition, int retrieverLevel, - Iterable> dimensions, Map, Collection>> filterSelection, Locale locale) { + public Query> createDimensionValuesQuery(DataRetrieverChainDefinition dataRetrieverChainDefinition, DataRetrieverLevel retrieverLevel, + Iterable> dimensions, Map, Map, Collection>> filterSelection, Locale locale) { DataSourceProvider dataSourceProvider = getDataSourceProviderFor(dataRetrieverChainDefinition.getDataSourceType()); return queryFactory.createDimensionValuesQuery(dataSourceProvider.getDataSource(), dataRetrieverChainDefinition, retrieverLevel, dimensions, filterSelection, locale, getStringMessages(), getExecutorService()); } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/ModifiableStatisticQueryDefinition.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/ModifiableStatisticQueryDefinition.java index bf8d8ae7e91..a1227cae5e1 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/ModifiableStatisticQueryDefinition.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/ModifiableStatisticQueryDefinition.java @@ -11,13 +11,14 @@ 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.functions.Function; +import com.sap.sse.datamining.impl.components.DataRetrieverLevel; public class ModifiableStatisticQueryDefinition implements StatisticQueryDefinition { private final Locale locale; private final DataRetrieverChainDefinition retrieverChain; - private final Map, Collection>> filterSelection; + private final Map, Map, Collection>> filterSelection; private final List> dimensionsToGroupBy; @@ -67,7 +68,7 @@ public class ModifiableStatisticQueryDefinition, Collection>> getFilterSelection() { + public Map, Map, Collection>> getFilterSelection() { return filterSelection; } @@ -86,7 +87,7 @@ public class ModifiableStatisticQueryDefinition dimensionToFilterBy, Collection filterSelection) { + public void setFilterSelection(DataRetrieverLevel retrieverLevel, Function dimensionToFilterBy, Collection filterSelection) { if (!this.filterSelection.containsKey(retrieverLevel)) { this.filterSelection.put(retrieverLevel, new HashMap, Collection>()); } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainBuilder.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainBuilder.java index 9aa34788b21..4a5f4ad2425 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainBuilder.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainBuilder.java @@ -109,8 +109,8 @@ public class SimpleDataRetrieverChainBuilder implements DataRetr } @Override - public int getCurrentRetrieverLevel() { - return currentRetrieverTypeIndex; + public DataRetrieverLevel getCurrentRetrieverLevel() { + return hasBeenInitialized() ? dataRetrieverTypesWithInformation.get(currentRetrieverTypeIndex) : null; } @SuppressWarnings("unchecked") @@ -129,7 +129,7 @@ public class SimpleDataRetrieverChainBuilder implements DataRetr return (Processor) firstRetriever; } - private boolean hasBeenInitialized() { + public boolean hasBeenInitialized() { return currentRetrieverTypeIndex >= 0; } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainDefinition.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainDefinition.java index b591adf22bb..5776ec864a3 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainDefinition.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainDefinition.java @@ -128,6 +128,14 @@ public class SimpleDataRetrieverChainDefinition implem public List> getDataRetrieverLevels() { return dataRetrieverTypesWithInformation; } + + @Override + public DataRetrieverLevel getDataRetrieverLevel(int levelIndex) { + if (levelIndex < 0 || levelIndex >= getDataRetrieverLevels().size()) { + return null; + } + return getDataRetrieverLevels().get(levelIndex); + } @Override public DataRetrieverChainBuilder startBuilding(ExecutorService executor) {