mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-18 18:20:58 +00:00
modified RefreshableMultiSelectionModel
This commit is contained in:
1 parent
cf77d0bc77
commit
bb14440220
1 file changed
+35
-28
+35
-28
@@ -32,6 +32,7 @@ public class RefreshableMultiSelectionModel<T> extends MultiSelectionModel<T>
|
||||
implements RefreshableSelectionModel<T>, HasData<T> {
|
||||
private final EntityIdentityComparator<T> comp;
|
||||
private final List<T> elements;
|
||||
private boolean dontcheckSelectionState = false;
|
||||
|
||||
/**
|
||||
* @param comp
|
||||
@@ -66,7 +67,7 @@ public class RefreshableMultiSelectionModel<T> extends MultiSelectionModel<T>
|
||||
*/
|
||||
@Override
|
||||
public void setSelected(T item, boolean selected) {
|
||||
if (comp == null) {
|
||||
if (comp == null || dontcheckSelectionState) {
|
||||
super.setSelected(item, selected);
|
||||
} else {
|
||||
T wasSelectedBefore = null;
|
||||
@@ -93,13 +94,14 @@ public class RefreshableMultiSelectionModel<T> extends MultiSelectionModel<T>
|
||||
* FIXME change to private
|
||||
*/
|
||||
public void refreshSelectionModel(Iterable<T> newObjects) {
|
||||
dontcheckSelectionState = true;
|
||||
final Set<T> selectedSet = getSelectedSet();
|
||||
final boolean isNotEmpty = !selectedSet.isEmpty();
|
||||
clear();
|
||||
if (isNotEmpty) {
|
||||
clear();
|
||||
for (T it : newObjects) {
|
||||
if (comp == null) {
|
||||
super.setSelected(it, selectedSet.contains(it));
|
||||
setSelected(it, selectedSet.contains(it));
|
||||
} else {
|
||||
boolean isSelected = false;
|
||||
for (T selected : selectedSet) {
|
||||
@@ -108,11 +110,12 @@ public class RefreshableMultiSelectionModel<T> extends MultiSelectionModel<T>
|
||||
break;
|
||||
}
|
||||
}
|
||||
super.setSelected(it, isSelected);
|
||||
setSelected(it, isSelected);
|
||||
}
|
||||
}
|
||||
SelectionChangeEvent.fire(this);
|
||||
}
|
||||
dontcheckSelectionState = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -124,12 +127,13 @@ public class RefreshableMultiSelectionModel<T> extends MultiSelectionModel<T>
|
||||
*/
|
||||
@Override
|
||||
public void refreshSelectionModel(int start, List<T> newObjects) {
|
||||
dontcheckSelectionState = true;
|
||||
List<T> oldElements = elements.subList(start, elements.size());
|
||||
Set<T> selectedElements = new HashSet<T>();
|
||||
for (T it : oldElements) {
|
||||
if (isSelected(it)) {
|
||||
selectedElements.add(it);
|
||||
super.setSelected(it, false);
|
||||
setSelected(it, false);
|
||||
}
|
||||
}
|
||||
if (!selectedElements.isEmpty()) {
|
||||
@@ -137,46 +141,49 @@ public class RefreshableMultiSelectionModel<T> extends MultiSelectionModel<T>
|
||||
if (comp != null) {
|
||||
for (T selected : selectedElements) {
|
||||
if (comp.representSameEntity(selected, newElement)) {
|
||||
super.setSelected(newElement, true);
|
||||
setSelected(newElement, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (selectedElements.contains(newElement)) {
|
||||
super.setSelected(newElement, true);
|
||||
setSelected(newElement, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
SelectionChangeEvent.fire(this);
|
||||
}
|
||||
isSelected(newObjects.iterator().next()); // Triggers a clear of unselected elements in superclass
|
||||
dontcheckSelectionState = false;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void setRowData(int start, List<? extends T> values) {
|
||||
// refresh the selectionModel
|
||||
if (start > 0 && values.size() > 0) {
|
||||
refreshSelectionModel(start, (List<T>) values);
|
||||
} else {
|
||||
refreshSelectionModel((Iterable<T>) values);
|
||||
}
|
||||
// refresh the element list
|
||||
// TODO discuss with Axel if this depends to much of the implementation of ListDataProvider
|
||||
if (values.isEmpty()) {
|
||||
elements.clear();
|
||||
} else if (elements.isEmpty()) {
|
||||
elements.addAll(values);
|
||||
} else if (values.size() == 1) {
|
||||
elements.set(start, values.get(0));
|
||||
} else if (start == 0) {
|
||||
elements.clear();
|
||||
elements.addAll(values);
|
||||
} else {
|
||||
for (int i = start; i < elements.size(); i++) {
|
||||
elements.remove(i);
|
||||
if (!values.equals(elements.subList(start, elements.size()))) {
|
||||
// refresh the selectionModel
|
||||
if (start == 0 && (values.size() > 1 || values.size()==0)) {
|
||||
refreshSelectionModel((Iterable<T>) values);
|
||||
} else {
|
||||
refreshSelectionModel(start, (List<T>) values);
|
||||
}
|
||||
// refresh the element list
|
||||
// TODO discuss with Axel if this depends to much of the implementation of ListDataProvider
|
||||
if (values.isEmpty()) {
|
||||
elements.clear();
|
||||
} else if (elements.isEmpty()) {
|
||||
elements.addAll(values);
|
||||
} else if (values.size() == 1) {
|
||||
elements.set(start, values.get(0));
|
||||
} else if (start == 0) {
|
||||
elements.clear();
|
||||
elements.addAll(values);
|
||||
} else {
|
||||
for (int i = start; i < elements.size(); i++) {
|
||||
elements.remove(i);
|
||||
}
|
||||
elements.addAll(values);
|
||||
}
|
||||
elements.addAll(values);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user