From 6fb6520117ed2a5bd020293563c84403bbcffb2d Mon Sep 17 00:00:00 2001 From: Lennart Hensler Date: Tue, 6 Aug 2013 11:49:31 +0200 Subject: [PATCH] Extracted the selection panel from the DataMiningEntryPoint --- .../sailing/gwt/ui/client/StringMessages.java | 3 + .../gwt/ui/client/StringMessages.properties | 3 + .../ui/client/StringMessages_de.properties | 3 + .../ui/datamining/DataMiningEntryPoint.java | 271 +----------------- .../gwt/ui/datamining/SelectionPanel.java | 202 +++++++++++++ .../gwt/ui/datamining/SelectionTable.java | 64 +++++ 6 files changed, 280 insertions(+), 266 deletions(-) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/SelectionPanel.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/SelectionTable.java 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 cabbc3da0fb..627d20c97b5 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 @@ -746,4 +746,7 @@ public interface StringMessages extends Messages { String timeSinceLastPositionFix(); String timeSinceLastPositionFixTooltip(); String trackingQuality(); + String legType(); + String sailID(); + String clearSelection(); } 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 1895935bf0a..1a378ac089e 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 @@ -740,3 +740,6 @@ polarDiagramButton=Polar Diagram timeSinceLastPositionFix=Last GPS timeSinceLastPositionFixTooltip=Time since last received GPS position trackingQuality=Tracking quality +legType=Leg Type +sailID=Sail Number +clearSelection=Clear Selection \ 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 7e68dfda9c8..41cc862038d 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 @@ -736,3 +736,6 @@ polarDiagramButton=Polardiagramm timeSinceLastPositionFix=Letztes GPS timeSinceLastPositionFixTooltip=Zeit seit der letzten empfangenen GPS-Position trackingQuality=Tracking-Qualität +legType=Art des Schenkels +sailID=Segelnummer +clearSelection=Auswahl leeren \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningEntryPoint.java index c068c52c806..bbaee532038 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningEntryPoint.java @@ -1,17 +1,9 @@ package com.sap.sailing.gwt.ui.datamining; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; -import java.util.Map; -import java.util.Set; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.user.cellview.client.CellTable; -import com.google.gwt.user.cellview.client.TextColumn; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.FlowPanel; @@ -19,43 +11,19 @@ import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.IntegerBox; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; -import com.google.gwt.view.client.ListDataProvider; -import com.google.gwt.view.client.MultiSelectionModel; -import com.sap.sailing.datamining.shared.Dimension; -import com.sap.sailing.domain.common.LegType; -import com.sap.sailing.domain.common.dto.BoatClassDTO; -import com.sap.sailing.domain.common.dto.CompetitorDTO; -import com.sap.sailing.domain.common.dto.RaceDTO; import com.sap.sailing.domain.common.impl.Util.Pair; import com.sap.sailing.gwt.ui.client.AbstractEntryPoint; -import com.sap.sailing.gwt.ui.shared.RaceWithCompetitorsDTO; import com.sap.sailing.gwt.ui.shared.RegattaDTO; public class DataMiningEntryPoint extends AbstractEntryPoint { + private SelectionPanel selectionPanel; + private IntegerBox numberOfQueriesBox; private Label benchmarkStatusLabel; private FlowPanel resultsPanel; private QueryBenchmarkResultsChart resultsChart; - - private ListDataProvider regattaNameDataProvider; - private ListDataProvider boatClassDataProvider; - private ListDataProvider raceNameDataProvider; - private ListDataProvider legNumberDataProvider; - private ListDataProvider legTypeDataProvider; - private ListDataProvider competitorNameDataProvider; - private ListDataProvider competitorSailIDDataProvider; - private ListDataProvider nationalityDataProvider; - - private MultiSelectionModel regattaNameSelectionModel; - private MultiSelectionModel boatClassSelectionModel; - private MultiSelectionModel raceNameSelectionModel; - private MultiSelectionModel legNumberSelectionModel; - private MultiSelectionModel legTypeSelectionModel; - private MultiSelectionModel competitorNameSelectionModel; - private MultiSelectionModel competitorSailIDSelectionModel; - private MultiSelectionModel nationalitySelectionModel; @Override protected void doOnModuleLoad() { @@ -64,7 +32,8 @@ public class DataMiningEntryPoint extends AbstractEntryPoint { FlowPanel dataMiningElementsPanel = new FlowPanel(); rootPanel.add(dataMiningElementsPanel); - dataMiningElementsPanel.add(createSelectionPanel()); + selectionPanel = new SelectionPanel(stringMessages, sailingService, this); + dataMiningElementsPanel.add(selectionPanel); dataMiningElementsPanel.add(createFunctionsPanel()); @@ -72,8 +41,6 @@ public class DataMiningEntryPoint extends AbstractEntryPoint { dataMiningElementsPanel.add(resultsPanel); resultsChart = new QueryBenchmarkResultsChart(); resultsPanel.add(resultsChart); - - fillSelectionPanel(); } private void runBenchmark() { @@ -87,7 +54,7 @@ public class DataMiningEntryPoint extends AbstractEntryPoint { @Override public void onSuccess(List regattas) { final int times = numberOfQueriesBox.getValue() == null ? 1 : numberOfQueriesBox.getValue(); - runQuery(new ClientQueryData(getSelection(), times, 1)); + runQuery(new ClientQueryData(selectionPanel.getSelection(), times, 1)); } }); } @@ -139,233 +106,5 @@ public class DataMiningEntryPoint extends AbstractEntryPoint { functionsPanel.add(benchmarkStatusLabel); return functionsPanel; } - - private Map> getSelection() { - Map> selection = new HashMap>(); - - if (!raceNameSelectionModel.getSelectedSet().isEmpty()) { - Collection regattaNames = new HashSet(); - for (RegattaDTO regatta : regattaNameSelectionModel.getSelectedSet()) { - regattaNames.add(regatta.getName()); - } - selection.put(Dimension.RegattaName, regattaNames); - } - - if (!boatClassSelectionModel.getSelectedSet().isEmpty()) { - Collection boatClassNames = new HashSet(); - for (BoatClassDTO boatClass : boatClassSelectionModel.getSelectedSet()) { - boatClassNames.add(boatClass.getName()); - } - selection.put(Dimension.BoatClassName, boatClassNames); - } - - if (!raceNameSelectionModel.getSelectedSet().isEmpty()) { - Collection raceNames = new HashSet(); - for (RaceDTO race : raceNameSelectionModel.getSelectedSet()) { - raceNames.add(race.getName()); - } - selection.put(Dimension.RaceName, raceNames); - } - - if (!legNumberSelectionModel.getSelectedSet().isEmpty()) { - Collection raceNames = new HashSet(legNumberSelectionModel.getSelectedSet()); - selection.put(Dimension.LegNumber, raceNames); - } - - if (!legTypeSelectionModel.getSelectedSet().isEmpty()) { - Collection legTypes = new HashSet(legTypeSelectionModel.getSelectedSet()); - selection.put(Dimension.LegType, legTypes); - } - - if (!competitorNameSelectionModel.getSelectedSet().isEmpty()) { - Collection competitorNames = new HashSet(); - for (CompetitorDTO competitor : competitorNameSelectionModel.getSelectedSet()) { - competitorNames.add(competitor.getName()); - } - selection.put(Dimension.CompetitorName, competitorNames); - } - - if (!competitorSailIDSelectionModel.getSelectedSet().isEmpty()) { - Collection sailIDs = new HashSet(); - for (CompetitorDTO competitor : competitorSailIDSelectionModel.getSelectedSet()) { - sailIDs.add(competitor.getSailID()); - } - selection.put(Dimension.SailID, sailIDs); - } - - if (!nationalitySelectionModel.getSelectedSet().isEmpty()) { - Collection nationalities = new HashSet(nationalitySelectionModel.getSelectedSet()); - selection.put(Dimension.Nationality, nationalities); - } - - return selection; - } - - private void fillSelectionPanel() { - sailingService.getRegattas(new AsyncCallback>() { - @Override - public void onFailure(Throwable caught) { - DataMiningEntryPoint.this.reportError("Error fetching the regattas from the server: " + caught.getMessage()); - } - @Override - public void onSuccess(List regattas) { - regattaNameDataProvider.getList().clear(); - regattaNameDataProvider.getList().addAll(regattas); - - Set boatClasses = new HashSet(); - Set races = new HashSet(); - Set competitors = new HashSet(); - Set nationalities = new HashSet(); - for (RegattaDTO regatta : regattas) { - if (regatta != null) { - boatClasses.add(regatta.boatClass); - for (RaceWithCompetitorsDTO race : regatta.races) { - if (race != null) { - races.add(race); - for (CompetitorDTO competitor : race.competitors) { - if (competitor != null) { - competitors.add(competitor); - nationalities.add(competitor.getThreeLetterIocCountryCode()); - } - } - } - } - } - } - - boatClassDataProvider.getList().clear(); - boatClassDataProvider.getList().addAll(boatClasses); - - raceNameDataProvider.getList().clear(); - raceNameDataProvider.getList().addAll(races); - - competitorNameDataProvider.getList().clear(); - competitorNameDataProvider.getList().addAll(competitors); - - competitorSailIDDataProvider.getList().clear(); - competitorSailIDDataProvider.getList().addAll(competitors); - - nationalityDataProvider.getList().clear(); - nationalityDataProvider.getList().addAll(nationalities); - } - }); - - legNumberDataProvider.getList().clear(); - legNumberDataProvider.getList().addAll(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); - - legTypeDataProvider.getList().clear(); - legTypeDataProvider.getList().addAll(Arrays.asList(LegType.values())); - } - - private HorizontalPanel createSelectionPanel() { - HorizontalPanel selectionPanel = new HorizontalPanel(); - selectionPanel.setSpacing(5); - - CellTable regattaNameTable = new CellTable(); - regattaNameTable.addColumn(new TextColumn() { - @Override - public String getValue(RegattaDTO regatta) { - return regatta.getName(); - } - }, "Regatta"); - regattaNameSelectionModel = new MultiSelectionModel(); - regattaNameTable.setSelectionModel(regattaNameSelectionModel); - regattaNameDataProvider = new ListDataProvider(); - regattaNameDataProvider.addDataDisplay(regattaNameTable); - selectionPanel.add(regattaNameTable); - - CellTable boatClassTable = new CellTable(); - boatClassTable.addColumn(new TextColumn() { - @Override - public String getValue(BoatClassDTO boatClass) { - return boatClass.getName(); - } - }, "Boat Class"); - boatClassSelectionModel = new MultiSelectionModel(); - boatClassTable.setSelectionModel(boatClassSelectionModel); - boatClassDataProvider = new ListDataProvider(); - boatClassDataProvider.addDataDisplay(boatClassTable); - selectionPanel.add(boatClassTable); - - CellTable raceNameTable = new CellTable(); - raceNameTable.addColumn(new TextColumn() { - @Override - public String getValue(RaceDTO race) { - return race.getName(); - } - }, "Race Name"); - raceNameSelectionModel = new MultiSelectionModel(); - raceNameTable.setSelectionModel(raceNameSelectionModel); - raceNameDataProvider = new ListDataProvider(); - raceNameDataProvider.addDataDisplay(raceNameTable); - selectionPanel.add(raceNameTable); - - CellTable legNumberTable = new CellTable(); - legNumberTable.addColumn(new TextColumn() { - @Override - public String getValue(Integer legNumber) { - return legNumber + ""; - } - }, "Leg Number"); - legNumberSelectionModel = new MultiSelectionModel(); - legNumberTable.setSelectionModel(legNumberSelectionModel); - legNumberDataProvider = new ListDataProvider(); - legNumberDataProvider.addDataDisplay(legNumberTable); - selectionPanel.add(legNumberTable); - - CellTable legTypeTable = new CellTable(); - legTypeTable.addColumn(new TextColumn() { - @Override - public String getValue(LegType legType) { - return legType.name(); - } - }, "Leg Type"); - legTypeSelectionModel = new MultiSelectionModel(); - legTypeTable.setSelectionModel(legTypeSelectionModel); - legTypeDataProvider = new ListDataProvider(); - legTypeDataProvider.addDataDisplay(legTypeTable); - selectionPanel.add(legTypeTable); - - CellTable competitorNameTable = new CellTable(); - competitorNameTable.addColumn(new TextColumn() { - @Override - public String getValue(CompetitorDTO competitor) { - return competitor.getName(); - } - }, "Competitor Name"); - competitorNameSelectionModel = new MultiSelectionModel(); - competitorNameTable.setSelectionModel(competitorNameSelectionModel); - competitorNameDataProvider = new ListDataProvider(); - competitorNameDataProvider.addDataDisplay(competitorNameTable); - selectionPanel.add(competitorNameTable); - - CellTable competitorSailIDTable = new CellTable(); - competitorSailIDTable.addColumn(new TextColumn() { - @Override - public String getValue(CompetitorDTO competitor) { - return competitor.getSailID(); - } - }, "Competitor Sail ID"); - competitorSailIDSelectionModel = new MultiSelectionModel(); - competitorSailIDTable.setSelectionModel(competitorSailIDSelectionModel); - competitorSailIDDataProvider = new ListDataProvider(); - competitorSailIDDataProvider.addDataDisplay(competitorSailIDTable); - selectionPanel.add(competitorSailIDTable); - - CellTable nationalityTable = new CellTable(); - nationalityTable.addColumn(new TextColumn() { - @Override - public String getValue(String nationality) { - return nationality; - } - }, "Nationality"); - nationalitySelectionModel = new MultiSelectionModel(); - nationalityTable.setSelectionModel(nationalitySelectionModel); - nationalityDataProvider = new ListDataProvider(); - nationalityDataProvider.addDataDisplay(nationalityTable); - selectionPanel.add(nationalityTable); - - return selectionPanel; - } } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/SelectionPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/SelectionPanel.java new file mode 100644 index 00000000000..78af8001c12 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/SelectionPanel.java @@ -0,0 +1,202 @@ +package com.sap.sailing.gwt.ui.datamining; + +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.sap.sailing.datamining.shared.Dimension; +import com.sap.sailing.domain.common.LegType; +import com.sap.sailing.domain.common.dto.BoatClassDTO; +import com.sap.sailing.domain.common.dto.CompetitorDTO; +import com.sap.sailing.domain.common.dto.RaceDTO; +import com.sap.sailing.gwt.ui.client.ErrorReporter; +import com.sap.sailing.gwt.ui.client.SailingServiceAsync; +import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.shared.RaceWithCompetitorsDTO; +import com.sap.sailing.gwt.ui.shared.RegattaDTO; + +public class SelectionPanel extends FlowPanel { + + private StringMessages stringMessages; + private SailingServiceAsync sailingService; + private ErrorReporter errorReporter; + + private Map> tablesMappedByDimension; + private SelectionTable regattaNameTable; + private SelectionTable boatClassTable; + private SelectionTable raceNameTable; + private SelectionTable legNumberTable; + private SelectionTable legTypeTable; + private SelectionTable competitorNameTable; + private SelectionTable competitorSailIDTable; + private SelectionTable nationalityTable; + + public SelectionPanel(StringMessages stringMessages, SailingServiceAsync sailingService, ErrorReporter errorReporter) { + super(); + + this.stringMessages = stringMessages; + this.sailingService = sailingService; + this.errorReporter = errorReporter; + + Button clearSelectionButton = new Button(this.stringMessages.clearSelection()); + clearSelectionButton.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + clearSelection(); + } + }); + add(clearSelectionButton); + + add(createSelectionTables()); + fillSelectionTables(); + } + + public Map> getSelection() { + Map> selection = new HashMap>(); + for (SelectionTable table : tablesMappedByDimension.values()) { + Collection specificSelection = table.getSelection(); + if (!specificSelection.isEmpty()) { + selection.put(table.getDimension(), specificSelection); + } + } + return selection; + } + + private void clearSelection() { + for (SelectionTable table : tablesMappedByDimension.values()) { + table.clearSelection(); + } + } + + private void fillSelectionTables() { + sailingService.getRegattas(new AsyncCallback>() { + @Override + public void onFailure(Throwable caught) { + errorReporter.reportError("Error fetching the regattas from the server: " + caught.getMessage()); + } + @Override + public void onSuccess(List regattas) { + Set boatClasses = new HashSet(); + Set races = new HashSet(); + Set competitors = new HashSet(); + Set nationalities = new HashSet(); + for (RegattaDTO regatta : regattas) { + if (regatta != null) { + boatClasses.add(regatta.boatClass); + for (RaceWithCompetitorsDTO race : regatta.races) { + if (race != null) { + races.add(race); + for (CompetitorDTO competitor : race.competitors) { + if (competitor != null) { + competitors.add(competitor); + nationalities.add(competitor.getThreeLetterIocCountryCode()); + } + } + } + } + } + } + + regattaNameTable.setContent(regattas); + boatClassTable.setContent(boatClasses); + raceNameTable.setContent(races); + legNumberTable.setContent(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); + legTypeTable.setContent(Arrays.asList(LegType.values())); + competitorNameTable.setContent(competitors); + competitorSailIDTable.setContent(competitors); + nationalityTable.setContent(nationalities); + } + }); + } + + private HorizontalPanel createSelectionTables() { + HorizontalPanel tablesPanel = new HorizontalPanel(); + tablesPanel.setSpacing(5); + tablesMappedByDimension = new HashMap>(); + + regattaNameTable = new SelectionTable(stringMessages.regatta(), Dimension.RegattaName) { + @Override + public String getValue(RegattaDTO regatta) { + return regatta.getName(); + } + }; + tablesPanel.add(regattaNameTable); + tablesMappedByDimension.put(Dimension.RegattaName, regattaNameTable); + + boatClassTable = new SelectionTable(stringMessages.boatClass(), Dimension.BoatClassName) { + @Override + public String getValue(BoatClassDTO boatClass) { + return boatClass.getName(); + } + }; + tablesPanel.add(boatClassTable); + tablesMappedByDimension.put(Dimension.BoatClassName, boatClassTable); + + raceNameTable = new SelectionTable(stringMessages.race(), Dimension.RaceName) { + @Override + public String getValue(RaceDTO race) { + return race.getName(); + } + }; + tablesPanel.add(raceNameTable); + tablesMappedByDimension.put(Dimension.RaceName, raceNameTable); + + legNumberTable = new SelectionTable(stringMessages.legLabel(), Dimension.LegNumber) { + @Override + public Integer getValue(Integer legNumber) { + return legNumber; + } + }; + tablesPanel.add(legNumberTable); + tablesMappedByDimension.put(Dimension.LegNumber, legNumberTable); + + legTypeTable = new SelectionTable(stringMessages.legType(), Dimension.LegType) { + @Override + public LegType getValue(LegType legType) { + return legType; + } + }; + tablesPanel.add(legTypeTable); + tablesMappedByDimension.put(Dimension.LegType, legTypeTable); + + competitorNameTable = new SelectionTable(stringMessages.competitor(), Dimension.CompetitorName) { + @Override + public String getValue(CompetitorDTO competitor) { + return competitor.getName(); + } + }; + tablesPanel.add(competitorNameTable); + tablesMappedByDimension.put(Dimension.CompetitorName, competitorNameTable); + + competitorSailIDTable = new SelectionTable(stringMessages.sailID(), Dimension.SailID) { + @Override + public String getValue(CompetitorDTO competitor) { + return competitor.getSailID(); + } + }; + tablesPanel.add(competitorSailIDTable); + tablesMappedByDimension.put(Dimension.SailID, competitorSailIDTable); + + nationalityTable = new SelectionTable(stringMessages.nationality(), Dimension.Nationality) { + @Override + public String getValue(String nationality) { + return nationality; + } + }; + tablesPanel.add(nationalityTable); + tablesMappedByDimension.put(Dimension.Nationality, nationalityTable); + + return tablesPanel; + } + +} 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 new file mode 100644 index 00000000000..e486b55d5b0 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/SelectionTable.java @@ -0,0 +1,64 @@ +package com.sap.sailing.gwt.ui.datamining; + +import java.util.Collection; +import java.util.HashSet; + +import com.google.gwt.user.cellview.client.CellTable; +import com.google.gwt.user.cellview.client.TextColumn; +import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.view.client.ListDataProvider; +import com.google.gwt.view.client.MultiSelectionModel; +import com.sap.sailing.datamining.shared.Dimension; + +public abstract class SelectionTable extends SimplePanel { + + private Dimension dimension; + + private CellTable table; + private MultiSelectionModel selectionModel; + private ListDataProvider dataProvider; + + public SelectionTable(String title, Dimension dimension) { + this.dimension = dimension; + table = new CellTable(); + table.addColumn(new TextColumn() { + @Override + public String getValue(ContentType content) { + return SelectionTable.this.getValueAsString(content); + } + }, title); + selectionModel = new MultiSelectionModel(); + table.setSelectionModel(selectionModel); + dataProvider = new ListDataProvider(); + dataProvider.addDataDisplay(table); + setWidget(table); + } + + public Dimension getDimension() { + return dimension; + } + + public void setContent(Collection content) { + dataProvider.getList().clear(); + dataProvider.getList().addAll(content); + } + + public Collection getSelection() { + Collection selectionAsValues = new HashSet(); + for (ContentType content : selectionModel.getSelectedSet()) { + selectionAsValues.add(getValue(content)); + } + return selectionAsValues; + } + + public void clearSelection() { + selectionModel.clear(); + } + + public abstract ValueType getValue(ContentType content); + + public String getValueAsString(ContentType content) { + return getValue(content).toString(); + } + +}