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 224385 Details for
Bug 395917
Dirty Decorator not working properly.
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]
dirty decorator-patch
dirtyDecorator.patch (text/plain), 9.07 KB, created by
Tobias Verhoeven
on 2012-12-06 11:48:19 EST
(
hide
)
Description:
dirty decorator-patch
Filename:
MIME Type:
Creator:
Tobias Verhoeven
Created:
2012-12-06 11:48:19 EST
Size:
9.07 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/Activator.java src/org/eclipse/emf/ecp/emfstore/internal/ui/Activator.java >index c16109d..c034da5 100644 >--- src/org/eclipse/emf/ecp/emfstore/internal/ui/Activator.java >+++ src/org/eclipse/emf/ecp/emfstore/internal/ui/Activator.java >@@ -1,6 +1,5 @@ > package org.eclipse.emf.ecp.emfstore.internal.ui; > >-import org.eclipse.emf.ecp.core.util.observer.ECPObserverBus; > import org.eclipse.emf.ecp.emfstore.internal.ui.decorator.EMFStoreDirtyObserver; > > import org.eclipse.core.runtime.CoreException; >@@ -26,14 +25,10 @@ > public void start(BundleContext context) throws Exception { > super.start(context); > instance = this; >- >- dirtyObserver = new EMFStoreDirtyObserver(); >- ECPObserverBus.getInstance().register(dirtyObserver); > } > > @Override > public void stop(BundleContext context) throws Exception { >- ECPObserverBus.getInstance().unregister(dirtyObserver); > instance = null; > super.stop(context); > } >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 b90fbba..897794d 100644 >--- src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecorator.java >+++ src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecorator.java >@@ -37,23 +37,27 @@ > /** {@inheritDoc} */ > public void decorate(Object element, IDecoration decoration) { > >+ if (element instanceof ECPProject) { >+ InternalProject project = (InternalProject) element; >+ ProjectSpace projectSpace = EMFStoreProvider.INSTANCE.getProjectSpace(project); >+ projectSpace.getOperationManager().addOperationListener(new EMFStoreDirtyObserver(projectSpace, project)); >+ >+ if (project.isOpen() && EMFStoreProvider.INSTANCE.getProjectSpace(project).isShared() >+ && EMFStoreDirtyDecoratorCachedTree.getInstance(project).getRootValue() > 0) { >+ decoration.addOverlay(Activator.getImageDescriptor(dirtyPath), IDecoration.BOTTOM_LEFT); >+ } >+ } >+ > if (element instanceof EObject) { > InternalProject project = ECPUtil.getECPProject(element, InternalProject.class); > if (project != null && project.isOpen() && EMFStoreProvider.INSTANCE.getProjectSpace(project).isShared() >- && EMFStoreDirtyDecoratorCachedTree.getInstance(project).getCachedValue(element) == Boolean.TRUE) { >+ && EMFStoreDirtyDecoratorCachedTree.getInstance(project).getCachedValue(element) > 0) { > decoration.addOverlay(Activator.getImageDescriptor(dirtyPath), IDecoration.BOTTOM_LEFT); > } > > return; > } > >- if (element instanceof ECPProject) { >- InternalProject project = (InternalProject) element; >- if (project.isOpen() && EMFStoreProvider.INSTANCE.getProjectSpace(project).isShared() >- && EMFStoreDirtyDecoratorCachedTree.getInstance(project).getRootValue() == Boolean.TRUE) { >- decoration.addOverlay(Activator.getImageDescriptor(dirtyPath), IDecoration.BOTTOM_LEFT); >- } >- } > } > > /** {@inheritDoc} */ >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 5edfd5e..e4f2d82 100644 >--- src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecoratorCachedTree.java >+++ src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecoratorCachedTree.java >@@ -12,6 +12,7 @@ > *******************************************************************************/ > package org.eclipse.emf.ecp.emfstore.internal.ui.decorator; > >+import org.eclipse.emf.ecore.EObject; > import org.eclipse.emf.ecp.core.ECPProject; > import org.eclipse.emf.ecp.ui.common.AbstractCachedTree; > import org.eclipse.emf.ecp.ui.common.CachedTreeNode; >@@ -26,7 +27,7 @@ > * @author emueller > * > */ >-public final class EMFStoreDirtyDecoratorCachedTree extends AbstractCachedTree<Boolean> { >+public final class EMFStoreDirtyDecoratorCachedTree extends AbstractCachedTree<Integer> { > > private static Map<ECPProject, EMFStoreDirtyDecoratorCachedTree> cashedTrees = new HashMap<ECPProject, EMFStoreDirtyDecoratorCachedTree>(); > >@@ -57,7 +58,7 @@ > /** > * Cached tree node that stores the dirty state of a model element managed by EMFStore. > */ >- public class CachedDirtyStateTreeNode extends CachedTreeNode<Boolean> { >+ public class CachedDirtyStateTreeNode extends CachedTreeNode<Integer> { > > /** > * Constructor. >@@ -65,7 +66,7 @@ > * @param value > * the initial value for this entry > */ >- public CachedDirtyStateTreeNode(Boolean value) { >+ public CachedDirtyStateTreeNode(Integer value) { > super(value); > } > >@@ -74,14 +75,14 @@ > */ > @Override > public void update() { >- for (Boolean isDirty : values()) { >- if (isDirty) { >+ for (Integer isDirty : values()) { >+ if (isDirty > 0) { > setValue(isDirty); > return; > } > } > >- setValue(false); >+ setValue(0); > } > } > >@@ -89,16 +90,23 @@ > * {@inheritDoc} > */ > @Override >- public Boolean getDefaultValue() { >- return Boolean.FALSE; >+ public Integer getDefaultValue() { >+ return 0; > } > > /** > * {@inheritDoc} > */ > @Override >- public CachedTreeNode<Boolean> createdCachedTreeNode(Boolean t) { >+ public CachedTreeNode<Integer> createdCachedTreeNode(Integer t) { > return new CachedDirtyStateTreeNode(t); > } > >+ public void addOperation(EObject eObject) { >+ update(eObject, getCachedValue(eObject) + 1); >+ } >+ >+ public void removeOperation(EObject eObject) { >+ update(eObject, getCachedValue(eObject) - 1); >+ } > } >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 045e584..f91c5ba 100644 >--- src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyObserver.java >+++ src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyObserver.java >@@ -13,53 +13,61 @@ > package org.eclipse.emf.ecp.emfstore.internal.ui.decorator; > > import org.eclipse.emf.ecore.EObject; >-import org.eclipse.emf.ecp.core.ECPProject; >-import org.eclipse.emf.ecp.core.util.observer.IECPProjectsChangedUIObserver; >-import org.eclipse.emf.ecp.emfstore.core.internal.EMFStoreProvider; > import org.eclipse.emf.ecp.spi.core.InternalProject; >- >-import java.util.HashSet; >+import org.eclipse.emf.emfstore.client.model.ProjectSpace; >+import org.eclipse.emf.emfstore.client.model.observers.OperationObserver; >+import org.eclipse.emf.emfstore.common.model.ModelElementId; >+import org.eclipse.emf.emfstore.common.model.Project; >+import org.eclipse.emf.emfstore.server.model.versioning.operations.AbstractOperation; > > /** > * Project change observer that marks elements as dirty. > */ >-public class EMFStoreDirtyObserver implements IECPProjectsChangedUIObserver { >+public class EMFStoreDirtyObserver implements OperationObserver { > >- private HashSet<Object> excludedObjects; >+ private ProjectSpace projectSpace; >+ private InternalProject internalProject; > > /** > * Default constructor. >+ * >+ * @param project > */ >- public EMFStoreDirtyObserver() { >- >+ public EMFStoreDirtyObserver(ProjectSpace projectSpace, InternalProject project) { >+ this.projectSpace = projectSpace; >+ internalProject = project; > } > >- // BEGIN SUPRESS CATCH EXCEPTION >- public void projectsChanged(ECPProject[] oldProjects, ECPProject[] newProjects) throws Exception { >+ /* >+ * (non-Javadoc) >+ * @see >+ * org.eclipse.emf.emfstore.client.model.observers.OperationObserver#operationExecuted(org.eclipse.emf.emfstore. >+ * server.model.versioning.operations.AbstractOperation) >+ */ >+ public void operationExecuted(AbstractOperation operation) { >+ for (ModelElementId modelElementId : operation.getAllInvolvedModelElements()) { >+ Project project = projectSpace.getProject(); >+ EObject element = project.getModelElement(modelElementId); > >- } >- >- public void projectChanged(ECPProject project, boolean opened) throws Exception { >- >- } >- >- public void objectsChanged(ECPProject project, Object[] objects, boolean structural) throws Exception { >- >- if (EMFStoreProvider.INSTANCE.getProjectSpace((InternalProject) project).isShared()) { >- return; >+ EMFStoreDirtyDecoratorCachedTree.getInstance(internalProject).addOperation(element); > } >- // for all changed objects >- for (Object object : objects) { >- // not an eobject then do nothing >- if (!(object instanceof EObject)) { >- continue; >- } > >- EObject eObject = (EObject) object; >+ } > >- EMFStoreDirtyDecoratorCachedTree.getInstance(project).update(eObject, Boolean.TRUE); >+ /* >+ * (non-Javadoc) >+ * @see >+ * org.eclipse.emf.emfstore.client.model.observers.OperationObserver#operationUnDone(org.eclipse.emf.emfstore.server >+ * .model.versioning.operations.AbstractOperation) >+ */ >+ public void operationUnDone(AbstractOperation operation) { >+ for (ModelElementId modelElementId : operation.getAllInvolvedModelElements()) { >+ Project project = projectSpace.getProject(); >+ EObject element = project.getModelElement(modelElementId); > >+ EMFStoreDirtyDecoratorCachedTree.getInstance(internalProject).removeOperation(element); > } >+ > } > > // END SUPRESS CATCH EXCEPTION
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 395917
: 224385