aboutsummaryrefslogtreecommitdiffstats
path: root/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-02-15 23:03:20 +0100
committerLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-02-15 23:03:20 +0100
commit92f94b063ec9a65d04178788f3858c750fbf16e7 (patch)
tree5e1d9d7b64075931a8200080f5b2736685d14c71 /Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend
parentFirst complete scope grammar (diff)
downloadVIATRA-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.xtend156
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 @@
1package hu.bme.mit.inf.dslreasoner.application.execution
2
3import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.GenerationTask
4import hu.bme.mit.inf.dslreasoner.application.validation.MetamodelValidator
5import hu.bme.mit.inf.dslreasoner.application.validation.QueryAndMetamodelValidator
6import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
7import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration
8import hu.bme.mit.inf.dslreasoner.logic.model.builder.SolutionScope
9import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.InconsistencyResult
10import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult
11import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.UnknownResult
12import hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore
13import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic
14import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2LogicConfiguration
15import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic
16import hu.bme.mit.inf.dslreasoner.workspace.ProjectWorkspace
17import org.eclipse.emf.common.util.URI
18
19class 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