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 224407 Details for
Bug 395957
No dirty decorators after startup.
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]
patch for filling the cache Tree at the beginning
dirtyDecoratorStartupParent.patch (text/plain), 8.54 KB, created by
Tobias Verhoeven
on 2012-12-06 17:45:37 EST
(
hide
)
Description:
patch for filling the cache Tree at the beginning
Filename:
MIME Type:
Creator:
Tobias Verhoeven
Created:
2012-12-06 17:45:37 EST
Size:
8.54 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 897794d..f71ba1a 100644 >--- src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecorator.java >+++ src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecorator.java >@@ -27,12 +27,16 @@ > import org.eclipse.jface.viewers.ILabelProviderListener; > import org.eclipse.jface.viewers.ILightweightLabelDecorator; > >+import java.util.HashSet; >+import java.util.Set; >+ > /** > * @author Eugen Neufeld > */ > public class EMFStoreDirtyDecorator implements ILightweightLabelDecorator, CommitObserver { > > private String dirtyPath = "icons/dirty.png"; >+ private Set<InternalProject> observers = new HashSet<InternalProject>(); > > /** {@inheritDoc} */ > public void decorate(Object element, IDecoration decoration) { >@@ -40,18 +44,30 @@ > if (element instanceof ECPProject) { > InternalProject project = (InternalProject) element; > ProjectSpace projectSpace = EMFStoreProvider.INSTANCE.getProjectSpace(project); >- projectSpace.getOperationManager().addOperationListener(new EMFStoreDirtyObserver(projectSpace, project)); > >+ if (!observers.contains(element)) { >+ projectSpace.getOperationManager().addOperationListener( >+ new EMFStoreDirtyObserver(projectSpace, project)); >+ observers.add(project); >+ } > if (project.isOpen() && EMFStoreProvider.INSTANCE.getProjectSpace(project).isShared() >- && EMFStoreDirtyDecoratorCachedTree.getInstance(project).getRootValue() > 0) { >+ && EMFStoreDirtyDecoratorCachedTree.getInstance(project).getRootValue().shouldDisplayDirtyIndicator()) { > 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) > 0) { >+ InternalProject project = null; >+ try { >+ project = ECPUtil.getECPProject(element, InternalProject.class); >+ } catch (IllegalArgumentException iae) { >+ // ignore >+ } >+ if (project != null >+ && project.isOpen() >+ && EMFStoreProvider.INSTANCE.getProjectSpace(project).isShared() >+ && EMFStoreDirtyDecoratorCachedTree.getInstance(project).getCachedValue(element) >+ .shouldDisplayDirtyIndicator()) { > decoration.addOverlay(Activator.getImageDescriptor(dirtyPath), IDecoration.BOTTOM_LEFT); > } > >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 e4f2d82..289c63a 100644 >--- src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecoratorCachedTree.java >+++ src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecoratorCachedTree.java >@@ -27,7 +27,7 @@ > * @author emueller > * > */ >-public final class EMFStoreDirtyDecoratorCachedTree extends AbstractCachedTree<Integer> { >+public final class EMFStoreDirtyDecoratorCachedTree extends AbstractCachedTree<EMFStoreDirtyTreeNode> { > > private static Map<ECPProject, EMFStoreDirtyDecoratorCachedTree> cashedTrees = new HashMap<ECPProject, EMFStoreDirtyDecoratorCachedTree>(); > >@@ -58,7 +58,7 @@ > /** > * Cached tree node that stores the dirty state of a model element managed by EMFStore. > */ >- public class CachedDirtyStateTreeNode extends CachedTreeNode<Integer> { >+ public class CachedDirtyStateTreeNode extends CachedTreeNode<EMFStoreDirtyTreeNode> { > > /** > * Constructor. >@@ -66,7 +66,7 @@ > * @param value > * the initial value for this entry > */ >- public CachedDirtyStateTreeNode(Integer value) { >+ public CachedDirtyStateTreeNode(EMFStoreDirtyTreeNode value) { > super(value); > } > >@@ -75,14 +75,13 @@ > */ > @Override > public void update() { >- for (Integer isDirty : values()) { >- if (isDirty > 0) { >- setValue(isDirty); >+ for (EMFStoreDirtyTreeNode node : values()) { >+ if (node.getChangeCount() > 0 || node.isChildChanges()) { >+ getValue().setChildChanges(true); > return; > } > } >- >- setValue(0); >+ getValue().setChildChanges(false); > } > } > >@@ -90,23 +89,27 @@ > * {@inheritDoc} > */ > @Override >- public Integer getDefaultValue() { >- return 0; >+ public EMFStoreDirtyTreeNode getDefaultValue() { >+ return new EMFStoreDirtyTreeNode(0, false); > } > > /** > * {@inheritDoc} > */ > @Override >- public CachedTreeNode<Integer> createdCachedTreeNode(Integer t) { >+ public CachedTreeNode<EMFStoreDirtyTreeNode> createdCachedTreeNode(EMFStoreDirtyTreeNode t) { > return new CachedDirtyStateTreeNode(t); > } > > public void addOperation(EObject eObject) { >- update(eObject, getCachedValue(eObject) + 1); >+ EMFStoreDirtyTreeNode node = getCachedValue(eObject); >+ node.setChangeCount(node.getChangeCount() + 1); >+ update(eObject, node); > } > > public void removeOperation(EObject eObject) { >- update(eObject, getCachedValue(eObject) - 1); >+ EMFStoreDirtyTreeNode node = getCachedValue(eObject); >+ node.setChangeCount(node.getChangeCount() - 1); >+ update(eObject, node); > } > } >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 f91c5ba..08bd725 100644 >--- src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyObserver.java >+++ src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyObserver.java >@@ -36,6 +36,17 @@ > public EMFStoreDirtyObserver(ProjectSpace projectSpace, InternalProject project) { > this.projectSpace = projectSpace; > internalProject = project; >+ >+ if (!projectSpace.isShared()) { >+ return; >+ } >+ for (AbstractOperation operation : projectSpace.getOperations()) { >+ for (ModelElementId modelElementId : operation.getAllInvolvedModelElements()) { >+ EObject element = projectSpace.getProject().getModelElement(modelElementId); >+ EMFStoreDirtyDecoratorCachedTree.getInstance(internalProject).addOperation(element); >+ } >+ } >+ > } > > /* >@@ -45,11 +56,19 @@ > * server.model.versioning.operations.AbstractOperation) > */ > public void operationExecuted(AbstractOperation operation) { >+ >+ if (!projectSpace.isShared()) { >+ return; >+ } >+ > for (ModelElementId modelElementId : operation.getAllInvolvedModelElements()) { > Project project = projectSpace.getProject(); >+ > EObject element = project.getModelElement(modelElementId); > >- EMFStoreDirtyDecoratorCachedTree.getInstance(internalProject).addOperation(element); >+ if (element != null) { >+ EMFStoreDirtyDecoratorCachedTree.getInstance(internalProject).addOperation(element); >+ } > } > > } >@@ -61,11 +80,18 @@ > * .model.versioning.operations.AbstractOperation) > */ > public void operationUnDone(AbstractOperation operation) { >+ >+ if (!projectSpace.isShared()) { >+ return; >+ } >+ > for (ModelElementId modelElementId : operation.getAllInvolvedModelElements()) { > Project project = projectSpace.getProject(); > EObject element = project.getModelElement(modelElementId); > >- EMFStoreDirtyDecoratorCachedTree.getInstance(internalProject).removeOperation(element); >+ if (element != null) { >+ EMFStoreDirtyDecoratorCachedTree.getInstance(internalProject).removeOperation(element); >+ } > } > > } >diff --git src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyTreeNode.java src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyTreeNode.java >new file mode 100644 >index 0000000..ddc4050 >--- /dev/null >+++ src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyTreeNode.java >@@ -0,0 +1,35 @@ >+package org.eclipse.emf.ecp.emfstore.internal.ui.decorator; >+ >+/** >+ * @author Tobias Verhoeven >+ */ >+public class EMFStoreDirtyTreeNode { >+ >+ private int changeCount; >+ private boolean childChanges; >+ >+ public EMFStoreDirtyTreeNode(int changeCount, boolean childChanges) { >+ this.changeCount = changeCount; >+ this.childChanges = childChanges; >+ } >+ >+ public boolean shouldDisplayDirtyIndicator() { >+ return childChanges || changeCount > 0; >+ } >+ >+ public int getChangeCount() { >+ return changeCount; >+ } >+ >+ public void setChangeCount(int changeCount) { >+ this.changeCount = changeCount; >+ } >+ >+ public boolean isChildChanges() { >+ return childChanges; >+ } >+ >+ public void setChildChanges(boolean childChanges) { >+ this.childChanges = childChanges; >+ } >+}
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 395957
: 224407