### Eclipse Workspace Patch 1.0 #P org.eclipse.emf.cdo.ui Index: src/org/eclipse/emf/cdo/internal/ui/views/CDOWatchListView.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOWatchListView.java,v retrieving revision 1.2 diff -u -r1.2 CDOWatchListView.java --- src/org/eclipse/emf/cdo/internal/ui/views/CDOWatchListView.java 15 Apr 2009 17:03:38 -0000 1.2 +++ src/org/eclipse/emf/cdo/internal/ui/views/CDOWatchListView.java 26 Apr 2009 10:00:37 -0000 @@ -89,6 +89,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicLong; /** * @author Victor Roldan Betancort @@ -99,10 +100,7 @@ private static final int[] columnWidths = { 110, 280, 170, 230 }; - /** - * TODO Vik: Why static? - */ - private static WatchedObjectsDataRegistry dataRegistry = new WatchedObjectsDataRegistry(); + private WatchedObjectsDataRegistry dataRegistry = new WatchedObjectsDataRegistry(); private TableViewer viewer; @@ -123,7 +121,12 @@ public CDOWatchListView() { adapterFactory = new ComposedAdapterFactory(EMFEditPlugin.getComposedAdapterFactoryDescriptorRegistry()); - container.addListener(dataRegistry); + container.addListener(getDataRegistry()); + } + + public WatchedObjectsDataRegistry getDataRegistry() + { + return dataRegistry; } @Override @@ -143,7 +146,7 @@ }; container.addListener(refreshListener); - dataRegistry.addListener(refreshListener); + getDataRegistry().addListener(refreshListener); // Configure ViewPart createActions(); @@ -363,7 +366,7 @@ { checkDetached(msg); // TODO how to retrieve remote commit timestamp? - dataRegistry.addNotification(msg); + getDataRegistry().addNotification(msg); } } @@ -374,7 +377,7 @@ { Object obj = msg.getNotifier(); container.removeElement((CDOObject)obj); - dataRegistry.removeData(obj); + getDataRegistry().removeData(obj); } } @@ -397,6 +400,8 @@ private TransactionHandler transactionHandler = new TransactionHandler(); + private CDOViewReferenceCounterManager counterManager = new CDOViewReferenceCounterManager(); + public CDOObjectContainer() { } @@ -509,7 +514,7 @@ private void increaseViewReference(CDOObject referrer) { - CDOViewReferenceCounter counter = CDOViewReferenceCounter.getCounter(referrer); + CDOViewReferenceCounterManager.CDOViewReferenceCounter counter = counterManager.getCounter(referrer); if (counter.increase() == 1) { CDOView view = referrer.cdoView(); @@ -523,7 +528,7 @@ private void decreaseViewReference(CDOObject referrer) { - CDOViewReferenceCounter counter = CDOViewReferenceCounter.getCounter(referrer); + CDOViewReferenceCounterManager.CDOViewReferenceCounter counter = counterManager.getCounter(referrer); // CDOObject might be detached, and so CDOView will be null if (counter.decrease() == 0 && referrer.cdoView() != null) @@ -548,7 +553,7 @@ { if (((ILifecycleEvent)event).getKind() == ILifecycleEvent.Kind.ABOUT_TO_DEACTIVATE) { - ArrayList aboutToRemove = new ArrayList(); + List aboutToRemove = new ArrayList(); for (CDOObject object : getElements()) { if (object.cdoView().equals(event.getSource())) @@ -567,58 +572,57 @@ /** * @author Victor Roldan Betancort */ - private static final class CDOViewReferenceCounter + private final class CDOViewReferenceCounterManager { - /** - * TODO Vik: Why static? - */ - private static ArrayList viewReferences = new ArrayList(); + private List viewReferences = new ArrayList(); - private final CDOObject referrer; - - private long referenceCount; - - /** - * TODO Vik: Why private? - */ - private CDOViewReferenceCounter(CDOObject cdoObject) + public CDOViewReferenceCounterManager() { - referrer = cdoObject; - referenceCount = 0; } - public synchronized long increase() + private class CDOViewReferenceCounter { - return ++referenceCount; - } + private final CDOView view; - public synchronized long decrease() - { - if (--referenceCount == 0) + private AtomicLong referenceCount = new AtomicLong(); + + public CDOViewReferenceCounter(CDOObject cdoObject) { - viewReferences.remove(this); + view = cdoObject.cdoView(); + referenceCount.set(0); } - return referenceCount; - } + public long increase() + { + return referenceCount.incrementAndGet(); + } - public CDOObject getReferrer() - { - return referrer; + public synchronized long decrease() + { + Long value = referenceCount.decrementAndGet(); + if (value == 0) + { + viewReferences.remove(this); + } + + return value; + } + + public CDOView getReferencedView() + { + return view; + } } - /** - * TODO Vik: Why static? - */ - public static CDOViewReferenceCounter getCounter(CDOObject cdoObject) + public CDOViewReferenceCounter getCounter(CDOObject cdoObject) { synchronized (viewReferences) { - for (CDOViewReferenceCounter registeredCounter : viewReferences) + for (CDOViewReferenceCounter counter : viewReferences) { - if (registeredCounter.getReferrer().equals(cdoObject)) + if (counter.getReferencedView().equals(cdoObject.cdoView())) { - return registeredCounter; + return counter; } } } @@ -632,8 +636,7 @@ /** * @author Victor Roldan Betancort */ - private static final class WatchedObjectsDataRegistry extends org.eclipse.net4j.util.event.Notifier implements - IListener + private final class WatchedObjectsDataRegistry extends org.eclipse.net4j.util.event.Notifier implements IListener { private Map registry = new HashMap(); @@ -657,6 +660,7 @@ data = new WatchedObjectData(); registry.put(object, data); } + return data; } @@ -710,7 +714,7 @@ /** * @author Victor Roldan Betancort */ - private static final class WatchedObjectData + private final class WatchedObjectData { private Notification notification; @@ -738,19 +742,19 @@ /** * @author Victor Roldan Betancort */ - private static final class CDOSubscriptionViewLabelProvider extends LabelProvider implements ILabelProvider, + private final class CDOSubscriptionViewLabelProvider extends LabelProvider implements ILabelProvider, ITableLabelProvider, IColorProvider { - private static final Color YELLOW = UIUtil.getDisplay().getSystemColor(SWT.COLOR_YELLOW); + private final Color YELLOW = UIUtil.getDisplay().getSystemColor(SWT.COLOR_YELLOW); - private static final String[] eventTypes = { "CREATE", "SET", "UNSET", "ADD", "REMOVE", "ADD MANY", "REMOVE MANY", - "MOVE", "REMOVING ADAPTER", "RESOLVE" }; + private final String[] eventTypes = { "CREATE", "SET", "UNSET", "ADD", "REMOVE", "ADD MANY", "REMOVE MANY", "MOVE", + "REMOVING ADAPTER", "RESOLVE" }; - private static AdapterFactory adapterFactory; + private AdapterFactory adapterFactory; public CDOSubscriptionViewLabelProvider(AdapterFactory adapterFactory) { - CDOSubscriptionViewLabelProvider.adapterFactory = adapterFactory; + this.adapterFactory = adapterFactory; } public Image getColumnImage(Object object, int columnIndex) @@ -812,7 +816,7 @@ return "?"; case 3: - Notification notification = dataRegistry.getNotification(element); + Notification notification = getDataRegistry().getNotification(element); return createEventLabel(notification); } @@ -823,7 +827,7 @@ { if (element instanceof CDOObject) { - if (dataRegistry.getNotification(element) != null) + if (getDataRegistry().getNotification(element) != null) { return YELLOW; } @@ -862,7 +866,7 @@ /** * @author Victor Roldan Betancort */ - private static final class CDOObjectContainerContentProvider implements IStructuredContentProvider + private final class CDOObjectContainerContentProvider implements IStructuredContentProvider { public CDOObjectContainerContentProvider() { @@ -925,7 +929,7 @@ { if (object instanceof CDOObject) { - dataRegistry.removeNotification(object); + getDataRegistry().removeNotification(object); } } } @@ -950,7 +954,7 @@ aboutToReset.add(cdoObject); } - dataRegistry.removeAllNotification(aboutToReset); + getDataRegistry().removeAllNotification(aboutToReset); } } }