aboutsummaryrefslogtreecommitdiffstats
path: root/Tests/MODELS2020-CaseStudies/models20.diversity-calculator/src/hu/bme/mit/inf/dslreasoner/diversitycalculator/MeasureInternalDiversity.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/MODELS2020-CaseStudies/models20.diversity-calculator/src/hu/bme/mit/inf/dslreasoner/diversitycalculator/MeasureInternalDiversity.xtend')
-rw-r--r--Tests/MODELS2020-CaseStudies/models20.diversity-calculator/src/hu/bme/mit/inf/dslreasoner/diversitycalculator/MeasureInternalDiversity.xtend107
1 files changed, 107 insertions, 0 deletions
diff --git a/Tests/MODELS2020-CaseStudies/models20.diversity-calculator/src/hu/bme/mit/inf/dslreasoner/diversitycalculator/MeasureInternalDiversity.xtend b/Tests/MODELS2020-CaseStudies/models20.diversity-calculator/src/hu/bme/mit/inf/dslreasoner/diversitycalculator/MeasureInternalDiversity.xtend
new file mode 100644
index 00000000..1510eeb8
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/models20.diversity-calculator/src/hu/bme/mit/inf/dslreasoner/diversitycalculator/MeasureInternalDiversity.xtend
@@ -0,0 +1,107 @@
1package hu.bme.mit.inf.dslreasoner.diversitycalculator
2
3import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
4import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration
5import hu.bme.mit.inf.dslreasoner.ecore2logic.ecore2logicannotations.Ecore2logicannotationsPackage
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguagePackage
7import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage
8import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.Viatra2LogicAnnotationsPackage
9import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2PartialInterpretation
10import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.neighbourhood.PartialInterpretation2ImmutableTypeLattice
11import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage
13import hu.bme.mit.inf.dslreasoner.workspace.FileSystemWorkspace
14import java.io.File
15import java.util.LinkedList
16import java.util.List
17import org.eclipse.emf.ecore.EObject
18import org.eclipse.emf.ecore.resource.Resource
19import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
20import hu.bme.mit.inf.dslreasoner.ecore2logic.EcoreMetamodelDescriptor
21
22class MeasureInternalDiversity {
23 static val partialInterpretation2Logic = new InstanceModel2PartialInterpretation
24 static val neiguboirhoodComputer = new PartialInterpretation2ImmutableTypeLattice
25
26 static val Ecore2Logic ecore2Logic = new Ecore2Logic
27
28 static private def init() {
29 LogiclanguagePackage.eINSTANCE.class
30 LogicproblemPackage.eINSTANCE.class
31 PartialinterpretationPackage.eINSTANCE.class
32 Ecore2logicannotationsPackage.eINSTANCE.class
33 Viatra2LogicAnnotationsPackage.eINSTANCE.class
34 Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("*",new XMIResourceFactoryImpl)
35 }
36
37
38 def static void main(String[] args) {
39 init()
40 }
41
42 def static run(EcoreMetamodelDescriptor metamodel, String path, String scenario) {
43 val range = 20
44
45 measureDiversity(metamodel,scenario,path,range)
46 }
47
48 def static void measureDiversity(EcoreMetamodelDescriptor metamodel, String scenario, String path, int depth) {
49 val file = new File(path)
50 if(file.isDirectory) {
51 val subfiles = file.list
52 val xmiSubfiles = subfiles.filter[it.endsWith(".xmi")]
53 if(!xmiSubfiles.empty) {
54 measureDiversity(metamodel, scenario,file,xmiSubfiles.map[new File(path+"/"+it)].toList,path,depth)
55 } else {
56 for(subfile : subfiles) {
57 measureDiversity(metamodel, scenario,path+"/"+subfile,depth)
58 }
59 }
60 } else if(file.isFile) {
61 // Do nothing
62 }
63 }
64
65 def static void measureDiversity(EcoreMetamodelDescriptor metamodel, String scenario, File parent, List<File> files, String path, int depth) {
66 val workspace = new FileSystemWorkspace(path,"")
67 //val file2Neighbourhood = new HashMap<File,List<?>>
68 for(file : files) {
69
70 val metamodelTransformationOutput = ecore2Logic.transformMetamodel(metamodel,new Ecore2LogicConfiguration)
71
72 val model = workspace.readModel(EObject,file.name)
73 val partialModel = partialInterpretation2Logic.transform(metamodelTransformationOutput,model.eResource,false)
74 val list = representationList(partialModel,depth)
75 try {
76 val runIndex = file.name.runIndex
77 val modelIndex = file.name.modelIndex
78 print('''«scenario»;«runIndex»;«modelIndex»''')
79 } catch (Exception e) {
80 print('''«scenario»;0;«file.name»''')
81 }
82 for(i : 0..<list.size) {
83 print(''';«list.get(i).keySet.size»''')
84 }
85 print(";"+(list.last.keySet.size*1.0 /partialModel.newElements.size))
86 println
87 }
88 }
89
90 protected def static runIndex(String name) {
91 name.split("\\.").head.split('_').get(1)
92 }
93 protected def static modelIndex(String name) {
94 name.split("\\.").head.split('_').get(2)
95 }
96
97 protected def static representationList(PartialInterpretation partialModel, int depth) {
98 val list = new LinkedList
99 for(i : 0..<depth) {
100 val neighbourhood = neiguboirhoodComputer.createRepresentation(partialModel,i,0,0)
101 //val m = neighbourhood.modelRepresentation
102 //println(m)
103 list.add(neighbourhood.modelRepresentation)
104 }
105 return list
106 }
107} \ No newline at end of file