Skip to content

Package: EMFStoreDirtyDecorator

EMFStoreDirtyDecorator

nameinstructionbranchcomplexitylinemethod
EMFStoreDirtyDecorator()
M: 6 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
addListener(ILabelProviderListener)
M: 1 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
commitCompleted(ESLocalProject, ESPrimaryVersionSpec, IProgressMonitor)
M: 13 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 4 C: 0
0%
M: 1 C: 0
0%
decorate(Object, IDecoration)
M: 96 C: 0
0%
M: 22 C: 0
0%
M: 12 C: 0
0%
M: 24 C: 0
0%
M: 1 C: 0
0%
dispose()
M: 1 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
inspectChanges(ESLocalProject, ESChangePackage, IProgressMonitor)
M: 2 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
isLabelProperty(Object, String)
M: 2 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
projectDelete(ECPProject)
M: 7 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
removeListener(ILabelProviderListener)
M: 1 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
static {...}
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2012 EclipseSource Muenchen GmbH and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * Eugen Neufeld - initial API and implementation
13: *
14: ******************************************************************************/
15: package org.eclipse.emf.ecp.emfstore.internal.ui.decorator;
16:
17: import java.util.HashMap;
18: import java.util.Map;
19:
20: import org.eclipse.core.runtime.IProgressMonitor;
21: import org.eclipse.emf.ecore.EObject;
22: import org.eclipse.emf.ecp.core.ECPProject;
23: import org.eclipse.emf.ecp.core.util.ECPUtil;
24: import org.eclipse.emf.ecp.core.util.observer.ECPProjectPreDeleteObserver;
25: import org.eclipse.emf.ecp.emfstore.core.internal.EMFStoreProvider;
26: import org.eclipse.emf.ecp.emfstore.internal.ui.e3.Activator;
27: import org.eclipse.emf.ecp.spi.core.InternalProject;
28: import org.eclipse.emf.emfstore.client.ESLocalProject;
29: import org.eclipse.emf.emfstore.client.observer.ESCommitObserver;
30: import org.eclipse.emf.emfstore.internal.client.model.ESWorkspaceProviderImpl;
31: import org.eclipse.emf.emfstore.internal.client.model.ProjectSpace;
32: import org.eclipse.emf.emfstore.internal.client.model.impl.api.ESLocalProjectImpl;
33: import org.eclipse.emf.emfstore.server.model.ESChangePackage;
34: import org.eclipse.emf.emfstore.server.model.versionspec.ESPrimaryVersionSpec;
35: import org.eclipse.jface.viewers.IDecoration;
36: import org.eclipse.jface.viewers.ILabelProviderListener;
37: import org.eclipse.jface.viewers.ILightweightLabelDecorator;
38:
39: /**
40: * @author Eugen Neufeld
41: */
42: public class EMFStoreDirtyDecorator implements ILightweightLabelDecorator, ESCommitObserver,
43:         ECPProjectPreDeleteObserver {
44:
45:         public final static String dirtyPath = "icons/dirty.png"; //$NON-NLS-1$
46:         private static Map<ECPProject, EMFStoreDirtyObserver> observers = new HashMap<ECPProject, EMFStoreDirtyObserver>();
47:
48:         /**
49:          * Instantiates a new EMFStoreDirtyDecorator.
50:          */
51:         public EMFStoreDirtyDecorator() {
52:                 super();
53:                 ECPUtil.getECPObserverBus().register(this);
54:         }
55:
56:         /** {@inheritDoc} */
57:         @Override
58:         public void decorate(Object element, IDecoration decoration) {
59:•                if (element instanceof ECPProject) {
60:                         final InternalProject project = (InternalProject) element;
61:•                        if (ECPUtil.getECPProjectManager().getProject(project.getName()) == null) {
62:                                 return;
63:                         }
64:                         final ProjectSpace projectSpace = ((ESLocalProjectImpl) EMFStoreProvider.INSTANCE.getProjectSpace(project))
65:                                 .toInternalAPI();
66:
67:•                        if (!observers.containsKey(element)) {
68:                                 final EMFStoreDirtyObserver emfStoreDirtyObserver = new EMFStoreDirtyObserver(projectSpace, project);
69:                                 ESWorkspaceProviderImpl.getObserverBus().register(emfStoreDirtyObserver);
70:                                 // projectSpace.getOperationManager().addOperationObserver(emfStoreDirtyObserver);
71:                                 observers.put((ECPProject) element, emfStoreDirtyObserver);
72:                         }
73:•                        if (project.isOpen() && projectSpace.isShared() && observers.get(element).isDirty()) {
74:                                 decoration.addOverlay(Activator.getImageDescriptor(dirtyPath), IDecoration.BOTTOM_LEFT);
75:                         }
76:                 }
77:
78:•                else if (element instanceof EObject) {
79:                         InternalProject project = null;
80:                         try {
81:                                 project = (InternalProject) ECPUtil.getECPProjectManager().getProject(element);
82:                         } catch (final IllegalArgumentException iae) {
83:                                 // ignore
84:                         }
85:•                        if (project != null && project.isOpen() && EMFStoreProvider.INSTANCE.getProjectSpace(project).isShared()
86:•                                && EMFStoreDirtyDecoratorCachedTree.getInstance(project).getCachedValue(element) > 0) {
87:                                 decoration.addOverlay(Activator.getImageDescriptor(dirtyPath), IDecoration.BOTTOM_LEFT);
88:                         } else {
89:                                 decoration.addOverlay(null);
90:                         }
91:                         return;
92:                 }
93:
94:         }
95:
96:         /** {@inheritDoc} */
97:         @Override
98:         public void addListener(ILabelProviderListener listener) {
99:         }
100:
101:         /** {@inheritDoc} */
102:         @Override
103:         public void dispose() {
104:         }
105:
106:         /** {@inheritDoc} */
107:         @Override
108:         public boolean isLabelProperty(Object element, String property) {
109:                 return false;
110:         }
111:
112:         /** {@inheritDoc} */
113:         @Override
114:         public void removeListener(ILabelProviderListener listener) {
115:         }
116:
117:         /** {@inheritDoc} */
118:         @Override
119:         public boolean inspectChanges(ESLocalProject localProject, ESChangePackage changePackage,
120:                 IProgressMonitor monitor) {
121:                 return true;
122:         }
123:
124:         /** {@inheritDoc} */
125:         @Override
126:         public void commitCompleted(ESLocalProject localProject, ESPrimaryVersionSpec newRevision,
127:                 IProgressMonitor monitor) {
128:                 // TODO: cast, move to EMFStoreDirtyObserver?
129:                 final ECPProject project = EMFStoreProvider.INSTANCE.getProject(localProject);
130:                 EMFStoreDirtyDecoratorCachedTree.getInstance(project).clear();
131:                 observers.get(project).clearObserverCache();
132:         }
133:
134:         /** {@inheritDoc} */
135:         @Override
136:         public void projectDelete(ECPProject project) {
137:                 EMFStoreDirtyDecoratorCachedTree.removeProject(project);
138:                 observers.remove(project);
139:         }
140:
141: }