diff options
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend')
-rw-r--r-- | Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend new file mode 100644 index 00000000..1653226d --- /dev/null +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend | |||
@@ -0,0 +1,78 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Relation | ||
4 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type | ||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem | ||
6 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider | ||
7 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.rules.GoalConstraintProvider | ||
8 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.rules.RefinementRuleProvider | ||
9 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation | ||
10 | import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace | ||
11 | import java.util.Collection | ||
12 | import java.util.LinkedHashMap | ||
13 | import java.util.List | ||
14 | import org.eclipse.viatra.query.runtime.api.GenericPatternMatch | ||
15 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification | ||
16 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher | ||
17 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery | ||
18 | import org.eclipse.viatra.transformation.runtime.emf.rules.batch.BatchTransformationRule | ||
19 | import org.eclipse.xtend.lib.annotations.Data | ||
20 | import org.eclipse.viatra.query.runtime.api.IPatternMatch | ||
21 | |||
22 | class ModelGenerationStatistics { | ||
23 | public var long transformationExecutionTime = 0 | ||
24 | synchronized def addExecutionTime(long amount) { | ||
25 | transformationExecutionTime+=amount | ||
26 | } | ||
27 | public var long PreliminaryTypeAnalisisTime = 0 | ||
28 | } | ||
29 | @Data class ModelGenerationMethod { | ||
30 | ModelGenerationStatistics statistics | ||
31 | |||
32 | Collection<? extends BatchTransformationRule<?,?>> objectRefinementRules | ||
33 | Collection<? extends BatchTransformationRule<?,?>> relationRefinementRules | ||
34 | |||
35 | List<MultiplicityGoalConstraintCalculator> unfinishedMultiplicities | ||
36 | Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> unfinishedWF | ||
37 | |||
38 | Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> invalidWF | ||
39 | } | ||
40 | enum TypeInferenceMethod { | ||
41 | Generic, PreliminaryAnalysis | ||
42 | } | ||
43 | |||
44 | class ModelGenerationMethodProvider { | ||
45 | private val PatternProvider patternProvider = new PatternProvider | ||
46 | private val RefinementRuleProvider refinementRuleProvider = new RefinementRuleProvider | ||
47 | private val GoalConstraintProvider goalConstraintProvider = new GoalConstraintProvider | ||
48 | |||
49 | public def ModelGenerationMethod createModelGenerationMethod( | ||
50 | LogicProblem logicProblem, | ||
51 | PartialInterpretation emptySolution, | ||
52 | Iterable<PQuery> existingQueries, | ||
53 | ReasonerWorkspace workspace, | ||
54 | boolean nameNewElements, | ||
55 | TypeInferenceMethod typeInferenceMethod | ||
56 | ) { | ||
57 | val statistics = new ModelGenerationStatistics | ||
58 | val queries = patternProvider.generateQueries(logicProblem,emptySolution,statistics,existingQueries,workspace,typeInferenceMethod) | ||
59 | |||
60 | val //LinkedHashMap<Pair<Relation, ? extends Type>, BatchTransformationRule<GenericPatternMatch, ViatraQueryMatcher<GenericPatternMatch>>> | ||
61 | objectRefinementRules = refinementRuleProvider.createObjectRefinementRules(queries,nameNewElements,statistics) | ||
62 | val relationRefinementRules = refinementRuleProvider.createRelationRefinementRules(queries,statistics) | ||
63 | |||
64 | val unfinishedMultiplicities = goalConstraintProvider.getUnfinishedMultiplicityQueries(queries) | ||
65 | val unfinishedWF = queries.getUnfinishedWFQueries.values | ||
66 | |||
67 | val invalidWF = queries.getInvalidWFQueries.values | ||
68 | |||
69 | return new ModelGenerationMethod( | ||
70 | statistics, | ||
71 | objectRefinementRules.values, | ||
72 | relationRefinementRules.values, | ||
73 | unfinishedMultiplicities, | ||
74 | unfinishedWF, | ||
75 | invalidWF | ||
76 | ) | ||
77 | } | ||
78 | } | ||