Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPawel Piech2010-04-23 19:27:29 +0000
committerPawel Piech2010-04-23 19:27:29 +0000
commitecdf96f548926737fcbe469abe5839d56682dea1 (patch)
treec2ddeaf44462631152aceba777492cfbe1eb692a /dsf/org.eclipse.cdt.dsf.ui
parentfb54796aac8b1182036188d9ebf03aae13fe9ecd (diff)
downloadorg.eclipse.cdt-ecdf96f548926737fcbe469abe5839d56682dea1.tar.gz
org.eclipse.cdt-ecdf96f548926737fcbe469abe5839d56682dea1.tar.xz
org.eclipse.cdt-ecdf96f548926737fcbe469abe5839d56682dea1.zip
Bug 310331 - [vm] Refactor VMViewerUpdate to avoid data duplication.
Diffstat (limited to 'dsf/org.eclipse.cdt.dsf.ui')
-rw-r--r--dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/VMViewerUpdate.java142
1 files changed, 74 insertions, 68 deletions
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/VMViewerUpdate.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/VMViewerUpdate.java
index 92cf8b19918..5b337a7c1cb 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/VMViewerUpdate.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/VMViewerUpdate.java
@@ -12,7 +12,6 @@ package org.eclipse.cdt.dsf.ui.viewmodel;
import java.util.LinkedList;
import java.util.List;
-import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.atomic.AtomicBoolean;
import org.eclipse.cdt.dsf.concurrent.DsfExecutable;
@@ -52,31 +51,69 @@ public class VMViewerUpdate extends DsfExecutable implements IViewerUpdate {
final private IViewerUpdate fClientUpdate;
/**
- * The flag indicating whether this update was cancelled. This flag is not used
- * if the {@link #fClientUpdate} is initialized.
+ * Place holder for the client update. It is only used if the client update is
+ * not specified.
*/
- final private AtomicBoolean fCanceled;
-
- /**
- * The viewer input object for this update.
- */
- final private Object fViewerInput;
-
- /**
- * The element object of this update.
- */
- final private Object fElement;
-
- /**
- * The element path of this update.
- */
- final private TreePath fElementPath;
-
- /**
- * The presentation context of this update.
- */
- final private IPresentationContext fPresentationContext;
+ private class ClientUpdatePlaceHolder implements IViewerUpdate {
+
+ ClientUpdatePlaceHolder(TreePath elementPath, Object viewerInput, IPresentationContext presentationContext)
+ {
+ fViewerInput = viewerInput;
+ fElementPath = elementPath;
+ fPresentationContext = presentationContext;
+ }
+ /**
+ * The flag indicating whether this update was cancelled. This flag is not used
+ * if the {@link #fClientUpdate} is initialized.
+ */
+ final private AtomicBoolean fCanceled = new AtomicBoolean(false);
+
+ /**
+ * The viewer input object for this update.
+ */
+ final private Object fViewerInput;
+
+ /**
+ * The element path of this update.
+ */
+ final private TreePath fElementPath;
+
+ /**
+ * The presentation context of this update.
+ */
+ final private IPresentationContext fPresentationContext;
+ public void cancel() {
+ fCanceled.set(true);
+ }
+
+ public boolean isCanceled() {
+ return fCanceled.get();
+ }
+
+ public IPresentationContext getPresentationContext() {
+ return fPresentationContext;
+ }
+
+ public Object getElement() {
+ return fElementPath.getSegmentCount() != 0 ? fElementPath.getLastSegment() : fViewerInput;
+ }
+
+ public TreePath getElementPath() {
+ return fElementPath;
+ }
+
+ public Object getViewerInput() {
+ return fViewerInput;
+ }
+
+ public void done() { assert false; } // not used
+ public void setStatus(IStatus status) {assert false; } // not used
+ public IStatus getStatus() { assert false; return null; } // not used
+
+
+ }
+
/**
* Creates a viewer update based on a higher-level update. The update element
* information as well as cancel requests are delegated to the given client
@@ -90,13 +127,8 @@ public class VMViewerUpdate extends DsfExecutable implements IViewerUpdate {
* @param requestMonitor Call-back invoked when this update completes.
*/
public VMViewerUpdate(IViewerUpdate clientUpdate, RequestMonitor requestMonitor) {
- fViewerInput = clientUpdate.getViewerInput();
- fElement = clientUpdate.getElement();
- fElementPath = clientUpdate.getElementPath();
- fPresentationContext = clientUpdate.getPresentationContext();
fRequestMonitor = requestMonitor;
fClientUpdate = clientUpdate;
- fCanceled = null;
}
/**
@@ -115,14 +147,9 @@ public class VMViewerUpdate extends DsfExecutable implements IViewerUpdate {
listDelta = listDelta.getParentDelta();
elementList.add(0, listDelta.getElement());
}
- fViewerInput = elementList.get(0);
- fElement = elementList.get(elementList.size() - 1);
- elementList.remove(0);
- fElementPath = new TreePath(elementList.toArray());
- fPresentationContext = presentationContext;
+ fClientUpdate = new ClientUpdatePlaceHolder(
+ new TreePath(elementList.toArray()), elementList.get(elementList.size() - 1), presentationContext);
fRequestMonitor = requestMonitor;
- fClientUpdate = null;
- fCanceled = new AtomicBoolean(false);
}
/**
@@ -134,56 +161,35 @@ public class VMViewerUpdate extends DsfExecutable implements IViewerUpdate {
* @param requestMonitor Call-back invoked when this update completes.
*/
public VMViewerUpdate(TreePath elementPath, Object viewerInput, IPresentationContext presentationContext, RequestMonitor requestMonitor) {
- fViewerInput = viewerInput;
- fElement = elementPath.getSegmentCount() != 0 ? elementPath.getLastSegment() : viewerInput;
- fElementPath = elementPath;
- fPresentationContext = presentationContext;
fRequestMonitor = requestMonitor;
- fClientUpdate = null;
- fCanceled = new AtomicBoolean(false);
+ fClientUpdate = new ClientUpdatePlaceHolder(elementPath, viewerInput, presentationContext);
}
protected RequestMonitor getRequestMonitor() {
return fRequestMonitor;
}
- public Object getViewerInput() { return fViewerInput; }
- public Object getElement() { return fElement; }
- public TreePath getElementPath() { return fElementPath; }
- public IPresentationContext getPresentationContext() { return fPresentationContext; }
+ public Object getViewerInput() { return fClientUpdate.getViewerInput(); }
+ public Object getElement() { return fClientUpdate.getElement(); }
+ public TreePath getElementPath() { return fClientUpdate.getElementPath(); }
+ public IPresentationContext getPresentationContext() { return fClientUpdate.getPresentationContext(); }
public IStatus getStatus() { return fRequestMonitor.getStatus(); }
public void setStatus(IStatus status) { fRequestMonitor.setStatus(status); }
public boolean isCanceled() {
- if (fClientUpdate != null) {
- return fClientUpdate.isCanceled();
- } else {
- return fCanceled.get();
- }
+ return fClientUpdate.isCanceled();
}
public void cancel() {
- if (fClientUpdate != null) {
- fClientUpdate.cancel();
- } else {
- fCanceled.set(true);
- }
+ fClientUpdate.cancel();
}
public void done() {
setSubmitted();
- try {
- if ( isCanceled() ) {
- fRequestMonitor.cancel();
- fRequestMonitor.setStatus(new Status( IStatus.CANCEL, DsfUIPlugin.PLUGIN_ID," Update was cancelled") ); //$NON-NLS-1$
- }
- fRequestMonitor.done();
- } catch (RejectedExecutionException e) {
- // If the request monitor cannot be invoked still, try to complete the update to avoid
- // leaving the viewer in an inconsistent state.
- if (fClientUpdate != null) {
- fClientUpdate.done();
- }
+ if ( isCanceled() ) {
+ fRequestMonitor.cancel();
+ fRequestMonitor.setStatus(new Status( IStatus.CANCEL, DsfUIPlugin.PLUGIN_ID," Update was cancelled") ); //$NON-NLS-1$
}
+ fRequestMonitor.done();
}
}

Back to the top