blob: c0ce0cb5b63c19db6e8f3801ff496a1a9b8ee314 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
package org.eclipse.papyrus.infra.gmfdiag.tooling.runtime.impl.ocl.tracker.activeocl;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.ocl.ParserException;
import org.eclipse.papyrus.infra.gmfdiag.tooling.runtime.impl.ocl.activeocl.ActiveOclListener;
import org.eclipse.papyrus.infra.gmfdiag.tooling.runtime.impl.ocl.activeocl.ActiveOclResult;
class ActiveOclResultImpl implements ActiveOclResult, ActiveOclListener {
private final List<ActiveOclListener> myListeners;
private Object myResult;
private final ListeningDependencyCollector myDependencyCollector;
private final DependencyEvaluator myDependencyEvaluator;
public ActiveOclResultImpl(EObject context, String oclExp) throws ParserException {
myListeners = new ArrayList<ActiveOclListener>();
myDependencyCollector = new ListeningDependencyCollector(this);
myDependencyEvaluator = new DependencyEvaluator(context, oclExp, myDependencyCollector);
myResult = myDependencyEvaluator.evaluate();
}
public void onResultChanged() {
myDependencyCollector.clear();
Object newResult = myDependencyEvaluator.evaluate();
if (myResult == null && newResult == null //
|| myResult != null && myResult.equals(newResult)) {
return;
}
myResult = newResult;
for (ActiveOclListener listener : myListeners) {
listener.onResultChanged();
}
}
public void removeListener(ActiveOclListener listener) {
myListeners.remove(listener);
}
public Object getResult() {
return myResult;
}
public void dispose() {
myDependencyCollector.clear();
}
public boolean canListenForChanges() {
return true;
}
public void addListener(ActiveOclListener listener) {
myListeners.add(listener);
}
public Notifier adaptToEMFNotifier() {
// TODO Auto-generated method stub
return null;
}
}
|