BaseObservableList
Gaja Sutra
gajasutra at gmail.com
Wed Dec 14 09:31:02 PST 2011
> Not sure how would that IterableChangeableBuilder work. Can you give
> an example?
[Sorry, I forgotten the openjfx-dev list the first time]
An already applied change contains the track of removed items, but only
indexes of added.
* public void nextAdd(int from?, int to?) {...}
* public void nextRemove(int position, ArrayList<E> removedItems) {...}
A runnable change contains the to-be-added items, but only indexes of
to-be-removed.
* public void nextAdd(int position, ArrayList<E> toBeAddedItems) {...}
* public void nextRemove(int from?, int to?) {...}
Applying a runnable change is like your setAll method but with
caller-specified operation list (the runnable change) between
begin-commit [no rollback, if no exception support: simpler and probably
sufficient for collections].
|// I don't have ListChangeListener.Change source code
// then I have not reused ||ListChangeListener.Change
// (but it is probably possible and avoid RunnableChange).
||public class BatchObservableList<E> extends BaseObservableList<E> {
public void runBatch(final RunnableChange batch) {
changeBuilder.beginComplexChange();
for (final ListChange<E> change : batch) {
switch (change.type) {
case ADD:
addAll(change.from, change.added);
break;
case REMOVE:
removeRange(change.from, change.to);
break;
}
}
changeBuilder.endComplexChange();
// this calls the ListChangeListeners using just one Change object
}
}
enum ListOperation {
ADD, REMOVE; // etc.
}
static class ListChange<E> {
ListOperation type;
int from;
int to;
List<E> added;
}|
More information about the openjfx-dev
mailing list