diff options
Diffstat (limited to 'Tests/ca.mcgill.ecse.dslreasoner.vampire.test/src/ca/mcgill/ecse/dslreasoner/vampire/icse/EcoreTest.xtend')
-rw-r--r-- | Tests/ca.mcgill.ecse.dslreasoner.vampire.test/src/ca/mcgill/ecse/dslreasoner/vampire/icse/EcoreTest.xtend | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/src/ca/mcgill/ecse/dslreasoner/vampire/icse/EcoreTest.xtend b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/src/ca/mcgill/ecse/dslreasoner/vampire/icse/EcoreTest.xtend new file mode 100644 index 00000000..54114189 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/src/ca/mcgill/ecse/dslreasoner/vampire/icse/EcoreTest.xtend | |||
@@ -0,0 +1,105 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.vampire.icse | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.vampire.reasoner.VampireSolver | ||
4 | import ca.mcgill.ecse.dslreasoner.vampire.reasoner.VampireSolverConfiguration | ||
5 | import functionalarchitecture.FunctionalarchitecturePackage | ||
6 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic | ||
7 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration | ||
8 | import hu.bme.mit.inf.dslreasoner.ecore2logic.EcoreMetamodelDescriptor | ||
9 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner | ||
10 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult | ||
11 | import hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore | ||
12 | import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic | ||
13 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic | ||
14 | import hu.bme.mit.inf.dslreasoner.workspace.FileSystemWorkspace | ||
15 | import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace | ||
16 | import java.util.List | ||
17 | import org.eclipse.emf.ecore.EAttribute | ||
18 | import org.eclipse.emf.ecore.EClass | ||
19 | import org.eclipse.emf.ecore.EEnum | ||
20 | import org.eclipse.emf.ecore.EEnumLiteral | ||
21 | import org.eclipse.emf.ecore.EObject | ||
22 | import org.eclipse.emf.ecore.EReference | ||
23 | import org.eclipse.emf.ecore.resource.Resource | ||
24 | import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl | ||
25 | import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.Patterns | ||
26 | import java.util.LinkedHashMap | ||
27 | import hu.bme.mit.inf.dslreasoner.viatra2logic.ViatraQuerySetDescriptor | ||
28 | |||
29 | class EcoreTest { | ||
30 | def static void main(String[] args) { | ||
31 | val inputs = new FileSystemWorkspace('''initialModels/''', "") | ||
32 | val workspace = new FileSystemWorkspace('''output/FAMTest/''', "") | ||
33 | workspace.initAndClear | ||
34 | |||
35 | println("Input and output workspaces are created") | ||
36 | |||
37 | val metamodel = loadMetamodel() | ||
38 | val partialModel = loadPartialModel(inputs) | ||
39 | // val queries = loadQueries(metamodel) | ||
40 | |||
41 | println("DSL loaded") | ||
42 | |||
43 | val Ecore2Logic ecore2Logic = new Ecore2Logic | ||
44 | val Logic2Ecore logic2Ecore = new Logic2Ecore(ecore2Logic) | ||
45 | val Viatra2Logic viatra2Logic = new Viatra2Logic(ecore2Logic) | ||
46 | val InstanceModel2Logic instanceModel2Logic = new InstanceModel2Logic | ||
47 | |||
48 | val modelGenerationProblem = ecore2Logic.transformMetamodel(metamodel,new Ecore2LogicConfiguration()) | ||
49 | val modelExtensionProblem = instanceModel2Logic.transform(modelGenerationProblem,partialModel) | ||
50 | // val validModelExtensionProblem = viatra2Logic.transformQueries(queries,modelGenerationProblem,new Viatra2LogicConfiguration) | ||
51 | |||
52 | val logicProblem = modelGenerationProblem.output | ||
53 | // val logicProblem = modelExtensionProblem.output | ||
54 | // val logicProblem = validModelExtensionProblem.output | ||
55 | |||
56 | |||
57 | println("Problem created") | ||
58 | |||
59 | var LogicResult solution | ||
60 | var LogicReasoner reasoner | ||
61 | //* | ||
62 | reasoner = new VampireSolver | ||
63 | val vampireConfig = new VampireSolverConfiguration => [ | ||
64 | //add configuration things, in config file first | ||
65 | it.writeToFile = true | ||
66 | ] | ||
67 | |||
68 | solution = reasoner.solve(logicProblem, vampireConfig, workspace) | ||
69 | |||
70 | println("Problem solved") | ||
71 | |||
72 | |||
73 | } | ||
74 | |||
75 | def private static loadMetamodel() { | ||
76 | val pckg = FunctionalarchitecturePackage.eINSTANCE | ||
77 | val List<EClass> classes = pckg.getEClassifiers.filter(EClass).toList | ||
78 | val List<EEnum> enums = pckg.getEClassifiers.filter(EEnum).toList | ||
79 | val List<EEnumLiteral> literals = enums.map[getELiterals].flatten.toList | ||
80 | val List<EReference> references = classes.map[getEReferences].flatten.toList | ||
81 | val List<EAttribute> attributes = classes.map[getEAttributes].flatten.toList | ||
82 | return new EcoreMetamodelDescriptor(classes,#{},false,enums,literals,references,attributes) | ||
83 | } | ||
84 | |||
85 | def private static loadPartialModel(ReasonerWorkspace inputs) { | ||
86 | Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl()); | ||
87 | // inputs.readModel(EObject,"FunctionalArchitectureModel.xmi").eResource.allContents.toList | ||
88 | inputs.readModel(EObject,"FamInstance.xmi").eResource.allContents.toList | ||
89 | } | ||
90 | |||
91 | def private static loadQueries(EcoreMetamodelDescriptor metamodel) { | ||
92 | // val i = Patterns.instance | ||
93 | // val patterns = i.specifications.toList | ||
94 | // val wfPatterns = patterns.filter[it.allAnnotations.exists[it.name== "Constraint"]].toSet | ||
95 | // val derivedFeatures = new LinkedHashMap | ||
96 | // derivedFeatures.put(i.type,metamodel.attributes.filter[it.name == "type"].head) | ||
97 | // derivedFeatures.put(i.model,metamodel.references.filter[it.name == "model"].head) | ||
98 | // val res = new ViatraQuerySetDescriptor( | ||
99 | // patterns, | ||
100 | // wfPatterns, | ||
101 | // derivedFeatures | ||
102 | // ) | ||
103 | // return res | ||
104 | } | ||
105 | } | ||