diff options
author | OszkarSemerath <oszkar.semerath@gmail.com> | 2018-02-15 23:03:20 +0100 |
---|---|---|
committer | OszkarSemerath <oszkar.semerath@gmail.com> | 2018-02-15 23:03:20 +0100 |
commit | 92f94b063ec9a65d04178788f3858c750fbf16e7 (patch) | |
tree | 5e1d9d7b64075931a8200080f5b2736685d14c71 /Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend | |
parent | First complete scope grammar (diff) | |
download | VIATRA-Generator-92f94b063ec9a65d04178788f3858c750fbf16e7.tar.gz VIATRA-Generator-92f94b063ec9a65d04178788f3858c750fbf16e7.tar.zst VIATRA-Generator-92f94b063ec9a65d04178788f3858c750fbf16e7.zip |
Generation specification -> execution
Diffstat (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend')
-rw-r--r-- | Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend new file mode 100644 index 00000000..635d9dcc --- /dev/null +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend | |||
@@ -0,0 +1,156 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.application.execution | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.GenerationTask | ||
4 | import hu.bme.mit.inf.dslreasoner.application.validation.MetamodelValidator | ||
5 | import hu.bme.mit.inf.dslreasoner.application.validation.QueryAndMetamodelValidator | ||
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.logic.model.builder.SolutionScope | ||
9 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.InconsistencyResult | ||
10 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult | ||
11 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.UnknownResult | ||
12 | import hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore | ||
13 | import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic | ||
14 | import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2LogicConfiguration | ||
15 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic | ||
16 | import hu.bme.mit.inf.dslreasoner.workspace.ProjectWorkspace | ||
17 | import org.eclipse.emf.common.util.URI | ||
18 | |||
19 | class GenerationTaskExecutor { | ||
20 | val metamodelLoader = new MetamodelLoader | ||
21 | val modelLoader = new ModelLoader | ||
22 | val queryLoader = new QueryLoader | ||
23 | val solverLoader = new SolverLoader | ||
24 | val scopeLoader = new ScopeLoader | ||
25 | |||
26 | val metamodelValidator = new MetamodelValidator | ||
27 | val queryAndMetamodelValidator = new QueryAndMetamodelValidator | ||
28 | |||
29 | def executeGenerationTask( | ||
30 | GenerationTask task, | ||
31 | ScriptExecutor scriptExecutor) | ||
32 | { | ||
33 | // 1. Load all resources | ||
34 | |||
35 | val metamodelSpecification = scriptExecutor.getMetamodelSpecification(task.metamodel) | ||
36 | val patternSpecification = scriptExecutor.getPatternSpecification(task.patterns) | ||
37 | val partialmodelSpecification = scriptExecutor.getPartialModelSpecification(task.partialModel) | ||
38 | val scopeSpecification = scriptExecutor.getScopeSpecification(task.scope) | ||
39 | val configurationMap = scriptExecutor.transformToMap( | ||
40 | scriptExecutor.getConfiguration(task.config)) | ||
41 | val messageFile = scriptExecutor.getFileSpecification(task.targetLogFile) | ||
42 | val debugFolder = scriptExecutor.getFileSpecification(task.debugFolder) | ||
43 | val outputFolder = scriptExecutor.getFileSpecification(task.getTagetFolder) | ||
44 | val statisticsFile = scriptExecutor.getFileSpecification(task.targetStatisticsFile) | ||
45 | |||
46 | // 2. create console | ||
47 | |||
48 | val console = new ScriptConsole(true,true, | ||
49 | if(messageFile!==null) URI.createURI(messageFile.path) else null, | ||
50 | if(debugFolder!==null) URI.createURI('''«debugFolder.path»/errors.txt''') else null, | ||
51 | if(statisticsFile!==null) URI.createURI(statisticsFile.path) else null | ||
52 | ) | ||
53 | |||
54 | // 3. interpret all specification to a description | ||
55 | val metamodelDescriptor = if(metamodelSpecification !== null) { | ||
56 | metamodelLoader.loadMetamodel(metamodelSpecification) | ||
57 | } else { | ||
58 | console.writeError('''Error during the loading of the metamodel: No metamodel specified!''') | ||
59 | throw new IllegalArgumentException('''No metamodel is specified!''') | ||
60 | } | ||
61 | val queryDescriptor = if(patternSpecification !== null) { | ||
62 | this.queryLoader.loadQueries(patternSpecification) | ||
63 | } else { | ||
64 | null | ||
65 | } | ||
66 | val partialModelDescriptor = if(partialmodelSpecification !== null) { | ||
67 | this.modelLoader.loadModel(partialmodelSpecification,scriptExecutor) | ||
68 | } else { | ||
69 | null | ||
70 | } | ||
71 | |||
72 | // 4. translate all description to a logic problem | ||
73 | val Ecore2Logic ecore2Logic = new Ecore2Logic | ||
74 | val Logic2Ecore logic2Ecore = new Logic2Ecore(ecore2Logic) | ||
75 | val Viatra2Logic viatra2Logic = new Viatra2Logic(ecore2Logic) | ||
76 | val InstanceModel2Logic instanceModel2Logic = new InstanceModel2Logic | ||
77 | |||
78 | var modelGeneration = ecore2Logic.transformMetamodel(metamodelDescriptor,new Ecore2LogicConfiguration()) | ||
79 | var problem = modelGeneration.output | ||
80 | if(partialModelDescriptor !== null) { | ||
81 | problem = instanceModel2Logic.transform( | ||
82 | modelGeneration, | ||
83 | partialModelDescriptor | ||
84 | ).output | ||
85 | } | ||
86 | if(queryDescriptor !== null){ | ||
87 | problem = viatra2Logic.transformQueries( | ||
88 | queryDescriptor.key, | ||
89 | modelGeneration, | ||
90 | new Viatra2LogicConfiguration | ||
91 | ).output | ||
92 | } | ||
93 | |||
94 | // 5. create a solver and a configuration | ||
95 | // 5.1 initialize | ||
96 | val solver = solverLoader.loadSolver(task.solver,configurationMap) | ||
97 | val solverConfig = solverLoader.loadSolverConfig(task.solver,configurationMap) | ||
98 | val reasonerWorkspace = if(debugFolder!== null) { | ||
99 | new ProjectWorkspace(debugFolder.path,"") | ||
100 | } else { | ||
101 | new NullWorkspace | ||
102 | } | ||
103 | |||
104 | // 5.2 set values that defined directly | ||
105 | solverConfig.solutionScope = new SolutionScope => [ | ||
106 | it.numberOfRequiredSolution = if(task.numberSpecified) { | ||
107 | 1 | ||
108 | } else { | ||
109 | task.number | ||
110 | } | ||
111 | ] | ||
112 | solverConfig.typeScopes = scopeLoader.loadScope( | ||
113 | scopeSpecification, | ||
114 | problem, | ||
115 | ecore2Logic, | ||
116 | modelGeneration.trace | ||
117 | ) | ||
118 | |||
119 | // 6. execute the solver on the problem with the configuration | ||
120 | val runs = if(task.runSpecified) { | ||
121 | task.runs | ||
122 | } else { | ||
123 | 1 | ||
124 | } | ||
125 | console.writeMessage("Start model generation") | ||
126 | |||
127 | for(run : 1..runs) { | ||
128 | val solution = solver.solve(problem,solverConfig,reasonerWorkspace) | ||
129 | console.writeMessage(solution.soutionDescription.toString) | ||
130 | } | ||
131 | } | ||
132 | |||
133 | private def dispatch soutionDescription(InconsistencyResult s) { | ||
134 | if(s.representation.size == 1) { | ||
135 | '''Problem is inconsistent!''' | ||
136 | } else { | ||
137 | '''Problem is inconsistent, only «s.representation.size» model can be created!''' | ||
138 | } | ||
139 | } | ||
140 | |||
141 | private def dispatch soutionDescription(ModelResult s) { | ||
142 | if(s.representation.size == 1) { | ||
143 | '''Problem is consistent!''' | ||
144 | } else { | ||
145 | '''Problem is consistent, «s.representation.size» model generated!''' | ||
146 | } | ||
147 | } | ||
148 | |||
149 | private def dispatch soutionDescription(UnknownResult s) { | ||
150 | if(s.representation.size == 1) { | ||
151 | '''Unable to solve problem!''' | ||
152 | } else { | ||
153 | '''Unable to solve problem, but «s.representation.size» model generated!''' | ||
154 | } | ||
155 | } | ||
156 | } \ No newline at end of file | ||