diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/EventDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/EventDTO.java index 2f8903dc871..2b3fb88cec7 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/EventDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/EventDTO.java @@ -78,4 +78,36 @@ public class EventDTO extends NamedDTO implements IsSerializable { return tracked; } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((competitors == null) ? 0 : competitors.hashCode()); + result = prime * result + ((locations == null) ? 0 : locations.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + EventDTO other = (EventDTO) obj; + if (competitors == null) { + if (other.competitors != null) + return false; + } else if (!competitors.equals(other.competitors)) + return false; + if (locations == null) { + if (other.locations != null) + return false; + } else if (!locations.equals(other.locations)) + return false; + return true; + } + } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/NamedDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/NamedDTO.java index 597fe22fe3a..95a07470daa 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/NamedDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/NamedDTO.java @@ -15,5 +15,30 @@ public class NamedDTO implements IsSerializable { public String toString() { return name; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + NamedDTO other = (NamedDTO) obj; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/OverviewEventPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/OverviewEventPanel.java index 8f061dae5ee..09248d052ee 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/OverviewEventPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/OverviewEventPanel.java @@ -55,7 +55,7 @@ public class OverviewEventPanel extends AbstractEventPanel { private Button btnShowLeaderboards; private CellTable eventTable; private ListDataProvider eventTableProvider; - private SingleSelectionModel eventSelectionModel; + private SingleSelectionModel eventTableSelectionModel; private CaptionPanel captionPanelLeaderboards; @@ -132,11 +132,11 @@ public class OverviewEventPanel extends AbstractEventPanel { }); panelSearch.add(textBoxUntil); - // Build events GUI HorizontalPanel listsSplitPanel = new HorizontalPanel(); mainPanel.add(listsSplitPanel); listsSplitPanel.setWidth("100%"); + // Build events GUI captionPanelEvents = new CaptionPanel(stringConstants.events()); captionPanelEvents.setWidth("100%"); listsSplitPanel.add(captionPanelEvents); @@ -150,13 +150,22 @@ public class OverviewEventPanel extends AbstractEventPanel { functionPanelEvents.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); functionPanelEvents.setSpacing(5); eventsPanel.add(functionPanelEvents); + + Button btnRefreshEventList = new Button(stringConstants.refresh()); + btnRefreshEventList.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + refreshEventsTable(); + } + }); + functionPanelEvents.add(btnRefreshEventList); btnShowLeaderboards = new Button(">"); btnShowLeaderboards.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent c) { - if (eventSelectionModel.getSelectedObject() != null) { - captionPanelLeaderboards.setVisible(true); + if (eventTableSelectionModel.getSelectedObject() != null) { + setLeaderboardsPanelVisible(true); } else { Window.alert(stringConstants.noEventSelected()); } @@ -208,9 +217,9 @@ public class OverviewEventPanel extends AbstractEventPanel { eventTable.addColumnSortHandler(eventSortHandler); //Adding the selection model - eventSelectionModel = new SingleSelectionModel(); - eventTable.setSelectionModel(eventSelectionModel); - eventSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { + eventTableSelectionModel = new SingleSelectionModel(); + eventTable.setSelectionModel(eventTableSelectionModel); + eventTableSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { eventSelectionChanged(event); @@ -223,7 +232,7 @@ public class OverviewEventPanel extends AbstractEventPanel { // Build leaderboards GUI captionPanelLeaderboards = new CaptionPanel(stringConstants.leaderboards()); captionPanelLeaderboards.setVisible(false); - captionPanelLeaderboards.setWidth("95%"); + captionPanelLeaderboards.setWidth("100%"); listsSplitPanel.add(captionPanelLeaderboards); VerticalPanel leaderboardsPanel = new VerticalPanel(); @@ -240,15 +249,22 @@ public class OverviewEventPanel extends AbstractEventPanel { @Override public void onClick(ClickEvent event) { - captionPanelLeaderboards.setVisible(false); + setLeaderboardsPanelVisible(false); } }); functionPanelLeaderboards.add(btnHideLeaderboards); // Create leaderboard list // TODO - - loadEvents(); + + Runnable displayEvents = new Runnable() { + @Override + public void run() { + eventTableProvider.getList().clear(); + eventTableProvider.getList().addAll(availableEvents); + } + }; + loadEvents(displayEvents); //Set checkbox as true, because we can't search for old events right now //TODO Remove after searching for old events is possible @@ -267,8 +283,6 @@ public class OverviewEventPanel extends AbstractEventPanel { } else { availableEvents.clear(); } - eventTableProvider.getList().clear(); - eventTableProvider.getList().addAll(availableEvents); if (actionAfterLoading != null) { actionAfterLoading.run(); } @@ -284,16 +298,71 @@ public class OverviewEventPanel extends AbstractEventPanel { loadEvents(null); } - protected void eventSelectionChanged(SelectionChangeEvent event) { + private void refreshEventsTable() { + final EventDTO selectedEvent = eventTableSelectionModel.getSelectedObject(); + + //Clear Search criteria + textBoxLocation.setText(""); + textBoxName.setText(""); + textBoxFrom.setText(""); + textBoxUntil.setText(""); + //TODO Switch the value of checkBoxLive to false, as soon as searching for old events is possible + checkBoxLive.setValue(true); + + //Load all available events and reselect the event + Runnable displayAndReselect = new Runnable() { + @Override + public void run() { + eventTableProvider.getList().clear(); + eventTableProvider.getList().addAll(availableEvents); + //Now sort again according to selected criterion + ColumnSortEvent.fire(eventTable, eventTable.getColumnSortList()); + //Reselect the event + if (selectedEvent != null) { + for (EventDTO event : eventTableProvider.getList()) { + if (event.equals(selectedEvent)) { + eventTableSelectionModel.setSelected(selectedEvent, true); + break; + } + } + } + } + }; + loadEvents(displayAndReselect); + //Now sort again according to selected criterion + ColumnSortEvent.fire(eventTable, eventTable.getColumnSortList()); + } + + private void setLeaderboardsPanelVisible(boolean visible) { + captionPanelLeaderboards.setVisible(visible); + captionPanelEvents.setWidth(visible ? "95%" : "100%"); + btnShowLeaderboards.setEnabled(!visible); + } + + private void eventSelectionChanged(SelectionChangeEvent event) { // TODO Actions when the event selection changed + EventDTO selectedEvent = eventTableSelectionModel.getSelectedObject(); + if (selectedEvent != null) { + setLeaderboardsPanelVisible(true); + //TODO Display data in leaderboard list + } else { + setLeaderboardsPanelVisible(false); + btnShowLeaderboards.setEnabled(false); + } } private void onCheckBoxLiveChange() { if (checkBoxLive.getValue()) { + String today = DateTimeFormat.getFormat("dd.MM.yyyy").format(new Date()).toString(); + + textBoxFrom.setText(today); textBoxFrom.setEnabled(false); + textBoxUntil.setText(today); textBoxUntil.setEnabled(false); } else { + textBoxFrom.setText(""); textBoxFrom.setEnabled(true); + textBoxUntil.setText(""); textBoxUntil.setEnabled(true); } onSearchCriteriaChange(); @@ -310,7 +379,7 @@ public class OverviewEventPanel extends AbstractEventPanel { from = DateTimeFormat.getFormat("dd.MM.yyyy").parse(textBoxFrom.getText()); until = DateTimeFormat.getFormat("dd.MM.yyyy").parse(textBoxUntil.getText()); //Adding 24 hours to until, so that it doesn't result in an empty table if 'from' and 'until' are equal. - //Instead you would have a 24 hour range + //Instead you'll have a 24 hour range long time = until.getTime() + 24 * 60 * 60 * 1000; until = new Date(time); } catch (IllegalArgumentException e) {} @@ -321,7 +390,7 @@ public class OverviewEventPanel extends AbstractEventPanel { eventTableProvider.getList().add(event); } } - // now sort again according to selected criterion + //Now sort again according to selected criterion ColumnSortEvent.fire(eventTable, eventTable.getColumnSortList()); } @@ -353,7 +422,7 @@ public class OverviewEventPanel extends AbstractEventPanel { private ListHandler getEventSortHandler(List list, TextColumn locationColumn, TextColumn nameColumn, TextColumn startDateColumn) { - //TODO Check if comparators are correct + ListHandler sortHandler = new ListHandler(list); sortHandler.setComparator(locationColumn, new Comparator() { @Override