aboutsummaryrefslogtreecommitdiffstats
path: root/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/LocalSearchEngineManager.java
blob: 18708a37ffba2fa67b2219b3b7deafedd6df6fd9 (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
package hu.bme.mit.inf.dslreasoner.domains.satellite.mdeo;

import hu.bme.mit.inf.dslreasoner.domains.satellite.queries.SatelliteQueries;
import java.util.WeakHashMap;
import java.util.function.Function;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.viatra.query.runtime.api.AdvancedViatraQueryEngine;
import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
import org.eclipse.viatra.query.runtime.api.ViatraQueryEngineOptions;
import org.eclipse.viatra.query.runtime.emf.EMFScope;
import org.eclipse.viatra.query.runtime.localsearch.matcher.integration.LocalSearchHints;
import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;

@SuppressWarnings("all")
public class LocalSearchEngineManager {
  public static final LocalSearchEngineManager INSTANCE = new LocalSearchEngineManager();
  
  private final WeakHashMap<EObject, ViatraQueryEngine> engineMap = new WeakHashMap<EObject, ViatraQueryEngine>();
  
  private LocalSearchEngineManager() {
  }
  
  public ViatraQueryEngine getEngine(final EObject eObject) {
    final Function<EObject, ViatraQueryEngine> _function = (EObject it) -> {
      ViatraQueryEngine _xblockexpression = null;
      {
        final EMFScope scope = new EMFScope(it);
        final QueryEvaluationHint localSearchHints = LocalSearchHints.getDefault().build();
        final ViatraQueryEngineOptions options = ViatraQueryEngineOptions.defineOptions().withDefaultHint(localSearchHints).withDefaultBackend(
          localSearchHints.getQueryBackendFactory()).build();
        final ViatraQueryEngine engine = AdvancedViatraQueryEngine.on(scope, options);
        SatelliteQueries.instance().prepare(engine);
        _xblockexpression = engine;
      }
      return _xblockexpression;
    };
    return this.engineMap.computeIfAbsent(eObject, _function);
  }
}