diff options
author | OszkarSemerath <oszka@152.66.252.189> | 2017-06-10 19:01:08 +0200 |
---|---|---|
committer | OszkarSemerath <oszka@152.66.252.189> | 2017-06-10 19:01:08 +0200 |
commit | d4f03121e36bce42ce611e97ffee6e697162228e (patch) | |
tree | bcda6a5e8d0a9d9fdc1dc8620a816e7f429f5d9a /Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SimpleRun.xtend | |
parent | Initial commit (diff) | |
download | VIATRA-Generator-d4f03121e36bce42ce611e97ffee6e697162228e.tar.gz VIATRA-Generator-d4f03121e36bce42ce611e97ffee6e697162228e.tar.zst VIATRA-Generator-d4f03121e36bce42ce611e97ffee6e697162228e.zip |
Initial commit, migrating from SVN
Diffstat (limited to 'Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SimpleRun.xtend')
-rw-r--r-- | Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SimpleRun.xtend | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SimpleRun.xtend b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SimpleRun.xtend new file mode 100644 index 00000000..d9536989 --- /dev/null +++ b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SimpleRun.xtend | |||
@@ -0,0 +1,145 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.run | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.workspace.FileSystemWorkspace | ||
4 | import hu.bme.mit.inf.dslreasomer.domains.transima.fam.FunctionalArchitecture.FunctionalArchitecturePackage | ||
5 | import java.util.List | ||
6 | import org.eclipse.emf.ecore.EClass | ||
7 | import org.eclipse.emf.ecore.EEnumLiteral | ||
8 | import org.eclipse.emf.ecore.EReference | ||
9 | import org.eclipse.emf.ecore.EEnum | ||
10 | import org.eclipse.emf.ecore.EAttribute | ||
11 | import hu.bme.mit.inf.dslreasoner.ecore2logic.EcoreMetamodelDescriptor | ||
12 | import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace | ||
13 | import org.eclipse.emf.ecore.EObject | ||
14 | import java.util.LinkedHashMap | ||
15 | import hu.bme.mit.inf.dslreasoner.viatra2logic.ViatraQuerySetDescriptor | ||
16 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic | ||
17 | import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic | ||
18 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic | ||
19 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration | ||
20 | import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2LogicConfiguration | ||
21 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration | ||
22 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeInferenceMethod | ||
23 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.StateCoderStrategy | ||
24 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner | ||
25 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult | ||
26 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation | ||
27 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult | ||
28 | import org.eclipse.emf.ecore.resource.Resource | ||
29 | import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl | ||
30 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretation2Gml | ||
31 | import hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolverConfiguration | ||
32 | import hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolver | ||
33 | |||
34 | class SimpleRun { | ||
35 | |||
36 | def static void main(String[] args) { | ||
37 | val inputs = new FileSystemWorkspace('''initialModels/''',"") | ||
38 | val workspace = new FileSystemWorkspace('''outputModels/''',"") | ||
39 | workspace.initAndClear | ||
40 | |||
41 | println("Input and output workspaces are created") | ||
42 | |||
43 | val metamodel = loadMetamodel() | ||
44 | val partialModel = loadPartialModel(inputs) | ||
45 | val queries = loadQueries(metamodel) | ||
46 | |||
47 | println("DSL loaded") | ||
48 | |||
49 | val Ecore2Logic ecore2Logic = new Ecore2Logic | ||
50 | val Viatra2Logic viatra2Logic = new Viatra2Logic(ecore2Logic) | ||
51 | val InstanceModel2Logic instanceModel2Logic = new InstanceModel2Logic | ||
52 | |||
53 | val modelGenerationProblem = ecore2Logic.transformMetamodel(metamodel,new Ecore2LogicConfiguration()) | ||
54 | val modelExtensionProblem = instanceModel2Logic.transform(modelGenerationProblem,partialModel) | ||
55 | val validModelExtensionProblem = viatra2Logic.transformQueries(queries,modelGenerationProblem,new Viatra2LogicConfiguration) | ||
56 | |||
57 | val logicProblem = validModelExtensionProblem.output | ||
58 | |||
59 | println("Problem created") | ||
60 | var LogicResult solution | ||
61 | |||
62 | //* | ||
63 | val ViatraReasoner viatraSolver = new ViatraReasoner | ||
64 | val viatraConfig = new ViatraReasonerConfiguration => [ | ||
65 | it.typeScopes.maxNewElements = 10 | ||
66 | it.typeScopes.minNewElements = 10 | ||
67 | it.solutionScope.numberOfRequiredSolution = 1 | ||
68 | it.existingQueries = queries.patterns.map[it.internalQueryRepresentation] | ||
69 | it.nameNewElements = true | ||
70 | it.typeInferenceMethod = TypeInferenceMethod.PreliminaryAnalysis | ||
71 | it.stateCoderStrategy = StateCoderStrategy::Neighbourhood | ||
72 | ] | ||
73 | solution = viatraSolver.solve(logicProblem,viatraConfig,workspace) | ||
74 | /*/ | ||
75 | val AlloySolver alloyReasoner = new AlloySolver | ||
76 | val alloyConfig = new AlloySolverConfiguration => [ | ||
77 | it.typeScopes.maxNewElements = 5 | ||
78 | it.typeScopes.minNewElements = 5 | ||
79 | it.solutionScope.numberOfRequiredSolution = 1 | ||
80 | it.typeScopes.maxIntScope = 0 | ||
81 | it.writeToFile = true | ||
82 | ] | ||
83 | solution = alloyReasoner.solve(logicProblem,alloyConfig,workspace) | ||
84 | //*/ | ||
85 | |||
86 | println("Problem solved") | ||
87 | |||
88 | solution.writeSolution(workspace) | ||
89 | } | ||
90 | |||
91 | def private static loadMetamodel() { | ||
92 | val pckg = FunctionalArchitecturePackage.eINSTANCE | ||
93 | val List<EClass> classes = pckg.EClassifiers.filter(EClass).toList | ||
94 | val List<EEnum> enums = pckg.EClassifiers.filter(EEnum).toList | ||
95 | val List<EEnumLiteral> literals = enums.map[ELiterals].flatten.toList | ||
96 | val List<EReference> references = classes.map[EReferences].flatten.toList | ||
97 | val List<EAttribute> attributes = classes.map[EAttributes].flatten.toList | ||
98 | return new EcoreMetamodelDescriptor(classes,#{},false,enums,literals,references,attributes) | ||
99 | } | ||
100 | |||
101 | def private static loadQueries(EcoreMetamodelDescriptor metamodel) { | ||
102 | val i = hu.bme.mit.inf.dslreasoner.domains.transima.fam.patterns.Pattern.instance | ||
103 | val patterns = i.specifications.toList | ||
104 | val wfPatterns = patterns.filter[it.allAnnotations.exists[it.name== "Constraint"]].toSet | ||
105 | val derivedFeatures = new LinkedHashMap | ||
106 | derivedFeatures.put(i.type.internalQueryRepresentation,metamodel.attributes.filter[it.name == "type"].head) | ||
107 | derivedFeatures.put(i.model.internalQueryRepresentation,metamodel.references.filter[it.name == "model"].head) | ||
108 | val res = new ViatraQuerySetDescriptor( | ||
109 | patterns, | ||
110 | wfPatterns, | ||
111 | derivedFeatures | ||
112 | ) | ||
113 | return res | ||
114 | } | ||
115 | |||
116 | def static loadPartialModel(ReasonerWorkspace inputs) { | ||
117 | Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl()); | ||
118 | inputs.readModel(EObject,"FAM.xmi").eResource.allContents.toList | ||
119 | } | ||
120 | |||
121 | def static writeSolution(LogicResult solution, ReasonerWorkspace workspace) { | ||
122 | if(solution instanceof ModelResult) { | ||
123 | val representations = solution.representation | ||
124 | for(representationIndex : 0..<representations.size) { | ||
125 | val representation = representations.get(representationIndex) | ||
126 | val representationNumber = representationIndex + 1 | ||
127 | if(representation instanceof PartialInterpretation) { | ||
128 | workspace.writeModel(representation, '''solutionĀ«representationNumberĀ».partialinterpretation''') | ||
129 | val partialInterpretation2GML = new PartialInterpretation2Gml | ||
130 | val gml = partialInterpretation2GML.transform(representation) | ||
131 | //ecore2GML.transform(root) | ||
132 | workspace.writeText('''solutionVisualisation.gml''',gml) | ||
133 | |||
134 | } else { | ||
135 | workspace.writeText('''solutionĀ«representationNumberĀ».txt''',representation.toString) | ||
136 | } | ||
137 | } | ||
138 | println("Solution saved and visualised") | ||
139 | } | ||
140 | } | ||
141 | |||
142 | def static visualizeSolution() { | ||
143 | |||
144 | } | ||
145 | } \ No newline at end of file | ||