newSelectionModel: made RefreshableSelectionModels a Listener of

ListDataProvider
This commit is contained in:
Lukas Furmanek committed 2015-12-03 14:19:47 +01:00
1 parent 707e7bfbbd
commit cd77f71f88
2 files changed
+217 -23

No files matched your search

@@ -1,33 +1,62 @@
package com.sap.sse.gwt.client.celltable;
import java.util.List;
import java.util.Set;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.view.client.HasData;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.MultiSelectionModel;
import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.Range;
import com.google.gwt.view.client.RangeChangeEvent.Handler;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionModel;
/**
* TODO Lukas: Add Javadoc
*
* This {@link RefreshableMultiSelectionModel} have the property that it is refreshable. That means if the
* {@link CellTable} have new Elements you can call
* {@link RefreshableMultiSelectionModel#refreshSelectionModel(Iterable) refreshSelectionModel(Iterable)} and the
* elements with {@link EntityIdentityComparator#representSameEntity(Object, Object) the same identity} will be reselected.
*
* @param <T>
* the type of {@link CellTable} entries
*/
public class RefreshableMultiSelectionModel<T> extends MultiSelectionModel<T> implements RefreshableSelectionModel<T> {
public class RefreshableMultiSelectionModel<T> extends MultiSelectionModel<T> implements RefreshableSelectionModel<T>, HasData<T> {
private final EntityIdentityComparator<T> comp;
private final ListDataProvider<T> provider;
/**
* TODO Lukas: Add Javadoc
* @param comp
* {@link EntityIdentityComparator} to compare the identity of the objects
* @param provider
* {@link ListDataProvider} to register this as listener and get the entries
*/
public RefreshableMultiSelectionModel(EntityIdentityComparator<T> comp) {
public RefreshableMultiSelectionModel(EntityIdentityComparator<T> comp, ListDataProvider<T> provider) {
super();
this.comp = comp;
this.provider = provider;
if (this.provider != null) {
this.provider.addDataDisplay(this);
}
}
/**
* TODO Lukas: Add Javadoc
* @param keyProvider
* {@link ProvidesKey} for the super class constructor
* @param comp
* {@link EntityIdentityComparator} to compare the identity of the objects
* @param provider
* {@link ListDataProvider} to register this as listener and get the entries
*/
public RefreshableMultiSelectionModel(ProvidesKey<T> keyProvider, EntityIdentityComparator<T> comp) {
public RefreshableMultiSelectionModel(ProvidesKey<T> keyProvider, EntityIdentityComparator<T> comp, ListDataProvider<T> provider) {
super(keyProvider);
this.comp = comp;
this.provider = provider;
if (this.provider != null) {
this.provider.addDataDisplay(this);
}
}
@Override
@@ -84,4 +113,78 @@ public class RefreshableMultiSelectionModel<T> extends MultiSelectionModel<T> im
SelectionChangeEvent.fire(this);
}
}
@Override
public void setRowData(int start, List<? extends T> values) {
refreshSelectionModel(provider.getList());
}
@Override
public int getRowCount() {
return Integer.MAX_VALUE;
}
@Override
public Range getVisibleRange() {
return new Range(0, Integer.MAX_VALUE);
}
@Override
public int getVisibleItemCount() {
return Integer.MAX_VALUE;
}
@Override
public HandlerRegistration addRangeChangeHandler(Handler handler) {
return null;
}
@Override
public HandlerRegistration addRowCountChangeHandler(
com.google.gwt.view.client.RowCountChangeEvent.Handler handler) {
return null;
}
@Override
public boolean isRowCountExact() {
return false;
}
@Override
public void setRowCount(int count) {
return;
}
@Override
public void setRowCount(int count, boolean isExact) {
return;
}
@Override
public void setVisibleRange(int start, int length) {
return;
}
@Override
public void setVisibleRange(Range range) {
return;
}
@Override
public HandlerRegistration addCellPreviewHandler(com.google.gwt.view.client.CellPreviewEvent.Handler<T> handler) {
return null;
}
@Override
public SelectionModel<? super T> getSelectionModel() {
return null;
}
@Override
public T getVisibleItem(int indexOnPage) {
return null;
}
@Override
public Iterable<T> getVisibleItems() {
return null;
}
@Override
public void setSelectionModel(SelectionModel<? super T> selectionModel) {
return;
}
@Override
public void setVisibleRangeAndClearData(Range range, boolean forceRangeChangeEvent) {
clear();
}
}
@@ -1,30 +1,55 @@
package com.sap.sse.gwt.client.celltable;
import java.util.Set;
import java.util.List;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.view.client.HasData;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.Range;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionModel;
import com.google.gwt.view.client.SingleSelectionModel;
import com.google.gwt.view.client.RangeChangeEvent.Handler;
/**
* TODO Lukas: Add Javadoc
*/
public class RefreshableSingleSelectionModel<T> extends SingleSelectionModel<T> implements RefreshableSelectionModel<T> {
public class RefreshableSingleSelectionModel<T> extends SingleSelectionModel<T> implements RefreshableSelectionModel<T>, HasData<T> {
private final EntityIdentityComparator<T> comp;
private final ListDataProvider<T> provider;
/**
* TODO Lukas: Add Javadoc
* @param comp
* {@link EntityIdentityComparator} to compare the identity of the objects
* @param provider
* {@link ListDataProvider} to register this as listener and get the entries
*/
public RefreshableSingleSelectionModel(EntityIdentityComparator<T> comp) {
public RefreshableSingleSelectionModel(EntityIdentityComparator<T> comp, ListDataProvider<T> provider) {
super();
this.comp=comp;
this.provider = provider;
if (this.provider != null) {
this.provider.addDataDisplay(this);
}
}
/**
* TODO Lukas: Add Javadoc
* @param keyProvider
* {@link ProvidesKey} for the super class constructor
* @param comp
* {@link EntityIdentityComparator} to compare the identity of the objects
* @param provider
* {@link ListDataProvider} to register this as listener and get the entries
*/
public RefreshableSingleSelectionModel(ProvidesKey<T> keyProvider, EntityIdentityComparator<T> comp) {
public RefreshableSingleSelectionModel(ProvidesKey<T> keyProvider, EntityIdentityComparator<T> comp, ListDataProvider<T> provider) {
super(keyProvider);
this.comp =comp;
this.provider = provider;
if (this.provider != null) {
this.provider.addDataDisplay(this);
}
}
@Override
@@ -37,16 +62,8 @@ public class RefreshableSingleSelectionModel<T> extends SingleSelectionModel<T>
if (comp == null) {
super.setSelected(item, selected);
} else {
T wasSelectedBefore = null;
Set<T> selectedSet = getSelectedSet();
for (T it : selectedSet) {
if(comp.representSameEntity(it, item)) {
wasSelectedBefore = it;
break;
}
}
if(wasSelectedBefore == null) {
super.setSelected(wasSelectedBefore, false); //This old version of item will be deleted with the next clear()
if(comp.representSameEntity(getSelectedObject(), item)) {
super.setSelected(getSelectedObject(), false); //This old version of item will be deleted with the next clear()
super.setSelected(item, selected);
} else {
super.setSelected(item, selected);
@@ -69,4 +86,78 @@ public class RefreshableSingleSelectionModel<T> extends SingleSelectionModel<T>
}
SelectionChangeEvent.fire(this);
}
@Override
public void setRowData(int start, List<? extends T> values) {
refreshSelectionModel(provider.getList());
}
@Override
public int getRowCount() {
return Integer.MAX_VALUE;
}
@Override
public Range getVisibleRange() {
return new Range(0, Integer.MAX_VALUE);
}
@Override
public int getVisibleItemCount() {
return Integer.MAX_VALUE;
}
@Override
public HandlerRegistration addRangeChangeHandler(Handler handler) {
return null;
}
@Override
public HandlerRegistration addRowCountChangeHandler(
com.google.gwt.view.client.RowCountChangeEvent.Handler handler) {
return null;
}
@Override
public boolean isRowCountExact() {
return false;
}
@Override
public void setRowCount(int count) {
return;
}
@Override
public void setRowCount(int count, boolean isExact) {
return;
}
@Override
public void setVisibleRange(int start, int length) {
return;
}
@Override
public void setVisibleRange(Range range) {
return;
}
@Override
public HandlerRegistration addCellPreviewHandler(com.google.gwt.view.client.CellPreviewEvent.Handler<T> handler) {
return null;
}
@Override
public SelectionModel<? super T> getSelectionModel() {
return null;
}
@Override
public T getVisibleItem(int indexOnPage) {
return null;
}
@Override
public Iterable<T> getVisibleItems() {
return null;
}
@Override
public void setSelectionModel(SelectionModel<? super T> selectionModel) {
return;
}
@Override
public void setVisibleRangeAndClearData(Range range, boolean forceRangeChangeEvent) {
clear();
}
}