From 920e596cfde8d07e673f23f59dfe7842469b1ffe Mon Sep 17 00:00:00 2001 From: Lennart Hensler Date: Thu, 10 Oct 2013 18:05:31 +0200 Subject: [PATCH] The selection panels is now able to apply a QueryDefinition --- .../sailing/datamining/DataMiningFactory.java | 18 +-- .../sap/sailing/datamining/Dimensions.java | 4 +- .../datamining/impl/SmartQueryDefinition.java | 6 +- .../datamining/shared/QueryDefinition.java | 4 +- ...edDimensions.java => SharedDimension.java} | 2 +- .../shared/SimpleQueryDefinition.java | 16 +-- .../sailing/gwt/ui/client/StringMessages.java | 1 + .../gwt/ui/client/StringMessages.properties | 3 +- .../ui/client/StringMessages_de.properties | 3 +- .../AbstractQueryDefinitionProvider.java | 17 ++- .../datamining/QueryDefinitionProvider.java | 1 + .../gwt/ui/datamining/QueryResultsPanel.java | 17 ++- .../gwt/ui/datamining/SelectionTable.java | 19 ++- .../SimpleQueryDefinitionProvider.java | 111 ++++++++++++------ 14 files changed, 150 insertions(+), 72 deletions(-) rename java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/{SharedDimensions.java => SharedDimension.java} (85%) diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/DataMiningFactory.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/DataMiningFactory.java index f3be0358222..0256614d339 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/DataMiningFactory.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/DataMiningFactory.java @@ -24,7 +24,7 @@ import com.sap.sailing.datamining.impl.gpsfix.SimpleGPSFixRetriever; import com.sap.sailing.datamining.impl.gpsfix.GroupGPSFixesByDimension; import com.sap.sailing.datamining.shared.AggregatorType; import com.sap.sailing.datamining.shared.DataTypes; -import com.sap.sailing.datamining.shared.SharedDimensions; +import com.sap.sailing.datamining.shared.SharedDimension; import com.sap.sailing.datamining.shared.QueryDefinition; import com.sap.sailing.datamining.shared.StatisticType; import com.sap.sailing.domain.base.Moving; @@ -87,13 +87,13 @@ public class DataMiningFactory { private static Filter createDimensionFilter(DataTypes dataType, Map> selection) { switch (dataType) { case GPSFix: - return (Filter) createGPSFixDimensionFilter((Map>) selection); + return (Filter) createGPSFixDimensionFilter((Map>) selection); } throw new IllegalArgumentException("Not yet implemented for the given data type: " + dataType.toString()); } - public static Filter createGPSFixDimensionFilter(Map> selection) { + public static Filter createGPSFixDimensionFilter(Map> selection) { if (selection.isEmpty()) { return createNoFilter(); } @@ -101,16 +101,16 @@ public class DataMiningFactory { return createCriteriaFilter(createGPSFixDimensionFilterCriteria(selection)); } - public static FilterCriteria createGPSFixDimensionFilterCriteria(Map> selection) { + public static FilterCriteria createGPSFixDimensionFilterCriteria(Map> selection) { CompoundFilterCriteria compoundFilterCriteria = new AndCompoundFilterCriteria(); - for (Entry> selectionEntry : selection.entrySet()) { + for (Entry> selectionEntry : selection.entrySet()) { FilterCriteria criteria = createGPSFixDimensionFilterCriteria(selectionEntry.getKey(), selectionEntry.getValue()); compoundFilterCriteria.addCriteria(criteria); } return compoundFilterCriteria; } - public static FilterCriteria createGPSFixDimensionFilterCriteria(SharedDimensions gpsFix, Iterable values) { + public static FilterCriteria createGPSFixDimensionFilterCriteria(SharedDimension gpsFix, Iterable values) { Dimension dimension = Dimensions.GPSFix.getDimensionFor(gpsFix); return createDimensionFilterCriteria(dimension, values); } @@ -150,15 +150,15 @@ public class DataMiningFactory { private static Grouper createByDimensionGrouper(DataTypes dataType, List dimensionsToGroupBy) { switch (dataType) { case GPSFix: - return (Grouper) createGPSFixByDimensionGrouper((Collection) dimensionsToGroupBy); + return (Grouper) createGPSFixByDimensionGrouper((Collection) dimensionsToGroupBy); } throw new IllegalArgumentException("Not yet implemented for the given data type: " + dataType.toString()); } - public static Grouper createGPSFixByDimensionGrouper(Collection dimensionsToGroupBy) { + public static Grouper createGPSFixByDimensionGrouper(Collection dimensionsToGroupBy) { Collection> dimensions = new LinkedHashSet>(); - for (SharedDimensions dimensionType : dimensionsToGroupBy) { + for (SharedDimension dimensionType : dimensionsToGroupBy) { Dimension dimension = Dimensions.GPSFix.getDimensionFor(dimensionType); dimensions.add(dimension); } diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/Dimensions.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/Dimensions.java index 81095855cd4..5a0febb2ffc 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/Dimensions.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/Dimensions.java @@ -1,7 +1,7 @@ package com.sap.sailing.datamining; import com.sap.sailing.datamining.impl.AbstractDimension; -import com.sap.sailing.datamining.shared.SharedDimensions; +import com.sap.sailing.datamining.shared.SharedDimension; import com.sap.sailing.domain.common.LegType; public class Dimensions { @@ -101,7 +101,7 @@ public class Dimensions { * @return The dimension for the given dimension type. Throws an exception, if the used ValueType doesn't match the ValueType of the returning dimension. */ @SuppressWarnings("unchecked") - public static Dimension getDimensionFor(SharedDimensions dimension) { + public static Dimension getDimensionFor(SharedDimension dimension) { switch (dimension) { case BoatClassName: return (Dimension) BoatClassName; diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/SmartQueryDefinition.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/SmartQueryDefinition.java index 34f2ea9318f..e968c1317b2 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/SmartQueryDefinition.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/SmartQueryDefinition.java @@ -7,7 +7,7 @@ import com.sap.sailing.datamining.shared.AggregatorType; import com.sap.sailing.datamining.shared.Components.GrouperType; import com.sap.sailing.datamining.shared.DataTypes; import com.sap.sailing.datamining.shared.QueryDefinition; -import com.sap.sailing.datamining.shared.SharedDimensions; +import com.sap.sailing.datamining.shared.SharedDimension; import com.sap.sailing.datamining.shared.StatisticType; public class SmartQueryDefinition implements QueryDefinition { @@ -40,12 +40,12 @@ public class SmartQueryDefinition implements QueryDefinition { } @Override - public List getDimensionsToGroupBy() { + public List getDimensionsToGroupBy() { return queryDefinition.getDimensionsToGroupBy(); } @Override - public Map> getSelection() { + public Map> getSelection() { return queryDefinition.getSelection(); } diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/QueryDefinition.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/QueryDefinition.java index fce2df9d55c..e36e8410a1d 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/QueryDefinition.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/QueryDefinition.java @@ -16,8 +16,8 @@ public interface QueryDefinition extends Serializable { public String getCustomGrouperScriptText(); - public List getDimensionsToGroupBy(); + public List getDimensionsToGroupBy(); - public Map> getSelection(); + public Map> getSelection(); } \ No newline at end of file diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/SharedDimensions.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/SharedDimension.java similarity index 85% rename from java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/SharedDimensions.java rename to java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/SharedDimension.java index 5ad2bd5371c..8bb50d374dc 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/SharedDimensions.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/SharedDimension.java @@ -1,5 +1,5 @@ package com.sap.sailing.datamining.shared; -public enum SharedDimensions { +public enum SharedDimension { RegattaName, RaceName, LegNumber, CourseAreaName, FleetName, BoatClassName, Year, LegType, CompetitorName, SailID, Nationality, WindStrength } \ No newline at end of file diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/SimpleQueryDefinition.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/SimpleQueryDefinition.java index d2191415e6e..904cc2180a3 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/SimpleQueryDefinition.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/shared/SimpleQueryDefinition.java @@ -16,8 +16,8 @@ public class SimpleQueryDefinition implements QueryDefinition { private AggregatorType aggregatorType; private String customGrouperScriptText; - private List dimensionsToGroupBy; - private Map> selectionMappedByDimension; + private List dimensionsToGroupBy; + private Map> selectionMappedByDimension; /** * Constructor for the GWT-Serialization. Don't use this! @@ -31,8 +31,8 @@ public class SimpleQueryDefinition implements QueryDefinition { this.aggregatorType = aggregatorType; customGrouperScriptText = ""; - dimensionsToGroupBy = new ArrayList(); - selectionMappedByDimension = new HashMap>(); + dimensionsToGroupBy = new ArrayList(); + selectionMappedByDimension = new HashMap>(); } @Override @@ -56,20 +56,20 @@ public class SimpleQueryDefinition implements QueryDefinition { } @Override - public List getDimensionsToGroupBy() { + public List getDimensionsToGroupBy() { return dimensionsToGroupBy; } @Override - public Map> getSelection() { + public Map> getSelection() { return selectionMappedByDimension; } - public void appendDimensionToGroupBy(SharedDimensions dimension) { + public void appendDimensionToGroupBy(SharedDimension dimension) { dimensionsToGroupBy.add(dimension); } - public void setSelectionFor(SharedDimensions dimension, Collection selection) { + public void setSelectionFor(SharedDimension dimension, Collection selection) { selectionMappedByDimension.put(dimension, selection); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java index 0b4da0bb4a1..fe1d30567a7 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java @@ -779,4 +779,5 @@ public interface StringMessages extends Messages { String noGrouperSelectedError(); String queryNotValidBecause(); String dataMining(); + String errorRunningDataMiningQuery(); } 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 9bdde3f6fed..a6582b8b0ba 100755 --- 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 @@ -772,4 +772,5 @@ noCustomGrouperScriptTextError=The grouper script is empty noDimensionToGroupBySelectedError=No dimension to group by is selected noGrouperSelectedError=No grouper type is selected queryNotValidBecause=No query possible, because -dataMining=Data Mining \ No newline at end of file +dataMining=Data Mining +errorRunningDataMiningQuery=An error occured running the query \ 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 4ac4d44fc86..d00dbce115d 100755 --- 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 @@ -768,4 +768,5 @@ noCustomGrouperScriptTextError=Das Grouper-Skript leer ist noDimensionToGroupBySelectedError=Keine Gruppierungs-Dimension ausgewählt ist noGrouperSelectedError=Kein Gruppierungs-Typ ausgewählt ist queryNotValidBecause=Keine Datenabfrage möglich, da -dataMining=Data Mining \ No newline at end of file +dataMining=Data Mining +errorRunningDataMiningQuery=Es ist ein Felher bei der Datenabfrage aufgetreten \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/AbstractQueryDefinitionProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/AbstractQueryDefinitionProvider.java index 04170664343..a5fa71fef5e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/AbstractQueryDefinitionProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/AbstractQueryDefinitionProvider.java @@ -10,7 +10,7 @@ import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.datamining.shared.Components.GrouperType; import com.sap.sailing.datamining.shared.QueryDefinition; -import com.sap.sailing.datamining.shared.SharedDimensions; +import com.sap.sailing.datamining.shared.SharedDimension; public abstract class AbstractQueryDefinitionProvider implements QueryDefinitionProvider { @@ -18,6 +18,7 @@ public abstract class AbstractQueryDefinitionProvider implements QueryDefinition private final SailingServiceAsync sailingService; private final ErrorReporter errorReporter; + private boolean blockChangeNotification; private final Set listeners; public AbstractQueryDefinitionProvider(StringMessages stringMessages, SailingServiceAsync sailingService, @@ -26,6 +27,7 @@ public abstract class AbstractQueryDefinitionProvider implements QueryDefinition this.sailingService = sailingService; this.errorReporter = errorReporter; + blockChangeNotification = false; listeners = new HashSet(); } @@ -60,7 +62,7 @@ public abstract class AbstractQueryDefinitionProvider implements QueryDefinition } break; case Dimensions: - for (SharedDimensions dimension : queryDefinition.getDimensionsToGroupBy()) { + for (SharedDimension dimension : queryDefinition.getDimensionsToGroupBy()) { if (dimension != null) { break ValidateGrouper; } @@ -87,9 +89,16 @@ public abstract class AbstractQueryDefinitionProvider implements QueryDefinition listeners.remove(listener); } + protected void setBlockChangeNotification(boolean block) { + blockChangeNotification = block; + } + protected void notifyQueryDefinitionChanged() { - for (QueryDefinitionChangedListener listener : listeners) { - listener.queryDefinitionChanged(getQueryDefinition()); + if (!blockChangeNotification) { + QueryDefinition queryDefinition = getQueryDefinition(); + for (QueryDefinitionChangedListener listener : listeners) { + listener.queryDefinitionChanged(queryDefinition); + } } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/QueryDefinitionProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/QueryDefinitionProvider.java index 73dedada68a..55c4803a597 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/QueryDefinitionProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/QueryDefinitionProvider.java @@ -7,6 +7,7 @@ public interface QueryDefinitionProvider { public Iterable validateQueryDefinition(QueryDefinition queryDefinition); public QueryDefinition getQueryDefinition(); + public void applyQueryDefinition(QueryDefinition queryDefinition); public void addListener(QueryDefinitionChangedListener listener); public void removeListener(QueryDefinitionChangedListener listener); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/QueryResultsPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/QueryResultsPanel.java index ee6301a919c..07f4835479e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/QueryResultsPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/QueryResultsPanel.java @@ -11,8 +11,13 @@ import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.datamining.shared.AggregatorType; +import com.sap.sailing.datamining.shared.Components.GrouperType; import com.sap.sailing.datamining.shared.QueryDefinition; import com.sap.sailing.datamining.shared.QueryResult; +import com.sap.sailing.datamining.shared.SharedDimension; +import com.sap.sailing.datamining.shared.SimpleQueryDefinition; +import com.sap.sailing.datamining.shared.StatisticType; import com.sap.sailing.gwt.ui.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; @@ -44,9 +49,11 @@ public class QueryResultsPanel extends FlowPanel implements QueryDefinitionChang this.queryDefinitionProvider = queryDefinitionProvider; this.presenter = presenter; - updateSettings(settings); add(createFunctionsPanel()); add(this.presenter.getWidget()); + + updateSettings(settings); + this.queryDefinitionProvider.applyQueryDefinition(getStandardQueryDefinition()); runQuery(this.queryDefinitionProvider.getQueryDefinition()); } @@ -63,6 +70,7 @@ public class QueryResultsPanel extends FlowPanel implements QueryDefinitionChang @Override public void onFailure(Throwable caught) { errorReporter.reportError("Error running the query: " + caught.getMessage()); + presenter.showError(stringMessages.errorRunningDataMiningQuery() + "."); } @Override @@ -142,4 +150,11 @@ public class QueryResultsPanel extends FlowPanel implements QueryDefinitionChang return this; } + private static QueryDefinition getStandardQueryDefinition() { + SimpleQueryDefinition standardDefinition = new SimpleQueryDefinition(GrouperType.Dimensions, StatisticType.Speed, AggregatorType.Average); + standardDefinition.appendDimensionToGroupBy(SharedDimension.RegattaName); + standardDefinition.appendDimensionToGroupBy(SharedDimension.RaceName); + return standardDefinition; + } + } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/SelectionTable.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/SelectionTable.java index 3c63147f716..6b24bf899d9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/SelectionTable.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/SelectionTable.java @@ -9,17 +9,17 @@ import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.view.client.ListDataProvider; import com.google.gwt.view.client.MultiSelectionModel; import com.google.gwt.view.client.SelectionChangeEvent; -import com.sap.sailing.datamining.shared.SharedDimensions; +import com.sap.sailing.datamining.shared.SharedDimension; public abstract class SelectionTable extends SimplePanel { - private SharedDimensions dimension; + private SharedDimension dimension; private CellTable table; private MultiSelectionModel selectionModel; private ListDataProvider dataProvider; - public SelectionTable(String title, SharedDimensions dimension) { + public SelectionTable(String title, SharedDimension dimension) { this.dimension = dimension; table = new CellTable(500); @@ -38,7 +38,7 @@ public abstract class SelectionTable extends SimplePanel setWidget(table); } - public SharedDimensions getDimension() { + public SharedDimension getDimension() { return dimension; } @@ -54,6 +54,17 @@ public abstract class SelectionTable extends SimplePanel } return selectionAsValues; } + + public void setSelection(Iterable elements) { + clearSelection(); + try { + @SuppressWarnings("unchecked") //You can't use instanceof for generic type parameters + Iterable elementsMatchingContent = (Iterable) elements; + for (ContentType element : elementsMatchingContent) { + selectionModel.setSelected(element, true); + } + } catch (ClassCastException e) {/*Ignore the elements, because they don't fit the ContentType*/} + } public void clearSelection() { selectionModel.clear(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/SimpleQueryDefinitionProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/SimpleQueryDefinitionProvider.java index f5a54e07e6e..921efec624c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/SimpleQueryDefinitionProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/SimpleQueryDefinitionProvider.java @@ -32,7 +32,7 @@ import com.google.gwt.user.client.ui.Widget; import com.google.gwt.view.client.SelectionChangeEvent; import com.sap.sailing.datamining.shared.AggregatorType; import com.sap.sailing.datamining.shared.Components.GrouperType; -import com.sap.sailing.datamining.shared.SharedDimensions; +import com.sap.sailing.datamining.shared.SharedDimension; import com.sap.sailing.datamining.shared.QueryDefinition; import com.sap.sailing.datamining.shared.SimpleQueryDefinition; import com.sap.sailing.datamining.shared.StatisticType; @@ -52,10 +52,10 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid private ValueListBox grouperTypeListBox; private TextArea customGrouperScriptTextBox; private HorizontalPanel dimensionsToGroupByPanel; - private List> dimensionsToGroupByBoxes; + private List> dimensionsToGroupByBoxes; private ValueListBox statisticsListBox; - private Map> tablesMappedByDimension; + private Map> tablesMappedByDimension; private SelectionTable regattaNameTable; private SelectionTable boatClassTable; private SelectionTable raceNameTable; @@ -69,7 +69,7 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid ErrorReporter errorReporter) { super(stringMessages, sailingService, errorReporter); mainPanel = new FlowPanel(); - dimensionsToGroupByBoxes = new ArrayList>(); + dimensionsToGroupByBoxes = new ArrayList>(); mainPanel.add(createSelectionTables()); mainPanel.add(createFunctionsPanel()); @@ -85,19 +85,64 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid break; case Dimensions: default: - for (SharedDimensions dimension : getDimensionsToGroupBy()) { + for (SharedDimension dimension : getDimensionsToGroupBy()) { queryDTO.appendDimensionToGroupBy(dimension); } break; } - for (Entry> selectionEntry : getSelection().entrySet()) { + for (Entry> selectionEntry : getSelection().entrySet()) { queryDTO.setSelectionFor(selectionEntry.getKey(), selectionEntry.getValue()); } return queryDTO; } + + @Override + public void applyQueryDefinition(QueryDefinition queryDefinition) { + setBlockChangeNotification(true); + applySelection(queryDefinition); + applyGrouping(queryDefinition); + applyStatistic(queryDefinition); + setBlockChangeNotification(false); + + notifyQueryDefinitionChanged(); + } - private Map> getSelection() { - Map> selection = new HashMap>(); + private void applySelection(QueryDefinition queryDefinition) { + for (Entry> selectionEntry : queryDefinition.getSelection().entrySet()) { + SelectionTable selectionTable = tablesMappedByDimension.get(selectionEntry.getKey()); + selectionTable.setSelection((Iterable) selectionEntry.getValue()); + } + } + + private void applyGrouping(QueryDefinition queryDefinition) { + grouperTypeListBox.setValue(queryDefinition.getGrouperType(), true); + + switch (queryDefinition.getGrouperType()) { + case Custom: + customGrouperScriptTextBox.setText(queryDefinition.getCustomGrouperScriptText()); + break; + case Dimensions: + applyDimensionsToGroupBy(queryDefinition); + break; + default: + throw new IllegalArgumentException("Not yet implemented for the given data type: " + queryDefinition.getGrouperType().toString()); + } + } + + private void applyDimensionsToGroupBy(QueryDefinition queryDefinition) { + int index = 0; + for (SharedDimension dimension : queryDefinition.getDimensionsToGroupBy()) { + dimensionsToGroupByBoxes.get(index).setValue(dimension, true); + index++; + } + } + + private void applyStatistic(QueryDefinition queryDefinition) { + statisticsListBox.setValue(new StatisticAndAggregatorType(queryDefinition.getStatisticType(), queryDefinition.getAggregatorType()), false); + } + + private Map> getSelection() { + Map> selection = new HashMap>(); for (SelectionTable table : tablesMappedByDimension.values()) { Collection specificSelection = table.getSelection(); if (!specificSelection.isEmpty()) { @@ -121,10 +166,10 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid return getGrouperType() == GrouperType.Custom ? customGrouperScriptTextBox.getText() : ""; } - private Collection getDimensionsToGroupBy() { - Collection dimensionsToGroupBy = new ArrayList(); + private Collection getDimensionsToGroupBy() { + Collection dimensionsToGroupBy = new ArrayList(); if (getGrouperType() == GrouperType.Dimensions) { - for (ValueListBox dimensionToGroupByBox : dimensionsToGroupByBoxes) { + for (ValueListBox dimensionToGroupByBox : dimensionsToGroupByBoxes) { if (dimensionToGroupByBox.getValue() != null) { dimensionsToGroupBy.add(dimensionToGroupByBox.getValue()); } @@ -303,13 +348,7 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid dimensionsToGroupByPanel.setSpacing(5); groupByOptionsPanel.add(dimensionsToGroupByPanel); - //Adding two dimension boxes, with regatta as first selected dimension - ValueListBox dimensionToGroupByBox = createDimensionToGroupByBox(); - dimensionToGroupByBox.setValue(SharedDimensions.RegattaName, false); - dimensionsToGroupByPanel.add(dimensionToGroupByBox); - dimensionsToGroupByBoxes.add(dimensionToGroupByBox); - - dimensionToGroupByBox = createDimensionToGroupByBox(); + ValueListBox dimensionToGroupByBox = createDimensionToGroupByBox(); dimensionsToGroupByPanel.add(dimensionToGroupByBox); dimensionsToGroupByBoxes.add(dimensionToGroupByBox); @@ -326,11 +365,11 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid return groupByPanel; } - private ValueListBox createDimensionToGroupByBox() { - ValueListBox dimensionToGroupByBox = new ValueListBox( - new Renderer() { + private ValueListBox createDimensionToGroupByBox() { + ValueListBox dimensionToGroupByBox = new ValueListBox( + new Renderer() { @Override - public String render(SharedDimensions gpsFixDimension) { + public String render(SharedDimension gpsFixDimension) { if (gpsFixDimension == null) { return ""; } @@ -338,19 +377,19 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid } @Override - public void render(SharedDimensions gpsFixDimension, Appendable appendable) + public void render(SharedDimension gpsFixDimension, Appendable appendable) throws IOException { appendable.append(render(gpsFixDimension)); } }); - dimensionToGroupByBox.addValueChangeHandler(new ValueChangeHandler() { + dimensionToGroupByBox.addValueChangeHandler(new ValueChangeHandler() { private boolean firstChange = true; @Override - public void onValueChange(ValueChangeEvent event) { + public void onValueChange(ValueChangeEvent event) { if (firstChange && event.getValue() != null) { - ValueListBox newBox = createDimensionToGroupByBox(); + ValueListBox newBox = createDimensionToGroupByBox(); dimensionsToGroupByPanel.add(newBox); dimensionsToGroupByBoxes.add(newBox); firstChange = false; @@ -361,7 +400,7 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid notifyQueryDefinitionChanged(); } }); - dimensionToGroupByBox.setAcceptableValues(Arrays.asList(SharedDimensions.values())); + dimensionToGroupByBox.setAcceptableValues(Arrays.asList(SharedDimension.values())); return dimensionToGroupByBox; } @@ -370,10 +409,10 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid tablesPanel.setSpacing(5); ScrollPanel tablesScrollPanel = new ScrollPanel(tablesPanel); tablesScrollPanel.setHeight("21em"); - tablesMappedByDimension = new HashMap>(); + tablesMappedByDimension = new HashMap>(); regattaNameTable = new SelectionTable(getStringMessages() - .regatta(), SharedDimensions.RegattaName) { + .regatta(), SharedDimension.RegattaName) { @Override public String getValue(RegattaDTO regatta) { return regatta.getName(); @@ -383,7 +422,7 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid tablesMappedByDimension.put(regattaNameTable.getDimension(), regattaNameTable); boatClassTable = new SelectionTable(getStringMessages() - .boatClass(), SharedDimensions.BoatClassName) { + .boatClass(), SharedDimension.BoatClassName) { @Override public String getValue(BoatClassDTO boatClass) { return boatClass.getName(); @@ -393,7 +432,7 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid tablesMappedByDimension.put(boatClassTable.getDimension(), boatClassTable); raceNameTable = new SelectionTable(getStringMessages().race(), - SharedDimensions.RaceName) { + SharedDimension.RaceName) { @Override public String getValue(RaceDTO race) { return race.getName(); @@ -403,7 +442,7 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid tablesMappedByDimension.put(raceNameTable.getDimension(), raceNameTable); legNumberTable = new SelectionTable(getStringMessages().legLabel(), - SharedDimensions.LegNumber) { + SharedDimension.LegNumber) { @Override public Integer getValue(Integer legNumber) { return legNumber; @@ -413,7 +452,7 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid tablesMappedByDimension.put(legNumberTable.getDimension(), legNumberTable); legTypeTable = new SelectionTable(getStringMessages().legType(), - SharedDimensions.LegType) { + SharedDimension.LegType) { @Override public LegType getValue(LegType legType) { return legType; @@ -423,7 +462,7 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid tablesMappedByDimension.put(legTypeTable.getDimension(), legTypeTable); competitorNameTable = new SelectionTable(getStringMessages() - .competitor(), SharedDimensions.CompetitorName) { + .competitor(), SharedDimension.CompetitorName) { @Override public String getValue(CompetitorDTO competitor) { return competitor.getName(); @@ -433,7 +472,7 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid tablesMappedByDimension.put(competitorNameTable.getDimension(), competitorNameTable); competitorSailIDTable = new SelectionTable(getStringMessages() - .sailID(), SharedDimensions.SailID) { + .sailID(), SharedDimension.SailID) { @Override public String getValue(CompetitorDTO competitor) { return competitor.getSailID(); @@ -443,7 +482,7 @@ public class SimpleQueryDefinitionProvider extends AbstractQueryDefinitionProvid tablesMappedByDimension.put(competitorSailIDTable.getDimension(), competitorSailIDTable); nationalityTable = new SelectionTable(getStringMessages() - .nationality(), SharedDimensions.Nationality) { + .nationality(), SharedDimension.Nationality) { @Override public String getValue(String nationality) { return nationality;