diff options
Diffstat (limited to 'Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/statecoding/IncrementalObjectProvider.java')
-rw-r--r-- | Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/statecoding/IncrementalObjectProvider.java | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/statecoding/IncrementalObjectProvider.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/statecoding/IncrementalObjectProvider.java new file mode 100644 index 00000000..e38d45d3 --- /dev/null +++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/statecoding/IncrementalObjectProvider.java | |||
@@ -0,0 +1,60 @@ | |||
1 | /******************************************************************************* | ||
2 | * Copyright (c) 2010-2015, Andras Szabolcs Nagy and Daniel Varro | ||
3 | * This program and the accompanying materials are made available under the | ||
4 | * terms of the Eclipse Public License v. 2.0 which is available at | ||
5 | * http://www.eclipse.org/legal/epl-v20.html. | ||
6 | * | ||
7 | * SPDX-License-Identifier: EPL-2.0 | ||
8 | *******************************************************************************/ | ||
9 | package org.eclipse.viatra.dse.statecoding; | ||
10 | |||
11 | import java.util.Collection; | ||
12 | import java.util.HashSet; | ||
13 | import java.util.Set; | ||
14 | |||
15 | import org.apache.log4j.Logger; | ||
16 | import org.eclipse.emf.common.notify.Notifier; | ||
17 | import org.eclipse.emf.ecore.EClass; | ||
18 | import org.eclipse.emf.ecore.EObject; | ||
19 | import org.eclipse.viatra.dse.api.DSEException; | ||
20 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | ||
21 | import org.eclipse.viatra.query.runtime.base.api.IndexingLevel; | ||
22 | import org.eclipse.viatra.query.runtime.base.api.NavigationHelper; | ||
23 | import org.eclipse.viatra.query.runtime.emf.EMFScope; | ||
24 | import org.eclipse.viatra.query.runtime.exception.ViatraQueryException; | ||
25 | |||
26 | public class IncrementalObjectProvider implements IObjectsProvider { | ||
27 | |||
28 | private Logger logger = Logger.getLogger(getClass()); | ||
29 | private NavigationHelper baseIndex; | ||
30 | |||
31 | @Override | ||
32 | public void init(Notifier notifier, StatecodingDependencyGraph statecodingDependencyGraph) { | ||
33 | |||
34 | try { | ||
35 | EMFScope scope = new EMFScope(notifier); | ||
36 | ViatraQueryEngine queryEngine = ViatraQueryEngine.on(scope); | ||
37 | |||
38 | Set<EClass> classes = new HashSet<EClass>(); | ||
39 | // Set<EReference> references = new HashSet<EReference>(); | ||
40 | for (StatecodingNode node : statecodingDependencyGraph.getNodes()) { | ||
41 | classes.add(node.getClazz()); | ||
42 | // for (StatecodingDependency dependency : node.getStatecodingDependencies()) { | ||
43 | // // TODO inverse reference | ||
44 | // references.add(dependency.eReference); | ||
45 | // } | ||
46 | } | ||
47 | baseIndex = EMFScope.extractUnderlyingEMFIndex(queryEngine); | ||
48 | baseIndex.registerEClasses(classes, IndexingLevel.FULL); | ||
49 | } catch (ViatraQueryException e) { | ||
50 | logger.error("Failed to initialize VIATRA Query engine on the given notifier", e); | ||
51 | throw new DSEException("Failed to initialize VIATRA Query engine on the given notifier"); | ||
52 | } | ||
53 | } | ||
54 | |||
55 | @Override | ||
56 | public Collection<EObject> getEObjects(EClass eClass) { | ||
57 | return baseIndex.getAllInstances(eClass); | ||
58 | } | ||
59 | |||
60 | } | ||