Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultUpdatePolicy.java')
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultUpdatePolicy.java114
1 files changed, 114 insertions, 0 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultUpdatePolicy.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultUpdatePolicy.java
new file mode 100644
index 000000000..55e90eadc
--- /dev/null
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultUpdatePolicy.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.debug.internal.ui.viewers.update;
+
+import java.util.ArrayList;
+
+import org.eclipse.debug.internal.ui.viewers.AsynchronousTreeViewer;
+import org.eclipse.debug.internal.ui.viewers.AsynchronousViewer;
+import org.eclipse.debug.internal.ui.viewers.IModelChangedListener;
+import org.eclipse.debug.internal.ui.viewers.IModelDelta;
+import org.eclipse.debug.internal.ui.viewers.IModelDeltaNode;
+import org.eclipse.debug.internal.ui.viewers.TreePath;
+import org.eclipse.debug.internal.ui.viewers.TreeSelection;
+
+/**
+ * Default update policy updates a viewer based on model deltas.
+ *
+ * @since 3.2
+ */
+public class DefaultUpdatePolicy extends AbstractUpdatePolicy implements IModelChangedListener {
+
+ public void modelChanged(IModelDelta delta) {
+ IModelDeltaNode[] nodes = delta.getNodes();
+ updateNodes(nodes);
+ }
+
+ protected void updateNodes(IModelDeltaNode[] nodes) {
+ for (int i = 0; i < nodes.length; i++) {
+ IModelDeltaNode node = nodes[i];
+ int flags = node.getFlags();
+
+ if ((flags & IModelDelta.CHANGED) != 0) {
+ handleChange(node);
+ } else if ((flags & IModelDelta.ADDED) != 0) {
+ handleAdd(node);
+ } else if ((flags & IModelDelta.REMOVED) != 0) {
+ handleRemove(node);
+ }
+
+ IModelDeltaNode[] childNodes = node.getNodes();
+ for (int j = 0; j < childNodes.length; j++) {
+ updateNodes(childNodes);
+ }
+ }
+ }
+
+ protected void handleChange(IModelDeltaNode node) {
+ int flags = node.getFlags();
+ AsynchronousViewer viewer = getViewer();
+ if (viewer != null) {
+ if ((flags & IModelDelta.STATE) != 0) {
+ viewer.update(node.getElement());
+ }
+ if ((flags & IModelDelta.CONTENT) != 0) {
+ viewer.refresh(node.getElement());
+ }
+ if ((flags & IModelDelta.SELECT) != 0) {
+ viewer.update(node.getElement());
+ TreePath treePath = getTreePath(node);
+ ((AsynchronousTreeViewer) getViewer()).setSelection(new TreeSelection(treePath));
+ }
+ if ((flags & IModelDelta.EXPAND) != 0) {
+ viewer.update(node.getElement());
+ TreePath treePath = getTreePath(node);
+ ((AsynchronousTreeViewer) getViewer()).expand(new TreeSelection(treePath));
+ }
+ }
+ }
+
+ protected void handleAdd(IModelDeltaNode node) {
+ int flags = node.getFlags();
+ final TreePath treePath = getTreePath(node);
+
+ ((AsynchronousTreeViewer) getViewer()).add(treePath);
+
+ if ((flags & IModelDelta.STATE) != 0) {
+ // do nothing??
+ }
+ if ((flags & IModelDelta.CONTENT) != 0) {
+ // do nothing??
+ }
+ if ((flags & IModelDelta.SELECT) != 0) {
+ ((AsynchronousTreeViewer) getViewer()).setSelection(new TreeSelection(treePath));
+ }
+ if ((flags & IModelDelta.EXPAND) != 0) {
+ ((AsynchronousTreeViewer) getViewer()).expand(new TreeSelection(treePath));
+ }
+ }
+
+ protected void handleRemove(IModelDeltaNode node) {
+ TreePath treePath = getTreePath(node);
+ ((AsynchronousTreeViewer) getViewer()).remove(treePath);
+ }
+
+ protected TreePath getTreePath(IModelDeltaNode node) {
+ ArrayList list = new ArrayList();
+ list.add(0, node.getElement());
+ while (node.getParent() != null) {
+ node = node.getParent();
+ list.add(0, node.getElement());
+ }
+
+ return new TreePath(list.toArray());
+ }
+
+}

Back to the top