/******************************************************************************* * Copyright (c) 2006, 2011 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 * Wind River Systems - Fix for viewer state save/restore [188704] *******************************************************************************/ package org.eclipse.debug.internal.ui.viewers.model; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest; import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer; import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; import org.eclipse.jface.viewers.TreePath; import org.eclipse.ui.IMemento; /** * @since 3.3 */ public class ElementCompareRequest extends MementoUpdate implements IElementCompareRequest { private boolean fEqual; private final int fModelIndex; private ModelDelta fDelta; private boolean fKnowsHasChildren; private boolean fKnowsChildCount; private boolean fCheckChildrenRealized; /** * @param provider the content provider to use for the update * @param viewerInput the current input * @param element the element to update * @param elementPath the path of the element to update * @param memento Memento to encode result into * @param delta Delta to write the result comparison into. * @param modelIndex Index of element to compare. * @param knowsHasChildren Flag indicating whether provider knows the has * children state of element. * @param knowsChildCount Flag indicating whether provider knows the * child count state of element. * @param checkChildrenRealized Flag indicating if any realized children should be checked */ public ElementCompareRequest(TreeModelContentProvider provider, Object viewerInput, Object element, TreePath elementPath, IMemento memento, ModelDelta delta, int modelIndex, boolean knowsHasChildren, boolean knowsChildCount, boolean checkChildrenRealized) { super(provider, viewerInput, provider.getPresentationContext(), element, elementPath, memento); fProvider = provider; fDelta = delta; fModelIndex = modelIndex; fKnowsHasChildren = knowsHasChildren; fKnowsChildCount = knowsChildCount; fCheckChildrenRealized = checkChildrenRealized; } /* (non-Javadoc) * @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest#setEqual(boolean) */ @Override public void setEqual(boolean equal) { fEqual = equal; } /* (non-Javadoc) * @see org.eclipse.core.runtime.IProgressMonitor#done() */ @Override public void done() { ITreeModelViewer viewer = getContentProvider().getViewer(); if (viewer == null) return; // disposed if (viewer.getDisplay().getThread() == Thread.currentThread()) { fProvider.getStateTracker().compareFinished(ElementCompareRequest.this, fDelta); } else { viewer.getDisplay().asyncExec(new Runnable() { @Override public void run() { if (getContentProvider().isDisposed()) return; fProvider.getStateTracker().compareFinished(ElementCompareRequest.this, fDelta); } }); } } public boolean isEqual() { return fEqual; } ModelDelta getDelta() { return fDelta; } int getModelIndex() { return fModelIndex; } void setKnowsHasChildren(boolean hasChildren) { fKnowsHasChildren = hasChildren; } boolean knowsHasChildren() { return fKnowsHasChildren; } void setKnowsChildCount(boolean childCount) { fKnowsChildCount = childCount; } boolean knowChildCount() { return fKnowsChildCount; } void setCheckChildrenRealized(boolean checkChildrenRealized) { fCheckChildrenRealized = checkChildrenRealized; } boolean checkChildrenRealized() { return fCheckChildrenRealized; } @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("IElementCompareRequest: "); //$NON-NLS-1$ buf.append(getElement()); return buf.toString(); } }