mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-21 03:30:12 +00:00
replaced EventSelectionModel
This commit is contained in:
1 parent
45b1a81869
commit
cfd8ded447
7 files changed
+49
-209
No files matched your search
+9
-40
@@ -33,7 +33,6 @@ import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.sap.sailing.gwt.ui.client.EntryPointLinkFactory;
|
||||
import com.sap.sailing.gwt.ui.client.EventSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.EventsRefresher;
|
||||
import com.sap.sailing.gwt.ui.client.LeaderboardGroupsDisplayer;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
@@ -48,7 +47,6 @@ import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.util.NaturalComparator;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.EntityIdentityComparator;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
|
||||
import com.sap.sse.gwt.client.panels.LabeledAbstractFilterablePanel;
|
||||
@@ -60,12 +58,11 @@ import com.sap.sse.gwt.client.panels.LabeledAbstractFilterablePanel;
|
||||
*/
|
||||
public class EventListComposite extends Composite implements EventsRefresher, LeaderboardGroupsDisplayer {
|
||||
private final SailingServiceAsync sailingService;
|
||||
private final EventSelectionProvider eventSelectionProvider;
|
||||
private final ErrorReporter errorReporter;
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
private CellTable<EventDTO> eventTable;
|
||||
private RefreshableMultiSelectionModel<EventDTO> eventSelectionModel;
|
||||
private RefreshableMultiSelectionModel<EventDTO> refreshableEventSelectionModel;
|
||||
private ListDataProvider<EventDTO> eventListDataProvider;
|
||||
private List<EventDTO> allEvents;
|
||||
private LabeledAbstractFilterablePanel<EventDTO> filterTextbox;
|
||||
@@ -93,10 +90,10 @@ public class EventListComposite extends Composite implements EventsRefresher, Le
|
||||
|
||||
private final AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class);
|
||||
|
||||
public EventListComposite(final SailingServiceAsync sailingService, final EventSelectionProvider eventSelectionProvider,
|
||||
public EventListComposite(final SailingServiceAsync sailingService, final RefreshableMultiSelectionModel<EventDTO> refreshableEventSelectionModel,
|
||||
final ErrorReporter errorReporter, final StringMessages stringMessages) {
|
||||
this.sailingService = sailingService;
|
||||
this.eventSelectionProvider = eventSelectionProvider;
|
||||
this.refreshableEventSelectionModel = refreshableEventSelectionModel;
|
||||
this.stringMessages = stringMessages;
|
||||
this.errorReporter = errorReporter;
|
||||
availableLeaderboardGroups = Collections.emptyList();
|
||||
@@ -134,7 +131,7 @@ public class EventListComposite extends Composite implements EventsRefresher, Le
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
if (Window.confirm(stringMessages.doYouReallyWantToRemoveEvents())) {
|
||||
removeEvents(eventSelectionModel.getSelectedSet());
|
||||
removeEvents(refreshableEventSelectionModel.getSelectedSet());
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -145,22 +142,11 @@ public class EventListComposite extends Composite implements EventsRefresher, Le
|
||||
eventTable.ensureDebugId("EventsCellTable");
|
||||
eventTable.setVisible(false);
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
RefreshableMultiSelectionModel<EventDTO> multiSelectionModel = (RefreshableMultiSelectionModel<EventDTO>) eventTable.getSelectionModel();
|
||||
eventSelectionModel = multiSelectionModel;
|
||||
|
||||
eventSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
this.refreshableEventSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
final boolean somethingSelected = !eventSelectionModel.getSelectedSet().isEmpty();
|
||||
final boolean somethingSelected = !refreshableEventSelectionModel.getSelectedSet().isEmpty();
|
||||
removeEventsButton.setEnabled(somethingSelected);
|
||||
|
||||
List<EventDTO> selectedEvents = getSelectedEvents();
|
||||
List<UUID> selectedEventUUIDs = new ArrayList<UUID>();
|
||||
for (EventDTO selectedEvent : selectedEvents) {
|
||||
selectedEventUUIDs.add(selectedEvent.id);
|
||||
}
|
||||
EventListComposite.this.eventSelectionProvider.setSelection(selectedEventUUIDs);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -198,14 +184,9 @@ public class EventListComposite extends Composite implements EventsRefresher, Le
|
||||
eventListDataProvider.addDataDisplay(table);
|
||||
table.setWidth("100%");
|
||||
|
||||
SelectionCheckboxColumn<EventDTO> eventSelectionCheckboxColumn = new SelectionCheckboxColumn<EventDTO>(tableRes.cellTableStyle().cellTableCheckboxSelected(),
|
||||
SelectionCheckboxColumn<EventDTO> eventSelectionCheckboxColumn = new SelectionCheckboxColumn<EventDTO>(refreshableEventSelectionModel, tableRes.cellTableStyle().cellTableCheckboxSelected(),
|
||||
tableRes.cellTableStyle().cellTableCheckboxDeselected(),
|
||||
tableRes.cellTableStyle().cellTableCheckboxColumnCell(), new EntityIdentityComparator<EventDTO>() {
|
||||
@Override
|
||||
public boolean representSameEntity(EventDTO dto1, EventDTO dto2) {
|
||||
return dto1.id.equals(dto2.id) ? true : false;
|
||||
}
|
||||
} /*entityIdentityComparator to create a RefreshableSelectionModel*/) {
|
||||
tableRes.cellTableStyle().cellTableCheckboxColumnCell()) {
|
||||
@Override
|
||||
protected ListDataProvider<EventDTO> getListDataProvider() {
|
||||
return eventListDataProvider;
|
||||
@@ -607,7 +588,7 @@ public class EventListComposite extends Composite implements EventsRefresher, Le
|
||||
eventTable.setVisible(true);
|
||||
noEventsLabel.setVisible(false);
|
||||
}
|
||||
eventSelectionModel.refreshSelectionModel(events);
|
||||
refreshableEventSelectionModel.refreshSelectionModel(events);
|
||||
allEvents.clear();
|
||||
allEvents.addAll(events);
|
||||
filterTextbox.updateAll(allEvents);
|
||||
@@ -618,16 +599,4 @@ public class EventListComposite extends Composite implements EventsRefresher, Le
|
||||
public List<EventDTO> getAllEvents() {
|
||||
return allEvents;
|
||||
}
|
||||
|
||||
private List<EventDTO> getSelectedEvents() {
|
||||
List<EventDTO> result = new ArrayList<EventDTO>();
|
||||
if (eventListDataProvider != null) {
|
||||
for (EventDTO Event : eventListDataProvider.getList()) {
|
||||
if (eventSelectionModel.isSelected(Event)) {
|
||||
result.add(Event);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+36
-29
@@ -1,14 +1,11 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import java.util.Set;
|
||||
import com.google.gwt.user.client.ui.CaptionPanel;
|
||||
import com.google.gwt.user.client.ui.SimplePanel;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.gwt.ui.client.EventSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.EventSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.EventSelectionProvider;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.sap.sailing.gwt.ui.client.EventsRefresher;
|
||||
import com.sap.sailing.gwt.ui.client.LeaderboardGroupsDisplayer;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
@@ -16,6 +13,8 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.EntityIdentityComparator;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||
|
||||
/**
|
||||
* Allows administrators to manage a sailing event.
|
||||
@@ -23,11 +22,11 @@ import com.sap.sse.gwt.client.ErrorReporter;
|
||||
* @author Frank Mittag (C5163974)
|
||||
* @author Axel Uhl (d043530)
|
||||
*/
|
||||
public class EventManagementPanel extends SimplePanel implements EventsRefresher, LeaderboardGroupsDisplayer, EventSelectionChangeListener {
|
||||
public class EventManagementPanel extends SimplePanel implements EventsRefresher, LeaderboardGroupsDisplayer {
|
||||
private EventListComposite eventListComposite;
|
||||
private EventDetailsComposite eventDetailsComposite;
|
||||
private final CaptionPanel eventsPanel;
|
||||
private EventSelectionProvider eventSelectionProvider;
|
||||
private final RefreshableMultiSelectionModel<EventDTO> refreshableEventSelectionModel;
|
||||
|
||||
public EventManagementPanel(final SailingServiceAsync sailingService, final ErrorReporter errorReporter,
|
||||
final StringMessages stringMessages) {
|
||||
@@ -40,10 +39,36 @@ public class EventManagementPanel extends SimplePanel implements EventsRefresher
|
||||
VerticalPanel eventsContentPanel = new VerticalPanel();
|
||||
eventsPanel.setContentWidget(eventsContentPanel);
|
||||
|
||||
eventSelectionProvider = new EventSelectionModel(true);
|
||||
eventSelectionProvider.addEventSelectionChangeListener(this);
|
||||
refreshableEventSelectionModel = new RefreshableMultiSelectionModel<>(new EntityIdentityComparator<EventDTO>() {
|
||||
|
||||
eventListComposite = new EventListComposite(sailingService, eventSelectionProvider, errorReporter, stringMessages);
|
||||
@Override
|
||||
public boolean representSameEntity(EventDTO dto1, EventDTO dto2) {
|
||||
return dto1.id.equals(dto2.id);
|
||||
}
|
||||
});
|
||||
|
||||
refreshableEventSelectionModel.addSelectionChangeHandler(new Handler() {
|
||||
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
final Set<EventDTO> selectedEvents = refreshableEventSelectionModel.getSelectedSet();
|
||||
if (selectedEvents.size() == 1 && eventListComposite.getAllEvents() != null) {
|
||||
final EventDTO selectedEvent = selectedEvents.iterator().next();
|
||||
for (EventDTO eventDTO : eventListComposite.getAllEvents()) {
|
||||
if (eventDTO.id.equals(selectedEvent.id)) {
|
||||
eventDetailsComposite.setEvent(eventDTO);
|
||||
eventDetailsComposite.setVisible(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
eventDetailsComposite.setEvent(null);
|
||||
eventDetailsComposite.setVisible(false);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
eventListComposite = new EventListComposite(sailingService, refreshableEventSelectionModel, errorReporter, stringMessages);
|
||||
eventListComposite.ensureDebugId("EventListComposite");
|
||||
eventsContentPanel.add(eventListComposite);
|
||||
|
||||
@@ -62,22 +87,4 @@ public class EventManagementPanel extends SimplePanel implements EventsRefresher
|
||||
public void fillLeaderboardGroups(Iterable<LeaderboardGroupDTO> leaderboardGroups) {
|
||||
eventListComposite.fillLeaderboardGroups(leaderboardGroups);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEventSelectionChange(List<UUID> selectedEvents) {
|
||||
final UUID selectedEventUUID;
|
||||
if (selectedEvents.size() == 1 && eventListComposite.getAllEvents() != null) {
|
||||
selectedEventUUID = selectedEvents.get(0);
|
||||
for (EventDTO eventDTO : eventListComposite.getAllEvents()) {
|
||||
if (eventDTO.id.equals(selectedEventUUID)) {
|
||||
eventDetailsComposite.setEvent(eventDTO);
|
||||
eventDetailsComposite.setVisible(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
eventDetailsComposite.setEvent(null);
|
||||
eventDetailsComposite.setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
-22
@@ -1,22 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
|
||||
/**
|
||||
* Allows UI components to observe a saling event selector, such as a drop-down box showing a list of sailing events
|
||||
*
|
||||
* @author Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public interface EventSelectionChangeListener {
|
||||
|
||||
/**
|
||||
* The first element is the first one selected
|
||||
*
|
||||
* @param selectedEvents a non-<code>null</code> list which is empty if nothing is selected
|
||||
*/
|
||||
void onEventSelectionChange(List<UUID> selectedEvents);
|
||||
|
||||
}
|
||||
-90
@@ -1,90 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class EventSelectionModel implements EventSelectionProvider {
|
||||
private final List<UUID> selection;
|
||||
private final List<UUID> allEvents;
|
||||
private final Set<EventSelectionChangeListener> listeners;
|
||||
private final boolean hasMultiSelection;
|
||||
|
||||
public EventSelectionModel(boolean hasMultiSelection) {
|
||||
this.hasMultiSelection = hasMultiSelection;
|
||||
this.selection = new ArrayList<UUID>();
|
||||
this.allEvents = new ArrayList<UUID>();
|
||||
listeners = new HashSet<EventSelectionChangeListener>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UUID> getSelectedEvents() {
|
||||
return Collections.unmodifiableList(selection);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addEventSelectionChangeListener(EventSelectionChangeListener listener) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeEventSelectionChangeListener(EventSelectionChangeListener listener) {
|
||||
listeners.remove(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSelection(List<UUID> newSelection, EventSelectionChangeListener... listenersNotToNotify) {
|
||||
boolean notify = !selection.equals(newSelection);
|
||||
selection.clear();
|
||||
selection.addAll(newSelection);
|
||||
if (notify) {
|
||||
notifyListeners(listenersNotToNotify);
|
||||
}
|
||||
}
|
||||
|
||||
private void notifyListeners(EventSelectionChangeListener[] listenersNotToNotify) {
|
||||
List<UUID> selectedEvents = getSelectedEvents();
|
||||
for (EventSelectionChangeListener listener : listeners) {
|
||||
if (listenersNotToNotify == null || !Arrays.asList(listenersNotToNotify).contains(listener)) {
|
||||
listener.onEventSelectionChange(selectedEvents);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the universe of all (sailing) events from which this selection model may select. An equal list will subsequently be
|
||||
* returned by {@link #getallEvents()}. Events from the {@link #getSelectedEvents() selection} not in
|
||||
* <code>newEvents</code> are removed from the selection. If this happens, the selection listeners are notified.
|
||||
*/
|
||||
@Override
|
||||
public void setAllEvents(List<UUID> newEvents, EventSelectionChangeListener... listenersNotToNotify) {
|
||||
allEvents.clear();
|
||||
for (UUID r : newEvents) {
|
||||
allEvents.add(r);
|
||||
}
|
||||
for (Iterator<UUID> i=selection.iterator(); i.hasNext(); ) {
|
||||
UUID selectedRegatta = i.next();
|
||||
if (!allEvents.contains(selectedRegatta)) {
|
||||
i.remove();
|
||||
}
|
||||
}
|
||||
// when setting all events, the actual EventDTOs will usually have changed their identity and maybe also their state;
|
||||
// so notifying the selection listeners is necessary anyhow
|
||||
notifyListeners(listenersNotToNotify);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UUID> getAllEvents() {
|
||||
return Collections.unmodifiableList(allEvents);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasMultiSelection() {
|
||||
return hasMultiSelection;
|
||||
}
|
||||
}
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public interface EventSelectionProvider {
|
||||
/**
|
||||
* @return a non-<code>null</code> list which may be empty
|
||||
*/
|
||||
List<UUID> getSelectedEvents();
|
||||
|
||||
void addEventSelectionChangeListener(EventSelectionChangeListener listener);
|
||||
|
||||
void removeEventSelectionChangeListener(EventSelectionChangeListener listener);
|
||||
|
||||
void setSelection(List<UUID> newSelection, EventSelectionChangeListener... listenersNotToNotify);
|
||||
|
||||
boolean hasMultiSelection();
|
||||
|
||||
/**
|
||||
* @return a non-<code>null</code> list which may be empty
|
||||
*/
|
||||
List<UUID> getAllEvents();
|
||||
|
||||
void setAllEvents(List<UUID> events, EventSelectionChangeListener... listenersNotToNotify);
|
||||
}
|
||||
+2
-1
@@ -44,7 +44,8 @@ public class RefreshableMultiSelectionModel<T> extends MultiSelectionModel<T> im
|
||||
}
|
||||
setSelected(it, isSelected);
|
||||
}
|
||||
scheduleSelectionChangeEvent();
|
||||
setEventScheduled(true);
|
||||
fireSelectionChangeEvent();
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -38,6 +38,7 @@ public class RefreshableSingleSelectionModel<T> extends SingleSelectionModel<T>
|
||||
}
|
||||
}
|
||||
}
|
||||
scheduleSelectionChangeEvent();
|
||||
setEventScheduled(true);
|
||||
fireSelectionChangeEvent();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user