mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-22 12:03:58 +00:00
revised the RefreshableSelectionModel
This commit is contained in:
1 parent
632364416e
commit
dcd2effc05
13 files changed
+59
-69
No files matched your search
+1
-1
@@ -267,7 +267,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement
|
||||
final CellTable<StrippedLeaderboardDTO> leaderboardTable, AdminConsoleTableResources tableResources,
|
||||
ListHandler<StrippedLeaderboardDTO> leaderboardColumnListHandler) {
|
||||
SelectionCheckboxColumn<StrippedLeaderboardDTO> selectionCheckboxColumn = new SelectionCheckboxColumn<StrippedLeaderboardDTO>(tableResources.cellTableStyle().cellTableCheckboxSelected(),
|
||||
tableResources.cellTableStyle().cellTableCheckboxDeselected(), tableResources.cellTableStyle().cellTableCheckboxColumnCell()) {
|
||||
tableResources.cellTableStyle().cellTableCheckboxDeselected(), tableResources.cellTableStyle().cellTableCheckboxColumnCell(), null /*entityIdentityComparator to create a RefreshableSelectionModel*/) {
|
||||
@Override
|
||||
protected ListDataProvider<StrippedLeaderboardDTO> getListDataProvider() {
|
||||
return leaderboardList;
|
||||
|
||||
+1
-1
@@ -104,7 +104,7 @@ public abstract class AbstractTrackedRacesListComposite extends SimplePanel impl
|
||||
protected void createUI() {
|
||||
AdminConsoleTableResources tableResources = GWT.create(AdminConsoleTableResources.class);
|
||||
this.selectionCheckboxColumn = new SelectionCheckboxColumn<RaceDTO>(tableResources.cellTableStyle().cellTableCheckboxSelected(),
|
||||
tableResources.cellTableStyle().cellTableCheckboxDeselected(), tableResources.cellTableStyle().cellTableCheckboxColumnCell()) {
|
||||
tableResources.cellTableStyle().cellTableCheckboxDeselected(), tableResources.cellTableStyle().cellTableCheckboxColumnCell(), null /*entityIdentityComparator to create a RefreshableSelectionModel*/) {
|
||||
@Override
|
||||
protected ListDataProvider<RaceDTO> getListDataProvider() {
|
||||
return raceList;
|
||||
|
||||
+7
-7
@@ -147,12 +147,6 @@ public class EventListComposite extends Composite implements EventsRefresher, Le
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
RefreshableMultiSelectionModel<EventDTO> multiSelectionModel = (RefreshableMultiSelectionModel<EventDTO>) eventTable.getSelectionModel();
|
||||
multiSelectionModel.setHasEqualIdentity(new EntityIdentityComparator<EventDTO>() {
|
||||
@Override
|
||||
public boolean representSameEntity(EventDTO dto1, EventDTO dto2) {
|
||||
return dto1.id.equals(dto2.id) ? true : false;
|
||||
}
|
||||
});
|
||||
eventSelectionModel = multiSelectionModel;
|
||||
|
||||
eventSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
@@ -205,7 +199,13 @@ public class EventListComposite extends Composite implements EventsRefresher, Le
|
||||
table.setWidth("100%");
|
||||
|
||||
SelectionCheckboxColumn<EventDTO> eventSelectionCheckboxColumn = new SelectionCheckboxColumn<EventDTO>(tableRes.cellTableStyle().cellTableCheckboxSelected(),
|
||||
tableRes.cellTableStyle().cellTableCheckboxDeselected(), tableRes.cellTableStyle().cellTableCheckboxColumnCell()) {
|
||||
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*/) {
|
||||
@Override
|
||||
protected ListDataProvider<EventDTO> getListDataProvider() {
|
||||
return eventListDataProvider;
|
||||
|
||||
+2
-2
@@ -192,7 +192,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
|
||||
leaderboardsTable.ensureDebugId("LeaderboardsCellTable");
|
||||
SelectionCheckboxColumn<StrippedLeaderboardDTO> leaderboardTableSelectionColumn =
|
||||
new SelectionCheckboxColumn<StrippedLeaderboardDTO>(
|
||||
tableResources.cellTableStyle().cellTableCheckboxSelected(), tableResources.cellTableStyle().cellTableCheckboxDeselected(), tableResources.cellTableStyle().cellTableCheckboxColumnCell()) {
|
||||
tableResources.cellTableStyle().cellTableCheckboxSelected(), tableResources.cellTableStyle().cellTableCheckboxDeselected(), tableResources.cellTableStyle().cellTableCheckboxColumnCell(), null /*entityIdentityComparator to create a RefreshableSelectionModel*/) {
|
||||
@Override
|
||||
protected ListDataProvider<StrippedLeaderboardDTO> getListDataProvider() {
|
||||
return leaderboardsProvider;
|
||||
@@ -365,7 +365,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
|
||||
groupDetailsProvider.addDataDisplay(groupDetailsTable);
|
||||
SelectionCheckboxColumn<StrippedLeaderboardDTO> groupDetailsTableSelectionColumn =
|
||||
new SelectionCheckboxColumn<StrippedLeaderboardDTO>(
|
||||
tableResources.cellTableStyle().cellTableCheckboxSelected(), tableResources.cellTableStyle().cellTableCheckboxDeselected(), tableResources.cellTableStyle().cellTableCheckboxColumnCell()) {
|
||||
tableResources.cellTableStyle().cellTableCheckboxSelected(), tableResources.cellTableStyle().cellTableCheckboxDeselected(), tableResources.cellTableStyle().cellTableCheckboxColumnCell(), null /*entityIdentityComparator to create a RefreshableSelectionModel*/) {
|
||||
@Override
|
||||
protected ListDataProvider<StrippedLeaderboardDTO> getListDataProvider() {
|
||||
return groupDetailsProvider;
|
||||
|
||||
+1
-1
@@ -147,7 +147,7 @@ public class RegattaListComposite extends Composite implements RegattasDisplayer
|
||||
table.setWidth("100%");
|
||||
|
||||
SelectionCheckboxColumn<RegattaDTO> regattaSelectionCheckboxColumn = new SelectionCheckboxColumn<RegattaDTO>(tableRes.cellTableStyle().cellTableCheckboxSelected(),
|
||||
tableRes.cellTableStyle().cellTableCheckboxDeselected(), tableRes.cellTableStyle().cellTableCheckboxColumnCell()) {
|
||||
tableRes.cellTableStyle().cellTableCheckboxDeselected(), tableRes.cellTableStyle().cellTableCheckboxColumnCell(), null /*entityIdentityComparator to create a RefreshableSelectionModel*/) {
|
||||
@Override
|
||||
protected ListDataProvider<RegattaDTO> getListDataProvider() {
|
||||
return regattaListDataProvider;
|
||||
|
||||
+1
-1
@@ -42,7 +42,7 @@ public class StructureImportListComposite extends RegattaListComposite implement
|
||||
|
||||
this.selectionCheckboxColumn = new SelectionCheckboxColumn<RegattaDTO>(tableRes.cellTableStyle()
|
||||
.cellTableCheckboxSelected(), tableRes.cellTableStyle().cellTableCheckboxDeselected(),
|
||||
tableRes.cellTableStyle().cellTableCheckboxColumnCell()) {
|
||||
tableRes.cellTableStyle().cellTableCheckboxColumnCell(), null /*entityIdentityComparator to create a RefreshableSelectionModel*/) {
|
||||
@Override
|
||||
protected ListDataProvider<RegattaDTO> getListDataProvider() {
|
||||
return regattaListDataProvider;
|
||||
|
||||
+1
-1
@@ -49,7 +49,7 @@ public abstract class TableWrapper<T, S extends SelectionModel<T>> implements Is
|
||||
SelectionCheckboxColumn<T> selectionCheckboxColumn = new SelectionCheckboxColumn<T>(
|
||||
tableRes.cellTableStyle().cellTableCheckboxSelected(),
|
||||
tableRes.cellTableStyle().cellTableCheckboxDeselected(),
|
||||
tableRes.cellTableStyle().cellTableCheckboxColumnCell()) {
|
||||
tableRes.cellTableStyle().cellTableCheckboxColumnCell(), null /*entityIdentityComparator to create a RefreshableSelectionModel*/) {
|
||||
@Override
|
||||
protected ListDataProvider<T> getListDataProvider() {
|
||||
return dataProvider;
|
||||
|
||||
+1
-1
@@ -359,7 +359,7 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel {
|
||||
raceVisibilityColumn.setSortable(true);
|
||||
|
||||
SelectionCheckboxColumn<TracTracRaceRecordDTO> selectionCheckboxColumn = new SelectionCheckboxColumn<TracTracRaceRecordDTO>(tableResources.cellTableStyle().cellTableCheckboxSelected(),
|
||||
tableResources.cellTableStyle().cellTableCheckboxDeselected(), tableResources.cellTableStyle().cellTableCheckboxColumnCell()) {
|
||||
tableResources.cellTableStyle().cellTableCheckboxDeselected(), tableResources.cellTableStyle().cellTableCheckboxColumnCell(), null /*entityIdentityComparator to create a RefreshableSelectionModel*/) {
|
||||
@Override
|
||||
public Boolean getValue(TracTracRaceRecordDTO row) {
|
||||
return racesTable.getSelectionModel().isSelected(row);
|
||||
|
||||
+9
-6
@@ -19,6 +19,7 @@ import com.sap.sailing.domain.common.InvertibleComparator;
|
||||
import com.sap.sailing.domain.common.SortingOrder;
|
||||
import com.sap.sailing.domain.common.dto.LeaderboardRowDTO;
|
||||
import com.sap.sailing.domain.common.impl.InvertibleComparatorAdapter;
|
||||
import com.sap.sse.gwt.client.celltable.EntityIdentityComparator;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||
|
||||
/**
|
||||
@@ -56,18 +57,20 @@ public abstract class SelectionCheckboxColumn<T> extends AbstractSortableColumnW
|
||||
* CSS class for the <code><div></code> element representing a deselected element
|
||||
* @param checkboxColumnCellCSSClass
|
||||
* CSS class for the <code><td></code> element rendering the cell
|
||||
* @param entityIdentityComparator
|
||||
* {@link EntityIdentityComparator} to create a {@link RefreshableMultiSelectionModel}.
|
||||
*/
|
||||
protected SelectionCheckboxColumn(String selectedCheckboxCSSClass,
|
||||
String deselectedCheckboxCSSClass, String checkboxColumnCellCSSClass) {
|
||||
this(new BetterCheckboxCell(selectedCheckboxCSSClass, deselectedCheckboxCSSClass), checkboxColumnCellCSSClass);
|
||||
String deselectedCheckboxCSSClass, String checkboxColumnCellCSSClass, EntityIdentityComparator<T> entityIdentityComparator) {
|
||||
this(new BetterCheckboxCell(selectedCheckboxCSSClass, deselectedCheckboxCSSClass), checkboxColumnCellCSSClass, entityIdentityComparator);
|
||||
}
|
||||
|
||||
private SelectionCheckboxColumn(BetterCheckboxCell checkboxCell, String checkboxColumnCellCSSClass) {
|
||||
private SelectionCheckboxColumn(BetterCheckboxCell checkboxCell, String checkboxColumnCellCSSClass, EntityIdentityComparator<T> entityIdentityComparator) {
|
||||
super(checkboxCell, SortingOrder.DESCENDING);
|
||||
this.cell = checkboxCell;
|
||||
this.checkboxColumnCellCSSClass = checkboxColumnCellCSSClass;
|
||||
this.selectionEventTranslator = createSelectionEventTranslator();
|
||||
this.selectionModel = createSelectionModel();
|
||||
this.selectionModel = createSelectionModel(entityIdentityComparator);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -96,8 +99,8 @@ public abstract class SelectionCheckboxColumn<T> extends AbstractSortableColumnW
|
||||
* Otherwise, clients or subclasses are responsible to issue the necessary calls to {@link #redrawRow(LeaderboardRowDTO, List)}
|
||||
* after selection changes.
|
||||
*/
|
||||
private RefreshableMultiSelectionModel<T> createSelectionModel() {
|
||||
return new RefreshableMultiSelectionModel<T>() {
|
||||
private RefreshableMultiSelectionModel<T> createSelectionModel(final EntityIdentityComparator<T> entityIdentityComparator) {
|
||||
return new RefreshableMultiSelectionModel<T>(entityIdentityComparator) {
|
||||
@Override
|
||||
public void clear() {
|
||||
super.clear();
|
||||
|
||||
+1
-1
@@ -1593,7 +1593,7 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS
|
||||
private class LeaderboardSelectionCheckboxColumn extends com.sap.sailing.gwt.ui.client.shared.controls.SelectionCheckboxColumn<LeaderboardRowDTO>
|
||||
implements CompetitorSelectionChangeListener {
|
||||
protected LeaderboardSelectionCheckboxColumn(final CompetitorSelectionProvider competitorSelectionProvider) {
|
||||
super(tableResources.cellTableStyle().cellTableCheckboxSelected(), tableResources.cellTableStyle().cellTableCheckboxDeselected(), tableResources.cellTableStyle().cellTableCheckboxColumnCell());
|
||||
super(tableResources.cellTableStyle().cellTableCheckboxSelected(), tableResources.cellTableStyle().cellTableCheckboxDeselected(), tableResources.cellTableStyle().cellTableCheckboxColumnCell(), null /*entityIdentityComparator to create a RefreshableSelectionModel*/);
|
||||
competitorSelectionProvider.addCompetitorSelectionChangeListener(this);
|
||||
}
|
||||
|
||||
|
||||
+11
-26
@@ -1,5 +1,6 @@
|
||||
package com.sap.sse.gwt.client.celltable;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
@@ -28,36 +29,20 @@ public class RefreshableMultiSelectionModel<T> extends MultiSelectionModel<T> im
|
||||
return comp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHasEqualIdentity(EntityIdentityComparator<T> comp) {
|
||||
this.comp = comp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refreshSelectionModel(Iterable<T> newObjects) {
|
||||
Set<T> selectedSet = getSelectedSet();
|
||||
EntityIdentityComparator<T> comp = getEntityIdentityComparator();
|
||||
final Set<T> selectedSet = new HashSet<>(getSelectedSet());
|
||||
final boolean isSelected = !selectedSet.isEmpty();
|
||||
clear();
|
||||
if (comp != null) {
|
||||
for (T it : newObjects) {
|
||||
for (T selected : selectedSet) {
|
||||
if (comp.representSameEntity(selected, it)) {
|
||||
setSelected(it, true);
|
||||
} else {
|
||||
setSelected(it, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (T it : newObjects) {
|
||||
for (T selected : selectedSet) {
|
||||
if (selected.equals(it)) {
|
||||
setSelected(it, true);
|
||||
} else {
|
||||
setSelected(it, false);
|
||||
}
|
||||
for (final T it : newObjects) {
|
||||
if (isSelected) {
|
||||
for (final T selected : selectedSet) {
|
||||
setSelected(it, comp == null ? selected.equals(it) : comp.representSameEntity(selected, it));
|
||||
}
|
||||
} else {
|
||||
setSelected(it, false);
|
||||
}
|
||||
}
|
||||
scheduleSelectionChangeEvent();
|
||||
}
|
||||
}
|
||||
}
|
||||
+15
-11
@@ -2,6 +2,16 @@ package com.sap.sse.gwt.client.celltable;
|
||||
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SetSelectionModel;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
|
||||
/**
|
||||
* The Interface {@link RefreshableSelectionModel} unify the refresh behavior of SelectionModels e.g. of a
|
||||
* {@link SingleSelectionModel}. To refresh this SelectionModel you can call the
|
||||
* {@link RefreshableSelectionModel#refreshSelectionModel(Iterable)} method and this method will refresh the
|
||||
* SelectionModel.
|
||||
*
|
||||
* @author D064976
|
||||
*/
|
||||
|
||||
public interface RefreshableSelectionModel<T> extends SetSelectionModel<T> {
|
||||
/**
|
||||
@@ -10,15 +20,6 @@ public interface RefreshableSelectionModel<T> extends SetSelectionModel<T> {
|
||||
*/
|
||||
public EntityIdentityComparator<T> getEntityIdentityComparator();
|
||||
|
||||
/**
|
||||
* Sets the {@link EntityIdentityComparator} field, to compare objects from the type <code><T></code>.
|
||||
*
|
||||
* @param comp
|
||||
* When you set <code>null</code>, the <code>T.eqauls()</code> will be used.
|
||||
*/
|
||||
// TODO remove this setter and pass the comparator to the constructor of the implementing class(es)
|
||||
public void setHasEqualIdentity(EntityIdentityComparator<T> comp);
|
||||
|
||||
/**
|
||||
* Refreshes the {@link RefreshableSelectionModel} with the <code>newObjects</code>. All objects from the current
|
||||
* selection that {@link EntityIdentityComparator#representSameEntity(Object, Object) represent the same entity} as
|
||||
@@ -26,9 +27,12 @@ public interface RefreshableSelectionModel<T> extends SetSelectionModel<T> {
|
||||
* has no {@link EntityIdentityComparator} set, this method will use the {@link #equals(Object)} method to compare.
|
||||
* <p>
|
||||
*
|
||||
* TODO what happens with objects that were in the selection but are not in newObjects?
|
||||
* TODO what about triggering an {@link SelectionChangeEvent.Handler#onSelectionChange(SelectionChangeEvent)}, e.g., using {@link AbstractSelectionModel#scheduleSelectionChangeEvent}
|
||||
* If an selected object is not in the <code>newObjects</code> the object wouldn't be selected anymore.
|
||||
* <p>
|
||||
*
|
||||
* When the selection is refreshed this method triggers a
|
||||
* {@link SelectionChangeEvent.Handler#onSelectionChange(SelectionChangeEvent) onSelectionChangedEvent} using
|
||||
* {@link AbstractSelectionModel#scheduleSelectionChangeEvent}.
|
||||
*/
|
||||
public void refreshSelectionModel(Iterable<T> newObjects);
|
||||
}
|
||||
+8
-10
@@ -1,5 +1,6 @@
|
||||
package com.sap.sse.gwt.client.celltable;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.gwt.view.client.ProvidesKey;
|
||||
@@ -28,21 +29,18 @@ public class RefreshableSingleSelectionModel<T> extends SingleSelectionModel<T>
|
||||
return comp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHasEqualIdentity(EntityIdentityComparator<T> comp) {
|
||||
this.comp = comp;
|
||||
// TODO remove
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refreshSelectionModel(Iterable<T> newObjects) {
|
||||
final Set<T> selectedSet = getSelectedSet();
|
||||
final EntityIdentityComparator<T> comp = getEntityIdentityComparator();
|
||||
final Set<T> selectedSet = new HashSet<>(getSelectedSet());
|
||||
final T selected = selectedSet.isEmpty() ? null : selectedSet.iterator().next();
|
||||
clear();
|
||||
for (final T it : newObjects) {
|
||||
for (final T selected : selectedSet) {
|
||||
if (selected != null) {
|
||||
setSelected(it, comp == null ? selected.equals(it) : comp.representSameEntity(selected, it));
|
||||
} else {
|
||||
setSelected(it, false);
|
||||
}
|
||||
}
|
||||
scheduleSelectionChangeEvent();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user