Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 107000 Details for
Bug 194734
[Databinding] Property-based observables
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
getRealizedElements prototype with demo of problem explained earlier
clipboard.txt (text/plain), 15.05 KB, created by
Matthew Hall
on 2008-07-09 15:53:59 EDT
(
hide
)
Description:
getRealizedElements prototype with demo of problem explained earlier
Filename:
MIME Type:
Creator:
Matthew Hall
Created:
2008-07-09 15:53:59 EDT
Size:
15.05 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jface.databinding >Index: src/org/eclipse/jface/databinding/viewers/ObservableListContentProvider.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableListContentProvider.java,v >retrieving revision 1.12 >diff -u -r1.12 ObservableListContentProvider.java >--- src/org/eclipse/jface/databinding/viewers/ObservableListContentProvider.java 29 Apr 2008 01:44:21 -0000 1.12 >+++ src/org/eclipse/jface/databinding/viewers/ObservableListContentProvider.java 9 Jul 2008 19:45:10 -0000 >@@ -13,8 +13,6 @@ > > package org.eclipse.jface.databinding.viewers; > >-import java.util.Set; >- > import org.eclipse.core.databinding.observable.IObservableCollection; > import org.eclipse.core.databinding.observable.list.IListChangeListener; > import org.eclipse.core.databinding.observable.list.IObservableList; >@@ -23,7 +21,6 @@ > import org.eclipse.core.databinding.observable.set.IObservableSet; > import org.eclipse.core.runtime.Assert; > import org.eclipse.jface.internal.databinding.viewers.ObservableCollectionContentProvider; >-import org.eclipse.jface.internal.databinding.viewers.ViewerElementSet; > import org.eclipse.jface.viewers.AbstractListViewer; > import org.eclipse.jface.viewers.AbstractTableViewer; > import org.eclipse.jface.viewers.IStructuredContentProvider; >@@ -63,27 +60,43 @@ > ((IObservableList) collection).removeListChangeListener(this); > } > >- public void handleListChange(ListChangeEvent event) { >+ public void handleListChange(final ListChangeEvent event) { > if (isViewerDisposed()) > return; >- final Set removals = ViewerElementSet.withComparer(comparer); >- > event.diff.accept(new ListDiffVisitor() { > public void handleAdd(int index, Object element) { > knownElements.add(element); > viewerUpdater.insert(element, index); >+ realizedElements.add(element); > } > > public void handleRemove(int index, Object element) { >+ boolean removingLast = removingLast(element); >+ if (removingLast) >+ realizedElements.remove(element); >+ > viewerUpdater.remove(element, index); >- removals.add(element); >+ >+ if (removingLast) >+ knownElements.remove(element); >+ } >+ >+ private boolean removingLast(Object element) { >+ return !event.getObservableList().contains(element); > } > > public void handleReplace(int index, Object oldElement, > Object newElement) { > knownElements.add(newElement); >+ boolean removingLast = removingLast(oldElement); >+ if (removingLast) >+ realizedElements.remove(oldElement); >+ > viewerUpdater.replace(oldElement, newElement, index); >- removals.add(oldElement); >+ >+ if (removingLast) >+ knownElements.remove(oldElement); >+ realizedElements.add(newElement); > } > > public void handleMove(int oldIndex, int newIndex, >@@ -91,11 +104,6 @@ > viewerUpdater.move(element, oldIndex, newIndex); > } > }); >- >- // For each removed element, do not remove from known elements if >- // the element is still present elsewhere in the list. >- removals.removeAll(event.getObservableList()); >- knownElements.removeAll(removals); > } > } > >@@ -130,4 +138,16 @@ > public IObservableSet getKnownElements() { > return impl.getKnownElements(); > } >+ >+ /** >+ * Returns the set of known elements which have been realized in the viewer. >+ * Clients may track this set in order to perform custom actions on elements >+ * while they are known to be present in the viewer. >+ * >+ * @return the set of known elements which have been realized in the viewer. >+ * @since 1.3 >+ */ >+ public IObservableSet getRealizedElements() { >+ return impl.getRealizedElements(); >+ } > } >Index: src/org/eclipse/jface/databinding/viewers/ObservableSetContentProvider.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableSetContentProvider.java,v >retrieving revision 1.14 >diff -u -r1.14 ObservableSetContentProvider.java >--- src/org/eclipse/jface/databinding/viewers/ObservableSetContentProvider.java 29 Apr 2008 01:44:21 -0000 1.14 >+++ src/org/eclipse/jface/databinding/viewers/ObservableSetContentProvider.java 9 Jul 2008 19:45:10 -0000 >@@ -63,12 +63,14 @@ > return; > > Set removals = event.diff.getRemovals(); >+ realizedElements.removeAll(removals); > viewerUpdater.remove(removals.toArray()); > knownElements.removeAll(removals); > > Set additions = event.diff.getAdditions(); > knownElements.addAll(additions); > viewerUpdater.add(additions.toArray()); >+ realizedElements.addAll(additions); > } > } > >@@ -103,4 +105,16 @@ > public IObservableSet getKnownElements() { > return impl.getKnownElements(); > } >+ >+ /** >+ * Returns the set of known elements which have been realized in the viewer. >+ * Clients may track this set in order to perform custom actions on elements >+ * while they are known to be present in the viewer. >+ * >+ * @return the set of known elements which have been realized in the viewer. >+ * @since 1.3 >+ */ >+ public IObservableSet getRealizedElements() { >+ return impl.getRealizedElements(); >+ } > } >Index: src/org/eclipse/jface/internal/databinding/viewers/ObservableCollectionContentProvider.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ObservableCollectionContentProvider.java,v >retrieving revision 1.3 >diff -u -r1.3 ObservableCollectionContentProvider.java >--- src/org/eclipse/jface/internal/databinding/viewers/ObservableCollectionContentProvider.java 29 Apr 2008 01:44:21 -0000 1.3 >+++ src/org/eclipse/jface/internal/databinding/viewers/ObservableCollectionContentProvider.java 9 Jul 2008 19:45:10 -0000 >@@ -59,21 +59,33 @@ > */ > protected IObservableSet knownElements; > >+ /** >+ * Observable set of known elements which have been realized in the viewer. >+ * Subclasses must add new elements to this set <b>after</b> adding them to >+ * the viewer, and must remove old elements from this set <b>before</b> >+ * removing them from the viewer. >+ */ >+ protected IObservableSet realizedElements; >+ > private IObservableSet unmodifiableKnownElements; >+ private IObservableSet unmodifiableRealizedElements; > private IObservableCollection observableCollection; > >+ private Display display; >+ > /** > * Constructs an ObservableCollectionContentProvider > */ > protected ObservableCollectionContentProvider() { >- final Realm realm = SWTObservables.getRealm(Display.getDefault()); >+ display = Display.getDefault(); >+ final Realm realm = SWTObservables.getRealm(display); > viewerObservable = new WritableValue(realm); > viewerUpdater = null; > > // Known elements is a detail set of viewerObservable, so that when we > // get the viewer instance we can swap in a set that uses its > // IElementComparer, if any. >- IObservableFactory knownElementsFactory = new IObservableFactory() { >+ IObservableFactory elementSetFactory = new IObservableFactory() { > public IObservable createObservable(Object target) { > IElementComparer comparer = null; > if (target instanceof StructuredViewer) >@@ -83,16 +95,30 @@ > } > }; > knownElements = MasterDetailObservables.detailSet(viewerObservable, >- knownElementsFactory, null); >+ elementSetFactory, null); > unmodifiableKnownElements = Observables > .unmodifiableObservableSet(knownElements); > >+ realizedElements = MasterDetailObservables.detailSet(viewerObservable, >+ elementSetFactory, null); >+ unmodifiableRealizedElements = Observables >+ .unmodifiableObservableSet(realizedElements); >+ > observableCollection = null; > } > > public Object[] getElements(Object inputElement) { > if (observableCollection == null) > return new Object[0]; >+ >+ if (!realizedElements.equals(knownElements)) { >+ display.asyncExec(new Runnable() { >+ public void run() { >+ realizedElements.addAll(knownElements); >+ } >+ }); >+ } >+ > return observableCollection.toArray(); > } > >@@ -108,6 +134,9 @@ > viewerUpdater = null; > knownElements = null; > unmodifiableKnownElements = null; >+ realizedElements = null; >+ unmodifiableRealizedElements = null; >+ display = null; > } > > public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { >@@ -203,4 +232,16 @@ > public IObservableSet getKnownElements() { > return unmodifiableKnownElements; > } >-} >+ >+ /** >+ * Returns the set of known elements which have been realized in the viewer. >+ * Clients may track this set in order to perform custom actions on elements >+ * while they are known to be present in the viewer. >+ * >+ * @return the set of known elements which have been realized in the viewer. >+ * @since 1.3 >+ */ >+ public IObservableSet getRealizedElements() { >+ return unmodifiableRealizedElements; >+ } >+} >\ No newline at end of file >#P org.eclipse.jface.tests.databinding >Index: src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableMapTest.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableMapTest.java,v >retrieving revision 1.3 >diff -u -r1.3 JavaBeanObservableMapTest.java >--- src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableMapTest.java 24 Mar 2008 19:13:50 -0000 1.3 >+++ src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableMapTest.java 9 Jul 2008 19:45:11 -0000 >@@ -64,6 +64,12 @@ > model1.getValue(), map.get(model1)); > } > >+ public void testGetValue_KeyOutOfDomain() { >+ Bean model3 = new Bean("3"); >+ assertFalse(map.containsKey(model3)); >+ assertFalse(model3.getValue().equals(map.get(model3))); >+ } >+ > public void testSetValueNotifications() throws Exception { > String oldValue = model1.getValue(); > String newValue = model1.getValue() + model1.getValue(); >@@ -127,34 +133,36 @@ > assertTrue(listener.diff.getRemovedKeys().contains(model1)); > assertEquals(1, map.size()); > } >- >+ > public void testGetObserved() throws Exception { > assertEquals(set, map.getObserved()); > } >- >+ > public void testGetPropertyDescriptor() throws Exception { > assertEquals(propertyDescriptor, map.getPropertyDescriptor()); > } >- >+ > public void testConstructor_SkipRegisterListeners() throws Exception { > Realm realm = new CurrentRealm(true); > WritableSet set = new WritableSet(realm); > Bean bean = new Bean(); > set.add(bean); >- >- JavaBeanObservableMap observable = new JavaBeanObservableMap(set, new PropertyDescriptor("value", Bean.class), false); >+ >+ JavaBeanObservableMap observable = new JavaBeanObservableMap(set, >+ new PropertyDescriptor("value", Bean.class), false); > ChangeEventTracker.observe(observable); > > assertFalse(bean.hasListeners("value")); > } >- >+ > public void testConstructor_RegistersListeners() throws Exception { > Realm realm = new CurrentRealm(true); > WritableSet set = new WritableSet(realm); > Bean bean = new Bean(); > set.add(bean); >- >- JavaBeanObservableMap observable = new JavaBeanObservableMap(set, new PropertyDescriptor("value", Bean.class)); >+ >+ JavaBeanObservableMap observable = new JavaBeanObservableMap(set, >+ new PropertyDescriptor("value", Bean.class)); > ChangeEventTracker.observe(observable); > > assertTrue(bean.hasListeners("value")); >@@ -172,7 +180,8 @@ > } > > public static Test suite() { >- TestSuite suite = new TestSuite(JavaBeanObservableMapTest.class.getName()); >+ TestSuite suite = new TestSuite(JavaBeanObservableMapTest.class >+ .getName()); > suite.addTestSuite(JavaBeanObservableMapTest.class); > return suite; > } >#P org.eclipse.core.databinding.beans >Index: src/org/eclipse/core/internal/databinding/beans/JavaBeanObservableMap.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/JavaBeanObservableMap.java,v >retrieving revision 1.2 >diff -u -r1.2 JavaBeanObservableMap.java >--- src/org/eclipse/core/internal/databinding/beans/JavaBeanObservableMap.java 24 Mar 2008 19:13:25 -0000 1.2 >+++ src/org/eclipse/core/internal/databinding/beans/JavaBeanObservableMap.java 9 Jul 2008 19:45:12 -0000 >@@ -33,14 +33,14 @@ > IBeanObservable { > > private PropertyDescriptor propertyDescriptor; >- >+ > private PropertyChangeListener elementListener = new PropertyChangeListener() { > public void propertyChange(final java.beans.PropertyChangeEvent event) { > if (!updating) { > getRealm().exec(new Runnable() { > public void run() { >- fireMapChange(Diffs.createMapDiffSingleChange( >- event.getSource(), event.getOldValue(), event >+ fireMapChange(Diffs.createMapDiffSingleChange(event >+ .getSource(), event.getOldValue(), event > .getNewValue())); > } > }); >@@ -94,7 +94,7 @@ > } > > protected Object doGet(Object key) { >- if (key == null) { >+ if (!containsKey(key)) { > return null; > } > try { >@@ -126,15 +126,21 @@ > } > } > >- /* (non-Javadoc) >+ /* >+ * (non-Javadoc) >+ * > * @see org.eclipse.core.databinding.beans.IBeanObservable#getObserved() > */ > public Object getObserved() { > return keySet(); > } > >- /* (non-Javadoc) >- * @see org.eclipse.core.databinding.beans.IBeanObservable#getPropertyDescriptor() >+ /* >+ * (non-Javadoc) >+ * >+ * @see >+ * org.eclipse.core.databinding.beans.IBeanObservable#getPropertyDescriptor >+ * () > */ > public PropertyDescriptor getPropertyDescriptor() { > return propertyDescriptor; >#P org.eclipse.jface.examples.databinding >Index: src/org/eclipse/jface/examples/databinding/snippets/Snippet013TableViewerEditing.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/snippets/Snippet013TableViewerEditing.java,v >retrieving revision 1.2 >diff -u -r1.2 Snippet013TableViewerEditing.java >--- src/org/eclipse/jface/examples/databinding/snippets/Snippet013TableViewerEditing.java 24 Mar 2008 04:53:37 -0000 1.2 >+++ src/org/eclipse/jface/examples/databinding/snippets/Snippet013TableViewerEditing.java 9 Jul 2008 19:45:13 -0000 >@@ -224,8 +224,11 @@ > peopleViewer.setContentProvider(peopleViewerContentProvider); > > // And a standard label provider that maps columns >+// IObservableMap[] attributeMaps = BeansObservables.observeMaps( >+// peopleViewerContentProvider.getKnownElements(), >+// Person.class, new String[] { "name" }); > IObservableMap[] attributeMaps = BeansObservables.observeMaps( >- peopleViewerContentProvider.getKnownElements(), >+ peopleViewerContentProvider.getRealizedElements(), > Person.class, new String[] { "name" }); > peopleViewer.setLabelProvider(new ObservableMapLabelProvider( > attributeMaps));
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 194734
:
106529
| 107000 |
107001
|
107041
|
107042
|
111164
|
111165
|
111335
|
111336
|
111448
|
111449
|
111640
|
111641
|
111717
|
111719
|
111845
|
111846
|
111897
|
111898
|
111993
|
111994
|
112161
|
112162
|
112268
|
112269
|
112360
|
112361
|
112370
|
112371
|
112471
|
112472
|
112606
|
112607
|
112629
|
112630
|
113149
|
113150
|
113165
|
113166
|
114858
|
114859
|
115196
|
115197
|
115284
|
115458
|
115459
|
117500
|
117501
|
117990
|
117991
|
119231
|
119232
|
119274
|
120541
|
120542
|
120651
|
120652
|
120653
|
120654
|
120914
|
120915
|
120989
|
120990
|
121020
|
121021
|
121141
|
121142
|
122228
|
122229
|
122234
|
122235
|
122288
|
122289
|
122609
|
122610
|
122613
|
122614
|
122775
|
122776
|
122813
|
122814
|
122852
|
122853
|
122864
|
122865
|
123137
|
123138