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
|
/*
* SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
*
* SPDX-License-Identifier: EPL-2.0
*/
package tools.refinery.store.query.viatra.internal.update;
import tools.refinery.viatra.runtime.matchers.context.IInputKey;
import tools.refinery.viatra.runtime.matchers.context.IQueryRuntimeContextListener;
import tools.refinery.viatra.runtime.matchers.tuple.ITuple;
import tools.refinery.store.query.viatra.internal.ViatraModelQueryAdapterImpl;
import tools.refinery.store.query.view.AnySymbolView;
import tools.refinery.store.query.view.SymbolView;
import java.util.HashMap;
import java.util.Map;
public class ModelUpdateListener {
private final Map<AnySymbolView, SymbolViewUpdateListener<?>> symbolViewUpdateListeners;
public ModelUpdateListener(ViatraModelQueryAdapterImpl adapter) {
var symbolViews = adapter.getStoreAdapter().getInputKeys().keySet();
symbolViewUpdateListeners = new HashMap<>(symbolViews.size());
for (var symbolView : symbolViews) {
registerView(adapter, (SymbolView<?>) symbolView);
}
}
private <T> void registerView(ViatraModelQueryAdapterImpl adapter, SymbolView<T> view) {
var model = adapter.getModel();
var interpretation = model.getInterpretation(view.getSymbol());
var listener = SymbolViewUpdateListener.of(adapter, view, interpretation);
symbolViewUpdateListeners.put(view, listener);
}
public boolean containsSymbolView(AnySymbolView relationView) {
return symbolViewUpdateListeners.containsKey(relationView);
}
public void addListener(IInputKey key, AnySymbolView symbolView, ITuple seed,
IQueryRuntimeContextListener listener) {
var symbolViewUpdateListener = symbolViewUpdateListeners.get(symbolView);
symbolViewUpdateListener.addFilter(key, seed, listener);
}
public void removeListener(IInputKey key, AnySymbolView symbolView, ITuple seed,
IQueryRuntimeContextListener listener) {
var symbolViewUpdateListener = symbolViewUpdateListeners.get(symbolView);
symbolViewUpdateListener.removeFilter(key, seed, listener);
}
}
|