replaced EventSelectionModel

This commit is contained in:
Lukas Furmanek committed 2015-11-26 08:40:14 +01:00
1 parent 45b1a81869
commit cfd8ded447
7 files changed
+49 -209

No files matched your search

@@ -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;
}
}
@@ -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);
}
}
}
@@ -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);
}
@@ -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;
}
}
@@ -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);
}
@@ -44,7 +44,8 @@ public class RefreshableMultiSelectionModel<T> extends MultiSelectionModel<T> im
}
setSelected(it, isSelected);
}
scheduleSelectionChangeEvent();
setEventScheduled(true);
fireSelectionChangeEvent();
}
}
}
@@ -38,6 +38,7 @@ public class RefreshableSingleSelectionModel<T> extends SingleSelectionModel<T>
}
}
}
scheduleSelectionChangeEvent();
setEventScheduled(true);
fireSelectionChangeEvent();
}
}