aboutsummaryrefslogtreecommitdiffstats
path: root/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/src/converter
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-05-10 22:13:21 +0200
committerLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-05-10 22:13:21 +0200
commit5a6eea9bd15597eab77bbcedb4b5116020f0a67d (patch)
tree6c86f7e5bd3d86fde29d3fee4fb4f912f35057bc /Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/src/converter
parentAdd satellite case study (diff)
parentMerge branch 'master' of https://github.com/viatra/VIATRA-Generator (diff)
downloadVIATRA-Generator-5a6eea9bd15597eab77bbcedb4b5116020f0a67d.tar.gz
VIATRA-Generator-5a6eea9bd15597eab77bbcedb4b5116020f0a67d.tar.zst
VIATRA-Generator-5a6eea9bd15597eab77bbcedb4b5116020f0a67d.zip
Merge branch 'master' of github.com:viatra/VIATRA-Generator
Diffstat (limited to 'Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/src/converter')
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/src/converter/UML2TGF.xtend216
1 files changed, 216 insertions, 0 deletions
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/src/converter/UML2TGF.xtend b/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/src/converter/UML2TGF.xtend
new file mode 100644
index 00000000..283ddf79
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/src/converter/UML2TGF.xtend
@@ -0,0 +1,216 @@
1package converter
2
3import java.io.PrintWriter
4import java.text.SimpleDateFormat
5import java.util.ArrayList
6import java.util.Collection
7import java.util.Date
8import java.util.HashMap
9import java.util.HashSet
10import org.eclipse.emf.common.util.URI
11import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
12import org.eclipse.uml2.uml.EnumerationLiteral
13import org.eclipse.uml2.uml.InstanceSpecification
14import org.eclipse.uml2.uml.InstanceValue
15import org.eclipse.uml2.uml.Model
16import org.eclipse.uml2.uml.Slot
17import org.eclipse.uml2.uml.UMLPackage
18import org.eclipse.uml2.uml.resource.UMLResource
19import org.eclipse.emf.ecore.xmi.XMLResource
20
21class UML2TGF {
22 def static void main(String[] args) {
23
24 // access UML
25 val resourceSet = new ResourceSetImpl();
26 resourceSet.packageRegistry.put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE)
27 resourceSet.resourceFactoryRegistry.extensionToFactoryMap.put(UMLResource.FILE_EXTENSION,
28 UMLResource.Factory.INSTANCE)
29
30// resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xodr",
31// new OpenDrive15ResourceFactoryImpl);
32 val res = resourceSet.getResource(URI.createFileURI("instance//Instance_model_A.uml"), true);
33 val docRoot = res.contents.get(0) as Model
34
35// val nodes = docRoot.allOwnedElements.filter [it instanceof InstanceSpecification && it instanceof EnumerationLiteral != true]
36 val nodes = docRoot.allOwnedElements.filter[it instanceof InstanceSpecification]
37 val allTypes = new HashSet<Object>
38
39 for (e : nodes) {
40 allTypes.add(e.class)
41 }
42
43 // create file
44 val Date date = new Date(System.currentTimeMillis)
45 val SimpleDateFormat format = new SimpleDateFormat("dd-HHmm");
46 val formattedDate = format.format(date)
47 val map = new HashMap<InstanceSpecification, Integer>
48 val set = new HashSet<String>
49 val unidentified = new ArrayList<Object>
50 val enums = new ArrayList<Object>
51
52 /*
53 * val writer = new PrintWriter("output//graph-" + formattedDate + ".tgf")
54
55 * println("begin Writing")
56
57 * // transform Nodes
58 * var ind = 0
59 * for (node : nodes) {
60 * val n = node as InstanceSpecification
61 * map.put(n, ind)
62
63 * writer.append(ind + " " + n.name + "\n")
64 * ind++
65 * }
66 * writer.append("#\n")
67
68 * // println(node.name)
69 * //
70 * // println(node.slots)
71 * // val sl = node.slots
72 * //
73 * // for (s : sl) {
74 * // val v = s.values.get(0)
75 * // if (v instanceof InstanceValue) {
76 * // println(map.get(v.instance))
77 * // } else {
78 * // println("--" + v.class)
79 * // }
80 * // }
81 * // transform Edges
82 * var Slot s = null
83 * try {
84 * for (node : nodes) {
85 * val n = node as InstanceSpecification
86 * val nind = map.get(n)
87 * for (slot : n.slots) {
88 * s = slot
89 * var fname = "null"
90 * if(slot.definingFeature !== null) fname = slot.definingFeature.name
91 * for (v : slot.values) {
92 * if (v instanceof InstanceValue) {
93 * val vind = map.get(v.instance)
94
95 * writer.append(nind + " " + vind + " " + fname + "\n")
96 * }
97 * // else {
98 * // println("--" + v.class)
99 * // }
100 * }
101 * }
102 * }
103 * } catch (Exception e) {
104 * println(s.definingFeature)
105 * }
106
107 * writer.close
108 println("End")*/
109 val writer = new PrintWriter("output//graph-" + formattedDate + ".gml")
110
111 println("begin Writing")
112 writer.append("graph\n[\n")
113
114 // transform Nodes
115 var ind = 0
116 var numNodes = nodes.length
117 var numEdges = 0
118 for (node : nodes) {
119 val n = node as InstanceSpecification
120 if(map.keySet.contains(n)) System.err.println("contained")
121 map.put(n, ind)
122
123 writer.append(''' node
124 [
125 id «ind»
126 label "«IF n.name !== null»«n.name»«ENDIF»"
127«IF n.name !== null && (n.name.contains("Household")|| n.name.contains("Household"))» graphics
128 [
129 fill "#00FF00"
130 ]
131 «ENDIF»
132 «IF node instanceof EnumerationLiteral» graphics
133 [
134 fill "#FF0000"
135 ]
136 «ENDIF»
137 ]
138 ''')
139 ind++
140 }
141
142// println(node.name)
143//
144// println(node.slots)
145// val sl = node.slots
146//
147// for (s : sl) {
148// val v = s.values.get(0)
149// if (v instanceof InstanceValue) {
150// println(map.get(v.instance))
151// } else {
152// println("--" + v.class)
153// }
154// }
155 // transform Edges
156 var Slot s = null
157 try {
158 for (node : nodes) {
159// if (node instanceof EnumerationLiteral != true) {
160 val n = node as InstanceSpecification
161 val nind = map.get(n)
162 for (slot : n.slots) {
163 s = slot
164 var fname = ""
165 if(slot.definingFeature !== null) fname = slot.definingFeature.name
166 for (v : slot.values) {
167 if (v instanceof InstanceValue) {
168 val value = v as InstanceValue
169 if (map.containsKey(value.instance)) {
170 if (value.instance instanceof EnumerationLiteral != true) {
171 val vind = map.get(value.instance)
172 writer.append(''' edge
173 [
174 source «nind»
175 target «vind»
176 label "«fname»"
177 ]
178 ''')
179// writer.append(nind + " " + vind + " " + fname + "\n")
180 numEdges++
181 } else {
182 enums.add(value + " -> " + value.instance)
183 }
184 } else {
185 unidentified.add(value + " -> " + value.instance)
186 }
187 } else {
188 set.add(v.class.toString)
189 }
190 }
191 }
192// }
193
194 }
195 } catch (Exception e) {
196 println(s.definingFeature)
197 }
198// printset("All types", allTypes)
199 printset("Unhandled Edges", set)
200 printset("Unidentified trgs", unidentified)
201 printset("Enums:", enums)
202 writer.append("]")
203 writer.close
204 println("End")
205 println("#nodes:" + numNodes + ", #edges:" + numEdges)
206
207 }
208
209 static def printset(String name, Collection s) {
210 println(name + ":")
211 for (k : s) {
212 println("- " + k)
213 }
214 println()
215 }
216}