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 225813 Details for
Bug 398451
DirtyDecorator and ValidationDecorator should use the same dataStructures.
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]
adjusts dataStructures and fixes reload of dirtyDecorator
DirtyDecorator-2.patch (text/plain), 13.26 KB, created by
Tobias Verhoeven
on 2013-01-18 06:55:16 EST
(
hide
)
Description:
adjusts dataStructures and fixes reload of dirtyDecorator
Filename:
MIME Type:
Creator:
Tobias Verhoeven
Created:
2013-01-18 06:55:16 EST
Size:
13.26 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.emf.ecp.emfstore.ui >diff --git src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecorator.java src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecorator.java >index 2e7280d..8407987 100644 >--- src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecorator.java >+++ src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecorator.java >@@ -16,8 +16,7 @@ > import org.eclipse.emf.ecp.core.ECPProject; > import org.eclipse.emf.ecp.core.ECPProjectManager; > import org.eclipse.emf.ecp.core.util.observer.ECPObserverBus; >-import org.eclipse.emf.ecp.core.util.observer.IECPProjectObjectsChangedObserver; >-import org.eclipse.emf.ecp.core.util.observer.IECPProjectsChangedUIObserver; >+import org.eclipse.emf.ecp.core.util.observer.IECPProjectPreDeleteObserver; > import org.eclipse.emf.ecp.emfstore.core.internal.EMFStoreProvider; > import org.eclipse.emf.ecp.emfstore.internal.ui.Activator; > import org.eclipse.emf.ecp.spi.core.InternalProject; >@@ -30,77 +29,41 @@ > import org.eclipse.jface.viewers.ILabelProviderListener; > import org.eclipse.jface.viewers.ILightweightLabelDecorator; > >-import java.util.Arrays; > import java.util.HashMap; >-import java.util.HashSet; > import java.util.Map; >-import java.util.Set; > > /** > * @author Eugen Neufeld > */ >-public class EMFStoreDirtyDecorator implements ILightweightLabelDecorator, CommitObserver { >+public class EMFStoreDirtyDecorator implements ILightweightLabelDecorator, CommitObserver, IECPProjectPreDeleteObserver { > > private String dirtyPath = "icons/dirty.png"; >- private Map<InternalProject, EMFStoreDirtyObserver> observers = new HashMap<InternalProject, EMFStoreDirtyObserver>(); >+ private Map<ECPProject, EMFStoreDirtyObserver> observers = new HashMap<ECPProject, EMFStoreDirtyObserver>(); > >+ /** >+ * Instantiates a new EMFStoreDirtyDecorator. >+ */ > public EMFStoreDirtyDecorator() { >- EMFStoreDirtyDecoratorConnector con = new EMFStoreDirtyDecoratorConnector(); >- ECPObserverBus.getInstance().register(con); >- } >- >- private class EMFStoreDirtyDecoratorConnector implements IECPProjectObjectsChangedObserver, >- IECPProjectsChangedUIObserver { >- >- /** {@inheritDoc} */ >- public Object[] objectsChanged(ECPProject project, Object[] objects) throws Exception { >- if (project.getRepository() == null) { >- return null; >- } >- Set<EObject> allObjects = new HashSet<EObject>(); >- for (EMFStoreDirtyObserver observer : observers.values()) { >- allObjects.addAll(observer.getLastAffected()); >- } >- return allObjects.toArray(); >- } >- >- /** {@inheritDoc} */ >- public void projectsChanged(ECPProject[] oldProjects, ECPProject[] newProjects) throws Exception { >- Set<ECPProject> removed = new HashSet<ECPProject>(Arrays.asList(oldProjects)); >- removed.removeAll(Arrays.asList(newProjects)); >- >- for (ECPProject project : removed) { >- observers.remove(project); >- EMFStoreDirtyDecoratorCachedTree.getInstance(project).clear(); >- } >- } >- >- /** {@inheritDoc} */ >- public void projectChanged(ECPProject project, boolean opened) throws Exception { >- // Do nothing >- } >- >- /** {@inheritDoc} */ >- public void objectsChanged(ECPProject project, Object[] objects, boolean structural) throws Exception { >- // Do nothing >- } >- >+ super(); >+ ECPObserverBus.getInstance().register(this); > } > > /** {@inheritDoc} */ > public void decorate(Object element, IDecoration decoration) { >- > if (element instanceof ECPProject) { > InternalProject project = (InternalProject) element; >+ if (ECPProjectManager.INSTANCE.getProject(project.getName()) == null) { >+ return; >+ } > ProjectSpace projectSpace = EMFStoreProvider.INSTANCE.getProjectSpace(project); > > if (!observers.containsKey(element)) { > EMFStoreDirtyObserver emfStoreDirtyObserver = new EMFStoreDirtyObserver(projectSpace, project); > projectSpace.getOperationManager().addOperationListener(emfStoreDirtyObserver); >- observers.put(project, emfStoreDirtyObserver); >+ observers.put((ECPProject) element, emfStoreDirtyObserver); > } > if (project.isOpen() && EMFStoreProvider.INSTANCE.getProjectSpace(project).isShared() >- && EMFStoreDirtyDecoratorCachedTree.getInstance(project).getRootValue().shouldDisplayDirtyIndicator()) { >+ && EMFStoreDirtyDecoratorCachedTree.getInstance(project).getRootValue() > 0) { > decoration.addOverlay(Activator.getImageDescriptor(dirtyPath), IDecoration.BOTTOM_LEFT); > } > } >@@ -112,11 +75,8 @@ > } catch (IllegalArgumentException iae) { > // ignore > } >- if (project != null >- && project.isOpen() >- && EMFStoreProvider.INSTANCE.getProjectSpace(project).isShared() >- && EMFStoreDirtyDecoratorCachedTree.getInstance(project).getCachedValue(element) >- .shouldDisplayDirtyIndicator()) { >+ if (project != null && project.isOpen() && EMFStoreProvider.INSTANCE.getProjectSpace(project).isShared() >+ && EMFStoreDirtyDecoratorCachedTree.getInstance(project).getCachedValue(element) > 0) { > decoration.addOverlay(Activator.getImageDescriptor(dirtyPath), IDecoration.BOTTOM_LEFT); > } else { > decoration.addOverlay(null); >@@ -153,4 +113,10 @@ > ECPProject project = EMFStoreProvider.INSTANCE.getProject(projectSpace); > EMFStoreDirtyDecoratorCachedTree.getInstance(project).clear(); > } >+ >+ /** {@inheritDoc} */ >+ public void projectDelete(ECPProject project) { >+ EMFStoreDirtyDecoratorCachedTree.getInstance(project).clear(); >+ observers.remove(project); >+ } > } >diff --git src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecoratorCachedTree.java src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecoratorCachedTree.java >index c50be51..505f9b3 100644 >--- src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecoratorCachedTree.java >+++ src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecoratorCachedTree.java >@@ -28,7 +28,7 @@ > * @author emueller > * > */ >-public final class EMFStoreDirtyDecoratorCachedTree extends AbstractCachedTree<EMFStoreDirtyTreeNode> { >+public final class EMFStoreDirtyDecoratorCachedTree extends AbstractCachedTree<Integer> { > > private static Map<ECPProject, EMFStoreDirtyDecoratorCachedTree> cashedTrees = new HashMap<ECPProject, EMFStoreDirtyDecoratorCachedTree>(); > >@@ -60,7 +60,7 @@ > /** > * Cached tree node that stores the dirty state of a model element managed by EMFStore. > */ >- public class CachedDirtyStateTreeNode extends CachedTreeNode<EMFStoreDirtyTreeNode> { >+ public class CachedDirtyStateTreeNode extends CachedTreeNode<Integer> { > > /** > * Constructor. >@@ -68,8 +68,9 @@ > * @param value > * the initial value for this entry > */ >- public CachedDirtyStateTreeNode(EMFStoreDirtyTreeNode value) { >- super(value); >+ public CachedDirtyStateTreeNode(Integer value) { >+ super(0); >+ setChildValue(getDefaultValue()); > } > > /** >@@ -77,13 +78,13 @@ > */ > @Override > public void update() { >- for (EMFStoreDirtyTreeNode node : values()) { >- if (node.getChangeCount() > 0 || node.isChildChanges()) { >- getOwnValue().setChildChanges(true); >- return; >+ setChildValue(getDefaultValue()); >+ for (Integer value : values()) { >+ if (value > getChildValue()) { >+ setChildValue(value); >+ break; > } > } >- getOwnValue().setChildChanges(false); > } > > /* >@@ -91,8 +92,8 @@ > * @see org.eclipse.emf.ecp.ui.common.CachedTreeNode#getDisplayValue() > */ > @Override >- public EMFStoreDirtyTreeNode getDisplayValue() { >- return getOwnValue(); >+ public Integer getDisplayValue() { >+ return getChildValue() > 0 || getOwnValue() > 0 ? 1 : 0; > } > } > >@@ -100,26 +101,16 @@ > * {@inheritDoc} > */ > @Override >- public EMFStoreDirtyTreeNode getDefaultValue() { >- return new EMFStoreDirtyTreeNode(0, false); >+ public Integer getDefaultValue() { >+ return 0; > } > > /** > * {@inheritDoc} > */ > @Override >- public CachedTreeNode<EMFStoreDirtyTreeNode> createdCachedTreeNode(EMFStoreDirtyTreeNode t) { >+ public CachedTreeNode<Integer> createdCachedTreeNode(Integer t) { > return new CachedDirtyStateTreeNode(t); >- } >- >- /** >- * {@inheritDoc} >- */ >- @Override >- protected void updateParentNode(Object parent, Object object, EMFStoreDirtyTreeNode value) { >- EMFStoreDirtyTreeNode parentValue = getCachedValue(parent); >- parentValue.setChildChanges(value.shouldDisplayDirtyIndicator()); >- super.updateParentNode(parent, object, parentValue); > } > > /** >@@ -129,9 +120,12 @@ > * @return the {@link Set} of {@link EObject} affected by this change > */ > public Set<EObject> addOperation(EObject eObject) { >- EMFStoreDirtyTreeNode node = getCachedValue(eObject); >- node.setChangeCount(node.getChangeCount() + 1); >- return update(eObject, node); >+ int value = 0; >+ CachedTreeNode<Integer> node = nodes.get(eObject); >+ if (node != null) { >+ value = node.getOwnValue(); >+ } >+ return update(eObject, ++value); > } > > /** >@@ -141,18 +135,11 @@ > * @return the {@link Set} of {@link EObject} affected by this change > */ > public Set<EObject> removeOperation(EObject eObject) { >- EMFStoreDirtyTreeNode node = getCachedValue(eObject); >- node.setChangeCount(node.getChangeCount() - 1); >- // TODO @TOBI: why? >- // boolean hasChanges = false; >- // for (EObject child : eObject.eContents()) { >- // EMFStoreDirtyTreeNode childNode = getCachedValue(child); >- // if (childNode.shouldDisplayDirtyIndicator()) { >- // hasChanges = true; >- // break; >- // } >- // } >- // node.setChildChanges(hasChanges); >- return update(eObject, node); >+ int value = 0; >+ CachedTreeNode<Integer> node = nodes.get(eObject); >+ if (node != null) { >+ value = node.getOwnValue(); >+ } >+ return update(eObject, Math.max(0, --value)); > } > } >diff --git src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyObserver.java src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyObserver.java >index e19a20d..0b4edee 100644 >--- src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyObserver.java >+++ src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyObserver.java >@@ -20,6 +20,9 @@ > import org.eclipse.emf.emfstore.common.model.Project; > import org.eclipse.emf.emfstore.server.model.versioning.operations.AbstractOperation; > >+import org.eclipse.ui.IDecoratorManager; >+import org.eclipse.ui.PlatformUI; >+ > import java.util.HashSet; > import java.util.Set; > >@@ -74,13 +77,14 @@ > lastAffected > .addAll(EMFStoreDirtyDecoratorCachedTree.getInstance(internalProject).addOperation(element)); > } >+ IDecoratorManager decoratorManager = PlatformUI.getWorkbench().getDecoratorManager(); >+ decoratorManager.update("org.eclipse.emf.ecp.emfstore.ui.decorators.EMFStoreDirtyDecorator"); > } > > } > > /** {@inheritDoc} */ > public void operationUnDone(AbstractOperation operation) { >- > if (!projectSpace.isShared()) { > return; > } >@@ -94,8 +98,9 @@ > lastAffected.addAll(EMFStoreDirtyDecoratorCachedTree.getInstance(internalProject).removeOperation( > element)); > } >+ IDecoratorManager decoratorManager = PlatformUI.getWorkbench().getDecoratorManager(); >+ decoratorManager.update("org.eclipse.emf.ecp.emfstore.ui.decorators.EMFStoreDirtyDecorator"); > } >- > } > > /** >#P org.eclipse.emf.ecp.ui >diff --git src/org/eclipse/emf/ecp/ui/common/AbstractCachedTree.java src/org/eclipse/emf/ecp/ui/common/AbstractCachedTree.java >index 51f6b17..47c486a 100644 >--- src/org/eclipse/emf/ecp/ui/common/AbstractCachedTree.java >+++ src/org/eclipse/emf/ecp/ui/common/AbstractCachedTree.java >@@ -35,7 +35,7 @@ > */ > public abstract class AbstractCachedTree<T> { > >- private Map<Object, CachedTreeNode<T>> nodes; >+ protected Map<Object, CachedTreeNode<T>> nodes; > private CachedTreeNode<T> rootValue; > private IExcludedObjectsCallback excludedCallback; > >@@ -209,7 +209,7 @@ > node.setParent(parent); > > if (parentNode == null) { >- parentNode = createNodeEntry(parent, value); >+ parentNode = createNodeEntry(parent, getDefaultValue()); > } > > parentNode.putIntoCache(object, value); >#P org.eclipse.emf.ecp.validation.connector >diff --git src/org/eclipse/emf/ecp/validation/connector/ValidationFailedDecorator.java src/org/eclipse/emf/ecp/validation/connector/ValidationFailedDecorator.java >index dd6d8ba..5553df3 100644 >--- src/org/eclipse/emf/ecp/validation/connector/ValidationFailedDecorator.java >+++ src/org/eclipse/emf/ecp/validation/connector/ValidationFailedDecorator.java >@@ -16,8 +16,6 @@ > import org.eclipse.emf.ecore.EObject; > import org.eclipse.emf.ecp.core.ECPProject; > import org.eclipse.emf.ecp.core.ECPProjectManager; >-import org.eclipse.emf.ecp.internal.core.ECPProjectManagerImpl; >-import org.eclipse.emf.ecp.spi.core.InternalProject; > import org.eclipse.jface.viewers.IDecoration; > import org.eclipse.jface.viewers.ILightweightLabelDecorator; > import org.eclipse.jface.viewers.LabelProvider; >@@ -34,7 +32,8 @@ > * {@inheritDoc} > */ > public void decorate(final Object element, IDecoration decoration) { >- >+ >+ > if (!(element instanceof EObject) && !(element instanceof ECPProject)) { > return; > } >@@ -49,6 +48,9 @@ > severity = Activator.getDefault().getValidationService(project).getDiagnostic(element).getSeverity(); > } > } else if (element instanceof ECPProject && ((ECPProject)element).isOpen()) { >+ if (ECPProjectManager.INSTANCE.getProject(((ECPProject) element).getName()) == null) { >+ return; >+ } > severity = Activator.getDefault().getValidationService((ECPProject) element).getRootDiagnostic().getSeverity(); > } >
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
Flags:
eneufeld
:
iplog+
Actions:
View
|
Diff
Attachments on
bug 398451
:
225793
| 225813