Skip to content

Package: FeatureStrategy

FeatureStrategy

nameinstructionbranchcomplexitylinemethod
FeatureStrategy()
M: 0 C: 13
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
deregister(ChangeObserver)
M: 0 C: 39
100%
M: 1 C: 5
83%
M: 1 C: 3
75%
M: 0 C: 9
100%
M: 0 C: 1
100%
getAllObservers()
M: 0 C: 7
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getObservers(Notification)
M: 0 C: 19
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
register(ChangeObserver, EStructuralFeature)
M: 0 C: 43
100%
M: 2 C: 2
50%
M: 2 C: 1
33%
M: 0 C: 7
100%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2015 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: * jfaltermeier - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emf.ecp.changebroker.internal;
15:
16: import java.util.Collections;
17: import java.util.LinkedHashMap;
18: import java.util.LinkedHashSet;
19: import java.util.Map;
20: import java.util.Set;
21:
22: import org.eclipse.emf.common.notify.Notification;
23: import org.eclipse.emf.ecore.EStructuralFeature;
24: import org.eclipse.emf.ecp.changebroker.spi.ChangeObserver;
25:
26: /**
27: * @author jfaltermeier
28: *
29: */
30: public class FeatureStrategy implements Strategy {
31:
32:         private final Map<EStructuralFeature, Set<ChangeObserver>> registry = new LinkedHashMap<EStructuralFeature, Set<ChangeObserver>>();
33:         private final Map<ChangeObserver, Set<EStructuralFeature>> observerToKey = new LinkedHashMap<ChangeObserver, Set<EStructuralFeature>>();
34:
35:         /**
36:          * Registers an observer.
37:          *
38:          * @param observer the observer
39:          * @param feature the feature
40:          */
41:         public void register(ChangeObserver observer, EStructuralFeature feature) {
42:•                if (!registry.containsKey(feature)) {
43:                         registry.put(feature, new LinkedHashSet<ChangeObserver>());
44:                 }
45:                 registry.get(feature).add(observer);
46:
47:•                if (!observerToKey.containsKey(observer)) {
48:                         observerToKey.put(observer, new LinkedHashSet<EStructuralFeature>());
49:                 }
50:                 observerToKey.get(observer).add(feature);
51:         }
52:
53:         /**
54:          * {@inheritDoc}
55:          *
56:          * @see org.eclipse.emf.ecp.changebroker.internal.Strategy#getObservers(org.eclipse.emf.common.notify.Notification)
57:          */
58:         @Override
59:         public Set<ChangeObserver> getObservers(Notification notification) {
60:                 final Object feature = notification.getFeature();
61:•                if (!registry.containsKey(feature)) {
62:                         return Collections.emptySet();
63:                 }
64:                 return new LinkedHashSet<ChangeObserver>(registry.get(feature));
65:         }
66:
67:         /**
68:          *
69:          * {@inheritDoc}
70:          *
71:          * @see org.eclipse.emf.ecp.changebroker.internal.Strategy#deregister(ChangeObserver)
72:          */
73:         @Override
74:         public void deregister(ChangeObserver observer) {
75:                 final Set<EStructuralFeature> keys = observerToKey.remove(observer);
76:•                if (keys == null) {
77:                         return;
78:                 }
79:•                for (final EStructuralFeature feature : keys) {
80:                         final Set<ChangeObserver> set = registry.get(feature);
81:                         set.remove(observer);
82:•                        if (set.isEmpty()) {
83:                                 registry.remove(feature);
84:                         }
85:                 }
86:         }
87:
88:         /**
89:          * {@inheritDoc}
90:          *
91:          * @see org.eclipse.emf.ecp.changebroker.internal.Strategy#getAllObservers()
92:          */
93:         @Override
94:         public Set<ChangeObserver> getAllObservers() {
95:                 return new LinkedHashSet<ChangeObserver>(observerToKey.keySet());
96:         }
97:
98: }