1
2
3
4
5
6
7
8
9
10 package de.uni_leipzig.wifa.iwi.mr3.dao.neo4j.impl;
11
12 import java.util.Map;
13
14 import org.eclipse.emf.common.util.EList;
15 import org.eclipse.emf.ecore.EAnnotation;
16 import org.eclipse.emf.ecore.EAttribute;
17 import org.eclipse.emf.ecore.EClass;
18 import org.eclipse.emf.ecore.EClassifier;
19 import org.eclipse.emf.ecore.EDataType;
20 import org.eclipse.emf.ecore.EEnum;
21 import org.eclipse.emf.ecore.EEnumLiteral;
22 import org.eclipse.emf.ecore.EGenericType;
23 import org.eclipse.emf.ecore.EModelElement;
24 import org.eclipse.emf.ecore.EObject;
25 import org.eclipse.emf.ecore.EOperation;
26 import org.eclipse.emf.ecore.EPackage;
27 import org.eclipse.emf.ecore.EParameter;
28 import org.eclipse.emf.ecore.EReference;
29 import org.eclipse.emf.ecore.ETypeParameter;
30 import org.eclipse.emf.ecore.impl.EStringToStringMapEntryImpl;
31 import org.neo4j.api.core.Node;
32
33 import de.uni_leipzig.wifa.iwi.mr3.dao.Constants;
34 import de.uni_leipzig.wifa.iwi.mr3.dao.neo4j.EcoreRelationshipType;
35
36
37
38
39
40 public class PhaseOneSaveProcessor extends AbstractNeoSaveProcessor
41 {
42
43
44
45
46
47
48
49
50
51
52 @Override
53 public void process(final EPackage element, final Map<EObject, Object> registry)
54 {
55
56 final Node node = createNode();
57 node.setProperty(Constants.PROPERTY_NAME, element.getName());
58 node.setProperty(Constants.PROPERTY_NS_URI, element.getNsURI());
59
60 final String nsPrefix = element.getNsPrefix();
61 node.setProperty(Constants.PROPERTY_NS_PREFIX, nsPrefix == null ? "" : nsPrefix);
62
63
64 final EPackage container = element.getESuperPackage();
65 if (null == container)
66 {
67
68 getHelper().getSubrefNode(EcoreRelationshipType.RESOURCES).createRelationshipTo(node,
69 EcoreRelationshipType.RESOURCE);
70 }
71 else
72 {
73
74 getNodeFromRegistry(container, registry).createRelationshipTo(node, EcoreRelationshipType.CONTAINS);
75 }
76
77 registry.put(element, node);
78 }
79
80
81
82
83
84
85
86
87
88
89
90 @Override
91 public void process(final EDataType element, final Map<EObject, Object> registry)
92 {
93 final Node node = createNode();
94 node.setProperty(Constants.PROPERTY_NAME, element.getName());
95 node.setProperty(Constants.PROPERTY_SERIALIZABLE, element.isSerializable());
96
97 final String instanceTypeName = element.getInstanceTypeName();
98 if (null != instanceTypeName)
99 {
100 node.setProperty(Constants.PROPERTY_INSTANCE_TYPE_NAME, instanceTypeName);
101 }
102
103 final String instanceClassName = element.getInstanceClassName();
104 if (null != instanceClassName)
105 {
106 node.setProperty(Constants.PROPERTY_INSTANCE_CLASS_NAME, instanceClassName);
107 }
108
109 final Object defaultValue = element.getDefaultValue();
110 if (null != defaultValue)
111 {
112 node.setProperty(Constants.PROPERTY_DEFAULT_VALUE, defaultValue);
113 }
114
115
116 final EPackage container = element.getEPackage();
117 getNodeFromRegistry(container, registry).createRelationshipTo(node, EcoreRelationshipType.CONTAINS);
118
119 registry.put(element, node);
120 }
121
122
123
124
125
126
127
128
129
130
131
132 @Override
133 public void process(final EClass element, final Map<EObject, Object> registry)
134 {
135 final Node node = createNode();
136 node.setProperty(Constants.PROPERTY_NAME, element.getName());
137 node.setProperty(Constants.PROPERTY_ABSTRACT, element.isAbstract());
138 node.setProperty(Constants.PROPERTY_INTERFACE, element.isInterface());
139
140 final String instanceTypeName = element.getInstanceTypeName();
141 if (null != instanceTypeName)
142 {
143 node.setProperty(Constants.PROPERTY_INSTANCE_TYPE_NAME, instanceTypeName);
144 }
145
146 final Object defaultValue = element.getDefaultValue();
147 if (null != defaultValue)
148 {
149 node.setProperty(Constants.PROPERTY_DEFAULT_VALUE, defaultValue);
150 }
151
152
153 final EPackage container = element.getEPackage();
154 getNodeFromRegistry(container, registry).createRelationshipTo(node, EcoreRelationshipType.CONTAINS);
155
156 registry.put(element, node);
157 }
158
159
160
161
162
163
164
165
166
167
168
169 @Override
170 public void process(final EEnum element, final Map<EObject, Object> registry)
171 {
172 final Node node = createNode();
173 node.setProperty(Constants.PROPERTY_NAME, element.getName());
174 node.setProperty(Constants.PROPERTY_SERIALIZABLE, element.isSerializable());
175 final String instanceTypeName = element.getInstanceTypeName();
176 if (null != instanceTypeName)
177 {
178 node.setProperty(Constants.PROPERTY_INSTANCE_TYPE_NAME, instanceTypeName);
179 }
180
181
182 final EPackage container = element.getEPackage();
183 getNodeFromRegistry(container, registry).createRelationshipTo(node, EcoreRelationshipType.CONTAINS);
184
185 registry.put(element, node);
186 }
187
188
189
190
191
192
193
194
195
196
197
198 @Override
199 public void process(final EAnnotation element, final Map<EObject, Object> registry)
200 {
201 final Node node = createNode();
202
203 final String source = element.getSource();
204 node.setProperty(Constants.PROPERTY_SOURCE, source == null ? "" : source);
205
206
207 final EModelElement container = element.getEModelElement();
208 getNodeFromRegistry(container, registry).createRelationshipTo(node, EcoreRelationshipType.CONTAINS);
209
210 registry.put(element, node);
211 }
212
213
214
215
216
217
218
219
220
221
222
223 @Override
224 public void process(final EStringToStringMapEntryImpl element, final Map<EObject, Object> registry)
225 {
226 final Node node = createNode();
227
228 final String key = element.getKey();
229 final String val = element.getValue();
230
231 if (null == key)
232 {
233 node.setProperty(Constants.PROPERTY_KEY_IS_NULL, true);
234 }
235 else
236 {
237 node.setProperty(Constants.PROPERTY_KEY, element.getKey());
238 }
239
240 if (null == val)
241 {
242 node.setProperty(Constants.PROPERTY_VALUE_IS_NULL, true);
243 }
244 else
245 {
246 node.setProperty(Constants.PROPERTY_VALUE, element.getValue());
247 }
248
249
250 final EObject container = element.eContainer();
251 getNodeFromRegistry(container, registry).createRelationshipTo(node, EcoreRelationshipType.CONTAINS);
252
253 registry.put(element, node);
254 }
255
256
257
258
259
260
261
262
263
264
265
266 @Override
267 public void process(final EOperation element, final Map<EObject, Object> registry)
268 {
269 final Node node = createNode();
270 node.setProperty(Constants.PROPERTY_NAME, element.getName());
271 node.setProperty(Constants.PROPERTY_ORDERED, element.isOrdered());
272 node.setProperty(Constants.PROPERTY_UNIQUE, element.isUnique());
273 node.setProperty(Constants.PROPERTY_LOWER_BOUND, element.getLowerBound());
274 node.setProperty(Constants.PROPERTY_UPPER_BOUND, element.getUpperBound());
275
276
277 final EClass container = element.getEContainingClass();
278 getNodeFromRegistry(container, registry).createRelationshipTo(node, EcoreRelationshipType.CONTAINS);
279
280 final EList<EClassifier> exceptions = element.getEExceptions();
281 for (final EClassifier exception : exceptions)
282 {
283 node.createRelationshipTo(getNodeFromRegistry(exception, registry), EcoreRelationshipType.EXCEPTION);
284 }
285
286 registry.put(element, node);
287 }
288
289
290
291
292
293
294
295
296
297
298
299 @Override
300 public void process(final EAttribute element, final Map<EObject, Object> registry)
301 {
302 final Node node = createNode();
303 node.setProperty(Constants.PROPERTY_CHANGEABLE, element.isChangeable());
304 node.setProperty(Constants.PROPERTY_DERIVED, element.isDerived());
305 node.setProperty(Constants.PROPERTY_ID, element.isID());
306 node.setProperty(Constants.PROPERTY_LOWER_BOUND, element.getLowerBound());
307 node.setProperty(Constants.PROPERTY_NAME, element.getName());
308 node.setProperty(Constants.PROPERTY_ORDERED, element.isOrdered());
309 node.setProperty(Constants.PROPERTY_TRANSIENT, element.isTransient());
310 node.setProperty(Constants.PROPERTY_UNIQUE, element.isUnique());
311 node.setProperty(Constants.PROPERTY_UNSETTABLE, element.isUnsettable());
312 node.setProperty(Constants.PROPERTY_UPPER_BOUND, element.getUpperBound());
313 node.setProperty(Constants.PROPERTY_VOLATILE, element.isVolatile());
314
315 final String defaultValueLiteral = element.getDefaultValueLiteral();
316 if (null != defaultValueLiteral)
317 {
318 node.setProperty(Constants.PROPERTY_DEFAULT_VALUE_LITERAL, defaultValueLiteral);
319 }
320
321
322 final EClass container = element.getEContainingClass();
323 getNodeFromRegistry(container, registry).createRelationshipTo(node, EcoreRelationshipType.CONTAINS);
324
325 registry.put(element, node);
326 }
327
328
329
330
331
332
333
334
335
336
337
338 @Override
339 public void process(final EReference element, final Map<EObject, Object> registry)
340 {
341 final Node node = createNode();
342 node.setProperty(Constants.PROPERTY_CHANGEABLE, element.isChangeable());
343 node.setProperty(Constants.PROPERTY_CONTAINER, element.isContainer());
344 node.setProperty(Constants.PROPERTY_CONTAINMENT, element.isContainment());
345 node.setProperty(Constants.PROPERTY_DERIVED, element.isDerived());
346 node.setProperty(Constants.PROPERTY_LOWER_BOUND, element.getLowerBound());
347 node.setProperty(Constants.PROPERTY_NAME, element.getName());
348 node.setProperty(Constants.PROPERTY_ORDERED, element.isOrdered());
349 node.setProperty(Constants.PROPERTY_RESOLVE_PROXIES, element.isResolveProxies());
350 node.setProperty(Constants.PROPERTY_TRANSIENT, element.isTransient());
351 node.setProperty(Constants.PROPERTY_UNIQUE, element.isUnique());
352 node.setProperty(Constants.PROPERTY_UNSETTABLE, element.isUnsettable());
353 node.setProperty(Constants.PROPERTY_UPPER_BOUND, element.getUpperBound());
354 node.setProperty(Constants.PROPERTY_VOLATILE, element.isVolatile());
355
356 final String defaultValueLiteral = element.getDefaultValueLiteral();
357 if (null != defaultValueLiteral)
358 {
359 node.setProperty(Constants.PROPERTY_DEFAULT_VALUE_LITERAL, defaultValueLiteral);
360 }
361
362
363 final EClass container = element.getEContainingClass();
364 getNodeFromRegistry(container, registry).createRelationshipTo(node, EcoreRelationshipType.CONTAINS);
365
366 final EList<EAttribute> eKeys = element.getEKeys();
367 for (final EAttribute eKey : eKeys)
368 {
369 node.createRelationshipTo(getNodeFromRegistry(eKey, registry), EcoreRelationshipType.E_KEY);
370 }
371
372 final EReference opposite = element.getEOpposite();
373 if (null != opposite && null != getNodeFromRegistry(opposite, registry))
374 {
375 node.createRelationshipTo(getNodeFromRegistry(opposite, registry), EcoreRelationshipType.OPPOSITE);
376 }
377
378 registry.put(element, node);
379 }
380
381
382
383
384
385
386
387
388
389
390
391 @Override
392 public void process(final EEnumLiteral element, final Map<EObject, Object> registry)
393 {
394 final Node node = createNode();
395 node.setProperty(Constants.PROPERTY_NAME, element.getName());
396 node.setProperty(Constants.PROPERTY_VALUE, element.getValue());
397
398 if (null != element.getLiteral())
399 {
400 node.setProperty(Constants.PROPERTY_LITERAL, element.getLiteral());
401 }
402
403
404 final EEnum container = element.getEEnum();
405 final Node containerNode = getNodeFromRegistry(container, registry);
406 containerNode.createRelationshipTo(node, EcoreRelationshipType.CONTAINS);
407
408 if (element.equals(container.getDefaultValue()))
409 {
410 node.createRelationshipTo(containerNode, EcoreRelationshipType.DEFAULT_VALUE);
411 }
412
413 registry.put(element, node);
414 }
415
416
417
418
419
420
421
422
423
424
425
426
427 @Override
428 public void process(final EGenericType element, final Map<EObject, Object> registry)
429 {
430 final Node genericTypeNode = createNode();
431
432 final EObject container = element.eContainer();
433 getNodeFromRegistry(container, registry).createRelationshipTo(genericTypeNode, EcoreRelationshipType.CONTAINS);
434 getNodeFromRegistry(container, registry).createRelationshipTo(genericTypeNode, EcoreRelationshipType.GENERIC_TYPE);
435
436 registry.put(element, genericTypeNode);
437 }
438
439
440
441
442
443
444
445
446
447
448
449
450
451 @Override
452 public void process(final EParameter element, final Map<EObject, Object> registry)
453 {
454 final Node node = createNode();
455 node.setProperty(Constants.PROPERTY_NAME, element.getName());
456 node.setProperty(Constants.PROPERTY_LOWER_BOUND, element.getLowerBound());
457 node.setProperty(Constants.PROPERTY_UPPER_BOUND, element.getUpperBound());
458 node.setProperty(Constants.PROPERTY_ORDERED, element.isOrdered());
459 node.setProperty(Constants.PROPERTY_REQUIRED, element.isRequired());
460 node.setProperty(Constants.PROPERTY_UNIQUE, element.isUnique());
461 node.setProperty(Constants.PROPERTY_MANY, element.isMany());
462
463
464 final EOperation container = element.getEOperation();
465 getNodeFromRegistry(container, registry).createRelationshipTo(node, EcoreRelationshipType.CONTAINS);
466
467 registry.put(element, node);
468 }
469
470
471
472
473
474
475
476
477
478
479
480 @Override
481 public void process(final ETypeParameter element, final Map<EObject, Object> registry)
482 {
483 final Node node = createNode();
484 node.setProperty(Constants.PROPERTY_NAME, element.getName());
485
486
487 final EObject container = element.eContainer();
488 getNodeFromRegistry(container, registry).createRelationshipTo(node, EcoreRelationshipType.CONTAINS);
489
490 registry.put(element, node);
491 }
492
493
494
495
496
497
498
499
500
501
502
503 @Override
504 public void process(final EObject element, final Map<EObject, Object> registry)
505 {
506 final Node node = createNode();
507
508
509 final EObject container = element.eContainer();
510 if (null == container)
511 {
512 final Node modelNode = createNode();
513
514
515 final String metaNsUri = element.eClass().getEPackage().getNsURI();
516 modelNode.setProperty(Constants.PROPERTY_NS_URI, metaNsUri + " [" + element.eResource().getURI() + "]");
517 modelNode.setProperty(Constants.PROPERTY_URI, String.valueOf(element.eResource().getURI()));
518 getHelper().getSubrefNode(EcoreRelationshipType.RESOURCES)
519 .createRelationshipTo(modelNode,
520 EcoreRelationshipType.RESOURCE);
521
522
523 modelNode.createRelationshipTo(node, EcoreRelationshipType.CONTAINS);
524
525 EPackage topLevelPackage = element.eClass().getEPackage();
526 while (null != topLevelPackage.getESuperPackage())
527 {
528 topLevelPackage = topLevelPackage.getESuperPackage();
529 }
530 final Node metaPackageNode = getHelper().getModelNode(topLevelPackage.getNsURI());
531 metaPackageNode.createRelationshipTo(modelNode, EcoreRelationshipType.INSTANCE_MODEL);
532 }
533
534 registry.put(element, node);
535 }
536 }