aboutsummaryrefslogtreecommitdiffstats
path: root/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SimpleRun.xtend
diff options
context:
space:
mode:
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.xtend145
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 @@
1package hu.bme.mit.inf.dslreasoner.run
2
3import hu.bme.mit.inf.dslreasoner.workspace.FileSystemWorkspace
4import hu.bme.mit.inf.dslreasomer.domains.transima.fam.FunctionalArchitecture.FunctionalArchitecturePackage
5import java.util.List
6import org.eclipse.emf.ecore.EClass
7import org.eclipse.emf.ecore.EEnumLiteral
8import org.eclipse.emf.ecore.EReference
9import org.eclipse.emf.ecore.EEnum
10import org.eclipse.emf.ecore.EAttribute
11import hu.bme.mit.inf.dslreasoner.ecore2logic.EcoreMetamodelDescriptor
12import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace
13import org.eclipse.emf.ecore.EObject
14import java.util.LinkedHashMap
15import hu.bme.mit.inf.dslreasoner.viatra2logic.ViatraQuerySetDescriptor
16import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
17import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic
18import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic
19import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration
20import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2LogicConfiguration
21import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration
22import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeInferenceMethod
23import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.StateCoderStrategy
24import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner
25import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult
26import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
27import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult
28import org.eclipse.emf.ecore.resource.Resource
29import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
30import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretation2Gml
31import hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolverConfiguration
32import hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolver
33
34class 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