diff options
author | 2020-11-03 22:52:26 -0500 | |
---|---|---|
committer | 2020-11-03 22:52:26 -0500 | |
commit | 945f487a08b643392a5d5918c631640b9a0e4605 (patch) | |
tree | b537c456e395950ce98daaabb9468c7c17d5a72b /Metrics | |
parent | Fix numeric-solver-at-end (diff) | |
download | VIATRA-Generator-945f487a08b643392a5d5918c631640b9a0e4605.tar.gz VIATRA-Generator-945f487a08b643392a5d5918c631640b9a0e4605.tar.zst VIATRA-Generator-945f487a08b643392a5d5918c631640b9a0e4605.zip |
add realistic solver
Diffstat (limited to 'Metrics')
374 files changed, 23923 insertions, 0 deletions
diff --git a/Metrics/Metrics-Calculation/.project b/Metrics/Metrics-Calculation/.project new file mode 100644 index 00000000..8cdd9483 --- /dev/null +++ b/Metrics/Metrics-Calculation/.project | |||
@@ -0,0 +1,11 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <projectDescription> | ||
3 | <name>Metrics-Calculation</name> | ||
4 | <comment></comment> | ||
5 | <projects> | ||
6 | </projects> | ||
7 | <buildSpec> | ||
8 | </buildSpec> | ||
9 | <natures> | ||
10 | </natures> | ||
11 | </projectDescription> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/.classpath b/Metrics/Metrics-Calculation/SocialNetwork_plugin/.classpath new file mode 100644 index 00000000..4f2afbc9 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/.classpath | |||
@@ -0,0 +1,11 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <classpath> | ||
3 | <classpathentry kind="src" path="encore_gen"/> | ||
4 | <classpathentry kind="src" path="queries"/> | ||
5 | <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> | ||
6 | <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> | ||
7 | <classpathentry kind="src" path="src"/> | ||
8 | <classpathentry kind="src" path="model"/> | ||
9 | <classpathentry kind="src" path="src-gen"/> | ||
10 | <classpathentry kind="output" path="bin"/> | ||
11 | </classpath> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/.project b/Metrics/Metrics-Calculation/SocialNetwork_plugin/.project new file mode 100644 index 00000000..decac49c --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/.project | |||
@@ -0,0 +1,40 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <projectDescription> | ||
3 | <name>SocialNetwork_plugin</name> | ||
4 | <comment></comment> | ||
5 | <projects> | ||
6 | </projects> | ||
7 | <buildSpec> | ||
8 | <buildCommand> | ||
9 | <name>org.eclipse.viatra.query.tooling.ui.projectbuilder</name> | ||
10 | <arguments> | ||
11 | </arguments> | ||
12 | </buildCommand> | ||
13 | <buildCommand> | ||
14 | <name>org.eclipse.xtext.ui.shared.xtextBuilder</name> | ||
15 | <arguments> | ||
16 | </arguments> | ||
17 | </buildCommand> | ||
18 | <buildCommand> | ||
19 | <name>org.eclipse.jdt.core.javabuilder</name> | ||
20 | <arguments> | ||
21 | </arguments> | ||
22 | </buildCommand> | ||
23 | <buildCommand> | ||
24 | <name>org.eclipse.pde.ManifestBuilder</name> | ||
25 | <arguments> | ||
26 | </arguments> | ||
27 | </buildCommand> | ||
28 | <buildCommand> | ||
29 | <name>org.eclipse.pde.SchemaBuilder</name> | ||
30 | <arguments> | ||
31 | </arguments> | ||
32 | </buildCommand> | ||
33 | </buildSpec> | ||
34 | <natures> | ||
35 | <nature>org.eclipse.pde.PluginNature</nature> | ||
36 | <nature>org.eclipse.jdt.core.javanature</nature> | ||
37 | <nature>org.eclipse.viatra.query.projectnature</nature> | ||
38 | <nature>org.eclipse.xtext.ui.shared.xtextNature</nature> | ||
39 | </natures> | ||
40 | </projectDescription> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/.settings/org.eclipse.jdt.core.prefs b/Metrics/Metrics-Calculation/SocialNetwork_plugin/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..0c68a61d --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/.settings/org.eclipse.jdt.core.prefs | |||
@@ -0,0 +1,7 @@ | |||
1 | eclipse.preferences.version=1 | ||
2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled | ||
3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 | ||
4 | org.eclipse.jdt.core.compiler.compliance=1.8 | ||
5 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error | ||
6 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error | ||
7 | org.eclipse.jdt.core.compiler.source=1.8 | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/1.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/1.csv new file mode 100644 index 00000000..b7f73ed2 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/1.csv | |||
@@ -0,0 +1 @@ | |||
Time,0 : 0.0 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/META-INF/MANIFEST.MF b/Metrics/Metrics-Calculation/SocialNetwork_plugin/META-INF/MANIFEST.MF new file mode 100644 index 00000000..833b6fd8 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/META-INF/MANIFEST.MF | |||
@@ -0,0 +1,35 @@ | |||
1 | Manifest-Version: 1.0 | ||
2 | Bundle-ManifestVersion: 2 | ||
3 | Bundle-Name: %pluginName | ||
4 | Bundle-SymbolicName: SocialNetwork_plugin;singleton:=true | ||
5 | Bundle-Version: 1.0.0.qualifier | ||
6 | Bundle-ClassPath: . | ||
7 | Bundle-Vendor: %providerName | ||
8 | Bundle-Localization: plugin | ||
9 | Export-Package: ca.mcgill.ecse.socialnetwork.plugin, | ||
10 | ca.mcgill.ecse.socialnetwork.runner, | ||
11 | constraints.ecore, | ||
12 | ecore, | ||
13 | queries, | ||
14 | socialnetwork, | ||
15 | socialnetwork.impl, | ||
16 | socialnetwork.util | ||
17 | Require-Bundle: org.eclipse.viatra.query.runtime.rete, | ||
18 | org.eclipse.viatra.query.runtime.localsearch, | ||
19 | org.eclipse.xtext.xbase.lib, | ||
20 | org.eclipse.viatra.query.runtime, | ||
21 | org.eclipse.core.runtime, | ||
22 | org.eclipse.emf.ecore;visibility:=reexport, | ||
23 | org.eclipse.emf.ecore.xmi;bundle-version="2.15.0", | ||
24 | hu.bme.mit.inf.dslreasoner.application;bundle-version="1.0.0", | ||
25 | org.junit;bundle-version="4.12.0", | ||
26 | org.eclipse.collections;bundle-version="9.2.0", | ||
27 | hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph;bundle-version="1.0.0", | ||
28 | ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator;bundle-version="1.0.0", | ||
29 | hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.validation;bundle-version="0.0.1" | ||
30 | Bundle-RequiredExecutionEnvironment: JavaSE-1.8 | ||
31 | Bundle-ActivationPolicy: lazy | ||
32 | Main-Class: ca.mcgill.ecse.socialnetwork.runner.Main | ||
33 | Automatic-Module-Name: SocialNetwork_plugin | ||
34 | Import-Package: org.apache.log4j, | ||
35 | org.junit;version="4.12.0" | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/Measurement_Runner.launch b/Metrics/Metrics-Calculation/SocialNetwork_plugin/Measurement_Runner.launch new file mode 100644 index 00000000..c69ce6f0 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/Measurement_Runner.launch | |||
@@ -0,0 +1,17 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
2 | <launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication"> | ||
3 | <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> | ||
4 | <listEntry value="/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java"/> | ||
5 | </listAttribute> | ||
6 | <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> | ||
7 | <listEntry value="1"/> | ||
8 | </listAttribute> | ||
9 | <stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaAdvancedSourceLookupDirector"/> | ||
10 | <stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <sourceLookupDirector> <sourceContainers duplicates="false"> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;hu.bme.mit.inf.dslreasoner.viatra2logic&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;directory nest=&quot;false&quot; path=&quot;C:\Users\chenp\eclipse-workspace\VIATRA-Generator\Solvers\VIATRA-Solver\hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra\src\hu\bme\mit\inf\dslreasoner\viatrasolver&quot;/&gt;&#13;&#10;" typeId="org.eclipse.debug.core.containerType.directory"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;directory nest=&quot;false&quot; path=&quot;C:\Users\chenp\eclipse-workspace\VIATRA-Generator\Solvers\VIATRA-Solver\hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra\src\hu\bme\mit\inf\dslreasoner\viatrasolver\logic2viatra&quot;/&gt;&#13;&#10;" typeId="org.eclipse.debug.core.containerType.directory"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;directory nest=&quot;false&quot; path=&quot;C:\Users\chenp\eclipse-workspace\VIATRA-Generator\Solvers\VIATRA-Solver\hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra\src\hu\bme\mit\inf\dslreasoner\viatrasolver\logic2viatra\rules&quot;/&gt;&#13;&#10;" typeId="org.eclipse.debug.core.containerType.directory"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;default/&gt;&#13;&#10;" typeId="org.eclipse.debug.core.containerType.default"/> </sourceContainers> </sourceLookupDirector> "/> | ||
11 | <booleanAttribute key="org.eclipse.jdt.launching.ATTR_EXCLUDE_TEST_CODE" value="true"/> | ||
12 | <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="ca.mcgill.ecse.socialnetwork.runner.Main"/> | ||
13 | <stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="SocialNetwork_plugin"/> | ||
14 | <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="ecore.vsconfig"/> | ||
15 | <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="SocialNetwork_plugin"/> | ||
16 | <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx8G -Djava.library.path="D:\Program Files\z3-4.8.8-x64-win\z3-4.8.8-x64-win\bin""/> | ||
17 | </launchConfiguration> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/SocialNetworkGeneration.vsconfig b/Metrics/Metrics-Calculation/SocialNetwork_plugin/SocialNetworkGeneration.vsconfig new file mode 100644 index 00000000..e051c659 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/SocialNetworkGeneration.vsconfig | |||
@@ -0,0 +1,24 @@ | |||
1 | import epackage "model/socialnetwork.ecore" | ||
2 | import viatra "src/ca/mcgill/ecse/socialnetwork/plugin/Queries.vql" | ||
3 | |||
4 | generate { | ||
5 | metamodel = { package socialnetwork } | ||
6 | //constraints = { package ca.mcgill.ecse.socialnetwork.plugin } | ||
7 | partial-model = { "inputs/280nodes.xmi"} | ||
8 | |||
9 | solver = ViatraSolver | ||
10 | |||
11 | scope = { | ||
12 | #node = 301 | ||
13 | } | ||
14 | |||
15 | number = 1 | ||
16 | runs = 1 | ||
17 | config = { | ||
18 | log-level = normal | ||
19 | } | ||
20 | |||
21 | debug = "output/debug" | ||
22 | output = "output" | ||
23 | log = "output/log.txt" | ||
24 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/ca/mcgill/ecse/socialnetwork/plugin/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/ca/mcgill/ecse/socialnetwork/plugin/.gitignore new file mode 100644 index 00000000..f2558cf5 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/ca/mcgill/ecse/socialnetwork/plugin/.gitignore | |||
@@ -0,0 +1,10 @@ | |||
1 | /.Friendship.java._trace | ||
2 | /.NoFriend.java._trace | ||
3 | /.Queries.java._trace | ||
4 | /.SelfFriend.java._trace | ||
5 | /.SingleFriendship.java._trace | ||
6 | /Friendship.java | ||
7 | /NoFriend.java | ||
8 | /Queries.java | ||
9 | /SelfFriend.java | ||
10 | /SingleFriendship.java | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/ca/mcgill/ecse/socialnetwork/plugin/Queries.vql b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/ca/mcgill/ecse/socialnetwork/plugin/Queries.vql new file mode 100644 index 00000000..3e7fc68c --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/ca/mcgill/ecse/socialnetwork/plugin/Queries.vql | |||
@@ -0,0 +1,54 @@ | |||
1 | package ca.mcgill.ecse.socialnetwork.plugin | ||
2 | |||
3 | import epackage "http://ecse.mcgill.ca/socialnetwork" | ||
4 | |||
5 | //@Constraint(message="terminatorAndInformation", severity="error", key={T}) | ||
6 | //pattern terminatorAndInformation(T : FAMTerminator, I : InformationLink) = { | ||
7 | // FunctionalOutput.outgoingLinks(Out,I); | ||
8 | // FunctionalOutput.terminator(Out,T); | ||
9 | //} or { | ||
10 | // InformationLink.to(I,In); | ||
11 | // FunctionalInput.terminator(In,T); | ||
12 | //} | ||
13 | |||
14 | @Constraint(message="singleFriendship", severity="error", key={p1}) | ||
15 | pattern singleFriendship(p1: Person) { | ||
16 | find friendship(p1, p); | ||
17 | neg find friendship(p, p1); | ||
18 | } | ||
19 | |||
20 | //@Constraint(message="cycle", severity="error", key={p}) | ||
21 | //pattern cycleInParenthood(p: Person) { | ||
22 | // find isAncestor(p, p); | ||
23 | //} | ||
24 | |||
25 | @Constraint(message="noFriend", severity="error", key={p}) | ||
26 | pattern noFriend(p: Person){ | ||
27 | neg find friendship(p, _); | ||
28 | } | ||
29 | |||
30 | //@Constraint(message="brothhoodParent", severity="error", key={p1,p2}) | ||
31 | //pattern brothhoodParent(p1: Person, p2: Person){ | ||
32 | // Person.parents(p1, parent1); | ||
33 | // Person.parents(p2, parent2); | ||
34 | // parent1 == parent2; | ||
35 | // find isAncestor(p1, p2); | ||
36 | //} | ||
37 | @Constraint(message="selfFriend", severity="error", key={p}) | ||
38 | pattern selfFriend(p: Person){ | ||
39 | Person.friends(p,p); | ||
40 | } | ||
41 | |||
42 | pattern friendship(p1: Person, p2: Person){ | ||
43 | Person.friends(p1,p2); | ||
44 | } | ||
45 | |||
46 | //pattern isAncestor(person : Person, ancestor : Person){ | ||
47 | // Person.parents(person, ancestor); | ||
48 | //} or { | ||
49 | // Person.parents(person, parent); | ||
50 | // find isAncestor(parent, ancestor); | ||
51 | //} | ||
52 | |||
53 | |||
54 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/constraints/ecore/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/constraints/ecore/.gitignore new file mode 100644 index 00000000..c42ca056 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/constraints/ecore/.gitignore | |||
@@ -0,0 +1,8 @@ | |||
1 | /.Ecore_pattern.java._trace | ||
2 | /.MoreThenFiveSuperTypes.java._trace | ||
3 | /.DirectSupertype.java._trace | ||
4 | /.Ecore.java._trace | ||
5 | /.LoopInInheritence.java._trace | ||
6 | /.NonSymmetricOpposite.java._trace | ||
7 | /.Opposite.java._trace | ||
8 | /.OppositeDifferentClass.java._trace | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/ecore.ecore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/ecore.ecore new file mode 100644 index 00000000..eaaf3d11 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/ecore.ecore | |||
@@ -0,0 +1,1023 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
3 | xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="ecore" nsURI="http://www.eclipse.org/emf/2002/Ecore" nsPrefix="ecore"> | ||
4 | <eClassifiers xsi:type="ecore:EClass" name="EAnnotation" eSuperTypes="#//EModelElement"> | ||
5 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
6 | <details key="name" value="EAnnotation"/> | ||
7 | <details key="kind" value="elementOnly"/> | ||
8 | </eAnnotations> | ||
9 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
10 | <details key="constraints" value="WellFormedSourceURI"/> | ||
11 | </eAnnotations> | ||
12 | <eStructuralFeatures xsi:type="ecore:EReference" name="details" upperBound="-1" | ||
13 | eType="#//EStringToStringMapEntry" containment="true" resolveProxies="false"> | ||
14 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
15 | <details key="kind" value="element"/> | ||
16 | <details key="name" value="details"/> | ||
17 | </eAnnotations> | ||
18 | </eStructuralFeatures> | ||
19 | <eStructuralFeatures xsi:type="ecore:EReference" name="contents" upperBound="-1" | ||
20 | eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject" containment="true" | ||
21 | resolveProxies="false"> | ||
22 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
23 | <details key="kind" value="element"/> | ||
24 | <details key="name" value="contents"/> | ||
25 | </eAnnotations> | ||
26 | </eStructuralFeatures> | ||
27 | <eStructuralFeatures xsi:type="ecore:EReference" name="references" upperBound="-1" | ||
28 | eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"> | ||
29 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
30 | <details key="kind" value="attribute"/> | ||
31 | <details key="name" value="references"/> | ||
32 | </eAnnotations> | ||
33 | </eStructuralFeatures> | ||
34 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="source" eType="#//EString"> | ||
35 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
36 | <details key="kind" value="attribute"/> | ||
37 | <details key="name" value="source"/> | ||
38 | </eAnnotations> | ||
39 | </eStructuralFeatures> | ||
40 | <eStructuralFeatures xsi:type="ecore:EReference" name="eModelElement" eType="#//EModelElement" | ||
41 | transient="true" eOpposite="#//EModelElement/eAnnotations"/> | ||
42 | </eClassifiers> | ||
43 | <eClassifiers xsi:type="ecore:EClass" name="EAttribute" eSuperTypes="#//EStructuralFeature"> | ||
44 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
45 | <details key="name" value="EAttribute"/> | ||
46 | <details key="kind" value="elementOnly"/> | ||
47 | </eAnnotations> | ||
48 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
49 | <details key="constraints" value="ConsistentTransient"/> | ||
50 | </eAnnotations> | ||
51 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAttributeType" lowerBound="1" | ||
52 | eType="#//EDataType" changeable="false" volatile="true" transient="true" derived="true"> | ||
53 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
54 | <details key="kind" value="attribute"/> | ||
55 | <details key="name" value="eAttributeType"/> | ||
56 | </eAnnotations> | ||
57 | </eStructuralFeatures> | ||
58 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="iD" eType="#//EBoolean"> | ||
59 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
60 | <details key="kind" value="attribute"/> | ||
61 | <details key="name" value="iD"/> | ||
62 | </eAnnotations> | ||
63 | </eStructuralFeatures> | ||
64 | </eClassifiers> | ||
65 | <eClassifiers xsi:type="ecore:EDataType" name="EBigDecimal" instanceClassName="java.math.BigDecimal"> | ||
66 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
67 | <details key="name" value="EBigDecimal"/> | ||
68 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#decimal"/> | ||
69 | </eAnnotations> | ||
70 | </eClassifiers> | ||
71 | <eClassifiers xsi:type="ecore:EDataType" name="EBigInteger" instanceClassName="java.math.BigInteger"> | ||
72 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
73 | <details key="name" value="EBigInteger"/> | ||
74 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#integer"/> | ||
75 | </eAnnotations> | ||
76 | </eClassifiers> | ||
77 | <eClassifiers xsi:type="ecore:EDataType" name="EBoolean" instanceClassName="boolean"> | ||
78 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
79 | <details key="name" value="EBoolean"/> | ||
80 | </eAnnotations> | ||
81 | </eClassifiers> | ||
82 | <eClassifiers xsi:type="ecore:EDataType" name="EBooleanObject" instanceClassName="java.lang.Boolean"> | ||
83 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
84 | <details key="name" value="EBoolean:Object"/> | ||
85 | <details key="baseType" value="EBoolean"/> | ||
86 | </eAnnotations> | ||
87 | </eClassifiers> | ||
88 | <eClassifiers xsi:type="ecore:EDataType" name="EByte" instanceClassName="byte"> | ||
89 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
90 | <details key="name" value="EByte"/> | ||
91 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#byte"/> | ||
92 | </eAnnotations> | ||
93 | </eClassifiers> | ||
94 | <eClassifiers xsi:type="ecore:EDataType" name="EByteArray" instanceClassName="byte[]"> | ||
95 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
96 | <details key="name" value="EByteArray"/> | ||
97 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#hexBinary"/> | ||
98 | </eAnnotations> | ||
99 | </eClassifiers> | ||
100 | <eClassifiers xsi:type="ecore:EDataType" name="EByteObject" instanceClassName="java.lang.Byte"> | ||
101 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
102 | <details key="name" value="EByte:Object"/> | ||
103 | <details key="baseType" value="EByte"/> | ||
104 | </eAnnotations> | ||
105 | </eClassifiers> | ||
106 | <eClassifiers xsi:type="ecore:EDataType" name="EChar" instanceClassName="char"> | ||
107 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
108 | <details key="name" value="EChar"/> | ||
109 | </eAnnotations> | ||
110 | </eClassifiers> | ||
111 | <eClassifiers xsi:type="ecore:EDataType" name="ECharacterObject" instanceClassName="java.lang.Character"> | ||
112 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
113 | <details key="name" value="EChar:Object"/> | ||
114 | <details key="baseType" value="EChar"/> | ||
115 | </eAnnotations> | ||
116 | </eClassifiers> | ||
117 | <eClassifiers xsi:type="ecore:EClass" name="EClass" eSuperTypes="#//EClassifier"> | ||
118 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
119 | <details key="name" value="EClass"/> | ||
120 | <details key="kind" value="elementOnly"/> | ||
121 | </eAnnotations> | ||
122 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
123 | <details key="constraints" value="InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures"/> | ||
124 | </eAnnotations> | ||
125 | <eOperations name="isSuperTypeOf" eType="#//EBoolean"> | ||
126 | <eParameters name="someClass" eType="#//EClass"/> | ||
127 | </eOperations> | ||
128 | <eOperations name="getFeatureCount" eType="#//EInt"/> | ||
129 | <eOperations name="getEStructuralFeature" eType="#//EStructuralFeature"> | ||
130 | <eParameters name="featureID" eType="#//EInt"/> | ||
131 | </eOperations> | ||
132 | <eOperations name="getFeatureID" eType="#//EInt"> | ||
133 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
134 | </eOperations> | ||
135 | <eOperations name="getEStructuralFeature" eType="#//EStructuralFeature"> | ||
136 | <eParameters name="featureName" eType="#//EString"/> | ||
137 | </eOperations> | ||
138 | <eOperations name="getOperationCount" eType="#//EInt"/> | ||
139 | <eOperations name="getEOperation" eType="#//EOperation"> | ||
140 | <eParameters name="operationID" eType="#//EInt"/> | ||
141 | </eOperations> | ||
142 | <eOperations name="getOperationID" eType="#//EInt"> | ||
143 | <eParameters name="operation" eType="#//EOperation"/> | ||
144 | </eOperations> | ||
145 | <eOperations name="getOverride" eType="#//EOperation"> | ||
146 | <eParameters name="operation" eType="#//EOperation"/> | ||
147 | </eOperations> | ||
148 | <eStructuralFeatures xsi:type="ecore:EReference" name="eOperations" upperBound="-1" | ||
149 | eType="#//EOperation" containment="true" resolveProxies="false" eOpposite="#//EOperation/eContainingClass"> | ||
150 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
151 | <details key="kind" value="element"/> | ||
152 | <details key="name" value="eOperations"/> | ||
153 | </eAnnotations> | ||
154 | </eStructuralFeatures> | ||
155 | <eStructuralFeatures xsi:type="ecore:EReference" name="eStructuralFeatures" upperBound="-1" | ||
156 | eType="#//EStructuralFeature" containment="true" resolveProxies="false" eOpposite="#//EStructuralFeature/eContainingClass"> | ||
157 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
158 | <details key="kind" value="element"/> | ||
159 | <details key="name" value="eStructuralFeatures"/> | ||
160 | </eAnnotations> | ||
161 | </eStructuralFeatures> | ||
162 | <eStructuralFeatures xsi:type="ecore:EReference" name="eGenericSuperTypes" upperBound="-1" | ||
163 | eType="#//EGenericType" unsettable="true" containment="true" resolveProxies="false"> | ||
164 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
165 | <details key="kind" value="element"/> | ||
166 | <details key="name" value="eGenericSuperTypes"/> | ||
167 | </eAnnotations> | ||
168 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
169 | <details key="suppressedIsSetVisibility" value="true"/> | ||
170 | <details key="suppressedUnsetVisibility" value="true"/> | ||
171 | </eAnnotations> | ||
172 | </eStructuralFeatures> | ||
173 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="abstract" eType="#//EBoolean"> | ||
174 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
175 | <details key="kind" value="attribute"/> | ||
176 | <details key="name" value="abstract"/> | ||
177 | </eAnnotations> | ||
178 | </eStructuralFeatures> | ||
179 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllAttributes" upperBound="-1" | ||
180 | eType="#//EAttribute" changeable="false" volatile="true" transient="true" | ||
181 | derived="true"> | ||
182 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
183 | <details key="kind" value="attribute"/> | ||
184 | <details key="name" value="eAllAttributes"/> | ||
185 | </eAnnotations> | ||
186 | </eStructuralFeatures> | ||
187 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllContainments" upperBound="-1" | ||
188 | eType="#//EReference" changeable="false" volatile="true" transient="true" | ||
189 | derived="true"> | ||
190 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
191 | <details key="kind" value="attribute"/> | ||
192 | <details key="name" value="eAllContainments"/> | ||
193 | </eAnnotations> | ||
194 | </eStructuralFeatures> | ||
195 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllGenericSuperTypes" | ||
196 | upperBound="-1" eType="#//EGenericType" changeable="false" volatile="true" | ||
197 | transient="true" derived="true"> | ||
198 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
199 | <details key="kind" value="attribute"/> | ||
200 | <details key="name" value="eAllGenericSuperTypes"/> | ||
201 | </eAnnotations> | ||
202 | </eStructuralFeatures> | ||
203 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllOperations" upperBound="-1" | ||
204 | eType="#//EOperation" changeable="false" volatile="true" transient="true" | ||
205 | derived="true"> | ||
206 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
207 | <details key="kind" value="attribute"/> | ||
208 | <details key="name" value="eAllOperations"/> | ||
209 | </eAnnotations> | ||
210 | </eStructuralFeatures> | ||
211 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllReferences" upperBound="-1" | ||
212 | eType="#//EReference" changeable="false" volatile="true" transient="true" | ||
213 | derived="true"> | ||
214 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
215 | <details key="kind" value="attribute"/> | ||
216 | <details key="name" value="eAllReferences"/> | ||
217 | </eAnnotations> | ||
218 | </eStructuralFeatures> | ||
219 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllStructuralFeatures" | ||
220 | upperBound="-1" eType="#//EStructuralFeature" changeable="false" volatile="true" | ||
221 | transient="true" derived="true"> | ||
222 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
223 | <details key="kind" value="attribute"/> | ||
224 | <details key="name" value="eAllStructuralFeatures"/> | ||
225 | </eAnnotations> | ||
226 | </eStructuralFeatures> | ||
227 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllSuperTypes" upperBound="-1" | ||
228 | eType="#//EClass" changeable="false" volatile="true" transient="true" derived="true"> | ||
229 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
230 | <details key="kind" value="attribute"/> | ||
231 | <details key="name" value="eAllSuperTypes"/> | ||
232 | </eAnnotations> | ||
233 | </eStructuralFeatures> | ||
234 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAttributes" upperBound="-1" | ||
235 | eType="#//EAttribute" changeable="false" volatile="true" transient="true" | ||
236 | derived="true"> | ||
237 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
238 | <details key="kind" value="attribute"/> | ||
239 | <details key="name" value="eAttributes"/> | ||
240 | </eAnnotations> | ||
241 | </eStructuralFeatures> | ||
242 | <eStructuralFeatures xsi:type="ecore:EReference" name="eIDAttribute" eType="#//EAttribute" | ||
243 | changeable="false" volatile="true" transient="true" derived="true" resolveProxies="false"> | ||
244 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
245 | <details key="kind" value="attribute"/> | ||
246 | <details key="name" value="eIDAttribute"/> | ||
247 | </eAnnotations> | ||
248 | </eStructuralFeatures> | ||
249 | <eStructuralFeatures xsi:type="ecore:EReference" name="eReferences" upperBound="-1" | ||
250 | eType="#//EReference" changeable="false" volatile="true" transient="true" | ||
251 | derived="true"> | ||
252 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
253 | <details key="kind" value="attribute"/> | ||
254 | <details key="name" value="eReferences"/> | ||
255 | </eAnnotations> | ||
256 | </eStructuralFeatures> | ||
257 | <eStructuralFeatures xsi:type="ecore:EReference" name="eSuperTypes" upperBound="-1" | ||
258 | eType="#//EClass" unsettable="true"> | ||
259 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
260 | <details key="kind" value="attribute"/> | ||
261 | <details key="name" value="eSuperTypes"/> | ||
262 | </eAnnotations> | ||
263 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
264 | <details key="suppressedIsSetVisibility" value="true"/> | ||
265 | <details key="suppressedUnsetVisibility" value="true"/> | ||
266 | </eAnnotations> | ||
267 | </eStructuralFeatures> | ||
268 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="interface" eType="#//EBoolean"> | ||
269 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
270 | <details key="kind" value="attribute"/> | ||
271 | <details key="name" value="interface"/> | ||
272 | </eAnnotations> | ||
273 | </eStructuralFeatures> | ||
274 | </eClassifiers> | ||
275 | <eClassifiers xsi:type="ecore:EClass" name="EClassifier" abstract="true" eSuperTypes="#//ENamedElement"> | ||
276 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
277 | <details key="name" value="EClassifier"/> | ||
278 | <details key="kind" value="elementOnly"/> | ||
279 | </eAnnotations> | ||
280 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
281 | <details key="constraints" value="WellFormedInstanceTypeName UniqueTypeParameterNames"/> | ||
282 | </eAnnotations> | ||
283 | <eOperations name="isInstance" eType="#//EBoolean"> | ||
284 | <eParameters name="object" eType="#//EJavaObject"/> | ||
285 | </eOperations> | ||
286 | <eOperations name="getClassifierID" eType="#//EInt"/> | ||
287 | <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeParameters" upperBound="-1" | ||
288 | eType="#//ETypeParameter" containment="true"> | ||
289 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
290 | <details key="kind" value="element"/> | ||
291 | <details key="name" value="eTypeParameters"/> | ||
292 | </eAnnotations> | ||
293 | </eStructuralFeatures> | ||
294 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValue" eType="#//EJavaObject" | ||
295 | changeable="false" volatile="true" transient="true" derived="true"> | ||
296 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
297 | <details key="kind" value="attribute"/> | ||
298 | <details key="name" value="defaultValue"/> | ||
299 | </eAnnotations> | ||
300 | </eStructuralFeatures> | ||
301 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="instanceClass" changeable="false" | ||
302 | volatile="true" transient="true" derived="true"> | ||
303 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
304 | <details key="kind" value="attribute"/> | ||
305 | <details key="name" value="instanceClass"/> | ||
306 | </eAnnotations> | ||
307 | <eGenericType eClassifier="#//EJavaClass"> | ||
308 | <eTypeArguments/> | ||
309 | </eGenericType> | ||
310 | </eStructuralFeatures> | ||
311 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="instanceClassName" eType="#//EString" | ||
312 | volatile="true" unsettable="true"> | ||
313 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
314 | <details key="kind" value="attribute"/> | ||
315 | <details key="name" value="instanceClassName"/> | ||
316 | </eAnnotations> | ||
317 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
318 | <details key="suppressedIsSetVisibility" value="true"/> | ||
319 | <details key="suppressedUnsetVisibility" value="true"/> | ||
320 | </eAnnotations> | ||
321 | </eStructuralFeatures> | ||
322 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="instanceTypeName" eType="#//EString" | ||
323 | volatile="true" unsettable="true"> | ||
324 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
325 | <details key="kind" value="attribute"/> | ||
326 | <details key="name" value="instanceTypeName"/> | ||
327 | </eAnnotations> | ||
328 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
329 | <details key="suppressedIsSetVisibility" value="true"/> | ||
330 | <details key="suppressedUnsetVisibility" value="true"/> | ||
331 | </eAnnotations> | ||
332 | </eStructuralFeatures> | ||
333 | <eStructuralFeatures xsi:type="ecore:EReference" name="ePackage" eType="#//EPackage" | ||
334 | transient="true" eOpposite="#//EPackage/eClassifiers"/> | ||
335 | </eClassifiers> | ||
336 | <eClassifiers xsi:type="ecore:EClass" name="EDataType" eSuperTypes="#//EClassifier"> | ||
337 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
338 | <details key="name" value="EDataType"/> | ||
339 | <details key="kind" value="elementOnly"/> | ||
340 | </eAnnotations> | ||
341 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="serializable" eType="#//EBoolean" | ||
342 | defaultValueLiteral="true"> | ||
343 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
344 | <details key="kind" value="attribute"/> | ||
345 | <details key="name" value="serializable"/> | ||
346 | </eAnnotations> | ||
347 | </eStructuralFeatures> | ||
348 | </eClassifiers> | ||
349 | <eClassifiers xsi:type="ecore:EDataType" name="EDate" instanceClassName="java.util.Date"> | ||
350 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
351 | <details key="name" value="EDate"/> | ||
352 | </eAnnotations> | ||
353 | </eClassifiers> | ||
354 | <eClassifiers xsi:type="ecore:EDataType" name="EDiagnosticChain" instanceClassName="org.eclipse.emf.common.util.DiagnosticChain" | ||
355 | serializable="false"> | ||
356 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
357 | <details key="name" value="EDiagnosticChain"/> | ||
358 | </eAnnotations> | ||
359 | </eClassifiers> | ||
360 | <eClassifiers xsi:type="ecore:EDataType" name="EDouble" instanceClassName="double"> | ||
361 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
362 | <details key="name" value="EDouble"/> | ||
363 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#double"/> | ||
364 | </eAnnotations> | ||
365 | </eClassifiers> | ||
366 | <eClassifiers xsi:type="ecore:EDataType" name="EDoubleObject" instanceClassName="java.lang.Double"> | ||
367 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
368 | <details key="name" value="EDouble:Object"/> | ||
369 | <details key="baseType" value="EDouble"/> | ||
370 | </eAnnotations> | ||
371 | </eClassifiers> | ||
372 | <eClassifiers xsi:type="ecore:EDataType" name="EEList" instanceClassName="org.eclipse.emf.common.util.EList" | ||
373 | serializable="false"> | ||
374 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
375 | <details key="name" value="EEList"/> | ||
376 | </eAnnotations> | ||
377 | <eTypeParameters name="E"/> | ||
378 | </eClassifiers> | ||
379 | <eClassifiers xsi:type="ecore:EClass" name="EEnum" eSuperTypes="#//EDataType"> | ||
380 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
381 | <details key="name" value="EEnum"/> | ||
382 | <details key="kind" value="elementOnly"/> | ||
383 | </eAnnotations> | ||
384 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
385 | <details key="constraints" value="UniqueEnumeratorNames UniqueEnumeratorLiterals"/> | ||
386 | </eAnnotations> | ||
387 | <eOperations name="getEEnumLiteral" eType="#//EEnumLiteral"> | ||
388 | <eParameters name="name" eType="#//EString"/> | ||
389 | </eOperations> | ||
390 | <eOperations name="getEEnumLiteral" eType="#//EEnumLiteral"> | ||
391 | <eParameters name="value" eType="#//EInt"/> | ||
392 | </eOperations> | ||
393 | <eOperations name="getEEnumLiteralByLiteral" eType="#//EEnumLiteral"> | ||
394 | <eParameters name="literal" eType="#//EString"/> | ||
395 | </eOperations> | ||
396 | <eStructuralFeatures xsi:type="ecore:EReference" name="eLiterals" upperBound="-1" | ||
397 | eType="#//EEnumLiteral" containment="true" resolveProxies="false" eOpposite="#//EEnumLiteral/eEnum"> | ||
398 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
399 | <details key="kind" value="element"/> | ||
400 | <details key="name" value="eLiterals"/> | ||
401 | </eAnnotations> | ||
402 | </eStructuralFeatures> | ||
403 | </eClassifiers> | ||
404 | <eClassifiers xsi:type="ecore:EDataType" name="EEnumerator" instanceClassName="org.eclipse.emf.common.util.Enumerator" | ||
405 | serializable="false"> | ||
406 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
407 | <details key="name" value="EEnumerator"/> | ||
408 | </eAnnotations> | ||
409 | </eClassifiers> | ||
410 | <eClassifiers xsi:type="ecore:EClass" name="EEnumLiteral" eSuperTypes="#//ENamedElement"> | ||
411 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
412 | <details key="name" value="EEnumLiteral"/> | ||
413 | <details key="kind" value="elementOnly"/> | ||
414 | </eAnnotations> | ||
415 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="instance" eType="#//EEnumerator" | ||
416 | transient="true"> | ||
417 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
418 | <details key="kind" value="attribute"/> | ||
419 | <details key="name" value="instance"/> | ||
420 | </eAnnotations> | ||
421 | </eStructuralFeatures> | ||
422 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="literal" eType="#//EString"> | ||
423 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
424 | <details key="kind" value="attribute"/> | ||
425 | <details key="name" value="literal"/> | ||
426 | </eAnnotations> | ||
427 | </eStructuralFeatures> | ||
428 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="#//EInt"> | ||
429 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
430 | <details key="kind" value="attribute"/> | ||
431 | <details key="name" value="value"/> | ||
432 | </eAnnotations> | ||
433 | </eStructuralFeatures> | ||
434 | <eStructuralFeatures xsi:type="ecore:EReference" name="eEnum" eType="#//EEnum" | ||
435 | transient="true" eOpposite="#//EEnum/eLiterals"/> | ||
436 | </eClassifiers> | ||
437 | <eClassifiers xsi:type="ecore:EClass" name="EFactory" eSuperTypes="#//EModelElement"> | ||
438 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
439 | <details key="name" value="EFactory"/> | ||
440 | <details key="kind" value="elementOnly"/> | ||
441 | </eAnnotations> | ||
442 | <eOperations name="create" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"> | ||
443 | <eParameters name="eClass" eType="#//EClass"/> | ||
444 | </eOperations> | ||
445 | <eOperations name="createFromString" eType="#//EJavaObject"> | ||
446 | <eParameters name="eDataType" eType="#//EDataType"/> | ||
447 | <eParameters name="literalValue" eType="#//EString"/> | ||
448 | </eOperations> | ||
449 | <eOperations name="convertToString" eType="#//EString"> | ||
450 | <eParameters name="eDataType" eType="#//EDataType"/> | ||
451 | <eParameters name="instanceValue" eType="#//EJavaObject"/> | ||
452 | </eOperations> | ||
453 | <eStructuralFeatures xsi:type="ecore:EReference" name="ePackage" lowerBound="1" | ||
454 | eType="#//EPackage" transient="true" resolveProxies="false" eOpposite="#//EPackage/eFactoryInstance"> | ||
455 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
456 | <details key="kind" value="attribute"/> | ||
457 | <details key="name" value="ePackage"/> | ||
458 | </eAnnotations> | ||
459 | </eStructuralFeatures> | ||
460 | </eClassifiers> | ||
461 | <eClassifiers xsi:type="ecore:EDataType" name="EFeatureMap" instanceClassName="org.eclipse.emf.ecore.util.FeatureMap" | ||
462 | serializable="false"> | ||
463 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
464 | <details key="name" value="EFeatureMap"/> | ||
465 | </eAnnotations> | ||
466 | </eClassifiers> | ||
467 | <eClassifiers xsi:type="ecore:EDataType" name="EFeatureMapEntry" instanceClassName="org.eclipse.emf.ecore.util.FeatureMap$Entry" | ||
468 | serializable="false"> | ||
469 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
470 | <details key="name" value="EFeatureMapEntry"/> | ||
471 | </eAnnotations> | ||
472 | </eClassifiers> | ||
473 | <eClassifiers xsi:type="ecore:EDataType" name="EFloat" instanceClassName="float"> | ||
474 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
475 | <details key="name" value="EFloat"/> | ||
476 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#float"/> | ||
477 | </eAnnotations> | ||
478 | </eClassifiers> | ||
479 | <eClassifiers xsi:type="ecore:EDataType" name="EFloatObject" instanceClassName="java.lang.Float"> | ||
480 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
481 | <details key="name" value="EFloat:Object"/> | ||
482 | <details key="baseType" value="EFloat"/> | ||
483 | </eAnnotations> | ||
484 | </eClassifiers> | ||
485 | <eClassifiers xsi:type="ecore:EClass" name="EGenericType"> | ||
486 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
487 | <details key="name" value="EGenericType"/> | ||
488 | <details key="kind" value="elementOnly"/> | ||
489 | </eAnnotations> | ||
490 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
491 | <details key="constraints" value="ConsistentType ConsistentBounds ConsistentArguments"/> | ||
492 | </eAnnotations> | ||
493 | <eStructuralFeatures xsi:type="ecore:EReference" name="eUpperBound" eType="#//EGenericType" | ||
494 | containment="true" resolveProxies="false"> | ||
495 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
496 | <details key="kind" value="element"/> | ||
497 | <details key="name" value="eUpperBound"/> | ||
498 | </eAnnotations> | ||
499 | </eStructuralFeatures> | ||
500 | <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeArguments" upperBound="-1" | ||
501 | eType="#//EGenericType" containment="true" resolveProxies="false"> | ||
502 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
503 | <details key="kind" value="element"/> | ||
504 | <details key="name" value="eTypeArguments"/> | ||
505 | </eAnnotations> | ||
506 | </eStructuralFeatures> | ||
507 | <eStructuralFeatures xsi:type="ecore:EReference" name="eLowerBound" eType="#//EGenericType" | ||
508 | containment="true" resolveProxies="false"> | ||
509 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
510 | <details key="kind" value="element"/> | ||
511 | <details key="name" value="eLowerBound"/> | ||
512 | </eAnnotations> | ||
513 | </eStructuralFeatures> | ||
514 | <eStructuralFeatures xsi:type="ecore:EReference" name="eClassifier" eType="#//EClassifier"> | ||
515 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
516 | <details key="kind" value="attribute"/> | ||
517 | <details key="name" value="eClassifier"/> | ||
518 | </eAnnotations> | ||
519 | </eStructuralFeatures> | ||
520 | <eStructuralFeatures xsi:type="ecore:EReference" name="eRawType" lowerBound="1" | ||
521 | eType="#//EClassifier" changeable="false" transient="true" derived="true"> | ||
522 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
523 | <details key="kind" value="attribute"/> | ||
524 | <details key="name" value="eRawType"/> | ||
525 | </eAnnotations> | ||
526 | </eStructuralFeatures> | ||
527 | <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeParameter" eType="#//ETypeParameter" | ||
528 | resolveProxies="false"> | ||
529 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
530 | <details key="kind" value="attribute"/> | ||
531 | <details key="name" value="eTypeParameter"/> | ||
532 | </eAnnotations> | ||
533 | </eStructuralFeatures> | ||
534 | </eClassifiers> | ||
535 | <eClassifiers xsi:type="ecore:EDataType" name="EInt" instanceClassName="int"> | ||
536 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
537 | <details key="name" value="EInt"/> | ||
538 | </eAnnotations> | ||
539 | </eClassifiers> | ||
540 | <eClassifiers xsi:type="ecore:EDataType" name="EIntegerObject" instanceClassName="java.lang.Integer"> | ||
541 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
542 | <details key="name" value="EInt:Object"/> | ||
543 | <details key="baseType" value="EInt"/> | ||
544 | </eAnnotations> | ||
545 | </eClassifiers> | ||
546 | <eClassifiers xsi:type="ecore:EDataType" name="EInvocationTargetException" instanceClassName="java.lang.reflect.InvocationTargetException" | ||
547 | serializable="false"> | ||
548 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
549 | <details key="name" value="EInvocationTargetException"/> | ||
550 | </eAnnotations> | ||
551 | </eClassifiers> | ||
552 | <eClassifiers xsi:type="ecore:EDataType" name="EJavaClass" instanceClassName="java.lang.Class"> | ||
553 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
554 | <details key="name" value="EJavaClass"/> | ||
555 | </eAnnotations> | ||
556 | <eTypeParameters name="T"/> | ||
557 | </eClassifiers> | ||
558 | <eClassifiers xsi:type="ecore:EDataType" name="EJavaObject" instanceClassName="java.lang.Object"> | ||
559 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
560 | <details key="name" value="EJavaObject"/> | ||
561 | </eAnnotations> | ||
562 | </eClassifiers> | ||
563 | <eClassifiers xsi:type="ecore:EDataType" name="ELong" instanceClassName="long"> | ||
564 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
565 | <details key="name" value="ELong"/> | ||
566 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#long"/> | ||
567 | </eAnnotations> | ||
568 | </eClassifiers> | ||
569 | <eClassifiers xsi:type="ecore:EDataType" name="ELongObject" instanceClassName="java.lang.Long"> | ||
570 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
571 | <details key="name" value="ELong:Object"/> | ||
572 | <details key="baseType" value="ELong"/> | ||
573 | </eAnnotations> | ||
574 | </eClassifiers> | ||
575 | <eClassifiers xsi:type="ecore:EDataType" name="EMap" instanceClassName="java.util.Map" | ||
576 | serializable="false"> | ||
577 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
578 | <details key="name" value="EMap"/> | ||
579 | </eAnnotations> | ||
580 | <eTypeParameters name="K"/> | ||
581 | <eTypeParameters name="V"/> | ||
582 | </eClassifiers> | ||
583 | <eClassifiers xsi:type="ecore:EClass" name="EModelElement" abstract="true"> | ||
584 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
585 | <details key="name" value="EModelElement"/> | ||
586 | <details key="kind" value="elementOnly"/> | ||
587 | </eAnnotations> | ||
588 | <eOperations name="getEAnnotation" eType="#//EAnnotation"> | ||
589 | <eParameters name="source" eType="#//EString"/> | ||
590 | </eOperations> | ||
591 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAnnotations" upperBound="-1" | ||
592 | eType="#//EAnnotation" containment="true" resolveProxies="false" eOpposite="#//EAnnotation/eModelElement"> | ||
593 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
594 | <details key="kind" value="element"/> | ||
595 | <details key="name" value="eAnnotations"/> | ||
596 | </eAnnotations> | ||
597 | </eStructuralFeatures> | ||
598 | </eClassifiers> | ||
599 | <eClassifiers xsi:type="ecore:EClass" name="ENamedElement" abstract="true" eSuperTypes="#//EModelElement"> | ||
600 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
601 | <details key="name" value="ENamedElement"/> | ||
602 | <details key="kind" value="elementOnly"/> | ||
603 | </eAnnotations> | ||
604 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
605 | <details key="constraints" value="WellFormedName"/> | ||
606 | </eAnnotations> | ||
607 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="#//EString"> | ||
608 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
609 | <details key="kind" value="attribute"/> | ||
610 | <details key="name" value="name"/> | ||
611 | </eAnnotations> | ||
612 | </eStructuralFeatures> | ||
613 | </eClassifiers> | ||
614 | <eClassifiers xsi:type="ecore:EClass" name="EObject"> | ||
615 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
616 | <details key="name" value="EObject"/> | ||
617 | <details key="kind" value="empty"/> | ||
618 | </eAnnotations> | ||
619 | <eOperations name="eClass" eType="#//EClass"/> | ||
620 | <eOperations name="eIsProxy" eType="#//EBoolean"/> | ||
621 | <eOperations name="eResource" eType="#//EResource"/> | ||
622 | <eOperations name="eContainer" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/> | ||
623 | <eOperations name="eContainingFeature" eType="#//EStructuralFeature"/> | ||
624 | <eOperations name="eContainmentFeature" eType="#//EReference"/> | ||
625 | <eOperations name="eContents"> | ||
626 | <eGenericType eClassifier="#//EEList"> | ||
627 | <eTypeArguments eClassifier="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/> | ||
628 | </eGenericType> | ||
629 | </eOperations> | ||
630 | <eOperations name="eAllContents"> | ||
631 | <eGenericType eClassifier="#//ETreeIterator"> | ||
632 | <eTypeArguments eClassifier="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/> | ||
633 | </eGenericType> | ||
634 | </eOperations> | ||
635 | <eOperations name="eCrossReferences"> | ||
636 | <eGenericType eClassifier="#//EEList"> | ||
637 | <eTypeArguments eClassifier="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/> | ||
638 | </eGenericType> | ||
639 | </eOperations> | ||
640 | <eOperations name="eGet" eType="#//EJavaObject"> | ||
641 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
642 | </eOperations> | ||
643 | <eOperations name="eGet" eType="#//EJavaObject"> | ||
644 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
645 | <eParameters name="resolve" eType="#//EBoolean"/> | ||
646 | </eOperations> | ||
647 | <eOperations name="eSet"> | ||
648 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
649 | <eParameters name="newValue" eType="#//EJavaObject"/> | ||
650 | </eOperations> | ||
651 | <eOperations name="eIsSet" eType="#//EBoolean"> | ||
652 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
653 | </eOperations> | ||
654 | <eOperations name="eUnset"> | ||
655 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
656 | </eOperations> | ||
657 | <eOperations name="eInvoke" eType="#//EJavaObject" eExceptions="#//EInvocationTargetException"> | ||
658 | <eParameters name="operation" eType="#//EOperation"/> | ||
659 | <eParameters name="arguments"> | ||
660 | <eGenericType eClassifier="#//EEList"> | ||
661 | <eTypeArguments/> | ||
662 | </eGenericType> | ||
663 | </eParameters> | ||
664 | </eOperations> | ||
665 | </eClassifiers> | ||
666 | <eClassifiers xsi:type="ecore:EClass" name="EOperation" eSuperTypes="#//ETypedElement"> | ||
667 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
668 | <details key="name" value="EOperation"/> | ||
669 | <details key="kind" value="elementOnly"/> | ||
670 | </eAnnotations> | ||
671 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
672 | <details key="constraints" value="UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid"/> | ||
673 | </eAnnotations> | ||
674 | <eOperations name="getOperationID" eType="#//EInt"/> | ||
675 | <eOperations name="isOverrideOf" eType="#//EBoolean"> | ||
676 | <eParameters name="someOperation" eType="#//EOperation"/> | ||
677 | </eOperations> | ||
678 | <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeParameters" upperBound="-1" | ||
679 | eType="#//ETypeParameter" containment="true"> | ||
680 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
681 | <details key="kind" value="element"/> | ||
682 | <details key="name" value="eTypeParameters"/> | ||
683 | </eAnnotations> | ||
684 | </eStructuralFeatures> | ||
685 | <eStructuralFeatures xsi:type="ecore:EReference" name="eParameters" upperBound="-1" | ||
686 | eType="#//EParameter" containment="true" resolveProxies="false" eOpposite="#//EParameter/eOperation"> | ||
687 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
688 | <details key="kind" value="element"/> | ||
689 | <details key="name" value="eParameters"/> | ||
690 | </eAnnotations> | ||
691 | </eStructuralFeatures> | ||
692 | <eStructuralFeatures xsi:type="ecore:EReference" name="eGenericExceptions" upperBound="-1" | ||
693 | eType="#//EGenericType" unsettable="true" containment="true" resolveProxies="false"> | ||
694 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
695 | <details key="kind" value="element"/> | ||
696 | <details key="name" value="eGenericExceptions"/> | ||
697 | </eAnnotations> | ||
698 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
699 | <details key="suppressedIsSetVisibility" value="true"/> | ||
700 | <details key="suppressedUnsetVisibility" value="true"/> | ||
701 | </eAnnotations> | ||
702 | </eStructuralFeatures> | ||
703 | <eStructuralFeatures xsi:type="ecore:EReference" name="eExceptions" upperBound="-1" | ||
704 | eType="#//EClassifier" unsettable="true"> | ||
705 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
706 | <details key="kind" value="attribute"/> | ||
707 | <details key="name" value="eExceptions"/> | ||
708 | </eAnnotations> | ||
709 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
710 | <details key="suppressedIsSetVisibility" value="true"/> | ||
711 | <details key="suppressedUnsetVisibility" value="true"/> | ||
712 | </eAnnotations> | ||
713 | </eStructuralFeatures> | ||
714 | <eStructuralFeatures xsi:type="ecore:EReference" name="eContainingClass" eType="#//EClass" | ||
715 | transient="true" eOpposite="#//EClass/eOperations"/> | ||
716 | </eClassifiers> | ||
717 | <eClassifiers xsi:type="ecore:EClass" name="EPackage" eSuperTypes="#//ENamedElement"> | ||
718 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
719 | <details key="name" value="EPackage"/> | ||
720 | <details key="kind" value="elementOnly"/> | ||
721 | </eAnnotations> | ||
722 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
723 | <details key="constraints" value="WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs"/> | ||
724 | </eAnnotations> | ||
725 | <eOperations name="getEClassifier" eType="#//EClassifier"> | ||
726 | <eParameters name="name" eType="#//EString"/> | ||
727 | </eOperations> | ||
728 | <eStructuralFeatures xsi:type="ecore:EReference" name="eClassifiers" upperBound="-1" | ||
729 | eType="#//EClassifier" containment="true" eOpposite="#//EClassifier/ePackage"> | ||
730 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
731 | <details key="kind" value="element"/> | ||
732 | <details key="name" value="eClassifiers"/> | ||
733 | </eAnnotations> | ||
734 | </eStructuralFeatures> | ||
735 | <eStructuralFeatures xsi:type="ecore:EReference" name="eSubpackages" upperBound="-1" | ||
736 | eType="#//EPackage" containment="true" eOpposite="#//EPackage/eSuperPackage"> | ||
737 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
738 | <details key="kind" value="element"/> | ||
739 | <details key="name" value="eSubpackages"/> | ||
740 | </eAnnotations> | ||
741 | </eStructuralFeatures> | ||
742 | <eStructuralFeatures xsi:type="ecore:EReference" name="eFactoryInstance" lowerBound="1" | ||
743 | eType="#//EFactory" transient="true" resolveProxies="false" eOpposite="#//EFactory/ePackage"> | ||
744 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
745 | <details key="kind" value="attribute"/> | ||
746 | <details key="name" value="eFactoryInstance"/> | ||
747 | </eAnnotations> | ||
748 | </eStructuralFeatures> | ||
749 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="nsPrefix" eType="#//EString"> | ||
750 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
751 | <details key="kind" value="attribute"/> | ||
752 | <details key="name" value="nsPrefix"/> | ||
753 | </eAnnotations> | ||
754 | </eStructuralFeatures> | ||
755 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="nsURI" eType="#//EString"> | ||
756 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
757 | <details key="kind" value="attribute"/> | ||
758 | <details key="name" value="nsURI"/> | ||
759 | </eAnnotations> | ||
760 | </eStructuralFeatures> | ||
761 | <eStructuralFeatures xsi:type="ecore:EReference" name="eSuperPackage" eType="#//EPackage" | ||
762 | transient="true" eOpposite="#//EPackage/eSubpackages"/> | ||
763 | </eClassifiers> | ||
764 | <eClassifiers xsi:type="ecore:EClass" name="EParameter" eSuperTypes="#//ETypedElement"> | ||
765 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
766 | <details key="name" value="EParameter"/> | ||
767 | <details key="kind" value="elementOnly"/> | ||
768 | </eAnnotations> | ||
769 | <eStructuralFeatures xsi:type="ecore:EReference" name="eOperation" eType="#//EOperation" | ||
770 | transient="true" eOpposite="#//EOperation/eParameters"/> | ||
771 | </eClassifiers> | ||
772 | <eClassifiers xsi:type="ecore:EClass" name="EReference" eSuperTypes="#//EStructuralFeature"> | ||
773 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
774 | <details key="name" value="EReference"/> | ||
775 | <details key="kind" value="elementOnly"/> | ||
776 | </eAnnotations> | ||
777 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
778 | <details key="constraints" value="ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer"/> | ||
779 | </eAnnotations> | ||
780 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="container" eType="#//EBoolean" | ||
781 | changeable="false" volatile="true" transient="true" derived="true"> | ||
782 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
783 | <details key="kind" value="attribute"/> | ||
784 | <details key="name" value="container"/> | ||
785 | </eAnnotations> | ||
786 | </eStructuralFeatures> | ||
787 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="containment" eType="#//EBoolean"> | ||
788 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
789 | <details key="kind" value="attribute"/> | ||
790 | <details key="name" value="containment"/> | ||
791 | </eAnnotations> | ||
792 | </eStructuralFeatures> | ||
793 | <eStructuralFeatures xsi:type="ecore:EReference" name="eKeys" upperBound="-1" | ||
794 | eType="#//EAttribute"> | ||
795 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
796 | <details key="kind" value="attribute"/> | ||
797 | <details key="name" value="eKeys"/> | ||
798 | </eAnnotations> | ||
799 | </eStructuralFeatures> | ||
800 | <eStructuralFeatures xsi:type="ecore:EReference" name="eOpposite" eType="#//EReference"> | ||
801 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
802 | <details key="kind" value="attribute"/> | ||
803 | <details key="name" value="eOpposite"/> | ||
804 | </eAnnotations> | ||
805 | </eStructuralFeatures> | ||
806 | <eStructuralFeatures xsi:type="ecore:EReference" name="eReferenceType" lowerBound="1" | ||
807 | eType="#//EClass" changeable="false" volatile="true" transient="true" derived="true"> | ||
808 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
809 | <details key="kind" value="attribute"/> | ||
810 | <details key="name" value="eReferenceType"/> | ||
811 | </eAnnotations> | ||
812 | </eStructuralFeatures> | ||
813 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="resolveProxies" eType="#//EBoolean" | ||
814 | defaultValueLiteral="true"> | ||
815 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
816 | <details key="kind" value="attribute"/> | ||
817 | <details key="name" value="resolveProxies"/> | ||
818 | </eAnnotations> | ||
819 | </eStructuralFeatures> | ||
820 | </eClassifiers> | ||
821 | <eClassifiers xsi:type="ecore:EDataType" name="EResource" instanceClassName="org.eclipse.emf.ecore.resource.Resource" | ||
822 | serializable="false"> | ||
823 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
824 | <details key="name" value="EResource"/> | ||
825 | </eAnnotations> | ||
826 | </eClassifiers> | ||
827 | <eClassifiers xsi:type="ecore:EDataType" name="EResourceSet" instanceClassName="org.eclipse.emf.ecore.resource.ResourceSet" | ||
828 | serializable="false"> | ||
829 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
830 | <details key="name" value="EResourceSet"/> | ||
831 | </eAnnotations> | ||
832 | </eClassifiers> | ||
833 | <eClassifiers xsi:type="ecore:EDataType" name="EShort" instanceClassName="short"> | ||
834 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
835 | <details key="name" value="EShort"/> | ||
836 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#short"/> | ||
837 | </eAnnotations> | ||
838 | </eClassifiers> | ||
839 | <eClassifiers xsi:type="ecore:EDataType" name="EShortObject" instanceClassName="java.lang.Short"> | ||
840 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
841 | <details key="name" value="EShort:Object"/> | ||
842 | <details key="baseType" value="EShort"/> | ||
843 | </eAnnotations> | ||
844 | </eClassifiers> | ||
845 | <eClassifiers xsi:type="ecore:EDataType" name="EString" instanceClassName="java.lang.String"> | ||
846 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
847 | <details key="name" value="EString"/> | ||
848 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#string"/> | ||
849 | </eAnnotations> | ||
850 | </eClassifiers> | ||
851 | <eClassifiers xsi:type="ecore:EClass" name="EStringToStringMapEntry" instanceClassName="java.util.Map$Entry"> | ||
852 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
853 | <details key="name" value="EStringToStringMapEntry"/> | ||
854 | <details key="kind" value="empty"/> | ||
855 | </eAnnotations> | ||
856 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="key" eType="#//EString"> | ||
857 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
858 | <details key="kind" value="attribute"/> | ||
859 | <details key="name" value="key"/> | ||
860 | </eAnnotations> | ||
861 | </eStructuralFeatures> | ||
862 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="#//EString"> | ||
863 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
864 | <details key="kind" value="attribute"/> | ||
865 | <details key="name" value="value"/> | ||
866 | </eAnnotations> | ||
867 | </eStructuralFeatures> | ||
868 | </eClassifiers> | ||
869 | <eClassifiers xsi:type="ecore:EClass" name="EStructuralFeature" abstract="true" | ||
870 | eSuperTypes="#//ETypedElement"> | ||
871 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
872 | <details key="name" value="EStructuralFeature"/> | ||
873 | <details key="kind" value="elementOnly"/> | ||
874 | </eAnnotations> | ||
875 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
876 | <details key="constraints" value="ValidDefaultValueLiteral"/> | ||
877 | </eAnnotations> | ||
878 | <eOperations name="getFeatureID" eType="#//EInt"/> | ||
879 | <eOperations name="getContainerClass"> | ||
880 | <eGenericType eClassifier="#//EJavaClass"> | ||
881 | <eTypeArguments/> | ||
882 | </eGenericType> | ||
883 | </eOperations> | ||
884 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="changeable" eType="#//EBoolean" | ||
885 | defaultValueLiteral="true"> | ||
886 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
887 | <details key="kind" value="attribute"/> | ||
888 | <details key="name" value="changeable"/> | ||
889 | </eAnnotations> | ||
890 | </eStructuralFeatures> | ||
891 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValue" eType="#//EJavaObject" | ||
892 | changeable="false" volatile="true" transient="true" derived="true"> | ||
893 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
894 | <details key="kind" value="attribute"/> | ||
895 | <details key="name" value="defaultValue"/> | ||
896 | </eAnnotations> | ||
897 | </eStructuralFeatures> | ||
898 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValueLiteral" eType="#//EString"> | ||
899 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
900 | <details key="kind" value="attribute"/> | ||
901 | <details key="name" value="defaultValueLiteral"/> | ||
902 | </eAnnotations> | ||
903 | </eStructuralFeatures> | ||
904 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="derived" eType="#//EBoolean"> | ||
905 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
906 | <details key="kind" value="attribute"/> | ||
907 | <details key="name" value="derived"/> | ||
908 | </eAnnotations> | ||
909 | </eStructuralFeatures> | ||
910 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="transient" eType="#//EBoolean"> | ||
911 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
912 | <details key="kind" value="attribute"/> | ||
913 | <details key="name" value="transient"/> | ||
914 | </eAnnotations> | ||
915 | </eStructuralFeatures> | ||
916 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="unsettable" eType="#//EBoolean"> | ||
917 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
918 | <details key="kind" value="attribute"/> | ||
919 | <details key="name" value="unsettable"/> | ||
920 | </eAnnotations> | ||
921 | </eStructuralFeatures> | ||
922 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="volatile" eType="#//EBoolean"> | ||
923 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
924 | <details key="kind" value="attribute"/> | ||
925 | <details key="name" value="volatile"/> | ||
926 | </eAnnotations> | ||
927 | </eStructuralFeatures> | ||
928 | <eStructuralFeatures xsi:type="ecore:EReference" name="eContainingClass" eType="#//EClass" | ||
929 | transient="true" eOpposite="#//EClass/eStructuralFeatures"/> | ||
930 | </eClassifiers> | ||
931 | <eClassifiers xsi:type="ecore:EDataType" name="ETreeIterator" instanceClassName="org.eclipse.emf.common.util.TreeIterator" | ||
932 | serializable="false"> | ||
933 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
934 | <details key="name" value="ETreeIterator"/> | ||
935 | </eAnnotations> | ||
936 | <eTypeParameters name="E"/> | ||
937 | </eClassifiers> | ||
938 | <eClassifiers xsi:type="ecore:EClass" name="ETypedElement" abstract="true" eSuperTypes="#//ENamedElement"> | ||
939 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
940 | <details key="name" value="ETypedElement"/> | ||
941 | <details key="kind" value="elementOnly"/> | ||
942 | </eAnnotations> | ||
943 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
944 | <details key="constraints" value="ValidLowerBound ValidUpperBound ConsistentBounds ValidType"/> | ||
945 | </eAnnotations> | ||
946 | <eStructuralFeatures xsi:type="ecore:EReference" name="eGenericType" eType="#//EGenericType" | ||
947 | volatile="true" unsettable="true" containment="true" resolveProxies="false"> | ||
948 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
949 | <details key="kind" value="element"/> | ||
950 | <details key="name" value="eGenericType"/> | ||
951 | </eAnnotations> | ||
952 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
953 | <details key="suppressedIsSetVisibility" value="true"/> | ||
954 | <details key="suppressedUnsetVisibility" value="true"/> | ||
955 | </eAnnotations> | ||
956 | </eStructuralFeatures> | ||
957 | <eStructuralFeatures xsi:type="ecore:EReference" name="eType" eType="#//EClassifier" | ||
958 | volatile="true" unsettable="true"> | ||
959 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
960 | <details key="kind" value="attribute"/> | ||
961 | <details key="name" value="eType"/> | ||
962 | </eAnnotations> | ||
963 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
964 | <details key="suppressedIsSetVisibility" value="true"/> | ||
965 | <details key="suppressedUnsetVisibility" value="true"/> | ||
966 | </eAnnotations> | ||
967 | </eStructuralFeatures> | ||
968 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="lowerBound" eType="#//EInt"> | ||
969 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
970 | <details key="kind" value="attribute"/> | ||
971 | <details key="name" value="lowerBound"/> | ||
972 | </eAnnotations> | ||
973 | </eStructuralFeatures> | ||
974 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="many" eType="#//EBoolean" | ||
975 | changeable="false" volatile="true" transient="true" derived="true"> | ||
976 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
977 | <details key="kind" value="attribute"/> | ||
978 | <details key="name" value="many"/> | ||
979 | </eAnnotations> | ||
980 | </eStructuralFeatures> | ||
981 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="ordered" eType="#//EBoolean" | ||
982 | defaultValueLiteral="true"> | ||
983 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
984 | <details key="kind" value="attribute"/> | ||
985 | <details key="name" value="ordered"/> | ||
986 | </eAnnotations> | ||
987 | </eStructuralFeatures> | ||
988 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="required" eType="#//EBoolean" | ||
989 | changeable="false" volatile="true" transient="true" derived="true"> | ||
990 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
991 | <details key="kind" value="attribute"/> | ||
992 | <details key="name" value="required"/> | ||
993 | </eAnnotations> | ||
994 | </eStructuralFeatures> | ||
995 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="unique" eType="#//EBoolean" | ||
996 | defaultValueLiteral="true"> | ||
997 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
998 | <details key="kind" value="attribute"/> | ||
999 | <details key="name" value="unique"/> | ||
1000 | </eAnnotations> | ||
1001 | </eStructuralFeatures> | ||
1002 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperBound" eType="#//EInt" | ||
1003 | defaultValueLiteral="1"> | ||
1004 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
1005 | <details key="kind" value="attribute"/> | ||
1006 | <details key="name" value="upperBound"/> | ||
1007 | </eAnnotations> | ||
1008 | </eStructuralFeatures> | ||
1009 | </eClassifiers> | ||
1010 | <eClassifiers xsi:type="ecore:EClass" name="ETypeParameter" eSuperTypes="#//ENamedElement"> | ||
1011 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
1012 | <details key="name" value="ETypeParameter"/> | ||
1013 | <details key="kind" value="elementOnly"/> | ||
1014 | </eAnnotations> | ||
1015 | <eStructuralFeatures xsi:type="ecore:EReference" name="eBounds" upperBound="-1" | ||
1016 | eType="#//EGenericType" containment="true" resolveProxies="false"> | ||
1017 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
1018 | <details key="kind" value="element"/> | ||
1019 | <details key="name" value="eBounds"/> | ||
1020 | </eAnnotations> | ||
1021 | </eStructuralFeatures> | ||
1022 | </eClassifiers> | ||
1023 | </ecore:EPackage> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/ecore/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/ecore/.gitignore new file mode 100644 index 00000000..c42ca056 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/ecore/.gitignore | |||
@@ -0,0 +1,8 @@ | |||
1 | /.Ecore_pattern.java._trace | ||
2 | /.MoreThenFiveSuperTypes.java._trace | ||
3 | /.DirectSupertype.java._trace | ||
4 | /.Ecore.java._trace | ||
5 | /.LoopInInheritence.java._trace | ||
6 | /.NonSymmetricOpposite.java._trace | ||
7 | /.Opposite.java._trace | ||
8 | /.OppositeDifferentClass.java._trace | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/queries/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/queries/.gitignore new file mode 100644 index 00000000..e9d711d4 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/queries/.gitignore | |||
@@ -0,0 +1,9 @@ | |||
1 | /.Ecore_pattern.java._trace | ||
2 | /.MoreThenFiveSuperTypes.java._trace | ||
3 | /.DirectSupertype.java._trace | ||
4 | /.Ecore.java._trace | ||
5 | /.LoopInInheritence.java._trace | ||
6 | /.NonSymmetricOpposite.java._trace | ||
7 | /.Opposite.java._trace | ||
8 | /.OppositeDifferentClass.java._trace | ||
9 | /.SuperTypes.java._trace | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/queries/Ecore.vql b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/queries/Ecore.vql new file mode 100644 index 00000000..9ddb64c9 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/queries/Ecore.vql | |||
@@ -0,0 +1,33 @@ | |||
1 | package queries | ||
2 | |||
3 | import epackage "http://www.eclipse.org/emf/2002/Ecore" | ||
4 | |||
5 | pattern directSupertype(a: EClass, b:EClass) { | ||
6 | EClass.eSuperTypes(a,b); | ||
7 | } | ||
8 | |||
9 | @Constraint(key={a}, severity="error", message="error") | ||
10 | pattern loopInInheritence(a: EClass) { | ||
11 | find directSupertype+(a,a); | ||
12 | } | ||
13 | |||
14 | pattern opposite(a:EReference, b: EReference) { | ||
15 | EReference.eOpposite(a,b); | ||
16 | } | ||
17 | @Constraint(key={a}, severity="error", message="error") | ||
18 | pattern oppositeDifferentClass(a:EReference) { | ||
19 | EReference.eOpposite(a,b); | ||
20 | EReference.eContainingClass(a,aContaining); | ||
21 | EReference.eType(b,bTarget); | ||
22 | aContaining != bTarget; | ||
23 | } | ||
24 | |||
25 | @Constraint(key={a}, severity="error", message="error") | ||
26 | pattern nonSymmetricOpposite(a:EReference, b:EReference) { | ||
27 | find opposite(a,b); | ||
28 | neg find opposite(b,a); | ||
29 | } | ||
30 | |||
31 | pattern superTypes(c1:EClass, c2:EClass){ | ||
32 | EClass.eSuperTypes(c1,c2); | ||
33 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.aird b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.aird new file mode 100644 index 00000000..e7e28ecd --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.aird | |||
@@ -0,0 +1,183 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style"> | ||
3 | <viewpoint:DAnalysis uid="_TZr30HA1EemKP426GDjFOg" selectedViews="_Ta8cEHA1EemKP426GDjFOg" version="14.1.0.201810161215"> | ||
4 | <semanticResources>socialnetwork.ecore</semanticResources> | ||
5 | <semanticResources>socialnetwork.genmodel</semanticResources> | ||
6 | <ownedViews xmi:type="viewpoint:DView" uid="_Ta8cEHA1EemKP426GDjFOg"> | ||
7 | <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/> | ||
8 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_TbTBZXA1EemKP426GDjFOg" name="socialnetwork" repPath="#_TbTBYHA1EemKP426GDjFOg"> | ||
9 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | ||
10 | <target xmi:type="ecore:EPackage" href="socialnetwork.ecore#/"/> | ||
11 | </ownedRepresentationDescriptors> | ||
12 | </ownedViews> | ||
13 | </viewpoint:DAnalysis> | ||
14 | <diagram:DSemanticDiagram uid="_TbTBYHA1EemKP426GDjFOg" name="socialnetwork"> | ||
15 | <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_TbTBYXA1EemKP426GDjFOg" source="DANNOTATION_CUSTOMIZATION_KEY"> | ||
16 | <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_TbTBYnA1EemKP426GDjFOg"> | ||
17 | <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_ZZkWoHA1EemKP426GDjFOg" sourceArrow="FillDiamond" routingStyle="manhattan"> | ||
18 | <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> | ||
19 | <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_ZZkWoXA1EemKP426GDjFOg" showIcon="false" labelExpression="service:render"> | ||
20 | <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> | ||
21 | </centerLabelStyleDescription> | ||
22 | <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_ZZkWonA1EemKP426GDjFOg" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel"> | ||
23 | <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> | ||
24 | </endLabelStyleDescription> | ||
25 | </computedStyleDescriptions> | ||
26 | </data> | ||
27 | </ownedAnnotationEntries> | ||
28 | <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_TbTBZnA1EemKP426GDjFOg" source="GMF_DIAGRAMS"> | ||
29 | <data xmi:type="notation:Diagram" xmi:id="_TbTBZ3A1EemKP426GDjFOg" type="Sirius" element="_TbTBYHA1EemKP426GDjFOg" measurementUnit="Pixel"> | ||
30 | <children xmi:type="notation:Node" xmi:id="_Ur9YAHA1EemKP426GDjFOg" type="2003" element="_Ur5GkHA1EemKP426GDjFOg"> | ||
31 | <children xmi:type="notation:Node" xmi:id="_Ur9YA3A1EemKP426GDjFOg" type="5007"/> | ||
32 | <children xmi:type="notation:Node" xmi:id="_Ur9YBHA1EemKP426GDjFOg" type="7004"> | ||
33 | <children xmi:type="notation:Node" xmi:id="_W_L-4HA1EemKP426GDjFOg" type="3010" element="_W_DcAHA1EemKP426GDjFOg"> | ||
34 | <styles xmi:type="notation:FontStyle" xmi:id="_W_L-4XA1EemKP426GDjFOg" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/> | ||
35 | <layoutConstraint xmi:type="notation:Location" xmi:id="_W_L-4nA1EemKP426GDjFOg"/> | ||
36 | </children> | ||
37 | <styles xmi:type="notation:SortingStyle" xmi:id="_Ur9YBXA1EemKP426GDjFOg"/> | ||
38 | <styles xmi:type="notation:FilteringStyle" xmi:id="_Ur9YBnA1EemKP426GDjFOg"/> | ||
39 | </children> | ||
40 | <styles xmi:type="notation:ShapeStyle" xmi:id="_Ur9YAXA1EemKP426GDjFOg" fontName="Segoe UI" fontHeight="8"/> | ||
41 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ur9YAnA1EemKP426GDjFOg" x="285" y="165" width="120" height="100"/> | ||
42 | </children> | ||
43 | <children xmi:type="notation:Node" xmi:id="_X2ASIHA1EemKP426GDjFOg" type="2003" element="_X14WUHA1EemKP426GDjFOg"> | ||
44 | <children xmi:type="notation:Node" xmi:id="_X2A5MHA1EemKP426GDjFOg" type="5007"/> | ||
45 | <children xmi:type="notation:Node" xmi:id="_X2A5MXA1EemKP426GDjFOg" type="7004"> | ||
46 | <children xmi:type="notation:Node" xmi:id="_jitw4HA1EemKP426GDjFOg" type="3010" element="_jirUoHA1EemKP426GDjFOg"> | ||
47 | <styles xmi:type="notation:FontStyle" xmi:id="_jitw4XA1EemKP426GDjFOg" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/> | ||
48 | <layoutConstraint xmi:type="notation:Location" xmi:id="_jitw4nA1EemKP426GDjFOg"/> | ||
49 | </children> | ||
50 | <styles xmi:type="notation:SortingStyle" xmi:id="_X2A5MnA1EemKP426GDjFOg"/> | ||
51 | <styles xmi:type="notation:FilteringStyle" xmi:id="_X2A5M3A1EemKP426GDjFOg"/> | ||
52 | </children> | ||
53 | <styles xmi:type="notation:ShapeStyle" xmi:id="_X2ASIXA1EemKP426GDjFOg" fontName="Segoe UI" fontHeight="8"/> | ||
54 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X2ASInA1EemKP426GDjFOg" x="690" y="180" width="120" height="100"/> | ||
55 | </children> | ||
56 | <styles xmi:type="notation:DiagramStyle" xmi:id="_TbTBaHA1EemKP426GDjFOg"/> | ||
57 | <edges xmi:type="notation:Edge" xmi:id="_ZZnZ8HA1EemKP426GDjFOg" type="4001" element="_ZZjvkHA1EemKP426GDjFOg" source="_Ur9YAHA1EemKP426GDjFOg" target="_X2ASIHA1EemKP426GDjFOg"> | ||
58 | <children xmi:type="notation:Node" xmi:id="_ZZnZ9HA1EemKP426GDjFOg" type="6001"> | ||
59 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZZnZ9XA1EemKP426GDjFOg" x="6" y="10"/> | ||
60 | </children> | ||
61 | <children xmi:type="notation:Node" xmi:id="_ZZnZ9nA1EemKP426GDjFOg" type="6002"> | ||
62 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZZnZ93A1EemKP426GDjFOg" x="1" y="10"/> | ||
63 | </children> | ||
64 | <children xmi:type="notation:Node" xmi:id="_ZZnZ-HA1EemKP426GDjFOg" type="6003"> | ||
65 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZZnZ-XA1EemKP426GDjFOg" x="-1" y="10"/> | ||
66 | </children> | ||
67 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_ZZnZ8XA1EemKP426GDjFOg" routing="Rectilinear"/> | ||
68 | <styles xmi:type="notation:FontStyle" xmi:id="_ZZnZ8nA1EemKP426GDjFOg" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> | ||
69 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZZnZ83A1EemKP426GDjFOg" points="[0, 0, -287, 4]$[143, 0, -144, 4]$[143, -4, -144, 0]$[287, -4, 0, 0]"/> | ||
70 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZZnZ-nA1EemKP426GDjFOg" id="(1.0,0.5)"/> | ||
71 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZZnZ-3A1EemKP426GDjFOg" id="(0.0,0.30612244897959184)"/> | ||
72 | </edges> | ||
73 | <edges xmi:type="notation:Edge" xmi:id="_f8gfMHA1EemKP426GDjFOg" type="4001" element="_f8eC8HA1EemKP426GDjFOg" source="_X2ASIHA1EemKP426GDjFOg" target="_X2ASIHA1EemKP426GDjFOg"> | ||
74 | <children xmi:type="notation:Node" xmi:id="_f8gfNHA1EemKP426GDjFOg" type="6001"> | ||
75 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8gfNXA1EemKP426GDjFOg" x="-8" y="7"/> | ||
76 | </children> | ||
77 | <children xmi:type="notation:Node" xmi:id="_f8hGQHA1EemKP426GDjFOg" type="6002"> | ||
78 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8hGQXA1EemKP426GDjFOg" x="12" y="10"/> | ||
79 | </children> | ||
80 | <children xmi:type="notation:Node" xmi:id="_f8hGQnA1EemKP426GDjFOg" type="6003"> | ||
81 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8hGQ3A1EemKP426GDjFOg" y="-10"/> | ||
82 | </children> | ||
83 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_f8gfMXA1EemKP426GDjFOg" routing="Rectilinear"/> | ||
84 | <styles xmi:type="notation:FontStyle" xmi:id="_f8gfMnA1EemKP426GDjFOg" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> | ||
85 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f8gfM3A1EemKP426GDjFOg" points="[4, 1, 0, -21]$[51, 1, 47, -21]$[51, -53, 47, -75]$[-25, -53, -29, -75]$[-25, -8, -29, -30]"/> | ||
86 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_f8hGRHA1EemKP426GDjFOg" id="(0.9666666666666667,0.09)"/> | ||
87 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_f8hGRXA1EemKP426GDjFOg" id="(1.0,0.30612244897959184)"/> | ||
88 | </edges> | ||
89 | <edges xmi:type="notation:Edge" xmi:id="_eUOggHA6EemKP426GDjFOg" type="4001" element="_eULdMHA6EemKP426GDjFOg" source="_X2ASIHA1EemKP426GDjFOg" target="_X2ASIHA1EemKP426GDjFOg"> | ||
90 | <children xmi:type="notation:Node" xmi:id="_eUOghHA6EemKP426GDjFOg" type="6001"> | ||
91 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUOghXA6EemKP426GDjFOg" y="-10"/> | ||
92 | </children> | ||
93 | <children xmi:type="notation:Node" xmi:id="_eUOghnA6EemKP426GDjFOg" type="6002"> | ||
94 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUOgh3A6EemKP426GDjFOg" y="10"/> | ||
95 | </children> | ||
96 | <children xmi:type="notation:Node" xmi:id="_eUOgiHA6EemKP426GDjFOg" type="6003"> | ||
97 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUOgiXA6EemKP426GDjFOg" y="10"/> | ||
98 | </children> | ||
99 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_eUOggXA6EemKP426GDjFOg" routing="Rectilinear"/> | ||
100 | <styles xmi:type="notation:FontStyle" xmi:id="_eUOggnA6EemKP426GDjFOg" fontName="Segoe UI" fontHeight="8"/> | ||
101 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_eUOgg3A6EemKP426GDjFOg" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/> | ||
102 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eUOginA6EemKP426GDjFOg" id="(0.5,0.5)"/> | ||
103 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eUOgi3A6EemKP426GDjFOg" id="(0.5,0.5)"/> | ||
104 | </edges> | ||
105 | </data> | ||
106 | </ownedAnnotationEntries> | ||
107 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_Ur5GkHA1EemKP426GDjFOg" name="SocialNetwork" tooltipText="" outgoingEdges="_ZZjvkHA1EemKP426GDjFOg" width="12" height="10"> | ||
108 | <target xmi:type="ecore:EClass" href="socialnetwork.ecore#//SocialNetwork"/> | ||
109 | <semanticElements xmi:type="ecore:EClass" href="socialnetwork.ecore#//SocialNetwork"/> | ||
110 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_XY_mAHA1EemKP426GDjFOg" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | ||
111 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | ||
112 | </ownedStyle> | ||
113 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | ||
114 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_W_DcAHA1EemKP426GDjFOg" name="name : EString" tooltipText=""> | ||
115 | <target xmi:type="ecore:EAttribute" href="socialnetwork.ecore#//SocialNetwork/name"/> | ||
116 | <semanticElements xmi:type="ecore:EAttribute" href="socialnetwork.ecore#//SocialNetwork/name"/> | ||
117 | <ownedStyle xmi:type="diagram:BundledImage" uid="_XZANEHA1EemKP426GDjFOg" labelAlignment="LEFT"> | ||
118 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
119 | </ownedStyle> | ||
120 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
121 | </ownedElements> | ||
122 | </ownedDiagramElements> | ||
123 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_X14WUHA1EemKP426GDjFOg" name="Person" tooltipText="" outgoingEdges="_f8eC8HA1EemKP426GDjFOg _eULdMHA6EemKP426GDjFOg" incomingEdges="_ZZjvkHA1EemKP426GDjFOg _f8eC8HA1EemKP426GDjFOg _eULdMHA6EemKP426GDjFOg" width="12" height="10"> | ||
124 | <target xmi:type="ecore:EClass" href="socialnetwork.ecore#//Person"/> | ||
125 | <semanticElements xmi:type="ecore:EClass" href="socialnetwork.ecore#//Person"/> | ||
126 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
127 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
128 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
129 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_kAhuQHA1EemKP426GDjFOg" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | ||
130 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | ||
131 | </ownedStyle> | ||
132 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | ||
133 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_jirUoHA1EemKP426GDjFOg" name="name : EString" tooltipText=""> | ||
134 | <target xmi:type="ecore:EAttribute" href="socialnetwork.ecore#//Person/name"/> | ||
135 | <semanticElements xmi:type="ecore:EAttribute" href="socialnetwork.ecore#//Person/name"/> | ||
136 | <ownedStyle xmi:type="diagram:BundledImage" uid="_kAiVUHA1EemKP426GDjFOg" labelAlignment="LEFT"> | ||
137 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
138 | </ownedStyle> | ||
139 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
140 | </ownedElements> | ||
141 | </ownedDiagramElements> | ||
142 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_ZZjvkHA1EemKP426GDjFOg" name="[0..*] persons" sourceNode="_Ur5GkHA1EemKP426GDjFOg" targetNode="_X14WUHA1EemKP426GDjFOg"> | ||
143 | <target xmi:type="ecore:EReference" href="socialnetwork.ecore#//SocialNetwork/persons"/> | ||
144 | <semanticElements xmi:type="ecore:EReference" href="socialnetwork.ecore#//SocialNetwork/persons"/> | ||
145 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_ZZkWo3A1EemKP426GDjFOg" description="_ZZkWoHA1EemKP426GDjFOg" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0"> | ||
146 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_ZZkWpHA1EemKP426GDjFOg" showIcon="false"> | ||
147 | <customFeatures>labelSize</customFeatures> | ||
148 | </centerLabelStyle> | ||
149 | <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_ZZkWpXA1EemKP426GDjFOg" showIcon="false" labelColor="39,76,114"> | ||
150 | <customFeatures>labelSize</customFeatures> | ||
151 | </endLabelStyle> | ||
152 | </ownedStyle> | ||
153 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | ||
154 | </ownedDiagramElements> | ||
155 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_f8eC8HA1EemKP426GDjFOg" name="[0..*] friends" sourceNode="_X14WUHA1EemKP426GDjFOg" targetNode="_X14WUHA1EemKP426GDjFOg"> | ||
156 | <target xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/friends"/> | ||
157 | <semanticElements xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/friends"/> | ||
158 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_erMusHA9EemKP426GDjFOg" routingStyle="manhattan" strokeColor="0,0,0"> | ||
159 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/> | ||
160 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_erMusXA9EemKP426GDjFOg" showIcon="false"/> | ||
161 | <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_erMusnA9EemKP426GDjFOg" labelSize="6" showIcon="false" labelColor="39,76,114"/> | ||
162 | </ownedStyle> | ||
163 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | ||
164 | </ownedDiagramElements> | ||
165 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_eULdMHA6EemKP426GDjFOg" sourceNode="_X14WUHA1EemKP426GDjFOg" targetNode="_X14WUHA1EemKP426GDjFOg" beginLabel="[0..*] children" endLabel="[0..2] parents"> | ||
166 | <target xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/parents"/> | ||
167 | <semanticElements xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/children"/> | ||
168 | <semanticElements xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/parents"/> | ||
169 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_eUMEQHA6EemKP426GDjFOg" sourceArrow="InputArrow" routingStyle="manhattan" strokeColor="0,0,0"> | ||
170 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']/@style"/> | ||
171 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_eUMEQXA6EemKP426GDjFOg" showIcon="false"/> | ||
172 | <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_eUMEQnA6EemKP426GDjFOg" showIcon="false"/> | ||
173 | </ownedStyle> | ||
174 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/> | ||
175 | </ownedDiagramElements> | ||
176 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | ||
177 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_TbTBZHA1EemKP426GDjFOg"/> | ||
178 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> | ||
179 | <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/> | ||
180 | <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/> | ||
181 | <target xmi:type="ecore:EPackage" href="socialnetwork.ecore#/"/> | ||
182 | </diagram:DSemanticDiagram> | ||
183 | </xmi:XMI> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.ecore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.ecore new file mode 100644 index 00000000..cacf9921 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.ecore | |||
@@ -0,0 +1,17 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
3 | xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="socialnetwork" nsURI="http://ecse.mcgill.ca/socialnetwork" nsPrefix="socialnetwork"> | ||
4 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/> | ||
5 | <eClassifiers xsi:type="ecore:EClass" name="SocialNetwork"> | ||
6 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" | ||
7 | defaultValueLiteral="SocialNetwork"/> | ||
8 | <eStructuralFeatures xsi:type="ecore:EReference" name="persons" upperBound="-1" | ||
9 | eType="#//Person" containment="true"/> | ||
10 | </eClassifiers> | ||
11 | <eClassifiers xsi:type="ecore:EClass" name="Person"> | ||
12 | <eStructuralFeatures xsi:type="ecore:EReference" name="friends" upperBound="-1" | ||
13 | eType="#//Person"/> | ||
14 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" | ||
15 | defaultValueLiteral="Name"/> | ||
16 | </eClassifiers> | ||
17 | </ecore:EPackage> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.genmodel b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.genmodel new file mode 100644 index 00000000..c9515653 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/socialnetwork.genmodel | |||
@@ -0,0 +1,21 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
3 | xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" | ||
4 | modelDirectory="/SocialNetwork_plugin/encore_gen" creationIcons="false" | ||
5 | editDirectory="/ca.mcgill.ecse.socialnetwork.edit/src-gen" editorDirectory="/ca.mcgill.ecse.socialnetwork.editor/src-gen" | ||
6 | modelPluginID="SocialNetwork_plugin" modelName="Socialnetwork" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" | ||
7 | codeFormatting="true" importerID="org.eclipse.emf.importer.ecore" complianceLevel="8.0" | ||
8 | copyrightFields="false" operationReflection="true" importOrganizing="true"> | ||
9 | <foreignModel>socialnetwork.ecore</foreignModel> | ||
10 | <testsDirectory xsi:nil="true"/> | ||
11 | <genPackages prefix="Socialnetwork" disposableProviderFactory="true" ecorePackage="socialnetwork.ecore#/"> | ||
12 | <genClasses ecoreClass="socialnetwork.ecore#//SocialNetwork"> | ||
13 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute socialnetwork.ecore#//SocialNetwork/name"/> | ||
14 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference socialnetwork.ecore#//SocialNetwork/persons"/> | ||
15 | </genClasses> | ||
16 | <genClasses ecoreClass="socialnetwork.ecore#//Person"> | ||
17 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference socialnetwork.ecore#//Person/friends"/> | ||
18 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute socialnetwork.ecore#//Person/name"/> | ||
19 | </genClasses> | ||
20 | </genPackages> | ||
21 | </genmodel:GenModel> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/200_nodes.jpg b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/200_nodes.jpg new file mode 100644 index 00000000..a35c291b --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/200_nodes.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/220_nodes.jpg b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/220_nodes.jpg new file mode 100644 index 00000000..4d41dff7 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/220_nodes.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/260_nodes.jpg b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/260_nodes.jpg new file mode 100644 index 00000000..b16cdfb2 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/260_nodes.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/280_nodes.jpg b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/280_nodes.jpg new file mode 100644 index 00000000..16c0ee23 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/280_nodes.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/output.txt b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/output.txt new file mode 100644 index 00000000..35158e20 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/output.txt | |||
@@ -0,0 +1,300 @@ | |||
1 | 1 | ||
2 | 9 | ||
3 | 7 | ||
4 | 0 | ||
5 | 4 | ||
6 | 6 | ||
7 | 16 | ||
8 | 0 | ||
9 | 2 | ||
10 | 4 | ||
11 | 17 | ||
12 | 20 | ||
13 | 1 | ||
14 | 5 | ||
15 | 2 | ||
16 | 3 | ||
17 | 11 | ||
18 | 6 | ||
19 | 4 | ||
20 | 0 | ||
21 | 2 | ||
22 | 1 | ||
23 | 3 | ||
24 | 5 | ||
25 | 9 | ||
26 | 13 | ||
27 | 11 | ||
28 | 0 | ||
29 | 1 | ||
30 | 10 | ||
31 | 3 | ||
32 | 0 | ||
33 | 1 | ||
34 | 1 | ||
35 | 0 | ||
36 | 17 | ||
37 | 0 | ||
38 | 4 | ||
39 | 2 | ||
40 | 0 | ||
41 | 1 | ||
42 | 10 | ||
43 | 10 | ||
44 | 0 | ||
45 | 24 | ||
46 | 9 | ||
47 | 0 | ||
48 | 14 | ||
49 | 1 | ||
50 | 11 | ||
51 | 2 | ||
52 | 17 | ||
53 | 3 | ||
54 | 3 | ||
55 | 3 | ||
56 | 0 | ||
57 | 3 | ||
58 | 1 | ||
59 | 3 | ||
60 | 2 | ||
61 | 2 | ||
62 | 1 | ||
63 | 0 | ||
64 | 3 | ||
65 | 6 | ||
66 | 3 | ||
67 | 16 | ||
68 | 3 | ||
69 | 10 | ||
70 | 6 | ||
71 | 6 | ||
72 | 6 | ||
73 | 11 | ||
74 | 6 | ||
75 | 10 | ||
76 | 20 | ||
77 | 1 | ||
78 | 4 | ||
79 | 13 | ||
80 | 0 | ||
81 | 0 | ||
82 | 3 | ||
83 | 2 | ||
84 | 0 | ||
85 | 12 | ||
86 | 0 | ||
87 | 0 | ||
88 | 22 | ||
89 | 4 | ||
90 | 0 | ||
91 | 0 | ||
92 | 20 | ||
93 | 1 | ||
94 | 10 | ||
95 | 9 | ||
96 | 11 | ||
97 | 5 | ||
98 | 27 | ||
99 | 1 | ||
100 | 3 | ||
101 | 9 | ||
102 | 0 | ||
103 | 23 | ||
104 | 10 | ||
105 | 9 | ||
106 | 23 | ||
107 | 0 | ||
108 | 3 | ||
109 | 7 | ||
110 | 2 | ||
111 | 0 | ||
112 | 9 | ||
113 | 3 | ||
114 | 0 | ||
115 | 12 | ||
116 | 11 | ||
117 | 7 | ||
118 | 6 | ||
119 | 9 | ||
120 | 2 | ||
121 | 0 | ||
122 | 3 | ||
123 | 4 | ||
124 | 3 | ||
125 | 9 | ||
126 | 3 | ||
127 | 0 | ||
128 | 7 | ||
129 | 2 | ||
130 | 1 | ||
131 | 9 | ||
132 | 1 | ||
133 | 11 | ||
134 | 6 | ||
135 | 5 | ||
136 | 16 | ||
137 | 0 | ||
138 | 19 | ||
139 | 14 | ||
140 | 9 | ||
141 | 13 | ||
142 | 2 | ||
143 | 8 | ||
144 | 0 | ||
145 | 6 | ||
146 | 1 | ||
147 | 1 | ||
148 | 2 | ||
149 | 0 | ||
150 | 3 | ||
151 | 15 | ||
152 | 3 | ||
153 | 0 | ||
154 | 3 | ||
155 | 17 | ||
156 | 1 | ||
157 | 15 | ||
158 | 5 | ||
159 | 1 | ||
160 | 21 | ||
161 | 8 | ||
162 | 2 | ||
163 | 7 | ||
164 | 3 | ||
165 | 16 | ||
166 | 11 | ||
167 | 1 | ||
168 | 5 | ||
169 | 1 | ||
170 | 5 | ||
171 | 1 | ||
172 | 6 | ||
173 | 3 | ||
174 | 16 | ||
175 | 6 | ||
176 | 17 | ||
177 | 3 | ||
178 | 5 | ||
179 | 7 | ||
180 | 2 | ||
181 | 9 | ||
182 | 2 | ||
183 | 1 | ||
184 | 11 | ||
185 | 1 | ||
186 | 0 | ||
187 | 3 | ||
188 | 5 | ||
189 | 6 | ||
190 | 2 | ||
191 | 5 | ||
192 | 1 | ||
193 | 4 | ||
194 | 9 | ||
195 | 0 | ||
196 | 11 | ||
197 | 1 | ||
198 | 10 | ||
199 | 13 | ||
200 | 6 | ||
201 | 2 | ||
202 | 1 | ||
203 | 3 | ||
204 | 4 | ||
205 | 0 | ||
206 | 1 | ||
207 | 2 | ||
208 | 10 | ||
209 | 12 | ||
210 | 3 | ||
211 | 3 | ||
212 | 3 | ||
213 | 0 | ||
214 | 2 | ||
215 | 4 | ||
216 | 2 | ||
217 | 18 | ||
218 | 3 | ||
219 | 8 | ||
220 | 7 | ||
221 | 5 | ||
222 | 3 | ||
223 | 16 | ||
224 | 1 | ||
225 | 4 | ||
226 | 8 | ||
227 | 15 | ||
228 | 1 | ||
229 | 11 | ||
230 | 15 | ||
231 | 1 | ||
232 | 8 | ||
233 | 7 | ||
234 | 1 | ||
235 | 2 | ||
236 | 0 | ||
237 | 9 | ||
238 | 5 | ||
239 | 2 | ||
240 | 1 | ||
241 | 3 | ||
242 | 6 | ||
243 | 4 | ||
244 | 8 | ||
245 | 3 | ||
246 | 12 | ||
247 | 4 | ||
248 | 21 | ||
249 | 9 | ||
250 | 2 | ||
251 | 3 | ||
252 | 2 | ||
253 | 1 | ||
254 | 3 | ||
255 | 11 | ||
256 | 2 | ||
257 | 9 | ||
258 | 0 | ||
259 | 10 | ||
260 | 6 | ||
261 | 1 | ||
262 | 2 | ||
263 | 0 | ||
264 | 8 | ||
265 | 5 | ||
266 | 2 | ||
267 | 3 | ||
268 | 8 | ||
269 | 1 | ||
270 | 13 | ||
271 | 8 | ||
272 | 2 | ||
273 | 2 | ||
274 | 11 | ||
275 | 4 | ||
276 | 21 | ||
277 | 6 | ||
278 | 5 | ||
279 | 0 | ||
280 | 8 | ||
281 | 8 | ||
282 | 12 | ||
283 | 0 | ||
284 | 0 | ||
285 | 4 | ||
286 | 1 | ||
287 | 19 | ||
288 | 5 | ||
289 | 3 | ||
290 | 1 | ||
291 | 3 | ||
292 | 12 | ||
293 | 2 | ||
294 | 6 | ||
295 | 11 | ||
296 | 8 | ||
297 | 8 | ||
298 | 2 | ||
299 | 18 | ||
300 | 0 | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/plot_distribution.m b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/plot_distribution.m new file mode 100644 index 00000000..4c67a191 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/bin/statistics/plot_distribution.m | |||
@@ -0,0 +1,11 @@ | |||
1 | clear; | ||
2 | clc; | ||
3 | |||
4 | matrix = load('-ascii', "output.txt"); | ||
5 | hist(matrix,unique(matrix)); | ||
6 | hold on; | ||
7 | [a,b] = hist(matrix,unique(matrix)) | ||
8 | plot(b, a) | ||
9 | hold off; | ||
10 | sum(matrix) | ||
11 | average = sum(matrix) / length(matrix) \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/build.properties b/Metrics/Metrics-Calculation/SocialNetwork_plugin/build.properties new file mode 100644 index 00000000..b91f214f --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/build.properties | |||
@@ -0,0 +1,10 @@ | |||
1 | bin.includes = .,\ | ||
2 | model/,\ | ||
3 | META-INF/,\ | ||
4 | plugin.xml,\ | ||
5 | plugin.properties,\ | ||
6 | src/ | ||
7 | jars.compile.order = . | ||
8 | source.. = encore_gen/,\ | ||
9 | src-gen/ | ||
10 | output.. = bin/ | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Ecore/mpc_rep/Sql.ecore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Ecore/mpc_rep/Sql.ecore new file mode 100644 index 00000000..65d72135 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Ecore/mpc_rep/Sql.ecore | |||
@@ -0,0 +1,549 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
3 | xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="sql" nsURI="http://www.com.jaspersoft.studio.data.Sql" nsPrefix="sql"> | ||
4 | <eClassifiers xsi:type="ecore:EClass" name="Model"> | ||
5 | <eStructuralFeatures xsi:type="ecore:EReference" name="wq" eType="#//WithQuery" | ||
6 | containment="true"/> | ||
7 | <eStructuralFeatures xsi:type="ecore:EReference" name="query" eType="#//SelectQuery" | ||
8 | containment="true"/> | ||
9 | </eClassifiers> | ||
10 | <eClassifiers xsi:type="ecore:EClass" name="WithQuery"> | ||
11 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="w" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
12 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="wname" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
13 | <eStructuralFeatures xsi:type="ecore:EReference" name="withCols" eType="#//WithColumns" | ||
14 | containment="true"/> | ||
15 | <eStructuralFeatures xsi:type="ecore:EReference" name="query" eType="#//SelectQuery" | ||
16 | containment="true"/> | ||
17 | </eClassifiers> | ||
18 | <eClassifiers xsi:type="ecore:EClass" name="WithColumns"/> | ||
19 | <eClassifiers xsi:type="ecore:EClass" name="FetchFirst"> | ||
20 | <eStructuralFeatures xsi:type="ecore:EReference" name="fetchFirst" eType="#//UnsignedValue" | ||
21 | containment="true"/> | ||
22 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="row" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
23 | </eClassifiers> | ||
24 | <eClassifiers xsi:type="ecore:EClass" name="Offset"> | ||
25 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELongObject"/> | ||
26 | </eClassifiers> | ||
27 | <eClassifiers xsi:type="ecore:EClass" name="Limit"> | ||
28 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="l1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELongObject"/> | ||
29 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="l2" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELongObject"/> | ||
30 | </eClassifiers> | ||
31 | <eClassifiers xsi:type="ecore:EClass" name="SelectQuery"/> | ||
32 | <eClassifiers xsi:type="ecore:EClass" name="SelectSubSet"> | ||
33 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
34 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="all" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
35 | <eStructuralFeatures xsi:type="ecore:EReference" name="query" eType="#//Select" | ||
36 | containment="true"/> | ||
37 | </eClassifiers> | ||
38 | <eClassifiers xsi:type="ecore:EClass" name="Select" eSuperTypes="#//SelectQuery"> | ||
39 | <eStructuralFeatures xsi:type="ecore:EReference" name="op" upperBound="-1" eType="#//SelectSubSet" | ||
40 | containment="true"/> | ||
41 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="select" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
42 | <eStructuralFeatures xsi:type="ecore:EReference" name="cols" eType="#//OrColumn" | ||
43 | containment="true"/> | ||
44 | <eStructuralFeatures xsi:type="ecore:EReference" name="tbl" eType="#//OrTable" | ||
45 | containment="true"/> | ||
46 | <eStructuralFeatures xsi:type="ecore:EReference" name="whereExpression" eType="#//OrExpr" | ||
47 | containment="true"/> | ||
48 | <eStructuralFeatures xsi:type="ecore:EReference" name="groupByEntry" eType="#//OrGroupByColumn" | ||
49 | containment="true"/> | ||
50 | <eStructuralFeatures xsi:type="ecore:EReference" name="havingEntry" eType="#//OrExpr" | ||
51 | containment="true"/> | ||
52 | <eStructuralFeatures xsi:type="ecore:EReference" name="orderByEntry" eType="#//OrOrderByColumn" | ||
53 | containment="true"/> | ||
54 | <eStructuralFeatures xsi:type="ecore:EReference" name="lim" eType="#//Limit" containment="true"/> | ||
55 | <eStructuralFeatures xsi:type="ecore:EReference" name="offset" eType="#//Offset" | ||
56 | containment="true"/> | ||
57 | <eStructuralFeatures xsi:type="ecore:EReference" name="fetchFirst" eType="#//FetchFirst" | ||
58 | containment="true"/> | ||
59 | </eClassifiers> | ||
60 | <eClassifiers xsi:type="ecore:EClass" name="OrColumn" eSuperTypes="#//PivotForClause"> | ||
61 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
62 | eType="#//ColumnOrAlias" containment="true"/> | ||
63 | </eClassifiers> | ||
64 | <eClassifiers xsi:type="ecore:EClass" name="ColumnOrAlias" eSuperTypes="#//OrColumn"> | ||
65 | <eStructuralFeatures xsi:type="ecore:EReference" name="ce" eType="#//Operands" | ||
66 | containment="true"/> | ||
67 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="alias" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
68 | <eStructuralFeatures xsi:type="ecore:EReference" name="colAlias" eType="#//DbObjectName" | ||
69 | containment="true"/> | ||
70 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="allCols" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
71 | <eStructuralFeatures xsi:type="ecore:EReference" name="dbAllCols" eType="#//DbObjectNameAll" | ||
72 | containment="true"/> | ||
73 | </eClassifiers> | ||
74 | <eClassifiers xsi:type="ecore:EClass" name="ColumnFull" eSuperTypes="#//PivotForClause"/> | ||
75 | <eClassifiers xsi:type="ecore:EClass" name="OrTable"> | ||
76 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
77 | eType="#//FromTable" containment="true"/> | ||
78 | </eClassifiers> | ||
79 | <eClassifiers xsi:type="ecore:EClass" name="FromTable" eSuperTypes="#//OrTable"> | ||
80 | <eStructuralFeatures xsi:type="ecore:EReference" name="table" eType="#//TableOrAlias" | ||
81 | containment="true"/> | ||
82 | <eStructuralFeatures xsi:type="ecore:EReference" name="fjoin" upperBound="-1" | ||
83 | eType="#//FromTableJoin" containment="true"/> | ||
84 | </eClassifiers> | ||
85 | <eClassifiers xsi:type="ecore:EClass" name="FromTableJoin"> | ||
86 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="join" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
87 | <eStructuralFeatures xsi:type="ecore:EReference" name="onTable" eType="#//TableOrAlias" | ||
88 | containment="true"/> | ||
89 | <eStructuralFeatures xsi:type="ecore:EReference" name="joinExpr" eType="#//OrExpr" | ||
90 | containment="true"/> | ||
91 | <eStructuralFeatures xsi:type="ecore:EReference" name="joinCond" eType="#//JoinCondition" | ||
92 | containment="true"/> | ||
93 | </eClassifiers> | ||
94 | <eClassifiers xsi:type="ecore:EClass" name="JoinCondition"> | ||
95 | <eStructuralFeatures xsi:type="ecore:EReference" name="useCols" eType="#//UsingCols" | ||
96 | containment="true"/> | ||
97 | </eClassifiers> | ||
98 | <eClassifiers xsi:type="ecore:EClass" name="UsingCols" eSuperTypes="#//WithColumns"> | ||
99 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
100 | eType="#//DbObjectName" containment="true"/> | ||
101 | </eClassifiers> | ||
102 | <eClassifiers xsi:type="ecore:EClass" name="TableOrAlias"> | ||
103 | <eStructuralFeatures xsi:type="ecore:EReference" name="tfull" eType="#//TableFull" | ||
104 | containment="true"/> | ||
105 | <eStructuralFeatures xsi:type="ecore:EReference" name="sq" eType="#//SubQueryOperand" | ||
106 | containment="true"/> | ||
107 | <eStructuralFeatures xsi:type="ecore:EReference" name="values" eType="#//FromValues" | ||
108 | containment="true"/> | ||
109 | <eStructuralFeatures xsi:type="ecore:EReference" name="pivot" eType="#//PivotTable" | ||
110 | containment="true"/> | ||
111 | <eStructuralFeatures xsi:type="ecore:EReference" name="unpivot" eType="#//UnpivotTable" | ||
112 | containment="true"/> | ||
113 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="alias" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
114 | <eStructuralFeatures xsi:type="ecore:EReference" name="tblAlias" eType="#//DbObjectName" | ||
115 | containment="true"/> | ||
116 | </eClassifiers> | ||
117 | <eClassifiers xsi:type="ecore:EClass" name="FromValues"> | ||
118 | <eStructuralFeatures xsi:type="ecore:EReference" name="values" eType="#//Values" | ||
119 | containment="true"/> | ||
120 | <eStructuralFeatures xsi:type="ecore:EReference" name="c" eType="#//FromValuesColumns" | ||
121 | containment="true"/> | ||
122 | </eClassifiers> | ||
123 | <eClassifiers xsi:type="ecore:EClass" name="FromValuesColumns"> | ||
124 | <eStructuralFeatures xsi:type="ecore:EReference" name="fvCols" eType="#//FromValuesColumnNames" | ||
125 | containment="true"/> | ||
126 | </eClassifiers> | ||
127 | <eClassifiers xsi:type="ecore:EClass" name="FromValuesColumnNames"/> | ||
128 | <eClassifiers xsi:type="ecore:EClass" name="ColumnNames" eSuperTypes="#//FromValuesColumnNames"> | ||
129 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="colName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
130 | </eClassifiers> | ||
131 | <eClassifiers xsi:type="ecore:EClass" name="Values"> | ||
132 | <eStructuralFeatures xsi:type="ecore:EReference" name="rows" eType="#//Rows" containment="true"/> | ||
133 | </eClassifiers> | ||
134 | <eClassifiers xsi:type="ecore:EClass" name="Rows"> | ||
135 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
136 | eType="#//Row" containment="true"/> | ||
137 | </eClassifiers> | ||
138 | <eClassifiers xsi:type="ecore:EClass" name="Row" eSuperTypes="#//Rows"> | ||
139 | <eStructuralFeatures xsi:type="ecore:EReference" name="rowValues" eType="#//RowValues" | ||
140 | containment="true"/> | ||
141 | </eClassifiers> | ||
142 | <eClassifiers xsi:type="ecore:EClass" name="RowValues"> | ||
143 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
144 | eType="#//RowValue" containment="true"/> | ||
145 | </eClassifiers> | ||
146 | <eClassifiers xsi:type="ecore:EClass" name="RowValue" eSuperTypes="#//RowValues"> | ||
147 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="null" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
148 | </eClassifiers> | ||
149 | <eClassifiers xsi:type="ecore:EClass" name="PivotTable"> | ||
150 | <eStructuralFeatures xsi:type="ecore:EReference" name="pfun" eType="#//PivotFunctions" | ||
151 | containment="true"/> | ||
152 | <eStructuralFeatures xsi:type="ecore:EReference" name="pfor" eType="#//PivotForClause" | ||
153 | containment="true"/> | ||
154 | <eStructuralFeatures xsi:type="ecore:EReference" name="pin" eType="#//PivotInClause" | ||
155 | containment="true"/> | ||
156 | </eClassifiers> | ||
157 | <eClassifiers xsi:type="ecore:EClass" name="PivotFunctions"> | ||
158 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="abc" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
159 | </eClassifiers> | ||
160 | <eClassifiers xsi:type="ecore:EClass" name="PivotFunction"/> | ||
161 | <eClassifiers xsi:type="ecore:EClass" name="PivotInClause"> | ||
162 | <eStructuralFeatures xsi:type="ecore:EReference" name="sq" eType="#//SubQueryOperand" | ||
163 | containment="true"/> | ||
164 | <eStructuralFeatures xsi:type="ecore:EReference" name="args" eType="#//UnpivotInClauseArgs" | ||
165 | containment="true"/> | ||
166 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="pinany" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
167 | </eClassifiers> | ||
168 | <eClassifiers xsi:type="ecore:EClass" name="UnpivotTable"> | ||
169 | <eStructuralFeatures xsi:type="ecore:EReference" name="pcols" eType="#//PivotColumns" | ||
170 | containment="true"/> | ||
171 | <eStructuralFeatures xsi:type="ecore:EReference" name="pfor" eType="#//PivotForClause" | ||
172 | containment="true"/> | ||
173 | <eStructuralFeatures xsi:type="ecore:EReference" name="inop" eType="#//UnpivotInClause" | ||
174 | containment="true"/> | ||
175 | </eClassifiers> | ||
176 | <eClassifiers xsi:type="ecore:EClass" name="UnpivotInClause"/> | ||
177 | <eClassifiers xsi:type="ecore:EClass" name="UnpivotInClauseArgs"/> | ||
178 | <eClassifiers xsi:type="ecore:EClass" name="UnpivotInClauseArg" eSuperTypes="#//UnpivotInClauseArgs"> | ||
179 | <eStructuralFeatures xsi:type="ecore:EReference" name="pcols" eType="#//PivotColumns" | ||
180 | containment="true"/> | ||
181 | <eStructuralFeatures xsi:type="ecore:EReference" name="cfuls" eType="#//PivotColumns" | ||
182 | containment="true"/> | ||
183 | </eClassifiers> | ||
184 | <eClassifiers xsi:type="ecore:EClass" name="PivotForClause"/> | ||
185 | <eClassifiers xsi:type="ecore:EClass" name="PivotColumns"/> | ||
186 | <eClassifiers xsi:type="ecore:EClass" name="Pivots" eSuperTypes="#//PivotColumns"/> | ||
187 | <eClassifiers xsi:type="ecore:EClass" name="PivotCol" eSuperTypes="#//PivotFunction #//PivotColumns #//Pivots"/> | ||
188 | <eClassifiers xsi:type="ecore:EClass" name="TableFull"/> | ||
189 | <eClassifiers xsi:type="ecore:EClass" name="DbObjectNameAll"> | ||
190 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="dbname" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
191 | </eClassifiers> | ||
192 | <eClassifiers xsi:type="ecore:EClass" name="DbObjectName" eSuperTypes="#//ColumnFull #//UsingCols #//PivotCol #//TableFull"> | ||
193 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="dbname" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
194 | </eClassifiers> | ||
195 | <eClassifiers xsi:type="ecore:EClass" name="OrOrderByColumn"> | ||
196 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
197 | eType="#//OrderByColumnFull" containment="true"/> | ||
198 | </eClassifiers> | ||
199 | <eClassifiers xsi:type="ecore:EClass" name="OrderByColumnFull" eSuperTypes="#//OrOrderByColumn"> | ||
200 | <eStructuralFeatures xsi:type="ecore:EReference" name="colOrder" eType="#//ColumnFull" | ||
201 | containment="true"/> | ||
202 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="colOrderInt" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELongObject"/> | ||
203 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="direction" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
204 | </eClassifiers> | ||
205 | <eClassifiers xsi:type="ecore:EClass" name="OrGroupByColumn"> | ||
206 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
207 | eType="#//GroupByColumnFull" containment="true"/> | ||
208 | </eClassifiers> | ||
209 | <eClassifiers xsi:type="ecore:EClass" name="GroupByColumnFull" eSuperTypes="#//OrGroupByColumn"> | ||
210 | <eStructuralFeatures xsi:type="ecore:EReference" name="colGrBy" eType="#//ColumnFull" | ||
211 | containment="true"/> | ||
212 | <eStructuralFeatures xsi:type="ecore:EReference" name="gbFunction" eType="#//OpFunction" | ||
213 | containment="true"/> | ||
214 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="grByInt" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELongObject"/> | ||
215 | </eClassifiers> | ||
216 | <eClassifiers xsi:type="ecore:EClass" name="OrExpr"> | ||
217 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
218 | eType="#//FullExpression" containment="true"/> | ||
219 | </eClassifiers> | ||
220 | <eClassifiers xsi:type="ecore:EClass" name="FullExpression" eSuperTypes="#//OrExpr"> | ||
221 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="c" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
222 | <eStructuralFeatures xsi:type="ecore:EReference" name="efrag" eType="#//FullExpression" | ||
223 | containment="true"/> | ||
224 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="notPrm" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
225 | <eStructuralFeatures xsi:type="ecore:EReference" name="expgroup" eType="#//ExprGroup" | ||
226 | containment="true"/> | ||
227 | <eStructuralFeatures xsi:type="ecore:EReference" name="exp" eType="#//FullExpression" | ||
228 | containment="true"/> | ||
229 | <eStructuralFeatures xsi:type="ecore:EReference" name="xexp" eType="#//XExpr" | ||
230 | containment="true"/> | ||
231 | <eStructuralFeatures xsi:type="ecore:EReference" name="in" eType="#//InOper" containment="true"/> | ||
232 | <eStructuralFeatures xsi:type="ecore:EReference" name="exists" eType="#//ExistsOper" | ||
233 | containment="true"/> | ||
234 | <eStructuralFeatures xsi:type="ecore:EReference" name="op1" eType="#//Operands" | ||
235 | containment="true"/> | ||
236 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="isnull" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
237 | <eStructuralFeatures xsi:type="ecore:EReference" name="between" eType="#//Between" | ||
238 | containment="true"/> | ||
239 | <eStructuralFeatures xsi:type="ecore:EReference" name="like" eType="#//Like" containment="true"/> | ||
240 | <eStructuralFeatures xsi:type="ecore:EReference" name="comp" eType="#//Comparison" | ||
241 | containment="true"/> | ||
242 | </eClassifiers> | ||
243 | <eClassifiers xsi:type="ecore:EClass" name="ExprGroup"> | ||
244 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="isnot" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
245 | <eStructuralFeatures xsi:type="ecore:EReference" name="expr" eType="#//OrExpr" | ||
246 | containment="true"/> | ||
247 | </eClassifiers> | ||
248 | <eClassifiers xsi:type="ecore:EClass" name="XExpr"> | ||
249 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="xf" eType="#//XFunction"/> | ||
250 | <eStructuralFeatures xsi:type="ecore:EReference" name="col" eType="#//Operands" | ||
251 | containment="true"/> | ||
252 | <eStructuralFeatures xsi:type="ecore:EReference" name="prm" eType="#//Prms" containment="true"/> | ||
253 | </eClassifiers> | ||
254 | <eClassifiers xsi:type="ecore:EEnum" name="XFunction"> | ||
255 | <eLiterals name="xin" literal="{IN"/> | ||
256 | <eLiterals name="xnotin" value="1" literal="{NOTIN"/> | ||
257 | <eLiterals name="xeq" value="2" literal="{EQUAL"/> | ||
258 | <eLiterals name="xnoteq" value="3" literal="{NOTEQUAL"/> | ||
259 | <eLiterals name="xls" value="4" literal="{LESS"/> | ||
260 | <eLiterals name="xlsr" value="5" literal="{LESS]"/> | ||
261 | <eLiterals name="xgtl" value="6" literal="{[GREATER"/> | ||
262 | <eLiterals name="xgt" value="7" literal="{GREATER"/> | ||
263 | <eLiterals name="xbwn" value="8" literal="{BETWEEN"/> | ||
264 | <eLiterals name="xbwnc" value="9" literal="{[BETWEEN]"/> | ||
265 | <eLiterals name="xbwnl" value="10" literal="{[BETWEEN"/> | ||
266 | <eLiterals name="xbwnr" value="11" literal="{BETWEEN]"/> | ||
267 | </eClassifiers> | ||
268 | <eClassifiers xsi:type="ecore:EClass" name="Prms"> | ||
269 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
270 | eType="#//JRParameter" containment="true"/> | ||
271 | </eClassifiers> | ||
272 | <eClassifiers xsi:type="ecore:EClass" name="JRParameter" eSuperTypes="#//Prms"> | ||
273 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="jrprm" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
274 | </eClassifiers> | ||
275 | <eClassifiers xsi:type="ecore:EClass" name="Comparison"> | ||
276 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
277 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="subOperator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
278 | <eStructuralFeatures xsi:type="ecore:EReference" name="op2" eType="#//Operands" | ||
279 | containment="true"/> | ||
280 | </eClassifiers> | ||
281 | <eClassifiers xsi:type="ecore:EClass" name="Like"> | ||
282 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="opLike" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
283 | <eStructuralFeatures xsi:type="ecore:EReference" name="op2" eType="#//LikeOperand" | ||
284 | containment="true"/> | ||
285 | </eClassifiers> | ||
286 | <eClassifiers xsi:type="ecore:EClass" name="LikeOperand"> | ||
287 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op2" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
288 | <eStructuralFeatures xsi:type="ecore:EReference" name="fop2" eType="#//OpFunction" | ||
289 | containment="true"/> | ||
290 | <eStructuralFeatures xsi:type="ecore:EReference" name="fcast" eType="#//OpFunctionCast" | ||
291 | containment="true"/> | ||
292 | <eStructuralFeatures xsi:type="ecore:EReference" name="fparam" eType="#//POperand" | ||
293 | containment="true"/> | ||
294 | </eClassifiers> | ||
295 | <eClassifiers xsi:type="ecore:EClass" name="Between"> | ||
296 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="opBetween" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
297 | <eStructuralFeatures xsi:type="ecore:EReference" name="op2" eType="#//Operands" | ||
298 | containment="true"/> | ||
299 | <eStructuralFeatures xsi:type="ecore:EReference" name="op3" eType="#//Operands" | ||
300 | containment="true"/> | ||
301 | </eClassifiers> | ||
302 | <eClassifiers xsi:type="ecore:EClass" name="InOper"> | ||
303 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
304 | <eStructuralFeatures xsi:type="ecore:EReference" name="subquery" eType="#//SubQueryOperand" | ||
305 | containment="true"/> | ||
306 | <eStructuralFeatures xsi:type="ecore:EReference" name="opList" eType="#//OperandListGroup" | ||
307 | containment="true"/> | ||
308 | </eClassifiers> | ||
309 | <eClassifiers xsi:type="ecore:EClass" name="ExistsOper"> | ||
310 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
311 | <eStructuralFeatures xsi:type="ecore:EReference" name="subquery" eType="#//SubQueryOperand" | ||
312 | containment="true"/> | ||
313 | <eStructuralFeatures xsi:type="ecore:EReference" name="opList" eType="#//OperandListGroup" | ||
314 | containment="true"/> | ||
315 | </eClassifiers> | ||
316 | <eClassifiers xsi:type="ecore:EClass" name="OperandListGroup"> | ||
317 | <eStructuralFeatures xsi:type="ecore:EReference" name="opGroup" eType="#//OperandList" | ||
318 | containment="true"/> | ||
319 | </eClassifiers> | ||
320 | <eClassifiers xsi:type="ecore:EClass" name="OperandList"/> | ||
321 | <eClassifiers xsi:type="ecore:EClass" name="Operands" eSuperTypes="#//OpFunctionArgAgregate"> | ||
322 | <eStructuralFeatures xsi:type="ecore:EReference" name="op1" eType="#//Operand" | ||
323 | containment="true"/> | ||
324 | <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Operands" | ||
325 | containment="true"/> | ||
326 | <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Operand" | ||
327 | containment="true"/> | ||
328 | </eClassifiers> | ||
329 | <eClassifiers xsi:type="ecore:EClass" name="Operand"> | ||
330 | <eStructuralFeatures xsi:type="ecore:EReference" name="column" eType="#//ColumnOperand" | ||
331 | containment="true"/> | ||
332 | <eStructuralFeatures xsi:type="ecore:EReference" name="xop" eType="#//Operand" | ||
333 | containment="true"/> | ||
334 | <eStructuralFeatures xsi:type="ecore:EReference" name="subq" eType="#//SubQueryOperand" | ||
335 | containment="true"/> | ||
336 | <eStructuralFeatures xsi:type="ecore:EReference" name="fcast" eType="#//OpFunctionCast" | ||
337 | containment="true"/> | ||
338 | <eStructuralFeatures xsi:type="ecore:EReference" name="fext" eType="#//FunctionExtract" | ||
339 | containment="true"/> | ||
340 | <eStructuralFeatures xsi:type="ecore:EReference" name="func" eType="#//OpFunction" | ||
341 | containment="true"/> | ||
342 | <eStructuralFeatures xsi:type="ecore:EReference" name="sqlcase" eType="#//SQLCaseOperand" | ||
343 | containment="true"/> | ||
344 | <eStructuralFeatures xsi:type="ecore:EReference" name="param" eType="#//POperand" | ||
345 | containment="true"/> | ||
346 | <eStructuralFeatures xsi:type="ecore:EReference" name="eparam" eType="#//ExpOperand" | ||
347 | containment="true"/> | ||
348 | <eStructuralFeatures xsi:type="ecore:EReference" name="scalar" eType="#//ScalarOperand" | ||
349 | containment="true"/> | ||
350 | </eClassifiers> | ||
351 | <eClassifiers xsi:type="ecore:EClass" name="OpFunction"> | ||
352 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="fname" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
353 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="star" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
354 | <eStructuralFeatures xsi:type="ecore:EReference" name="args" eType="#//OpFunctionArg" | ||
355 | containment="true"/> | ||
356 | <eStructuralFeatures xsi:type="ecore:EReference" name="fan" eType="#//FunctionAnalytical" | ||
357 | containment="true"/> | ||
358 | </eClassifiers> | ||
359 | <eClassifiers xsi:type="ecore:EClass" name="FunctionExtract"> | ||
360 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="v" eType="#//EXTRACT_VALUES"/> | ||
361 | <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="#//Operands" | ||
362 | containment="true"/> | ||
363 | </eClassifiers> | ||
364 | <eClassifiers xsi:type="ecore:EClass" name="FunctionAnalytical"> | ||
365 | <eStructuralFeatures xsi:type="ecore:EReference" name="anClause" eType="#//AnalyticClause" | ||
366 | containment="true"/> | ||
367 | </eClassifiers> | ||
368 | <eClassifiers xsi:type="ecore:EClass" name="AnalyticClause"> | ||
369 | <eStructuralFeatures xsi:type="ecore:EReference" name="abc" eType="#//QueryPartitionClause" | ||
370 | containment="true"/> | ||
371 | <eStructuralFeatures xsi:type="ecore:EReference" name="obc" eType="#//OrderByClause" | ||
372 | containment="true"/> | ||
373 | <eStructuralFeatures xsi:type="ecore:EReference" name="winc" eType="#//WindowingClause" | ||
374 | containment="true"/> | ||
375 | </eClassifiers> | ||
376 | <eClassifiers xsi:type="ecore:EClass" name="WindowingClause"/> | ||
377 | <eClassifiers xsi:type="ecore:EClass" name="WindowingClauseBetween" eSuperTypes="#//WindowingClause"> | ||
378 | <eStructuralFeatures xsi:type="ecore:EReference" name="wcoP" eType="#//WindowingClauseOperandPreceding" | ||
379 | containment="true"/> | ||
380 | <eStructuralFeatures xsi:type="ecore:EReference" name="wcoF" eType="#//WindowingClauseOperandFollowing" | ||
381 | containment="true"/> | ||
382 | </eClassifiers> | ||
383 | <eClassifiers xsi:type="ecore:EClass" name="WindowingClauseOperandFollowing"> | ||
384 | <eStructuralFeatures xsi:type="ecore:EReference" name="exp" eType="#//AnalyticExprArg" | ||
385 | containment="true"/> | ||
386 | </eClassifiers> | ||
387 | <eClassifiers xsi:type="ecore:EClass" name="WindowingClauseOperandPreceding" eSuperTypes="#//WindowingClause"> | ||
388 | <eStructuralFeatures xsi:type="ecore:EReference" name="expr" eType="#//AnalyticExprArg" | ||
389 | containment="true"/> | ||
390 | </eClassifiers> | ||
391 | <eClassifiers xsi:type="ecore:EClass" name="OrderByClause"> | ||
392 | <eStructuralFeatures xsi:type="ecore:EReference" name="args" eType="#//OrderByClauseArgs" | ||
393 | containment="true"/> | ||
394 | </eClassifiers> | ||
395 | <eClassifiers xsi:type="ecore:EClass" name="OrderByClauseArgs"/> | ||
396 | <eClassifiers xsi:type="ecore:EClass" name="OrderByClauseArg" eSuperTypes="#//OrderByClauseArgs"> | ||
397 | <eStructuralFeatures xsi:type="ecore:EReference" name="col" eType="#//AnalyticExprArg" | ||
398 | containment="true"/> | ||
399 | </eClassifiers> | ||
400 | <eClassifiers xsi:type="ecore:EClass" name="QueryPartitionClause"> | ||
401 | <eStructuralFeatures xsi:type="ecore:EReference" name="args" eType="#//AnalyticExprArgs" | ||
402 | containment="true"/> | ||
403 | </eClassifiers> | ||
404 | <eClassifiers xsi:type="ecore:EClass" name="AnalyticExprArgs" eSuperTypes="#//QueryPartitionClause"/> | ||
405 | <eClassifiers xsi:type="ecore:EClass" name="AnalyticExprArg" eSuperTypes="#//AnalyticExprArgs"> | ||
406 | <eStructuralFeatures xsi:type="ecore:EReference" name="ce" eType="#//Operands" | ||
407 | containment="true"/> | ||
408 | <eStructuralFeatures xsi:type="ecore:EReference" name="colAlias" eType="#//DbObjectName" | ||
409 | containment="true"/> | ||
410 | </eClassifiers> | ||
411 | <eClassifiers xsi:type="ecore:EClass" name="OpFunctionArg"/> | ||
412 | <eClassifiers xsi:type="ecore:EClass" name="OpFunctionArgOperand" eSuperTypes="#//OpFunctionArg"> | ||
413 | <eStructuralFeatures xsi:type="ecore:EReference" name="op" eType="#//OpFunctionArgAgregate" | ||
414 | containment="true"/> | ||
415 | </eClassifiers> | ||
416 | <eClassifiers xsi:type="ecore:EClass" name="OpFunctionCast"> | ||
417 | <eStructuralFeatures xsi:type="ecore:EReference" name="op" eType="#//Operands" | ||
418 | containment="true"/> | ||
419 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
420 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="p" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELongObject"/> | ||
421 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="p2" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELongObject"/> | ||
422 | </eClassifiers> | ||
423 | <eClassifiers xsi:type="ecore:EClass" name="OpFunctionArgAgregate"/> | ||
424 | <eClassifiers xsi:type="ecore:EClass" name="POperand"> | ||
425 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="prm" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
426 | </eClassifiers> | ||
427 | <eClassifiers xsi:type="ecore:EClass" name="ExpOperand"> | ||
428 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="prm" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
429 | </eClassifiers> | ||
430 | <eClassifiers xsi:type="ecore:EClass" name="ColumnOperand"> | ||
431 | <eStructuralFeatures xsi:type="ecore:EReference" name="cfull" eType="#//ColumnFull" | ||
432 | containment="true"/> | ||
433 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="ora" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
434 | </eClassifiers> | ||
435 | <eClassifiers xsi:type="ecore:EClass" name="SubQueryOperand"> | ||
436 | <eStructuralFeatures xsi:type="ecore:EReference" name="sel" eType="#//SelectQuery" | ||
437 | containment="true"/> | ||
438 | </eClassifiers> | ||
439 | <eClassifiers xsi:type="ecore:EClass" name="ScalarOperand" eSuperTypes="#//RowValue #//OperandList"> | ||
440 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="sostr" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
441 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="sodbl" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigDecimal"/> | ||
442 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="sodate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
443 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="sotime" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
444 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="sodt" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
445 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="soUInt" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELongObject"/> | ||
446 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="soint" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELongObject"/> | ||
447 | </eClassifiers> | ||
448 | <eClassifiers xsi:type="ecore:EClass" name="SQLCaseOperand"> | ||
449 | <eStructuralFeatures xsi:type="ecore:EReference" name="wop" eType="#//Operands" | ||
450 | containment="true"/> | ||
451 | <eStructuralFeatures xsi:type="ecore:EReference" name="expr" eType="#//OrExpr" | ||
452 | containment="true"/> | ||
453 | <eStructuralFeatures xsi:type="ecore:EReference" name="when" eType="#//SQLCaseWhens" | ||
454 | containment="true"/> | ||
455 | </eClassifiers> | ||
456 | <eClassifiers xsi:type="ecore:EClass" name="SQLCaseWhens"/> | ||
457 | <eClassifiers xsi:type="ecore:EClass" name="SqlCaseWhen" eSuperTypes="#//SQLCaseWhens"> | ||
458 | <eStructuralFeatures xsi:type="ecore:EReference" name="wop" eType="#//Operands" | ||
459 | containment="true"/> | ||
460 | <eStructuralFeatures xsi:type="ecore:EReference" name="expr" eType="#//OrExpr" | ||
461 | containment="true"/> | ||
462 | <eStructuralFeatures xsi:type="ecore:EReference" name="texp" eType="#//Operands" | ||
463 | containment="true"/> | ||
464 | <eStructuralFeatures xsi:type="ecore:EReference" name="eexp" eType="#//Operands" | ||
465 | containment="true"/> | ||
466 | </eClassifiers> | ||
467 | <eClassifiers xsi:type="ecore:EEnum" name="EXTRACT_VALUES"> | ||
468 | <eLiterals name="ms" literal="MICROSECOND"/> | ||
469 | <eLiterals name="s" value="1" literal="SECOND"/> | ||
470 | <eLiterals name="m" value="2" literal="MINUTE"/> | ||
471 | <eLiterals name="h" value="3" literal="HOUR"/> | ||
472 | <eLiterals name="day" value="4" literal="DAY"/> | ||
473 | <eLiterals name="week" value="5" literal="WEEK"/> | ||
474 | <eLiterals name="month" value="6" literal="MONTH"/> | ||
475 | <eLiterals name="quart" value="7" literal="QUARTER"/> | ||
476 | <eLiterals name="year" value="8" literal="YEAR"/> | ||
477 | <eLiterals name="micros" value="9" literal="SECOND_MICROSECOND"/> | ||
478 | <eLiterals name="minMicro" value="10" literal="MINUTE_MICROSECOND"/> | ||
479 | <eLiterals name="minSec" value="11" literal="MINUTE_SECOND"/> | ||
480 | <eLiterals name="hms" value="12" literal="HOUR_MICROSECOND"/> | ||
481 | <eLiterals name="hs" value="13" literal="HOUR_SECOND"/> | ||
482 | <eLiterals name="hmin" value="14" literal="HOUR_MINUTE"/> | ||
483 | <eLiterals name="dms" value="15" literal="DAY_MICROSECOND"/> | ||
484 | <eLiterals name="ds" value="16" literal="DAY_SECOND"/> | ||
485 | <eLiterals name="daymin" value="17" literal="DAY_MINUTE"/> | ||
486 | <eLiterals name="dayh" value="18" literal="DAY_HOUR"/> | ||
487 | <eLiterals name="yearMonth" value="19" literal="YEAR_MONTH"/> | ||
488 | </eClassifiers> | ||
489 | <eClassifiers xsi:type="ecore:EClass" name="IntegerValue"> | ||
490 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="integer" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELongObject"/> | ||
491 | </eClassifiers> | ||
492 | <eClassifiers xsi:type="ecore:EClass" name="UnsignedValue"> | ||
493 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="integer" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELongObject"/> | ||
494 | </eClassifiers> | ||
495 | <eClassifiers xsi:type="ecore:EClass" name="Col" eSuperTypes="#//ColumnFull"> | ||
496 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
497 | eType="#//DbObjectName" containment="true"/> | ||
498 | </eClassifiers> | ||
499 | <eClassifiers xsi:type="ecore:EClass" name="abc" eSuperTypes="#//FromValuesColumnNames"> | ||
500 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
501 | eType="#//ColumnNames" containment="true"/> | ||
502 | </eClassifiers> | ||
503 | <eClassifiers xsi:type="ecore:EClass" name="UnipivotInClause" eSuperTypes="#//UnpivotInClause"> | ||
504 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
505 | <eStructuralFeatures xsi:type="ecore:EReference" name="args" eType="#//UnpivotInClauseArgs" | ||
506 | containment="true"/> | ||
507 | </eClassifiers> | ||
508 | <eClassifiers xsi:type="ecore:EClass" name="uicargs" eSuperTypes="#//UnpivotInClauseArgs"> | ||
509 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
510 | eType="#//UnpivotInClauseArg" containment="true"/> | ||
511 | </eClassifiers> | ||
512 | <eClassifiers xsi:type="ecore:EClass" name="pvcs" eSuperTypes="#//Pivots"> | ||
513 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
514 | eType="#//PivotCol" containment="true"/> | ||
515 | </eClassifiers> | ||
516 | <eClassifiers xsi:type="ecore:EClass" name="pcols" eSuperTypes="#//PivotCol"> | ||
517 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
518 | eType="#//DbObjectName" containment="true"/> | ||
519 | </eClassifiers> | ||
520 | <eClassifiers xsi:type="ecore:EClass" name="tbls" eSuperTypes="#//TableFull"> | ||
521 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
522 | eType="#//DbObjectName" containment="true"/> | ||
523 | </eClassifiers> | ||
524 | <eClassifiers xsi:type="ecore:EClass" name="OpList" eSuperTypes="#//OperandList"> | ||
525 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
526 | eType="#//ScalarOperand" containment="true"/> | ||
527 | </eClassifiers> | ||
528 | <eClassifiers xsi:type="ecore:EClass" name="Plus" eSuperTypes="#//Operands"/> | ||
529 | <eClassifiers xsi:type="ecore:EClass" name="Minus" eSuperTypes="#//Operands"/> | ||
530 | <eClassifiers xsi:type="ecore:EClass" name="Concat" eSuperTypes="#//Operands"/> | ||
531 | <eClassifiers xsi:type="ecore:EClass" name="Multiply" eSuperTypes="#//Operands"/> | ||
532 | <eClassifiers xsi:type="ecore:EClass" name="Division" eSuperTypes="#//Operands"/> | ||
533 | <eClassifiers xsi:type="ecore:EClass" name="OBCArgs" eSuperTypes="#//OrderByClauseArgs"> | ||
534 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
535 | eType="#//OrderByClauseArg" containment="true"/> | ||
536 | </eClassifiers> | ||
537 | <eClassifiers xsi:type="ecore:EClass" name="AExpArgs" eSuperTypes="#//AnalyticExprArgs"> | ||
538 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
539 | eType="#//AnalyticExprArg" containment="true"/> | ||
540 | </eClassifiers> | ||
541 | <eClassifiers xsi:type="ecore:EClass" name="OpFList" eSuperTypes="#//OpFunctionArg"> | ||
542 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
543 | eType="#//OpFunctionArgOperand" containment="true"/> | ||
544 | </eClassifiers> | ||
545 | <eClassifiers xsi:type="ecore:EClass" name="WhenList" eSuperTypes="#//SQLCaseWhens"> | ||
546 | <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1" | ||
547 | eType="#//SqlCaseWhen" containment="true"/> | ||
548 | </eClassifiers> | ||
549 | </ecore:EPackage> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Ecore/na_rep/XSHMLMT.ecore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Ecore/na_rep/XSHMLMT.ecore new file mode 100644 index 00000000..f741662e --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Ecore/na_rep/XSHMLMT.ecore | |||
@@ -0,0 +1,203 @@ | |||
1 | <?xml version="1.0" encoding="ASCII"?> | ||
2 | <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="shml" nsURI="http://ecnu.models.xshml.xshmlmt/shml/" nsPrefix="shml"> | ||
3 | <eClassifiers xsi:type="ecore:EClass" name="System"> | ||
4 | <eOperations name="main"> | ||
5 | <eAnnotations source="aspect"/> | ||
6 | </eOperations> | ||
7 | <eOperations name="doprintconfiguration"> | ||
8 | <eAnnotations source="aspect"/> | ||
9 | </eOperations> | ||
10 | <eOperations name="dojump"> | ||
11 | <eAnnotations source="aspect"/> | ||
12 | </eOperations> | ||
13 | <eOperations name="callscilab"> | ||
14 | <eAnnotations source="aspect"/> | ||
15 | </eOperations> | ||
16 | <eOperations name="RealizeInitializeModel"> | ||
17 | <eAnnotations source="aspect"/> | ||
18 | <eParameters name="arguments" upperBound="-1"> | ||
19 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
20 | </eParameters> | ||
21 | </eOperations> | ||
22 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
23 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
24 | </eStructuralFeatures> | ||
25 | <eStructuralFeatures xsi:type="ecore:EReference" name="tshss" upperBound="-1" eType="//TSHS" containment="true"/> | ||
26 | <eStructuralFeatures xsi:type="ecore:EReference" name="globalvariables" upperBound="-1" eType="//Variable" containment="true"/> | ||
27 | <eStructuralFeatures xsi:type="ecore:EReference" name="globalclocks" upperBound="-1" eType="//Clock" containment="true"/> | ||
28 | <eStructuralFeatures xsi:type="ecore:EReference" name="globalevents" upperBound="-1" eType="//Event" containment="true"/> | ||
29 | </eClassifiers> | ||
30 | <eClassifiers xsi:type="ecore:EClass" name="TSHS"> | ||
31 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
32 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
33 | </eStructuralFeatures> | ||
34 | <eStructuralFeatures xsi:type="ecore:EReference" name="ownedodes" upperBound="-1" eType="//ODE" containment="true"/> | ||
35 | <eStructuralFeatures xsi:type="ecore:EReference" name="ownedstates" upperBound="-1" eType="//State" containment="true"/> | ||
36 | <eStructuralFeatures xsi:type="ecore:EReference" name="ownedtransitions" upperBound="-1" eType="//Transition" containment="true"/> | ||
37 | <eStructuralFeatures xsi:type="ecore:EReference" name="localvariables" upperBound="-1" eType="//Variable" containment="true"/> | ||
38 | <eStructuralFeatures xsi:type="ecore:EReference" name="localclocks" upperBound="-1" eType="//Clock" containment="true"/> | ||
39 | <eStructuralFeatures xsi:type="ecore:EReference" name="localevents" upperBound="-1" eType="//Event" containment="true"/> | ||
40 | <eStructuralFeatures xsi:type="ecore:EReference" name="initialstate" lowerBound="1" eType="//State"/> | ||
41 | <eStructuralFeatures xsi:type="ecore:EReference" name="ownedexpos" upperBound="-1" eType="//ExpoDistribution" containment="true"/> | ||
42 | <eStructuralFeatures xsi:type="ecore:EReference" name="ownedactions" upperBound="-1" eType="//Action" containment="true"/> | ||
43 | <eStructuralFeatures xsi:type="ecore:EReference" name="ownedguards" upperBound="-1" eType="//Guard" containment="true"/> | ||
44 | <eStructuralFeatures xsi:type="ecore:EReference" name="ownedunifs" upperBound="-1" eType="//UnifDistribution" containment="true"/> | ||
45 | </eClassifiers> | ||
46 | <eClassifiers xsi:type="ecore:EClass" name="Variable"> | ||
47 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
48 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
49 | </eStructuralFeatures> | ||
50 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="value"> | ||
51 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EFloat"/> | ||
52 | </eStructuralFeatures> | ||
53 | </eClassifiers> | ||
54 | <eClassifiers xsi:type="ecore:EClass" name="Clock"> | ||
55 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
56 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
57 | </eStructuralFeatures> | ||
58 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="time"> | ||
59 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EFloat"/> | ||
60 | </eStructuralFeatures> | ||
61 | </eClassifiers> | ||
62 | <eClassifiers xsi:type="ecore:EClass" name="Event"> | ||
63 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
64 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
65 | </eStructuralFeatures> | ||
66 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="send"> | ||
67 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EInt"/> | ||
68 | </eStructuralFeatures> | ||
69 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="receive"> | ||
70 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EInt"/> | ||
71 | </eStructuralFeatures> | ||
72 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="active"> | ||
73 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EInt"/> | ||
74 | </eStructuralFeatures> | ||
75 | </eClassifiers> | ||
76 | <eClassifiers xsi:type="ecore:EClass" name="Transition" abstract="true"> | ||
77 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
78 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
79 | </eStructuralFeatures> | ||
80 | <eStructuralFeatures xsi:type="ecore:EReference" name="triggerevent" lowerBound="1" eType="//Event"/> | ||
81 | <eStructuralFeatures xsi:type="ecore:EReference" name="taction" lowerBound="1" eType="//Action"/> | ||
82 | <eStructuralFeatures xsi:type="ecore:EReference" name="evaluateguard" lowerBound="1" eType="//EvaluateGuard"/> | ||
83 | <eStructuralFeatures xsi:type="ecore:EReference" name="temporalguard" lowerBound="1" eType="//TemporalGuard"/> | ||
84 | </eClassifiers> | ||
85 | <eClassifiers xsi:type="ecore:EClass" name="Guard" abstract="true"> | ||
86 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
87 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
88 | </eStructuralFeatures> | ||
89 | </eClassifiers> | ||
90 | <eClassifiers xsi:type="ecore:EClass" name="TemporalGuard" eSuperTypes="//Guard"> | ||
91 | <eOperations name="holdstg"> | ||
92 | <eAnnotations source="aspect"/> | ||
93 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
94 | </eOperations> | ||
95 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="tcondition"> | ||
96 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
97 | </eStructuralFeatures> | ||
98 | <eStructuralFeatures xsi:type="ecore:EReference" name="onclock" lowerBound="1" eType="//Clock"/> | ||
99 | </eClassifiers> | ||
100 | <eClassifiers xsi:type="ecore:EClass" name="EvaluateGuard" eSuperTypes="//Guard"> | ||
101 | <eOperations name="holdseg"> | ||
102 | <eAnnotations source="aspect"/> | ||
103 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
104 | </eOperations> | ||
105 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="vcondition"> | ||
106 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
107 | </eStructuralFeatures> | ||
108 | <eStructuralFeatures xsi:type="ecore:EReference" name="onvariable" lowerBound="1" eType="//Variable"/> | ||
109 | </eClassifiers> | ||
110 | <eClassifiers xsi:type="ecore:EClass" name="State"> | ||
111 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
112 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
113 | </eStructuralFeatures> | ||
114 | <eStructuralFeatures xsi:type="ecore:EReference" name="slaveode" lowerBound="1" eType="//ODE"/> | ||
115 | <eStructuralFeatures xsi:type="ecore:EReference" name="outgoingct" upperBound="-1" eType="//ComTransition" eOpposite="//ComTransition/csrc"/> | ||
116 | <eStructuralFeatures xsi:type="ecore:EReference" name="incomingct" upperBound="-1" eType="//ComTransition" eOpposite="//ComTransition/ctgt"/> | ||
117 | <eStructuralFeatures xsi:type="ecore:EReference" name="outgoingpt" upperBound="-1" eType="//ProbTransition" eOpposite="//ProbTransition/psrc"/> | ||
118 | <eStructuralFeatures xsi:type="ecore:EReference" name="incomingpt" upperBound="-1" eType="//ProbTransition" eOpposite="//ProbTransition/ptgt"/> | ||
119 | <eStructuralFeatures xsi:type="ecore:EReference" name="subdiagram" lowerBound="1" eType="//TSHS"/> | ||
120 | <eStructuralFeatures xsi:type="ecore:EReference" name="fatherstate" lowerBound="1" eType="//State"/> | ||
121 | <eStructuralFeatures xsi:type="ecore:EReference" name="slavelambda" lowerBound="1" eType="//ExpoDistribution"/> | ||
122 | <eStructuralFeatures xsi:type="ecore:EReference" name="slaveunif" lowerBound="1" eType="//UnifDistribution"/> | ||
123 | </eClassifiers> | ||
124 | <eClassifiers xsi:type="ecore:EClass" name="ComTransition" eSuperTypes="//Transition"> | ||
125 | <eStructuralFeatures xsi:type="ecore:EReference" name="csrc" lowerBound="1" eType="//State" eOpposite="//State/outgoingct"/> | ||
126 | <eStructuralFeatures xsi:type="ecore:EReference" name="ctgt" eType="//State" eOpposite="//State/incomingct"/> | ||
127 | </eClassifiers> | ||
128 | <eClassifiers xsi:type="ecore:EClass" name="ProbTransition" eSuperTypes="//Transition"> | ||
129 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="probability"> | ||
130 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EFloat"/> | ||
131 | </eStructuralFeatures> | ||
132 | <eStructuralFeatures xsi:type="ecore:EReference" name="psrc" lowerBound="1" eType="//State" eOpposite="//State/outgoingpt"/> | ||
133 | <eStructuralFeatures xsi:type="ecore:EReference" name="ptgt" lowerBound="1" eType="//State" eOpposite="//State/incomingpt"/> | ||
134 | </eClassifiers> | ||
135 | <eClassifiers xsi:type="ecore:EClass" name="Function"> | ||
136 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
137 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
138 | </eStructuralFeatures> | ||
139 | <eStructuralFeatures xsi:type="ecore:EReference" name="indevariable" lowerBound="1" eType="//IndeVariable" containment="true"/> | ||
140 | <eStructuralFeatures xsi:type="ecore:EReference" name="devariable" lowerBound="1" eType="//DeVariable" containment="true"/> | ||
141 | <eStructuralFeatures xsi:type="ecore:EReference" name="fright" lowerBound="1" eType="//Fright" containment="true"/> | ||
142 | </eClassifiers> | ||
143 | <eClassifiers xsi:type="ecore:EClass" name="IndeVariable"> | ||
144 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
145 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
146 | </eStructuralFeatures> | ||
147 | </eClassifiers> | ||
148 | <eClassifiers xsi:type="ecore:EClass" name="DeVariable"> | ||
149 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
150 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
151 | </eStructuralFeatures> | ||
152 | </eClassifiers> | ||
153 | <eClassifiers xsi:type="ecore:EClass" name="Fright"> | ||
154 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
155 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
156 | </eStructuralFeatures> | ||
157 | </eClassifiers> | ||
158 | <eClassifiers xsi:type="ecore:EClass" name="ODE"> | ||
159 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
160 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
161 | </eStructuralFeatures> | ||
162 | <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1" eType="//Condition" containment="true"/> | ||
163 | <eStructuralFeatures xsi:type="ecore:EReference" name="interval" lowerBound="1" eType="//Interval" containment="true"/> | ||
164 | <eStructuralFeatures xsi:type="ecore:EReference" name="function" lowerBound="1" eType="//Function" containment="true"/> | ||
165 | </eClassifiers> | ||
166 | <eClassifiers xsi:type="ecore:EClass" name="Condition"> | ||
167 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
168 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
169 | </eStructuralFeatures> | ||
170 | </eClassifiers> | ||
171 | <eClassifiers xsi:type="ecore:EClass" name="Interval"> | ||
172 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"> | ||
173 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
174 | </eStructuralFeatures> | ||
175 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="left"> | ||
176 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EFloat"/> | ||
177 | </eStructuralFeatures> | ||
178 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="right"> | ||
179 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EFloat"/> | ||
180 | </eStructuralFeatures> | ||
181 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="subinterval"> | ||
182 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EFloat"/> | ||
183 | </eStructuralFeatures> | ||
184 | </eClassifiers> | ||
185 | <eClassifiers xsi:type="ecore:EClass" name="ExpoDistribution"> | ||
186 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="lambda"> | ||
187 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EFloat"/> | ||
188 | </eStructuralFeatures> | ||
189 | </eClassifiers> | ||
190 | <eClassifiers xsi:type="ecore:EClass" name="Action"> | ||
191 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="action"> | ||
192 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
193 | </eStructuralFeatures> | ||
194 | </eClassifiers> | ||
195 | <eClassifiers xsi:type="ecore:EClass" name="UnifDistribution"> | ||
196 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="a"> | ||
197 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EFloat"/> | ||
198 | </eStructuralFeatures> | ||
199 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="b"> | ||
200 | <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EFloat"/> | ||
201 | </eStructuralFeatures> | ||
202 | </eClassifiers> | ||
203 | </ecore:EPackage> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Ecore/out_d_rep/rdm.ecore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Ecore/out_d_rep/rdm.ecore new file mode 100644 index 00000000..5c01ab01 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Ecore/out_d_rep/rdm.ecore | |||
@@ -0,0 +1,178 @@ | |||
1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
2 | <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"> | ||
3 | <ecore:EPackage name="PrimitiveTypes"> | ||
4 | <eClassifiers xsi:type="ecore:EDataType" name="Integer"/> | ||
5 | <eClassifiers xsi:type="ecore:EDataType" name="Long"/> | ||
6 | <eClassifiers xsi:type="ecore:EDataType" name="Float"/> | ||
7 | <eClassifiers xsi:type="ecore:EDataType" name="Double"/> | ||
8 | <eClassifiers xsi:type="ecore:EDataType" name="Boolean"/> | ||
9 | <eClassifiers xsi:type="ecore:EDataType" name="String"/> | ||
10 | </ecore:EPackage> | ||
11 | <ecore:EPackage name="RDM"> | ||
12 | <eClassifiers xsi:type="ecore:EClass" name="DifferentFrom" eSuperTypes="/1/PredicateSymbol"/> | ||
13 | <eClassifiers xsi:type="ecore:EClass" name="SameAs" eSuperTypes="/1/PredicateSymbol"/> | ||
14 | <eClassifiers xsi:type="ecore:EClass" name="IndividualVariable" eSuperTypes="/1/Variable"> | ||
15 | <eStructuralFeatures xsi:type="ecore:EReference" name="classRef" ordered="false" eType="/1/ODM/Class"/> | ||
16 | </eClassifiers> | ||
17 | <eClassifiers xsi:type="ecore:EClass" name="DataVariable" eSuperTypes="/1/Variable"/> | ||
18 | <eClassifiers xsi:type="ecore:EClass" name="Constant" eSuperTypes="/1/Term"/> | ||
19 | <eClassifiers xsi:type="ecore:EClass" name="Variable" eSuperTypes="/1/Term"> | ||
20 | <eStructuralFeatures xsi:type="ecore:EReference" name="type" ordered="false" eType="/1/ODM/Datatype"/> | ||
21 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" unique="false" lowerBound="1" eType="/0/String"/> | ||
22 | </eClassifiers> | ||
23 | <eClassifiers xsi:type="ecore:EClass" name="Term" abstract="true"/> | ||
24 | <eClassifiers xsi:type="ecore:EClass" name="BuiltIn" eSuperTypes="/1/PredicateSymbol"> | ||
25 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="buildInID" ordered="false" unique="false" lowerBound="1" eType="/0/String"/> | ||
26 | </eClassifiers> | ||
27 | <eClassifiers xsi:type="ecore:EClass" name="PredicateSymbol"/> | ||
28 | <eClassifiers xsi:type="ecore:EClass" name="Atom"> | ||
29 | <eStructuralFeatures xsi:type="ecore:EReference" name="hasPredicateSymbol" ordered="false" lowerBound="1" eType="/1/PredicateSymbol"/> | ||
30 | <eStructuralFeatures xsi:type="ecore:EReference" name="terms" upperBound="-1" eType="/1/Term"/> | ||
31 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" unique="false" lowerBound="1" eType="/0/String"/> | ||
32 | </eClassifiers> | ||
33 | <eClassifiers xsi:type="ecore:EClass" name="Consequent"> | ||
34 | <eStructuralFeatures xsi:type="ecore:EReference" name="containsAtom" ordered="false" upperBound="-1" eType="/1/Atom"/> | ||
35 | </eClassifiers> | ||
36 | <eClassifiers xsi:type="ecore:EClass" name="Antecedent"> | ||
37 | <eStructuralFeatures xsi:type="ecore:EReference" name="containsAtom" ordered="false" upperBound="-1" eType="/1/Atom"/> | ||
38 | </eClassifiers> | ||
39 | <eClassifiers xsi:type="ecore:EClass" name="Rule" eSuperTypes="/1/ODM/OntologyElement"> | ||
40 | <eStructuralFeatures xsi:type="ecore:EReference" name="hasAntecedent" ordered="false" lowerBound="1" eType="/1/Antecedent"/> | ||
41 | <eStructuralFeatures xsi:type="ecore:EReference" name="hasConsequent" ordered="false" lowerBound="1" eType="/1/Consequent"/> | ||
42 | </eClassifiers> | ||
43 | <eSubpackages name="ODM"> | ||
44 | <eClassifiers xsi:type="ecore:EClass" name="MinCardinalityRestriction" eSuperTypes="/1/ODM/Restriction"> | ||
45 | <eStructuralFeatures xsi:type="ecore:EReference" name="minCardinality" ordered="false" lowerBound="1" eType="/1/ODM/TypedLiteral"/> | ||
46 | </eClassifiers> | ||
47 | <eClassifiers xsi:type="ecore:EClass" name="MaxCardinalityRestriction" eSuperTypes="/1/ODM/Restriction"> | ||
48 | <eStructuralFeatures xsi:type="ecore:EReference" name="maxCardinality" ordered="false" lowerBound="1" eType="/1/ODM/TypedLiteral"/> | ||
49 | </eClassifiers> | ||
50 | <eClassifiers xsi:type="ecore:EClass" name="CardinalityRestriction" eSuperTypes="/1/ODM/Restriction"> | ||
51 | <eStructuralFeatures xsi:type="ecore:EReference" name="cardinality" ordered="false" lowerBound="1" eType="/1/ODM/TypedLiteral"/> | ||
52 | </eClassifiers> | ||
53 | <eClassifiers xsi:type="ecore:EClass" name="TransitiveProperty" eSuperTypes="/1/ODM/ObjectProperty"/> | ||
54 | <eClassifiers xsi:type="ecore:EClass" name="SymmetricProperty" eSuperTypes="/1/ODM/ObjectProperty"/> | ||
55 | <eClassifiers xsi:type="ecore:EClass" name="InverseFunctionalProperty" eSuperTypes="/1/ODM/ObjectProperty"/> | ||
56 | <eClassifiers xsi:type="ecore:EClass" name="FunctionalProperty" eSuperTypes="/1/ODM/Property"/> | ||
57 | <eClassifiers xsi:type="ecore:EClass" name="PlainLiteral" eSuperTypes="/1/ODM/Literal"> | ||
58 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="language" ordered="false" unique="false" lowerBound="1" eType="/0/String"/> | ||
59 | </eClassifiers> | ||
60 | <eClassifiers xsi:type="ecore:EClass" name="TypedLiteral" eSuperTypes="/1/ODM/Literal"> | ||
61 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="theType" ordered="false" unique="false" lowerBound="1" eType="/0/String"/> | ||
62 | </eClassifiers> | ||
63 | <eClassifiers xsi:type="ecore:EClass" name="Literal" abstract="true" eSuperTypes="/1/ODM/Datatype"> | ||
64 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="lexicalForm" ordered="false" unique="false" lowerBound="1" eType="/0/String"/> | ||
65 | </eClassifiers> | ||
66 | <eClassifiers xsi:type="ecore:EClass" name="Datatype" abstract="true" eSuperTypes="/1/ODM/OntologyElement"/> | ||
67 | <eClassifiers xsi:type="ecore:EClass" name="DataRange" eSuperTypes="/1/ODM/Class"> | ||
68 | <eStructuralFeatures xsi:type="ecore:EReference" name="datatype" ordered="false" eType="/1/ODM/Datatype"/> | ||
69 | <eStructuralFeatures xsi:type="ecore:EReference" name="oneOf" ordered="false" upperBound="-1" eType="/1/ODM/Literal"/> | ||
70 | </eClassifiers> | ||
71 | <eClassifiers xsi:type="ecore:EClass" name="AllValuesFromRestriction" eSuperTypes="/1/ODM/Restriction"> | ||
72 | <eStructuralFeatures xsi:type="ecore:EReference" name="allValuesFromRange" ordered="false" eType="/1/ODM/DataRange"/> | ||
73 | <eStructuralFeatures xsi:type="ecore:EReference" name="allValuesFromClass" ordered="false" eType="/1/ODM/Class"/> | ||
74 | </eClassifiers> | ||
75 | <eClassifiers xsi:type="ecore:EClass" name="SomeValuesFromRestriction" eSuperTypes="/1/ODM/Restriction"> | ||
76 | <eStructuralFeatures xsi:type="ecore:EReference" name="someValuesFromClass" ordered="false" eType="/1/ODM/Class"/> | ||
77 | <eStructuralFeatures xsi:type="ecore:EReference" name="someValuesFromRange" ordered="false" eType="/1/ODM/DataRange"/> | ||
78 | </eClassifiers> | ||
79 | <eClassifiers xsi:type="ecore:EClass" name="OntologyPropertyValue" eSuperTypes="/1/ODM/OntologyProperty"/> | ||
80 | <eClassifiers xsi:type="ecore:EClass" name="URI" eSuperTypes="/1/ODM/Annotation"/> | ||
81 | <eClassifiers xsi:type="ecore:EClass" name="Annotation" abstract="true"/> | ||
82 | <eClassifiers xsi:type="ecore:EClass" name="AnnotationPropertyValue"> | ||
83 | <eStructuralFeatures xsi:type="ecore:EReference" name="object" ordered="false" lowerBound="1" eType="/1/ODM/Annotation"/> | ||
84 | <eStructuralFeatures xsi:type="ecore:EReference" name="subject" ordered="false" lowerBound="1" eType="/1/ODM/AnnotatableElement"/> | ||
85 | <eStructuralFeatures xsi:type="ecore:EReference" name="type" ordered="false" lowerBound="1" eType="/1/ODM/AnnotationProperty"/> | ||
86 | </eClassifiers> | ||
87 | <eClassifiers xsi:type="ecore:EClass" name="EnumeratedDatatype" eSuperTypes="/1/ODM/Datatype"> | ||
88 | <eStructuralFeatures xsi:type="ecore:EReference" name="collectionOf" ordered="false" upperBound="-1" eType="/1/ODM/DataValue"/> | ||
89 | </eClassifiers> | ||
90 | <eClassifiers xsi:type="ecore:EClass" name="PrimitiveType" eSuperTypes="/1/ODM/Datatype"/> | ||
91 | <eClassifiers xsi:type="ecore:EClass" name="HasValueRestriction" eSuperTypes="/1/ODM/Restriction"> | ||
92 | <eStructuralFeatures xsi:type="ecore:EReference" name="hasLiteralValue" ordered="false" eType="/1/ODM/Literal"/> | ||
93 | <eStructuralFeatures xsi:type="ecore:EReference" name="hasValue" ordered="false" eType="/1/ODM/Individual"/> | ||
94 | </eClassifiers> | ||
95 | <eClassifiers xsi:type="ecore:EClass" name="Restriction" abstract="true" eSuperTypes="/1/ODM/Class"> | ||
96 | <eStructuralFeatures xsi:type="ecore:EReference" name="onProperty" ordered="false" upperBound="-1" eType="/1/ODM/Property"/> | ||
97 | <eStructuralFeatures xsi:type="ecore:EReference" name="toDatatype" ordered="false" eType="/1/ODM/Datatype"/> | ||
98 | </eClassifiers> | ||
99 | <eClassifiers xsi:type="ecore:EClass" name="AllDiferent" eSuperTypes="/1/ODM/Class"> | ||
100 | <eStructuralFeatures xsi:type="ecore:EReference" name="distinctMembers" ordered="false" upperBound="-1" eType="/1/ODM/Individual"/> | ||
101 | </eClassifiers> | ||
102 | <eClassifiers xsi:type="ecore:EClass" name="DataValue" eSuperTypes="/1/Constant /1/ODM/Annotation"> | ||
103 | <eStructuralFeatures xsi:type="ecore:EReference" name="type" ordered="false" lowerBound="1" eType="/1/ODM/Datatype"/> | ||
104 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" ordered="false" unique="false" lowerBound="1" eType="/0/String"/> | ||
105 | </eClassifiers> | ||
106 | <eClassifiers xsi:type="ecore:EClass" name="DatatypePropertyValue" eSuperTypes="/1/ODM/PropertyValue"> | ||
107 | <eStructuralFeatures xsi:type="ecore:EReference" name="object" ordered="false" lowerBound="1" eType="/1/ODM/DataValue"/> | ||
108 | </eClassifiers> | ||
109 | <eClassifiers xsi:type="ecore:EClass" name="ObjectPropertyValue" eSuperTypes="/1/ODM/PropertyValue"> | ||
110 | <eStructuralFeatures xsi:type="ecore:EReference" name="object" ordered="false" lowerBound="1" eType="/1/ODM/Individual"/> | ||
111 | </eClassifiers> | ||
112 | <eClassifiers xsi:type="ecore:EClass" name="PropertyValue" abstract="true"> | ||
113 | <eStructuralFeatures xsi:type="ecore:EReference" name="subject" ordered="false" lowerBound="1" eType="/1/ODM/Individual"/> | ||
114 | </eClassifiers> | ||
115 | <eClassifiers xsi:type="ecore:EClass" name="UnionClass" eSuperTypes="/1/ODM/Class"> | ||
116 | <eStructuralFeatures xsi:type="ecore:EReference" name="unionOf" ordered="false" upperBound="-1" eType="/1/ODM/Class"/> | ||
117 | </eClassifiers> | ||
118 | <eClassifiers xsi:type="ecore:EClass" name="IntersectionClass" eSuperTypes="/1/ODM/Class"> | ||
119 | <eStructuralFeatures xsi:type="ecore:EReference" name="intersectionOf" ordered="false" upperBound="-1" eType="/1/ODM/Class"/> | ||
120 | </eClassifiers> | ||
121 | <eClassifiers xsi:type="ecore:EClass" name="ComplementClass" eSuperTypes="/1/ODM/Class"> | ||
122 | <eStructuralFeatures xsi:type="ecore:EReference" name="complementOf" ordered="false" lowerBound="1" eType="/1/ODM/Class"/> | ||
123 | </eClassifiers> | ||
124 | <eClassifiers xsi:type="ecore:EClass" name="EnumeratedClass" eSuperTypes="/1/ODM/Class"> | ||
125 | <eStructuralFeatures xsi:type="ecore:EReference" name="oneOf" ordered="false" upperBound="-1" eType="/1/ODM/Individual"/> | ||
126 | </eClassifiers> | ||
127 | <eClassifiers xsi:type="ecore:EClass" name="Namespace"> | ||
128 | <eStructuralFeatures xsi:type="ecore:EReference" name="members" ordered="false" upperBound="-1" eType="/1/ODM/NamedElement" containment="true"/> | ||
129 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" unique="false" lowerBound="1" eType="/0/String"/> | ||
130 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="uri" ordered="false" unique="false" lowerBound="1" eType="/0/String"/> | ||
131 | </eClassifiers> | ||
132 | <eClassifiers xsi:type="ecore:EClass" name="DatatypeProperty" eSuperTypes="/1/ODM/Property"> | ||
133 | <eStructuralFeatures xsi:type="ecore:EReference" name="range" ordered="false" upperBound="-1" eType="/1/ODM/DataRange"/> | ||
134 | </eClassifiers> | ||
135 | <eClassifiers xsi:type="ecore:EClass" name="ObjectProperty" eSuperTypes="/1/ODM/Property"> | ||
136 | <eStructuralFeatures xsi:type="ecore:EReference" name="range" ordered="false" upperBound="-1" eType="/1/ODM/Class"/> | ||
137 | <eStructuralFeatures xsi:type="ecore:EReference" name="inverseOf" ordered="false" upperBound="-1" eType="/1/ODM/ObjectProperty"/> | ||
138 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="transitive" ordered="false" unique="false" lowerBound="1" eType="/0/Boolean"/> | ||
139 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="symmetric" ordered="false" unique="false" lowerBound="1" eType="/0/Boolean"/> | ||
140 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="inverseFunctional" ordered="false" unique="false" lowerBound="1" eType="/0/Boolean"/> | ||
141 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="complex" ordered="false" unique="false" lowerBound="1" eType="/0/Boolean"/> | ||
142 | </eClassifiers> | ||
143 | <eClassifiers xsi:type="ecore:EClass" name="Individual" eSuperTypes="/1/Constant /1/ODM/Annotation /1/ODM/Class"> | ||
144 | <eStructuralFeatures xsi:type="ecore:EReference" name="sameAs" ordered="false" upperBound="-1" eType="/1/ODM/Individual"/> | ||
145 | <eStructuralFeatures xsi:type="ecore:EReference" name="differentFrom" ordered="false" upperBound="-1" eType="/1/ODM/Individual"/> | ||
146 | <eStructuralFeatures xsi:type="ecore:EReference" name="type" ordered="false" lowerBound="1" eType="/1/ODM/Class"/> | ||
147 | </eClassifiers> | ||
148 | <eClassifiers xsi:type="ecore:EClass" name="Class" eSuperTypes="/1/PredicateSymbol /1/ODM/OntologyElement"> | ||
149 | <eStructuralFeatures xsi:type="ecore:EReference" name="disjointWith" ordered="false" upperBound="-1" eType="/1/ODM/Class"/> | ||
150 | <eStructuralFeatures xsi:type="ecore:EReference" name="subClassOf" ordered="false" upperBound="-1" eType="/1/ODM/Class"/> | ||
151 | <eStructuralFeatures xsi:type="ecore:EReference" name="equivalentClass" ordered="false" upperBound="-1" eType="/1/ODM/Class"/> | ||
152 | </eClassifiers> | ||
153 | <eClassifiers xsi:type="ecore:EClass" name="Property" abstract="true" eSuperTypes="/1/PredicateSymbol /1/ODM/OntologyElement"> | ||
154 | <eStructuralFeatures xsi:type="ecore:EReference" name="domain" ordered="false" upperBound="-1" eType="/1/ODM/Class"/> | ||
155 | <eStructuralFeatures xsi:type="ecore:EReference" name="equivalentProperty" ordered="false" upperBound="-1" eType="/1/ODM/Property"/> | ||
156 | <eStructuralFeatures xsi:type="ecore:EReference" name="subPropertyOf" ordered="false" upperBound="-1" eType="/1/ODM/Property"/> | ||
157 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deprecated" ordered="false" unique="false" lowerBound="1" eType="/0/Boolean"/> | ||
158 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="functional" ordered="false" unique="false" lowerBound="1" eType="/0/Boolean"/> | ||
159 | </eClassifiers> | ||
160 | <eClassifiers xsi:type="ecore:EClass" name="AnnotationProperty" eSuperTypes="/1/ODM/OntologyElement"/> | ||
161 | <eClassifiers xsi:type="ecore:EClass" name="OntologyProperty" abstract="true" eSuperTypes="/1/ODM/OntologyElement"/> | ||
162 | <eClassifiers xsi:type="ecore:EClass" name="OntologyElement" eSuperTypes="/1/ODM/NamedElement /1/ODM/AnnotatableElement"/> | ||
163 | <eClassifiers xsi:type="ecore:EClass" name="Ontology" eSuperTypes="/1/ODM/AnnotatableElement"> | ||
164 | <eStructuralFeatures xsi:type="ecore:EReference" name="imports" ordered="false" upperBound="-1" eType="/1/ODM/Ontology"/> | ||
165 | <eStructuralFeatures xsi:type="ecore:EReference" name="priorVersion" ordered="false" eType="/1/ODM/Ontology"/> | ||
166 | <eStructuralFeatures xsi:type="ecore:EReference" name="elements" ordered="false" upperBound="-1" eType="/1/ODM/NamedElement" containment="true"/> | ||
167 | <eStructuralFeatures xsi:type="ecore:EReference" name="incompatibleWith" ordered="false" upperBound="-1" eType="/1/ODM/Ontology"/> | ||
168 | <eStructuralFeatures xsi:type="ecore:EReference" name="reference" ordered="false" upperBound="-1" eType="/1/ODM/OntologyPropertyValue"/> | ||
169 | </eClassifiers> | ||
170 | <eClassifiers xsi:type="ecore:EClass" name="AnnotatableElement" abstract="true"/> | ||
171 | <eClassifiers xsi:type="ecore:EClass" name="NamedElement"> | ||
172 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="uri" ordered="false" unique="false" lowerBound="1" eType="/0/String"/> | ||
173 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" unique="false" lowerBound="1" eType="/0/String"/> | ||
174 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="qualifiedName" ordered="false" unique="false" lowerBound="1" eType="/0/String"/> | ||
175 | </eClassifiers> | ||
176 | </eSubpackages> | ||
177 | </ecore:EPackage> | ||
178 | </xmi:XMI> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/.DS_Store b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/.DS_Store new file mode 100644 index 00000000..85929cb0 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/.DS_Store | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/mpc_rep/2samplemodel41.githubmodel b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/mpc_rep/2samplemodel41.githubmodel new file mode 100644 index 00000000..f4a3233c --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/mpc_rep/2samplemodel41.githubmodel | |||
@@ -0,0 +1,105 @@ | |||
1 | <?xml version="1.0" encoding="ASCII"?> | ||
2 | <github:Project xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:github="sure.ghtorrent.github" creatd_at="2013-05-14T03:07:04.000-0400" updated_at="2016-11-02T06:05:30.000-0400" url="https://github.com/vert-x/mod-rxvertx"> | ||
3 | <issue created_at="2015-08-14T02:12:18.000-0400" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/42"/> | ||
4 | <issue created_at="2015-06-22T09:29:32.000-0400" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/41"/> | ||
5 | <issue created_at="2015-06-16T15:27:39.000-0400" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/40"/> | ||
6 | <issue created_at="2015-06-16T15:19:14.000-0400" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/39"/> | ||
7 | <issue created_at="2015-04-08T09:17:37.000-0400" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/36"/> | ||
8 | <issue created_at="2015-03-02T15:41:55.000-0500" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/34"/> | ||
9 | <issue created_at="2014-11-21T17:36:28.000-0500" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/29"/> | ||
10 | <issue created_at="2014-11-19T09:48:31.000-0500" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/26"/> | ||
11 | <issue created_at="2014-06-06T13:52:26.000-0400" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/18"/> | ||
12 | <issue created_at="2013-12-07T04:02:36.000-0500" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/10"/> | ||
13 | <issue created_at="2016-01-24T04:58:48.000-0500" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/43"> | ||
14 | <pullrequest url="https://api.github.com/repos/vert-x/mod-rxvertx/pulls/43"/> | ||
15 | </issue> | ||
16 | <issue created_at="2015-06-16T15:27:39.000-0400" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/40"> | ||
17 | <pullrequest url="https://api.github.com/repos/vert-x/mod-rxvertx/pulls/40"/> | ||
18 | </issue> | ||
19 | <issue created_at="2015-03-06T11:23:22.000-0500" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/35"> | ||
20 | <pullrequest commit="//@commits.42" url="https://api.github.com/repos/vert-x/mod-rxvertx/pulls/35"/> | ||
21 | </issue> | ||
22 | <issue created_at="2014-11-21T17:40:46.000-0500" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/30"> | ||
23 | <pullrequest url="https://api.github.com/repos/vert-x/mod-rxvertx/pulls/30"/> | ||
24 | </issue> | ||
25 | <issue created_at="2014-08-28T07:38:52.000-0400" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/21"> | ||
26 | <pullrequest url="https://api.github.com/repos/vert-x/mod-rxvertx/pulls/21"/> | ||
27 | </issue> | ||
28 | <issue created_at="2014-06-19T15:01:09.000-0400" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/19"> | ||
29 | <pullrequest commit="//@commits.46" url="https://api.github.com/repos/vert-x/mod-rxvertx/pulls/19"/> | ||
30 | </issue> | ||
31 | <issue created_at="2014-05-11T00:43:58.000-0400" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/17"> | ||
32 | <pullrequest commit="//@commits.47" url="https://api.github.com/repos/vert-x/mod-rxvertx/pulls/17"/> | ||
33 | </issue> | ||
34 | <issue created_at="2014-05-09T05:21:01.000-0400" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/15"> | ||
35 | <pullrequest commit="//@commits.51" url="https://api.github.com/repos/vert-x/mod-rxvertx/pulls/15"/> | ||
36 | </issue> | ||
37 | <issue created_at="2013-07-07T20:58:26.000-0400" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/3"> | ||
38 | <pullrequest commit="//@commits.20" url="https://api.github.com/repos/vert-x/mod-rxvertx/pulls/3"/> | ||
39 | </issue> | ||
40 | <issue created_at="2013-06-26T11:44:08.000-0400" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/2"> | ||
41 | <pullrequest url="https://api.github.com/repos/vert-x/mod-rxvertx/pulls/2"/> | ||
42 | </issue> | ||
43 | <issue created_at="2013-06-16T00:13:08.000-0400" url="https://api.github.com/repos/vert-x/mod-rxvertx/issues/1"> | ||
44 | <pullrequest commit="//@commits.24" url="https://api.github.com/repos/vert-x/mod-rxvertx/pulls/1"/> | ||
45 | </issue> | ||
46 | <projectMembers url="https://api.github.com/users/petermd" name="petermd"/> | ||
47 | <projectMembers url="https://api.github.com/users/purplefox" name="purplefox"/> | ||
48 | <projectMembers url="https://api.github.com/users/sharathp" name="sharathp"/> | ||
49 | <projectMembers url="https://api.github.com/users/squaredfinancialit" name="squaredfinancialit"/> | ||
50 | <projectMembers url="https://api.github.com/users/ddossot" name="ddossot"/> | ||
51 | <projectMembers url="https://api.github.com/users/tavisrudd" name="tavisrudd"/> | ||
52 | <projectMembers url="https://api.github.com/users/vihangd" name="vihangd"/> | ||
53 | <commits committer="//@projectMembers.0" parents="//@commits.1" created_at="2013-12-02T05:47:09.000-0500" sha="ed99912edfd9f6f9e908a5325d2ab07d6e65e869" parents_sha="9a90507caa12d77bb7fc97514c9016e8c9d41676"/> | ||
54 | <commits committer="//@projectMembers.0" parents="//@commits.2 //@commits.5" created_at="2013-12-01T20:08:01.000-0500" sha="9a90507caa12d77bb7fc97514c9016e8c9d41676" parents_sha="dddb6bbe532afaf0983b9b2affea87d700c788fc ad41e6a602de2e145d1ba2b0da9bd046fb3e2467"/> | ||
55 | <commits committer="//@projectMembers.0" parents="//@commits.3" created_at="2013-12-01T20:06:25.000-0500" sha="dddb6bbe532afaf0983b9b2affea87d700c788fc" parents_sha="e704894753ef8f06f144071c493ae5ee0f077f33"/> | ||
56 | <commits committer="//@projectMembers.0" parents="//@commits.4" created_at="2013-12-01T20:05:38.000-0500" sha="e704894753ef8f06f144071c493ae5ee0f077f33" parents_sha="f6b983b4b88731f38fe1080a4235d2e6091107b0"/> | ||
57 | <commits committer="//@projectMembers.0" parents="//@commits.6" created_at="2013-12-01T20:05:12.000-0500" sha="f6b983b4b88731f38fe1080a4235d2e6091107b0" parents_sha="9298780fca8e25a33f49867f3025890fa7c7d7f2"/> | ||
58 | <commits committer="//@projectMembers.1" parents="//@commits.6" created_at="2013-12-01T05:58:35.000-0500" sha="ad41e6a602de2e145d1ba2b0da9bd046fb3e2467" parents_sha="9298780fca8e25a33f49867f3025890fa7c7d7f2"/> | ||
59 | <commits committer="//@projectMembers.0" parents="//@commits.7" created_at="2013-11-27T05:39:40.000-0500" sha="9298780fca8e25a33f49867f3025890fa7c7d7f2" parents_sha="6cd3659869c4b786e55640d2d137b12d18fb49a7"/> | ||
60 | <commits committer="//@projectMembers.0" parents="//@commits.8" created_at="2013-11-27T05:28:59.000-0500" sha="6cd3659869c4b786e55640d2d137b12d18fb49a7" parents_sha="937af378cf31503b77d0ce6ab011e5d022d57265"/> | ||
61 | <commits committer="//@projectMembers.0" parents="//@commits.9" created_at="2013-11-27T05:26:59.000-0500" sha="937af378cf31503b77d0ce6ab011e5d022d57265" parents_sha="f777d37b7fa1091c278848166dd7635728ac2a2f"/> | ||
62 | <commits committer="//@projectMembers.0" parents="//@commits.10" created_at="2013-11-19T08:26:58.000-0500" sha="f777d37b7fa1091c278848166dd7635728ac2a2f" parents_sha="bd3e62a14633df39d7124577126f5087b989db73"/> | ||
63 | <commits committer="//@projectMembers.0" parents="//@commits.11" created_at="2013-11-19T07:59:40.000-0500" sha="bd3e62a14633df39d7124577126f5087b989db73" parents_sha="b61d0a341119990de69b9fe4a8bfd468c6bddfef"/> | ||
64 | <commits committer="//@projectMembers.0" parents="//@commits.12" created_at="2013-11-19T07:55:41.000-0500" sha="b61d0a341119990de69b9fe4a8bfd468c6bddfef" parents_sha="3c98cc0a6e45fd558b1f808c76613c3eb2b0b936"/> | ||
65 | <commits committer="//@projectMembers.0" parents="//@commits.13" created_at="2013-11-19T07:54:46.000-0500" sha="3c98cc0a6e45fd558b1f808c76613c3eb2b0b936" parents_sha="049801ae6cedb220c2dfdf0fdaf4b6ba9339e1ad"/> | ||
66 | <commits committer="//@projectMembers.0" parents="//@commits.14" created_at="2013-11-14T19:17:38.000-0500" sha="049801ae6cedb220c2dfdf0fdaf4b6ba9339e1ad" parents_sha="80b5503fa7d92d6fc9d75ec9e0637e144b4b79e2"/> | ||
67 | <commits committer="//@projectMembers.0" parents="//@commits.15" created_at="2013-11-14T18:18:38.000-0500" sha="80b5503fa7d92d6fc9d75ec9e0637e144b4b79e2" parents_sha="063311036a271c4f51aab1e16cb01a273af40d59"/> | ||
68 | <commits committer="//@projectMembers.0" parents="//@commits.16" created_at="2013-11-14T18:18:12.000-0500" sha="063311036a271c4f51aab1e16cb01a273af40d59" parents_sha="d6a755666b19fb84f3ed3322abf4799e4e103401"/> | ||
69 | <commits committer="//@projectMembers.0" parents="//@commits.17" created_at="2013-11-07T22:29:23.000-0500" sha="d6a755666b19fb84f3ed3322abf4799e4e103401" parents_sha="1c07c332a76eb90b653c5a09e558fd0a1ded853a"/> | ||
70 | <commits committer="//@projectMembers.0" parents="//@commits.18" created_at="2013-08-03T19:29:42.000-0400" sha="1c07c332a76eb90b653c5a09e558fd0a1ded853a" parents_sha="2335b065397316f33f731f32904561f0565df822"/> | ||
71 | <commits committer="//@projectMembers.0" parents="//@commits.19 //@commits.20" created_at="2013-07-18T10:43:04.000-0400" sha="2335b065397316f33f731f32904561f0565df822" parents_sha="dcc26065160056d933cdf76281cdad6b3b287b0a 2bf992bcc00fec604758228eb73303a33184b188"/> | ||
72 | <commits committer="//@projectMembers.1" parents="//@commits.21" created_at="2013-07-09T08:56:55.000-0400" sha="dcc26065160056d933cdf76281cdad6b3b287b0a" parents_sha="846c3196db3a62e342ec84ac67edb172d37a8527"/> | ||
73 | <commits committer="//@projectMembers.2" parents="//@commits.24" pullrequest="//@issue.18/@pullrequest" created_at="2013-07-07T20:53:18.000-0400" sha="2bf992bcc00fec604758228eb73303a33184b188" parents_sha="5b8c63daa5c13c42dc8d46c0df099289abc8f3a3"/> | ||
74 | <commits committer="//@projectMembers.1" parents="//@commits.22" created_at="2013-06-28T07:59:05.000-0400" sha="846c3196db3a62e342ec84ac67edb172d37a8527" parents_sha="dd7f5a22e9e653d44906f17a8d2c8fe48213cc12"/> | ||
75 | <commits committer="//@projectMembers.1" parents="//@commits.23" created_at="2013-06-28T07:42:26.000-0400" sha="dd7f5a22e9e653d44906f17a8d2c8fe48213cc12" parents_sha="19558d07c7961aaf357828601d0efef0cf4e308e"/> | ||
76 | <commits committer="//@projectMembers.1" parents="//@commits.26" created_at="2013-06-28T07:34:41.000-0400" sha="19558d07c7961aaf357828601d0efef0cf4e308e" parents_sha="c7b0726d521b12a314d59d8a3fa6fa48415793d1"/> | ||
77 | <commits committer="//@projectMembers.2" parents="//@commits.25" pullrequest="//@issue.20/@pullrequest" created_at="2013-06-26T11:32:27.000-0400" sha="5b8c63daa5c13c42dc8d46c0df099289abc8f3a3" parents_sha="8668d48ce79bce03e04acc58dbff9bf578247f52"/> | ||
78 | <commits committer="//@projectMembers.2" parents="//@commits.26" created_at="2013-06-16T00:12:20.000-0400" sha="8668d48ce79bce03e04acc58dbff9bf578247f52" parents_sha="c7b0726d521b12a314d59d8a3fa6fa48415793d1"/> | ||
79 | <commits committer="//@projectMembers.1" parents="//@commits.27" created_at="2013-06-15T04:30:10.000-0400" sha="c7b0726d521b12a314d59d8a3fa6fa48415793d1" parents_sha="f9ddb55396f9ff2b14a8f8e66f15e31dd45ba07a"/> | ||
80 | <commits committer="//@projectMembers.1" parents="//@commits.28" created_at="2013-06-14T11:54:17.000-0400" sha="f9ddb55396f9ff2b14a8f8e66f15e31dd45ba07a" parents_sha="30413422c03344dc3683c0cfdefda2ede0891dbc"/> | ||
81 | <commits committer="//@projectMembers.0" parents="//@commits.29" created_at="2013-05-21T06:27:09.000-0400" sha="30413422c03344dc3683c0cfdefda2ede0891dbc" parents_sha="19f65f97a3cbdb466548e8c39310ed565d51991d"/> | ||
82 | <commits committer="//@projectMembers.0" parents="//@commits.30" created_at="2013-05-21T06:21:13.000-0400" sha="19f65f97a3cbdb466548e8c39310ed565d51991d" parents_sha="bf725977ceb0530cb439822cc3ec507595d0673b"/> | ||
83 | <commits committer="//@projectMembers.0" parents="//@commits.31" created_at="2013-05-21T06:19:38.000-0400" sha="bf725977ceb0530cb439822cc3ec507595d0673b" parents_sha="7da36f0b8423d24ad0c0fd82bb9a296bcd2731d4"/> | ||
84 | <commits committer="//@projectMembers.1" parents="//@commits.32" created_at="2013-05-21T05:18:23.000-0400" sha="7da36f0b8423d24ad0c0fd82bb9a296bcd2731d4" parents_sha="9d9ec8a1a0de65698deed0b7ce1e36e74960e410"/> | ||
85 | <commits committer="//@projectMembers.1" parents="//@commits.33" created_at="2013-05-21T05:16:17.000-0400" sha="9d9ec8a1a0de65698deed0b7ce1e36e74960e410" parents_sha="167cd263f39437ac197d0d75336b0e24cb590efa"/> | ||
86 | <commits committer="//@projectMembers.1" parents="//@commits.34" created_at="2013-05-20T09:24:04.000-0400" sha="167cd263f39437ac197d0d75336b0e24cb590efa" parents_sha="0ccd822e51126740fad7c7f7191127b99de663b6"/> | ||
87 | <commits committer="//@projectMembers.1" parents="//@commits.35" created_at="2013-05-20T06:21:45.000-0400" sha="0ccd822e51126740fad7c7f7191127b99de663b6" parents_sha="19036c7a96b1f71bc697a2f1a6def218267a0242"/> | ||
88 | <commits committer="//@projectMembers.1" parents="//@commits.36" created_at="2013-05-17T07:32:23.000-0400" sha="19036c7a96b1f71bc697a2f1a6def218267a0242" parents_sha="1f22c21855b7b161521f242ff1115ae8d8ab9313"/> | ||
89 | <commits committer="//@projectMembers.1" parents="//@commits.37" created_at="2013-05-16T16:30:51.000-0400" sha="1f22c21855b7b161521f242ff1115ae8d8ab9313" parents_sha="dd0f1a68e52e54b3ee10f3f429278369dd0975e6"/> | ||
90 | <commits committer="//@projectMembers.1" parents="//@commits.38" created_at="2013-05-15T05:04:15.000-0400" sha="dd0f1a68e52e54b3ee10f3f429278369dd0975e6" parents_sha="c9f01eaff5abcdce46788e9ed105829b2a063b40"/> | ||
91 | <commits committer="//@projectMembers.1" parents="//@commits.39" created_at="2013-05-14T13:07:02.000-0400" sha="c9f01eaff5abcdce46788e9ed105829b2a063b40" parents_sha="52f479adb604f6e5a373260a3acbe374afc52f25"/> | ||
92 | <commits committer="//@projectMembers.1" parents="//@commits.40" created_at="2013-05-14T08:48:12.000-0400" sha="52f479adb604f6e5a373260a3acbe374afc52f25" parents_sha="5d9e6dc68ff8f7de070bdfa3f897b1554caf2166"/> | ||
93 | <commits committer="//@projectMembers.1" created_at="2013-05-14T08:26:22.000-0400" sha="5d9e6dc68ff8f7de070bdfa3f897b1554caf2166" parents_sha="46109bd2797b2e80758056728ab371ec4339b5b5 0873fda3c6bd19363319a1f5d248ad60d24316e6"/> | ||
94 | <commits committer="//@projectMembers.3" created_at="2015-03-06T11:19:17.000-0500" sha="d22ad4be7c6bdab5d442155fa5fe4d79a0a60856" parents_sha="0de3f78d04a04612ab0f128eff9b6657ccf6d1b1"/> | ||
95 | <commits committer="//@projectMembers.3" pullrequest="//@issue.12/@pullrequest" created_at="2015-03-18T16:21:13.000-0400" sha="33a9c426bd04eba72cc3be3921c583beff2261b9" parents_sha="d22ad4be7c6bdab5d442155fa5fe4d79a0a60856"/> | ||
96 | <commits committer="//@projectMembers.4" created_at="2014-06-19T14:54:24.000-0400" sha="d34d78848522df8a43509ec206f18e8300cfa9ee" parents_sha="80562e9d30ecce390bd58a2077841a708bd2095f"/> | ||
97 | <commits committer="//@projectMembers.4" created_at="2014-06-19T14:56:28.000-0400" sha="a6ebd5a7acfcea32f09ff6dee5b020cefa11ad22" parents_sha="d34d78848522df8a43509ec206f18e8300cfa9ee"/> | ||
98 | <commits committer="//@projectMembers.4" created_at="2014-06-19T14:56:31.000-0400" sha="b3eed2ef580ee66c47f41e10b4da0257115ae684" parents_sha="a6ebd5a7acfcea32f09ff6dee5b020cefa11ad22"/> | ||
99 | <commits committer="//@projectMembers.4" pullrequest="//@issue.15/@pullrequest" created_at="2014-06-19T14:56:31.000-0400" sha="781c5e3d674b2e987b7affb3d6f3c24a3c54675a" parents_sha="b3eed2ef580ee66c47f41e10b4da0257115ae684"/> | ||
100 | <commits committer="//@projectMembers.5" pullrequest="//@issue.16/@pullrequest" created_at="2014-05-11T00:43:45.000-0400" sha="80562e9d30ecce390bd58a2077841a708bd2095f" parents_sha="8311666daccb78568071a8d835c8d5798f0808de"/> | ||
101 | <commits committer="//@projectMembers.0" created_at="2014-03-15T20:56:49.000-0400" sha="01a536a72c1b062da11b9ebf0610b5a628008163" parents_sha="ed99912edfd9f6f9e908a5325d2ab07d6e65e869"/> | ||
102 | <commits committer="//@projectMembers.0" created_at="2014-03-15T21:00:03.000-0400" sha="210c0ec94da299867167c1b8eaf58bb8f2342140" parents_sha="01a536a72c1b062da11b9ebf0610b5a628008163"/> | ||
103 | <commits committer="//@projectMembers.0" created_at="2014-03-18T11:52:38.000-0400" sha="8b511989e21d5fdd6be893c7320719d8a99c4834" parents_sha="210c0ec94da299867167c1b8eaf58bb8f2342140"/> | ||
104 | <commits committer="//@projectMembers.6" pullrequest="//@issue.17/@pullrequest" created_at="2014-05-09T05:07:45.000-0400" sha="e4131b497ffabbb03d71ac577d75add5c00caa41" parents_sha="8b511989e21d5fdd6be893c7320719d8a99c4834"/> | ||
105 | </github:Project> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/na_rep/.DS_Store b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/na_rep/.DS_Store new file mode 100644 index 00000000..5008ddfc --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/na_rep/.DS_Store | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/na_rep/2samplemodel65.githubmodel b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/na_rep/2samplemodel65.githubmodel new file mode 100644 index 00000000..c78f0175 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/na_rep/2samplemodel65.githubmodel | |||
@@ -0,0 +1,38 @@ | |||
1 | <?xml version="1.0" encoding="ASCII"?> | ||
2 | <github:Project xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:github="sure.ghtorrent.github" creatd_at="2012-01-15T22:30:37.000-0500" updated_at="2013-05-10T16:37:30.000-0400" url="https://github.com/i8ramin/fb-menu"> | ||
3 | <issue created_at="2013-08-05T20:37:26.000-0400" url="https://api.github.com/repos/i8ramin/fb-menu/issues/9"/> | ||
4 | <issue created_at="2012-10-24T03:46:19.000-0400" url="https://api.github.com/repos/i8ramin/fb-menu/issues/5"> | ||
5 | <pullrequest url="https://api.github.com/repos/i8ramin/fb-menu/pulls/5"/> | ||
6 | <issueevent user="//@projectMembers.0" action="CLOSED" created_at="2012-10-24T10:12:29.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
7 | </issue> | ||
8 | <issue created_at="2012-10-23T14:15:11.000-0400" url="https://api.github.com/repos/i8ramin/fb-menu/issues/4"> | ||
9 | <pullrequest url="https://api.github.com/repos/i8ramin/fb-menu/pulls/4"/> | ||
10 | <issueevent user="//@projectMembers.0" action="CLOSED" created_at="2012-10-23T15:02:06.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
11 | <issueevent user="//@projectMembers.0" action="MERGED" created_at="2012-10-23T15:02:06.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
12 | <issueevent user="//@projectMembers.0" action="REFERENCED" created_at="2012-10-23T15:02:06.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
13 | </issue> | ||
14 | <issue created_at="2012-10-19T20:17:40.000-0400" url="https://api.github.com/repos/i8ramin/fb-menu/issues/3"> | ||
15 | <pullrequest url="https://api.github.com/repos/i8ramin/fb-menu/pulls/3"/> | ||
16 | <issueevent user="//@projectMembers.0" action="CLOSED" created_at="2012-10-23T13:55:51.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
17 | <issueevent user="//@projectMembers.0" action="MERGED" created_at="2012-10-23T13:55:51.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
18 | <issueevent user="//@projectMembers.0" action="REFERENCED" created_at="2012-10-23T13:55:51.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
19 | </issue> | ||
20 | <issue created_at="2012-10-08T18:07:12.000-0400" url="https://api.github.com/repos/i8ramin/fb-menu/issues/2"> | ||
21 | <pullrequest commit="//@commits.9" url="https://api.github.com/repos/i8ramin/fb-menu/pulls/2"/> | ||
22 | <issueevent user="//@projectMembers.0" action="CLOSED" created_at="2012-10-09T16:31:04.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
23 | <issueevent user="//@projectMembers.0" action="MERGED" created_at="2012-10-09T16:31:04.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
24 | <issueevent user="//@projectMembers.0" action="REFERENCED" created_at="2012-10-09T16:31:04.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
25 | </issue> | ||
26 | <projectMembers url="https://api.github.com/users/i8ramin" name="i8ramin"/> | ||
27 | <projectMembers url="https://api.github.com/users/jpbellona" name="jpbellona"/> | ||
28 | <commits committer="//@projectMembers.0" parents="//@commits.1" created_at="2012-04-22T13:06:09.000-0400" sha="edac411699e093ae17bb8e252801d169cf63386b" parents_sha="0c5479209926ba6e76531191c5cb0c49f124c573"/> | ||
29 | <commits committer="//@projectMembers.0" parents="//@commits.2" created_at="2012-01-16T00:05:29.000-0500" sha="0c5479209926ba6e76531191c5cb0c49f124c573" parents_sha="501c513efa4c4b58229004c9804320af218bc9c6"/> | ||
30 | <commits committer="//@projectMembers.0" parents="//@commits.3" created_at="2012-01-15T23:47:46.000-0500" sha="501c513efa4c4b58229004c9804320af218bc9c6" parents_sha="bc83b9b4e0bcf2e1d4fcc7f9129bba2976c05d66"/> | ||
31 | <commits committer="//@projectMembers.0" parents="//@commits.4" created_at="2012-01-15T23:26:24.000-0500" sha="bc83b9b4e0bcf2e1d4fcc7f9129bba2976c05d66" parents_sha="294bc004162f404b49ea3e336b1e17c16354c85f"/> | ||
32 | <commits committer="//@projectMembers.0" parents="//@commits.5" created_at="2012-01-15T23:17:32.000-0500" sha="294bc004162f404b49ea3e336b1e17c16354c85f" parents_sha="8a3b5f6c8e052638e97e42fd2a1e49141fe8b862"/> | ||
33 | <commits committer="//@projectMembers.0" parents="//@commits.6" created_at="2012-01-15T23:08:00.000-0500" sha="8a3b5f6c8e052638e97e42fd2a1e49141fe8b862" parents_sha="a84b34c420016181971a2512c38afcc5215c2b5a"/> | ||
34 | <commits committer="//@projectMembers.0" parents="//@commits.7" created_at="2012-01-15T23:00:14.000-0500" sha="a84b34c420016181971a2512c38afcc5215c2b5a" parents_sha="32a6f8d140ac6db5ee37a89082804ef57cbb12bb"/> | ||
35 | <commits committer="//@projectMembers.0" parents="//@commits.8" created_at="2012-01-15T22:48:36.000-0500" sha="32a6f8d140ac6db5ee37a89082804ef57cbb12bb" parents_sha="74aefd366c55ae8de122e20794a00b8c49b584cb"/> | ||
36 | <commits committer="//@projectMembers.0" created_at="2012-01-15T22:31:19.000-0500" sha="74aefd366c55ae8de122e20794a00b8c49b584cb" parents_sha=""/> | ||
37 | <commits committer="//@projectMembers.1" pullrequest="//@issue.4/@pullrequest" created_at="2012-10-08T18:05:07.000-0400" sha="dfd5c4d9818c405cc262870515c6e5d8f71ba4a9" parents_sha="edac411699e093ae17bb8e252801d169cf63386b"/> | ||
38 | </github:Project> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/out_d_rep/.DS_Store b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/out_d_rep/.DS_Store new file mode 100644 index 00000000..5008ddfc --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/out_d_rep/.DS_Store | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/out_d_rep/samplemodel62.githubmodel b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/out_d_rep/samplemodel62.githubmodel new file mode 100644 index 00000000..c78f0175 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Github/out_d_rep/samplemodel62.githubmodel | |||
@@ -0,0 +1,38 @@ | |||
1 | <?xml version="1.0" encoding="ASCII"?> | ||
2 | <github:Project xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:github="sure.ghtorrent.github" creatd_at="2012-01-15T22:30:37.000-0500" updated_at="2013-05-10T16:37:30.000-0400" url="https://github.com/i8ramin/fb-menu"> | ||
3 | <issue created_at="2013-08-05T20:37:26.000-0400" url="https://api.github.com/repos/i8ramin/fb-menu/issues/9"/> | ||
4 | <issue created_at="2012-10-24T03:46:19.000-0400" url="https://api.github.com/repos/i8ramin/fb-menu/issues/5"> | ||
5 | <pullrequest url="https://api.github.com/repos/i8ramin/fb-menu/pulls/5"/> | ||
6 | <issueevent user="//@projectMembers.0" action="CLOSED" created_at="2012-10-24T10:12:29.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
7 | </issue> | ||
8 | <issue created_at="2012-10-23T14:15:11.000-0400" url="https://api.github.com/repos/i8ramin/fb-menu/issues/4"> | ||
9 | <pullrequest url="https://api.github.com/repos/i8ramin/fb-menu/pulls/4"/> | ||
10 | <issueevent user="//@projectMembers.0" action="CLOSED" created_at="2012-10-23T15:02:06.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
11 | <issueevent user="//@projectMembers.0" action="MERGED" created_at="2012-10-23T15:02:06.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
12 | <issueevent user="//@projectMembers.0" action="REFERENCED" created_at="2012-10-23T15:02:06.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
13 | </issue> | ||
14 | <issue created_at="2012-10-19T20:17:40.000-0400" url="https://api.github.com/repos/i8ramin/fb-menu/issues/3"> | ||
15 | <pullrequest url="https://api.github.com/repos/i8ramin/fb-menu/pulls/3"/> | ||
16 | <issueevent user="//@projectMembers.0" action="CLOSED" created_at="2012-10-23T13:55:51.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
17 | <issueevent user="//@projectMembers.0" action="MERGED" created_at="2012-10-23T13:55:51.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
18 | <issueevent user="//@projectMembers.0" action="REFERENCED" created_at="2012-10-23T13:55:51.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
19 | </issue> | ||
20 | <issue created_at="2012-10-08T18:07:12.000-0400" url="https://api.github.com/repos/i8ramin/fb-menu/issues/2"> | ||
21 | <pullrequest commit="//@commits.9" url="https://api.github.com/repos/i8ramin/fb-menu/pulls/2"/> | ||
22 | <issueevent user="//@projectMembers.0" action="CLOSED" created_at="2012-10-09T16:31:04.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
23 | <issueevent user="//@projectMembers.0" action="MERGED" created_at="2012-10-09T16:31:04.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
24 | <issueevent user="//@projectMembers.0" action="REFERENCED" created_at="2012-10-09T16:31:04.000-0400" actor_url="https://api.github.com/users/i8ramin"/> | ||
25 | </issue> | ||
26 | <projectMembers url="https://api.github.com/users/i8ramin" name="i8ramin"/> | ||
27 | <projectMembers url="https://api.github.com/users/jpbellona" name="jpbellona"/> | ||
28 | <commits committer="//@projectMembers.0" parents="//@commits.1" created_at="2012-04-22T13:06:09.000-0400" sha="edac411699e093ae17bb8e252801d169cf63386b" parents_sha="0c5479209926ba6e76531191c5cb0c49f124c573"/> | ||
29 | <commits committer="//@projectMembers.0" parents="//@commits.2" created_at="2012-01-16T00:05:29.000-0500" sha="0c5479209926ba6e76531191c5cb0c49f124c573" parents_sha="501c513efa4c4b58229004c9804320af218bc9c6"/> | ||
30 | <commits committer="//@projectMembers.0" parents="//@commits.3" created_at="2012-01-15T23:47:46.000-0500" sha="501c513efa4c4b58229004c9804320af218bc9c6" parents_sha="bc83b9b4e0bcf2e1d4fcc7f9129bba2976c05d66"/> | ||
31 | <commits committer="//@projectMembers.0" parents="//@commits.4" created_at="2012-01-15T23:26:24.000-0500" sha="bc83b9b4e0bcf2e1d4fcc7f9129bba2976c05d66" parents_sha="294bc004162f404b49ea3e336b1e17c16354c85f"/> | ||
32 | <commits committer="//@projectMembers.0" parents="//@commits.5" created_at="2012-01-15T23:17:32.000-0500" sha="294bc004162f404b49ea3e336b1e17c16354c85f" parents_sha="8a3b5f6c8e052638e97e42fd2a1e49141fe8b862"/> | ||
33 | <commits committer="//@projectMembers.0" parents="//@commits.6" created_at="2012-01-15T23:08:00.000-0500" sha="8a3b5f6c8e052638e97e42fd2a1e49141fe8b862" parents_sha="a84b34c420016181971a2512c38afcc5215c2b5a"/> | ||
34 | <commits committer="//@projectMembers.0" parents="//@commits.7" created_at="2012-01-15T23:00:14.000-0500" sha="a84b34c420016181971a2512c38afcc5215c2b5a" parents_sha="32a6f8d140ac6db5ee37a89082804ef57cbb12bb"/> | ||
35 | <commits committer="//@projectMembers.0" parents="//@commits.8" created_at="2012-01-15T22:48:36.000-0500" sha="32a6f8d140ac6db5ee37a89082804ef57cbb12bb" parents_sha="74aefd366c55ae8de122e20794a00b8c49b584cb"/> | ||
36 | <commits committer="//@projectMembers.0" created_at="2012-01-15T22:31:19.000-0500" sha="74aefd366c55ae8de122e20794a00b8c49b584cb" parents_sha=""/> | ||
37 | <commits committer="//@projectMembers.1" pullrequest="//@issue.4/@pullrequest" created_at="2012-10-08T18:05:07.000-0400" sha="dfd5c4d9818c405cc262870515c6e5d8f71ba4a9" parents_sha="edac411699e093ae17bb8e252801d169cf63386b"/> | ||
38 | </github:Project> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/mpc_rep.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/mpc_rep.csv new file mode 100644 index 00000000..fc39ac54 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/mpc_rep.csv | |||
@@ -0,0 +1,9 @@ | |||
1 | Meta Mode,yakindumm | ||
2 | Number of Edge types,6 | ||
3 | Number Of Nodes,67 | ||
4 | OutDegreeValue,1,2,3,4,6,8,9 | ||
5 | OutDegreeCount,4,45,9,1,1,2,5 | ||
6 | NAValue,1,2,3,4,5,6 | ||
7 | NACount,1,3,4,42,15,2 | ||
8 | MPCValue,0.00000,0.21600,0.45000,0.76800,0.80000,0.89751,0.90000,0.91349,0.92410,0.93061,0.93728,0.96000,0.97500,1.00000 | ||
9 | MPCCount,1,2,1,1,3,1,42,2,2,7,1,2,1,1 | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/mpc_rep/R_2016324.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/mpc_rep/R_2016324.xmi new file mode 100644 index 00000000..493a1731 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/mpc_rep/R_2016324.xmi | |||
@@ -0,0 +1,128 @@ | |||
1 | <?xml version="1.0" encoding="ASCII"?> | ||
2 | <hu.bme.mit.inf.yakindumm:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hu.bme.mit.inf.yakindumm="hu.bme.mit.inf.yakindumm"> | ||
3 | <regions> | ||
4 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.1/@outgoingTransitions.0"> | ||
5 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/> | ||
6 | <regions> | ||
7 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.2"> | ||
8 | <regions> | ||
9 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
10 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
11 | </vertices> | ||
12 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.0"> | ||
13 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
14 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.2"/> | ||
15 | </vertices> | ||
16 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.1"> | ||
17 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
18 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
19 | </vertices> | ||
20 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.0"> | ||
21 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.2"/> | ||
22 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
23 | </vertices> | ||
24 | </regions> | ||
25 | </vertices> | ||
26 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.11/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.11/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.12/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.12/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.2"> | ||
27 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.12"/> | ||
28 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.11"/> | ||
29 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
30 | </vertices> | ||
31 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.13/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.13/@outgoingTransitions.1"> | ||
32 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.13"/> | ||
33 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.7"/> | ||
34 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
35 | </vertices> | ||
36 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.1"> | ||
37 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/> | ||
38 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.10"/> | ||
39 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.6"/> | ||
40 | </vertices> | ||
41 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.1"> | ||
42 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/> | ||
43 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/> | ||
44 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.9"/> | ||
45 | </vertices> | ||
46 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
47 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
48 | </vertices> | ||
49 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.2"> | ||
50 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
51 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
52 | </vertices> | ||
53 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.1"> | ||
54 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/> | ||
55 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/> | ||
56 | </vertices> | ||
57 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.0"> | ||
58 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/> | ||
59 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/> | ||
60 | </vertices> | ||
61 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.2"> | ||
62 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/> | ||
63 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/> | ||
64 | </vertices> | ||
65 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.1"> | ||
66 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
67 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
68 | </vertices> | ||
69 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.1"> | ||
70 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
71 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
72 | </vertices> | ||
73 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.0"> | ||
74 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
75 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
76 | </vertices> | ||
77 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.0"> | ||
78 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/> | ||
79 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/> | ||
80 | </vertices> | ||
81 | </regions> | ||
82 | </vertices> | ||
83 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
84 | <outgoingTransitions target="//@regions.0/@vertices.0"/> | ||
85 | </vertices> | ||
86 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State"> | ||
87 | <outgoingTransitions target="//@regions.0/@vertices.0"/> | ||
88 | <regions> | ||
89 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry" incomingTransitions="//@regions.0/@vertices.0/@outgoingTransitions.0"> | ||
90 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/> | ||
91 | </vertices> | ||
92 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.0"> | ||
93 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/> | ||
94 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/> | ||
95 | </vertices> | ||
96 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.9/@outgoingTransitions.1"> | ||
97 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.8"/> | ||
98 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.10"/> | ||
99 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.4"/> | ||
100 | </vertices> | ||
101 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.8/@outgoingTransitions.1"> | ||
102 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.7"/> | ||
103 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.9"/> | ||
104 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.10"/> | ||
105 | </vertices> | ||
106 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.2"> | ||
107 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/> | ||
108 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.5"/> | ||
109 | </vertices> | ||
110 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.1"/> | ||
111 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.1"/> | ||
112 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.0"> | ||
113 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/> | ||
114 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.6"/> | ||
115 | </vertices> | ||
116 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.0"> | ||
117 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/> | ||
118 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/> | ||
119 | </vertices> | ||
120 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.1"> | ||
121 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/> | ||
122 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/> | ||
123 | </vertices> | ||
124 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.2 //@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.1"/> | ||
125 | </regions> | ||
126 | </vertices> | ||
127 | </regions> | ||
128 | </hu.bme.mit.inf.yakindumm:Statechart> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/na_rep.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/na_rep.csv new file mode 100644 index 00000000..43d411e4 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/na_rep.csv | |||
@@ -0,0 +1,9 @@ | |||
1 | Meta Mode,yakindumm | ||
2 | Number of Edge types,6 | ||
3 | Number Of Nodes,98 | ||
4 | OutDegreeValue,1,2,3,4,5,6,10,15 | ||
5 | OutDegreeCount,7,61,17,2,3,2,5,1 | ||
6 | NAValue,1,2,3,4,5,6 | ||
7 | NACount,1,4,6,62,23,2 | ||
8 | MPCValue,0.00000,0.14062,0.19835,0.38400,0.45000,0.80000,0.86667,0.90000,0.90888,0.91429,0.93061,0.93223,0.94815,0.98400,1.00000 | ||
9 | MPCCount,1,1,1,1,1,6,1,61,2,4,14,2,1,1,1 | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/na_rep/R_2017419.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/na_rep/R_2017419.xmi new file mode 100644 index 00000000..369760bf --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/na_rep/R_2017419.xmi | |||
@@ -0,0 +1,138 @@ | |||
1 | <?xml version="1.0" encoding="ASCII"?> | ||
2 | <hu.bme.mit.inf.yakindumm:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hu.bme.mit.inf.yakindumm="hu.bme.mit.inf.yakindumm"> | ||
3 | <regions> | ||
4 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.5/@outgoingTransitions.0"> | ||
5 | <regions> | ||
6 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.2 //@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.2 //@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.2 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.3"> | ||
7 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
8 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
9 | </vertices> | ||
10 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.1"> | ||
11 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/> | ||
12 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/> | ||
13 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
14 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
15 | </vertices> | ||
16 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
17 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
18 | </vertices> | ||
19 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.3"> | ||
20 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
21 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
22 | </vertices> | ||
23 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.1"> | ||
24 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
25 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
26 | </vertices> | ||
27 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.0"> | ||
28 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.6"/> | ||
29 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.7"/> | ||
30 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
31 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/> | ||
32 | </vertices> | ||
33 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.0"> | ||
34 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/> | ||
35 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/> | ||
36 | </vertices> | ||
37 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.1"> | ||
38 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/> | ||
39 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/> | ||
40 | </vertices> | ||
41 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.3 //@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.1"> | ||
42 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.10"/> | ||
43 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.9"/> | ||
44 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
45 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
46 | </vertices> | ||
47 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.1"> | ||
48 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/> | ||
49 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/> | ||
50 | </vertices> | ||
51 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.0"> | ||
52 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/> | ||
53 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/> | ||
54 | </vertices> | ||
55 | </regions> | ||
56 | </vertices> | ||
57 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.4/@outgoingTransitions.1"> | ||
58 | <outgoingTransitions target="//@regions.0/@vertices.0"/> | ||
59 | <regions> | ||
60 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.7/@outgoingTransitions.0"> | ||
61 | <outgoingTransitions target="//@regions.0/@vertices.3"/> | ||
62 | </vertices> | ||
63 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.5/@outgoingTransitions.1"> | ||
64 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3"/> | ||
65 | <outgoingTransitions target="//@regions.0/@vertices.3"/> | ||
66 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.5"/> | ||
67 | </vertices> | ||
68 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.6/@outgoingTransitions.0"/> | ||
69 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.6/@outgoingTransitions.1"> | ||
70 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.7"/> | ||
71 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.6"/> | ||
72 | </vertices> | ||
73 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
74 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.1"/> | ||
75 | </vertices> | ||
76 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.2"> | ||
77 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2"/> | ||
78 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.1"/> | ||
79 | </vertices> | ||
80 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.3/@outgoingTransitions.1"> | ||
81 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2"/> | ||
82 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3"/> | ||
83 | </vertices> | ||
84 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.3/@outgoingTransitions.0"> | ||
85 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.0"/> | ||
86 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.0"/> | ||
87 | </vertices> | ||
88 | </regions> | ||
89 | </vertices> | ||
90 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@outgoingTransitions.1 //@regions.0/@vertices.3/@outgoingTransitions.0"> | ||
91 | <outgoingTransitions target="//@regions.0/@vertices.0"/> | ||
92 | <regions> | ||
93 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.1"> | ||
94 | <outgoingTransitions target="//@regions.0/@vertices.4"/> | ||
95 | </vertices> | ||
96 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.1"> | ||
97 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/> | ||
98 | <outgoingTransitions target="//@regions.0/@vertices.4"/> | ||
99 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.5"/> | ||
100 | </vertices> | ||
101 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.0"/> | ||
102 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.6/@outgoingTransitions.1"> | ||
103 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.6"/> | ||
104 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.7"/> | ||
105 | </vertices> | ||
106 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
107 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/> | ||
108 | </vertices> | ||
109 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.2"> | ||
110 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/> | ||
111 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/> | ||
112 | </vertices> | ||
113 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.0"> | ||
114 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/> | ||
115 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/> | ||
116 | </vertices> | ||
117 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.1"> | ||
118 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/> | ||
119 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/> | ||
120 | </vertices> | ||
121 | </regions> | ||
122 | </vertices> | ||
123 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.1"> | ||
124 | <outgoingTransitions target="//@regions.0/@vertices.2"/> | ||
125 | <outgoingTransitions target="//@regions.0/@vertices.2"/> | ||
126 | </vertices> | ||
127 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.1"> | ||
128 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
129 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
130 | </vertices> | ||
131 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@outgoingTransitions.0"> | ||
132 | <outgoingTransitions target="//@regions.0/@vertices.0"/> | ||
133 | </vertices> | ||
134 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
135 | <outgoingTransitions target="//@regions.0/@vertices.5"/> | ||
136 | </vertices> | ||
137 | </regions> | ||
138 | </hu.bme.mit.inf.yakindumm:Statechart> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/new/mpc_rep/R_2015194.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/new/mpc_rep/R_2015194.xmi new file mode 100644 index 00000000..25ff5ce0 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/new/mpc_rep/R_2015194.xmi | |||
@@ -0,0 +1,132 @@ | |||
1 | <?xml version="1.0" encoding="ASCII"?> | ||
2 | <hu.bme.mit.inf.yakindumm:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hu.bme.mit.inf.yakindumm="hu.bme.mit.inf.yakindumm"> | ||
3 | <regions> | ||
4 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.2/@outgoingTransitions.0"> | ||
5 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
6 | <regions> | ||
7 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.13/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.12/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.12/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.13/@outgoingTransitions.1"> | ||
8 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.12"/> | ||
9 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
10 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.13"/> | ||
11 | </vertices> | ||
12 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.14/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.15/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.15/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.14/@outgoingTransitions.1"> | ||
13 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.7"/> | ||
14 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.14"/> | ||
15 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.15"/> | ||
16 | </vertices> | ||
17 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.1"> | ||
18 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/> | ||
19 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
20 | </vertices> | ||
21 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.1"> | ||
22 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/> | ||
23 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/> | ||
24 | </vertices> | ||
25 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.1"> | ||
26 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/> | ||
27 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.8"/> | ||
28 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.9"/> | ||
29 | </vertices> | ||
30 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.11/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.11/@outgoingTransitions.1"> | ||
31 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
32 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.10"/> | ||
33 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.11"/> | ||
34 | </vertices> | ||
35 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
36 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/> | ||
37 | </vertices> | ||
38 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.0"> | ||
39 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/> | ||
40 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
41 | </vertices> | ||
42 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.1"> | ||
43 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/> | ||
44 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/> | ||
45 | </vertices> | ||
46 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.2"> | ||
47 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/> | ||
48 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/> | ||
49 | </vertices> | ||
50 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.1"> | ||
51 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/> | ||
52 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/> | ||
53 | </vertices> | ||
54 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.2"> | ||
55 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/> | ||
56 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/> | ||
57 | </vertices> | ||
58 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.0"> | ||
59 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
60 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
61 | </vertices> | ||
62 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.2"> | ||
63 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
64 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
65 | </vertices> | ||
66 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.1"> | ||
67 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
68 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
69 | </vertices> | ||
70 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.2"> | ||
71 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
72 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
73 | </vertices> | ||
74 | </regions> | ||
75 | </vertices> | ||
76 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@outgoingTransitions.0"> | ||
77 | <outgoingTransitions target="//@regions.0/@vertices.0"/> | ||
78 | <regions> | ||
79 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
80 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2"/> | ||
81 | </vertices> | ||
82 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@outgoingTransitions.0"/> | ||
83 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.0/@outgoingTransitions.0"> | ||
84 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.1"/> | ||
85 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3"/> | ||
86 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3"/> | ||
87 | <regions> | ||
88 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.1"> | ||
89 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.4"/> | ||
90 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.0"/> | ||
91 | </vertices> | ||
92 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.1"> | ||
93 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.1"/> | ||
94 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.5"/> | ||
95 | </vertices> | ||
96 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.0"> | ||
97 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.0"/> | ||
98 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.1"/> | ||
99 | </vertices> | ||
100 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
101 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.2"/> | ||
102 | </vertices> | ||
103 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.0"> | ||
104 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.1"/> | ||
105 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.1"/> | ||
106 | </vertices> | ||
107 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.1"> | ||
108 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.0"/> | ||
109 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2/@regions.0/@vertices.0"/> | ||
110 | </vertices> | ||
111 | </regions> | ||
112 | </vertices> | ||
113 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.2/@outgoingTransitions.2"> | ||
114 | <regions> | ||
115 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.3/@regions.0/@vertices.2/@outgoingTransitions.1"/> | ||
116 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.3/@regions.0/@vertices.2/@outgoingTransitions.0"/> | ||
117 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.3/@regions.0/@vertices.3/@outgoingTransitions.0"> | ||
118 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3/@regions.0/@vertices.1"/> | ||
119 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3/@regions.0/@vertices.0"/> | ||
120 | </vertices> | ||
121 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
122 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3/@regions.0/@vertices.2"/> | ||
123 | </vertices> | ||
124 | </regions> | ||
125 | </vertices> | ||
126 | </regions> | ||
127 | </vertices> | ||
128 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
129 | <outgoingTransitions target="//@regions.0/@vertices.0"/> | ||
130 | </vertices> | ||
131 | </regions> | ||
132 | </hu.bme.mit.inf.yakindumm:Statechart> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/new/na_rep/R_2017131.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/new/na_rep/R_2017131.xmi new file mode 100644 index 00000000..39780f72 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/new/na_rep/R_2017131.xmi | |||
@@ -0,0 +1,149 @@ | |||
1 | <?xml version="1.0" encoding="ASCII"?> | ||
2 | <hu.bme.mit.inf.yakindumm:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hu.bme.mit.inf.yakindumm="hu.bme.mit.inf.yakindumm"> | ||
3 | <regions> | ||
4 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.1/@outgoingTransitions.0"> | ||
5 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
6 | <regions> | ||
7 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.5/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.8/@outgoingTransitions.0"> | ||
8 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.5"/> | ||
9 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
10 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.4"/> | ||
11 | </vertices> | ||
12 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.9/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.10/@outgoingTransitions.1"> | ||
13 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.10"/> | ||
14 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
15 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.9"/> | ||
16 | </vertices> | ||
17 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.11/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.11/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.12/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.12/@outgoingTransitions.1"> | ||
18 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
19 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.12"/> | ||
20 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.11"/> | ||
21 | </vertices> | ||
22 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.0/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.0/@regions.0/@vertices.6/@outgoingTransitions.1"> | ||
23 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/> | ||
24 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.7"/> | ||
25 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.6"/> | ||
26 | </vertices> | ||
27 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.2"> | ||
28 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
29 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
30 | </vertices> | ||
31 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.0/@outgoingTransitions.0"> | ||
32 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
33 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
34 | </vertices> | ||
35 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.2"> | ||
36 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
37 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
38 | </vertices> | ||
39 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.3/@outgoingTransitions.1"> | ||
40 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
41 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.3"/> | ||
42 | </vertices> | ||
43 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
44 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.0"/> | ||
45 | </vertices> | ||
46 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.2"> | ||
47 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
48 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
49 | </vertices> | ||
50 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.1/@outgoingTransitions.0"> | ||
51 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
52 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.1"/> | ||
53 | </vertices> | ||
54 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.2"> | ||
55 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/> | ||
56 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/> | ||
57 | </vertices> | ||
58 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.0/@regions.0/@vertices.2/@outgoingTransitions.1"> | ||
59 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/> | ||
60 | <outgoingTransitions target="//@regions.0/@vertices.0/@regions.0/@vertices.2"/> | ||
61 | </vertices> | ||
62 | </regions> | ||
63 | </vertices> | ||
64 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.0"> | ||
65 | <outgoingTransitions target="//@regions.0/@vertices.0"/> | ||
66 | <regions> | ||
67 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
68 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.1"/> | ||
69 | </vertices> | ||
70 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.2/@outgoingTransitions.2"> | ||
71 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.2"/> | ||
72 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.4"/> | ||
73 | <outgoingTransitions target="//@regions.0/@vertices.3"/> | ||
74 | </vertices> | ||
75 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.0"> | ||
76 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.1"/> | ||
77 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3"/> | ||
78 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.1"/> | ||
79 | </vertices> | ||
80 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.5/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.2/@outgoingTransitions.1"/> | ||
81 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.1/@regions.0/@vertices.5/@outgoingTransitions.2"> | ||
82 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.7"/> | ||
83 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.5"/> | ||
84 | </vertices> | ||
85 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.4/@outgoingTransitions.1"> | ||
86 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.4"/> | ||
87 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.3"/> | ||
88 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.4"/> | ||
89 | </vertices> | ||
90 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.7/@outgoingTransitions.0"> | ||
91 | <outgoingTransitions target="//@regions.0/@vertices.2"/> | ||
92 | </vertices> | ||
93 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.4/@outgoingTransitions.0"> | ||
94 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.6"/> | ||
95 | <outgoingTransitions target="//@regions.0/@vertices.1/@regions.0/@vertices.6"/> | ||
96 | </vertices> | ||
97 | </regions> | ||
98 | </vertices> | ||
99 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@outgoingTransitions.0 //@regions.0/@vertices.3/@outgoingTransitions.1 //@regions.0/@vertices.1/@regions.0/@vertices.6/@outgoingTransitions.0"> | ||
100 | <outgoingTransitions target="//@regions.0/@vertices.0"/> | ||
101 | <regions> | ||
102 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.0"> | ||
103 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/> | ||
104 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/> | ||
105 | <outgoingTransitions target="//@regions.0/@vertices.4"/> | ||
106 | </vertices> | ||
107 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.2 //@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.2"/> | ||
108 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.0"> | ||
109 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/> | ||
110 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/> | ||
111 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/> | ||
112 | </vertices> | ||
113 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.1"> | ||
114 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.4"/> | ||
115 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.6"/> | ||
116 | </vertices> | ||
117 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.0"> | ||
118 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/> | ||
119 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/> | ||
120 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/> | ||
121 | </vertices> | ||
122 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.6/@outgoingTransitions.1"> | ||
123 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
124 | </vertices> | ||
125 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.1"> | ||
126 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.5"/> | ||
127 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.5"/> | ||
128 | </vertices> | ||
129 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
130 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/> | ||
131 | </vertices> | ||
132 | </regions> | ||
133 | </vertices> | ||
134 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.1/@regions.0/@vertices.1/@outgoingTransitions.2"> | ||
135 | <outgoingTransitions target="//@regions.0/@vertices.2"/> | ||
136 | <outgoingTransitions target="//@regions.0/@vertices.2"/> | ||
137 | </vertices> | ||
138 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.2"> | ||
139 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
140 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
141 | </vertices> | ||
142 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@outgoingTransitions.0"> | ||
143 | <outgoingTransitions target="//@regions.0/@vertices.0"/> | ||
144 | </vertices> | ||
145 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
146 | <outgoingTransitions target="//@regions.0/@vertices.5"/> | ||
147 | </vertices> | ||
148 | </regions> | ||
149 | </hu.bme.mit.inf.yakindumm:Statechart> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/new/out_d_rep/R_2015248.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/new/out_d_rep/R_2015248.xmi new file mode 100644 index 00000000..e7fe8114 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/new/out_d_rep/R_2015248.xmi | |||
@@ -0,0 +1,125 @@ | |||
1 | <?xml version="1.0" encoding="ASCII"?> | ||
2 | <hu.bme.mit.inf.yakindumm:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hu.bme.mit.inf.yakindumm="hu.bme.mit.inf.yakindumm"> | ||
3 | <regions> | ||
4 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
5 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
6 | </vertices> | ||
7 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.12/@outgoingTransitions.0 //@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.6/@outgoingTransitions.0"> | ||
8 | <outgoingTransitions target="//@regions.0/@vertices.2"/> | ||
9 | <outgoingTransitions target="//@regions.0/@vertices.6"/> | ||
10 | </vertices> | ||
11 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.7/@outgoingTransitions.1"> | ||
12 | <outgoingTransitions target="//@regions.0/@vertices.3"/> | ||
13 | <outgoingTransitions target="//@regions.0/@vertices.4"/> | ||
14 | <outgoingTransitions target="//@regions.0/@vertices.7"/> | ||
15 | </vertices> | ||
16 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.8/@outgoingTransitions.1 //@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.9/@outgoingTransitions.1"> | ||
17 | <outgoingTransitions target="//@regions.0/@vertices.8"/> | ||
18 | <outgoingTransitions target="//@regions.0/@vertices.5"/> | ||
19 | <outgoingTransitions target="//@regions.0/@vertices.9"/> | ||
20 | </vertices> | ||
21 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@outgoingTransitions.1"> | ||
22 | <outgoingTransitions target="//@regions.0/@vertices.2"/> | ||
23 | <outgoingTransitions target="//@regions.0/@vertices.2"/> | ||
24 | </vertices> | ||
25 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.11/@outgoingTransitions.0 //@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.10/@outgoingTransitions.1 //@regions.0/@vertices.3/@outgoingTransitions.1 //@regions.0/@vertices.11/@outgoingTransitions.1"> | ||
26 | <outgoingTransitions target="//@regions.0/@vertices.12"/> | ||
27 | <outgoingTransitions target="//@regions.0/@vertices.11"/> | ||
28 | <outgoingTransitions target="//@regions.0/@vertices.10"/> | ||
29 | </vertices> | ||
30 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@outgoingTransitions.1"> | ||
31 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
32 | <regions> | ||
33 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
34 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.1"/> | ||
35 | </vertices> | ||
36 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.0/@outgoingTransitions.0"> | ||
37 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.3"/> | ||
38 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.2"/> | ||
39 | </vertices> | ||
40 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.6/@regions.0/@vertices.2/@outgoingTransitions.1 //@regions.0/@vertices.6/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.6/@regions.0/@vertices.10/@outgoingTransitions.2 //@regions.0/@vertices.6/@regions.0/@vertices.9/@outgoingTransitions.0 //@regions.0/@vertices.6/@regions.0/@vertices.13/@outgoingTransitions.1"> | ||
41 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.4"/> | ||
42 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.2"/> | ||
43 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.10"/> | ||
44 | </vertices> | ||
45 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.6/@regions.0/@vertices.11/@outgoingTransitions.2 //@regions.0/@vertices.6/@regions.0/@vertices.11/@outgoingTransitions.0 //@regions.0/@vertices.6/@regions.0/@vertices.3/@outgoingTransitions.2 //@regions.0/@vertices.6/@regions.0/@vertices.12/@outgoingTransitions.0 //@regions.0/@vertices.6/@regions.0/@vertices.8/@outgoingTransitions.0"> | ||
46 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.11"/> | ||
47 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.5"/> | ||
48 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.3"/> | ||
49 | </vertices> | ||
50 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.2/@outgoingTransitions.0"> | ||
51 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.12"/> | ||
52 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.12"/> | ||
53 | </vertices> | ||
54 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.3/@outgoingTransitions.1"> | ||
55 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.13"/> | ||
56 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.13"/> | ||
57 | </vertices> | ||
58 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.11/@outgoingTransitions.1"/> | ||
59 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.10/@outgoingTransitions.1"/> | ||
60 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.12/@outgoingTransitions.1"> | ||
61 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.3"/> | ||
62 | </vertices> | ||
63 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.13/@outgoingTransitions.0"> | ||
64 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.2"/> | ||
65 | </vertices> | ||
66 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.2/@outgoingTransitions.2"> | ||
67 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.2"/> | ||
68 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.7"/> | ||
69 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.2"/> | ||
70 | </vertices> | ||
71 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.3/@outgoingTransitions.0"> | ||
72 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.3"/> | ||
73 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.6"/> | ||
74 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.3"/> | ||
75 | </vertices> | ||
76 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.6/@regions.0/@vertices.4/@outgoingTransitions.1"> | ||
77 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.3"/> | ||
78 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.8"/> | ||
79 | </vertices> | ||
80 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.6/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.6/@regions.0/@vertices.5/@outgoingTransitions.1"> | ||
81 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.9"/> | ||
82 | <outgoingTransitions target="//@regions.0/@vertices.6/@regions.0/@vertices.2"/> | ||
83 | </vertices> | ||
84 | </regions> | ||
85 | </vertices> | ||
86 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@outgoingTransitions.2"> | ||
87 | <outgoingTransitions target="//@regions.0/@vertices.2"/> | ||
88 | <outgoingTransitions target="//@regions.0/@vertices.2"/> | ||
89 | </vertices> | ||
90 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@outgoingTransitions.0"> | ||
91 | <outgoingTransitions target="//@regions.0/@vertices.3"/> | ||
92 | <outgoingTransitions target="//@regions.0/@vertices.3"/> | ||
93 | </vertices> | ||
94 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@outgoingTransitions.2"> | ||
95 | <outgoingTransitions target="//@regions.0/@vertices.3"/> | ||
96 | <outgoingTransitions target="//@regions.0/@vertices.3"/> | ||
97 | </vertices> | ||
98 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.2"> | ||
99 | <outgoingTransitions target="//@regions.0/@vertices.5"/> | ||
100 | <outgoingTransitions target="//@regions.0/@vertices.5"/> | ||
101 | </vertices> | ||
102 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.1"> | ||
103 | <outgoingTransitions target="//@regions.0/@vertices.5"/> | ||
104 | <outgoingTransitions target="//@regions.0/@vertices.5"/> | ||
105 | </vertices> | ||
106 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.0"> | ||
107 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
108 | <regions> | ||
109 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
110 | <outgoingTransitions target="//@regions.0/@vertices.12/@regions.0/@vertices.1"/> | ||
111 | </vertices> | ||
112 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.12/@regions.0/@vertices.0/@outgoingTransitions.0"> | ||
113 | <outgoingTransitions target="//@regions.0/@vertices.12/@regions.0/@vertices.2"/> | ||
114 | <outgoingTransitions target="//@regions.0/@vertices.12/@regions.0/@vertices.3"/> | ||
115 | </vertices> | ||
116 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.12/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.12/@regions.0/@vertices.3/@outgoingTransitions.0"> | ||
117 | <outgoingTransitions target="//@regions.0/@vertices.12/@regions.0/@vertices.3"/> | ||
118 | </vertices> | ||
119 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.12/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.12/@regions.0/@vertices.2/@outgoingTransitions.0"> | ||
120 | <outgoingTransitions target="//@regions.0/@vertices.12/@regions.0/@vertices.2"/> | ||
121 | </vertices> | ||
122 | </regions> | ||
123 | </vertices> | ||
124 | </regions> | ||
125 | </hu.bme.mit.inf.yakindumm:Statechart> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/out_d_rep.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/out_d_rep.csv new file mode 100644 index 00000000..17965018 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/out_d_rep.csv | |||
@@ -0,0 +1,9 @@ | |||
1 | Meta Mode,yakindumm | ||
2 | Number of Edge types,6 | ||
3 | Number Of Nodes,88 | ||
4 | OutDegreeValue,1,2,3,4,5,6,8,10,11,13 | ||
5 | OutDegreeCount,6,57,12,3,1,2,2,3,1,1 | ||
6 | NAValue,1,2,3,4,5,6 | ||
7 | NACount,1,3,6,56,20,2 | ||
8 | MPCValue,0.00000,0.15918,0.18333,0.38400,0.76800,0.80000,0.88889,0.90000,0.90888,0.91349,0.91429,0.93061,0.93223,0.93728,1.00000 | ||
9 | MPCCount,1,1,1,1,1,5,2,56,1,2,3,10,1,1,2 | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/out_d_rep/R_2015225.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/out_d_rep/R_2015225.xmi new file mode 100644 index 00000000..21fee5a9 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/data/Yakindumm/out_d_rep/R_2015225.xmi | |||
@@ -0,0 +1,145 @@ | |||
1 | <?xml version="1.0" encoding="ASCII"?> | ||
2 | <hu.bme.mit.inf.yakindumm:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hu.bme.mit.inf.yakindumm="hu.bme.mit.inf.yakindumm"> | ||
3 | <regions> | ||
4 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
5 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
6 | </vertices> | ||
7 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.2 //@regions.0/@vertices.2/@outgoingTransitions.0 //@regions.0/@vertices.3/@outgoingTransitions.0"> | ||
8 | <outgoingTransitions target="//@regions.0/@vertices.2"/> | ||
9 | <outgoingTransitions target="//@regions.0/@vertices.3"/> | ||
10 | </vertices> | ||
11 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@outgoingTransitions.0"> | ||
12 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
13 | <regions> | ||
14 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.2"> | ||
15 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/> | ||
16 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/> | ||
17 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/> | ||
18 | </vertices> | ||
19 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.10/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.9/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.0/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.10/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.9/@outgoingTransitions.0"> | ||
20 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.9"/> | ||
21 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/> | ||
22 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.10"/> | ||
23 | </vertices> | ||
24 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.7/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.8/@outgoingTransitions.1"> | ||
25 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.8"/> | ||
26 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/> | ||
27 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.7"/> | ||
28 | </vertices> | ||
29 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.2/@regions.0/@vertices.6/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.1 //@regions.0/@vertices.2/@regions.0/@vertices.5/@outgoingTransitions.1"> | ||
30 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.6"/> | ||
31 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.5"/> | ||
32 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
33 | </vertices> | ||
34 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
35 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.0"/> | ||
36 | </vertices> | ||
37 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.1"> | ||
38 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/> | ||
39 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/> | ||
40 | </vertices> | ||
41 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.3/@outgoingTransitions.0"> | ||
42 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/> | ||
43 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.3"/> | ||
44 | </vertices> | ||
45 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.2"> | ||
46 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/> | ||
47 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/> | ||
48 | </vertices> | ||
49 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.2/@outgoingTransitions.0"> | ||
50 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/> | ||
51 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.2"/> | ||
52 | </vertices> | ||
53 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.0"> | ||
54 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/> | ||
55 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/> | ||
56 | </vertices> | ||
57 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.2/@regions.0/@vertices.1/@outgoingTransitions.2"> | ||
58 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/> | ||
59 | <outgoingTransitions target="//@regions.0/@vertices.2/@regions.0/@vertices.1"/> | ||
60 | </vertices> | ||
61 | </regions> | ||
62 | </vertices> | ||
63 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.6/@outgoingTransitions.0"> | ||
64 | <outgoingTransitions target="//@regions.0/@vertices.1"/> | ||
65 | <outgoingTransitions target="//@regions.0/@vertices.5"/> | ||
66 | <regions> | ||
67 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
68 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.1"/> | ||
69 | </vertices> | ||
70 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.0/@outgoingTransitions.0"> | ||
71 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.2"/> | ||
72 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.3"/> | ||
73 | </vertices> | ||
74 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.6/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.5/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.5/@outgoingTransitions.1"> | ||
75 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.4"/> | ||
76 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.6"/> | ||
77 | </vertices> | ||
78 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.8/@outgoingTransitions.0 //@regions.0/@vertices.3/@regions.0/@vertices.1/@outgoingTransitions.1 //@regions.0/@vertices.3/@regions.0/@vertices.4/@outgoingTransitions.1"> | ||
79 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.8"/> | ||
80 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.5"/> | ||
81 | </vertices> | ||
82 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.2/@outgoingTransitions.0"> | ||
83 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.3"/> | ||
84 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.3"/> | ||
85 | </vertices> | ||
86 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.3/@outgoingTransitions.1"> | ||
87 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.2"/> | ||
88 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.2"/> | ||
89 | </vertices> | ||
90 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.2/@outgoingTransitions.1"> | ||
91 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.2"/> | ||
92 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.7"/> | ||
93 | </vertices> | ||
94 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.1 //@regions.0/@vertices.3/@regions.0/@vertices.6/@outgoingTransitions.1"/> | ||
95 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.3/@outgoingTransitions.0"> | ||
96 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.3"/> | ||
97 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.9"/> | ||
98 | </vertices> | ||
99 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.3/@regions.0/@vertices.8/@outgoingTransitions.1 //@regions.0/@vertices.5/@outgoingTransitions.2"/> | ||
100 | </regions> | ||
101 | </vertices> | ||
102 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.5/@outgoingTransitions.0"> | ||
103 | <outgoingTransitions target="//@regions.0/@vertices.6"/> | ||
104 | <regions> | ||
105 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Entry"> | ||
106 | <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.1"/> | ||
107 | </vertices> | ||
108 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.0/@outgoingTransitions.0"> | ||
109 | <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.3"/> | ||
110 | <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.2"/> | ||
111 | </vertices> | ||
112 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.4/@outgoingTransitions.0 //@regions.0/@vertices.4/@regions.0/@vertices.1/@outgoingTransitions.1"> | ||
113 | <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.4"/> | ||
114 | <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.8"/> | ||
115 | </vertices> | ||
116 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.1/@outgoingTransitions.0 //@regions.0/@vertices.4/@regions.0/@vertices.6/@outgoingTransitions.0"> | ||
117 | <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.9"/> | ||
118 | <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.6"/> | ||
119 | </vertices> | ||
120 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.2/@outgoingTransitions.0"> | ||
121 | <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.2"/> | ||
122 | <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.5"/> | ||
123 | </vertices> | ||
124 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.4/@outgoingTransitions.1 //@regions.0/@vertices.6/@outgoingTransitions.2"/> | ||
125 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.3/@outgoingTransitions.1"> | ||
126 | <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.3"/> | ||
127 | <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.7"/> | ||
128 | </vertices> | ||
129 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.6/@outgoingTransitions.1 //@regions.0/@vertices.6/@outgoingTransitions.1"/> | ||
130 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.2/@outgoingTransitions.1"/> | ||
131 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:State" incomingTransitions="//@regions.0/@vertices.4/@regions.0/@vertices.3/@outgoingTransitions.0"/> | ||
132 | </regions> | ||
133 | </vertices> | ||
134 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.3/@outgoingTransitions.1"> | ||
135 | <outgoingTransitions target="//@regions.0/@vertices.4"/> | ||
136 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.7"/> | ||
137 | <outgoingTransitions target="//@regions.0/@vertices.3/@regions.0/@vertices.9"/> | ||
138 | </vertices> | ||
139 | <vertices xsi:type="hu.bme.mit.inf.yakindumm:Choice" incomingTransitions="//@regions.0/@vertices.4/@outgoingTransitions.0"> | ||
140 | <outgoingTransitions target="//@regions.0/@vertices.3"/> | ||
141 | <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.7"/> | ||
142 | <outgoingTransitions target="//@regions.0/@vertices.4/@regions.0/@vertices.5"/> | ||
143 | </vertices> | ||
144 | </regions> | ||
145 | </hu.bme.mit.inf.yakindumm:Statechart> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/errors.txt b/Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/errors.txt new file mode 100644 index 00000000..0de2ebdb --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/errors.txt | |||
@@ -0,0 +1,13 @@ | |||
1 | Error occured (NullPointerException): | ||
2 | hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.lambda$11(ViatraReasoner.java:263) | ||
3 | org.eclipse.xtext.xbase.lib.ObjectExtensions.operator_doubleArrow(ObjectExtensions.java:140) | ||
4 | hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.lambda$1(ViatraReasoner.java:267) | ||
5 | org.eclipse.xtext.xbase.lib.ObjectExtensions.operator_doubleArrow(ObjectExtensions.java:140) | ||
6 | hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:347) | ||
7 | hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:319) | ||
8 | hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:134) | ||
9 | hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:363) | ||
10 | hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:115) | ||
11 | hu.bme.mit.inf.dslreasoner.application.execution.StandaloneScriptExecutor.executeScript(StandaloneScriptExecutor.java:149) | ||
12 | ca.mcgill.ecse.socialnetwork.runner.Main.runWithPath(Main.java:24) | ||
13 | ca.mcgill.ecse.socialnetwork.runner.Main.main(Main.java:40) | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/ecore.vsconfig b/Metrics/Metrics-Calculation/SocialNetwork_plugin/ecore.vsconfig new file mode 100644 index 00000000..85202b9d --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/ecore.vsconfig | |||
@@ -0,0 +1,50 @@ | |||
1 | import viatra "./queries/queries/Ecore.vql" | ||
2 | import epackage "http://www.eclipse.org/emf/2002/Ecore" | ||
3 | |||
4 | // Copy this for different model sizes | ||
5 | generate { | ||
6 | metamodel = {package ecore excluding{EClassifier.instanceClass, EClassifier.defaultValue, | ||
7 | EEnumLiteral.instance, EStructuralFeature.defaultValue, EStructuralFeature.changeable, | ||
8 | EStructuralFeature.derived, ENamedElement.name, EClass.interface, EClass.abstract, EClassifier.instanceTypeName, | ||
9 | EClassifier.instanceClassName, EPackage.nsPrefix, EPackage.nsURI, EAnnotation.source, | ||
10 | EAttribute.iD, EDataType.serializable, EEnumLiteral.literal, EEnumLiteral.value, | ||
11 | EReference.resolveProxies, EReference.container, EReference.containment, EStringToStringMapEntry.key, | ||
12 | EStringToStringMapEntry.value, EStructuralFeature.defaultValueLiteral, EStructuralFeature.transient, | ||
13 | EStructuralFeature.unsettable, EStructuralFeature.volatile, ETypedElement.lowerBound, | ||
14 | ETypedElement.many, ETypedElement.ordered, ETypedElement.required, ETypedElement.unique,ETypedElement.upperBound, | ||
15 | // cannot generate eFactoryInstance | ||
16 | EPackage.eFactoryInstance, | ||
17 | //Derived edges | ||
18 | EClass.eAllSuperTypes, EClass.eAllAttributes, EClass.eAllReferences, EClass.eAllContainments, EClass.eAllGenericSuperTypes, | ||
19 | EClass. eAllOperations, EClass.eAllStructuralFeatures, EClass.eAttributes, EClass.eIDAttribute, EClass.eReferences, | ||
20 | EAttribute.eAttributeType, EGenericType.eRawType, EReference.eReferenceType, | ||
21 | //Generic Types | ||
22 | EClass.eGenericSuperTypes, ETypedElement.eGenericType, EOperation.eGenericExceptions, EObject, EAnnotation.references, EAnnotation.contents | ||
23 | |||
24 | }} | ||
25 | partial-model = { "inputs/ecore.xmi"} | ||
26 | constraints = { package queries } | ||
27 | |||
28 | |||
29 | solver = ViatraSolver | ||
30 | |||
31 | //median run time | ||
32 | scope = { | ||
33 | #node = 30 // (warm-up: 10) 30, 50, 80, 100, 120 .... | ||
34 | } | ||
35 | |||
36 | number = 1 | ||
37 | runs = 1 | ||
38 | config = { | ||
39 | log-level = none, | ||
40 | runtime = 300, // the runtime is in seconds, want to set is to 5 mins | ||
41 | "optional-wf" = "false", | ||
42 | "realistic-guidance" = "Composite", | ||
43 | "allow-must-violations" = "false", | ||
44 | "domain" = "Ecore" | ||
45 | } | ||
46 | |||
47 | debug = "debug" | ||
48 | statistics = "statistics/Ecore/warmup.csv" //give different set up different filenames | ||
49 | output = "output/Ecore/run_time/" | ||
50 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/Person.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/Person.java new file mode 100644 index 00000000..b1e0a041 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/Person.java | |||
@@ -0,0 +1,62 @@ | |||
1 | /** | ||
2 | */ | ||
3 | package socialnetwork; | ||
4 | |||
5 | import org.eclipse.emf.common.util.EList; | ||
6 | |||
7 | import org.eclipse.emf.ecore.EObject; | ||
8 | |||
9 | /** | ||
10 | * <!-- begin-user-doc --> | ||
11 | * A representation of the model object '<em><b>Person</b></em>'. | ||
12 | * <!-- end-user-doc --> | ||
13 | * | ||
14 | * <p> | ||
15 | * The following features are supported: | ||
16 | * </p> | ||
17 | * <ul> | ||
18 | * <li>{@link socialnetwork.Person#getFriends <em>Friends</em>}</li> | ||
19 | * <li>{@link socialnetwork.Person#getName <em>Name</em>}</li> | ||
20 | * </ul> | ||
21 | * | ||
22 | * @see socialnetwork.SocialnetworkPackage#getPerson() | ||
23 | * @model | ||
24 | * @generated | ||
25 | */ | ||
26 | public interface Person extends EObject { | ||
27 | /** | ||
28 | * Returns the value of the '<em><b>Friends</b></em>' reference list. | ||
29 | * The list contents are of type {@link socialnetwork.Person}. | ||
30 | * <!-- begin-user-doc --> | ||
31 | * <!-- end-user-doc --> | ||
32 | * @return the value of the '<em>Friends</em>' reference list. | ||
33 | * @see socialnetwork.SocialnetworkPackage#getPerson_Friends() | ||
34 | * @model | ||
35 | * @generated | ||
36 | */ | ||
37 | EList<Person> getFriends(); | ||
38 | |||
39 | /** | ||
40 | * Returns the value of the '<em><b>Name</b></em>' attribute. | ||
41 | * The default value is <code>"Name"</code>. | ||
42 | * <!-- begin-user-doc --> | ||
43 | * <!-- end-user-doc --> | ||
44 | * @return the value of the '<em>Name</em>' attribute. | ||
45 | * @see #setName(String) | ||
46 | * @see socialnetwork.SocialnetworkPackage#getPerson_Name() | ||
47 | * @model default="Name" | ||
48 | * @generated | ||
49 | */ | ||
50 | String getName(); | ||
51 | |||
52 | /** | ||
53 | * Sets the value of the '{@link socialnetwork.Person#getName <em>Name</em>}' attribute. | ||
54 | * <!-- begin-user-doc --> | ||
55 | * <!-- end-user-doc --> | ||
56 | * @param value the new value of the '<em>Name</em>' attribute. | ||
57 | * @see #getName() | ||
58 | * @generated | ||
59 | */ | ||
60 | void setName(String value); | ||
61 | |||
62 | } // Person | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/SocialNetwork.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/SocialNetwork.java new file mode 100644 index 00000000..4653f6dd --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/SocialNetwork.java | |||
@@ -0,0 +1,62 @@ | |||
1 | /** | ||
2 | */ | ||
3 | package socialnetwork; | ||
4 | |||
5 | import org.eclipse.emf.common.util.EList; | ||
6 | |||
7 | import org.eclipse.emf.ecore.EObject; | ||
8 | |||
9 | /** | ||
10 | * <!-- begin-user-doc --> | ||
11 | * A representation of the model object '<em><b>Social Network</b></em>'. | ||
12 | * <!-- end-user-doc --> | ||
13 | * | ||
14 | * <p> | ||
15 | * The following features are supported: | ||
16 | * </p> | ||
17 | * <ul> | ||
18 | * <li>{@link socialnetwork.SocialNetwork#getName <em>Name</em>}</li> | ||
19 | * <li>{@link socialnetwork.SocialNetwork#getPersons <em>Persons</em>}</li> | ||
20 | * </ul> | ||
21 | * | ||
22 | * @see socialnetwork.SocialnetworkPackage#getSocialNetwork() | ||
23 | * @model | ||
24 | * @generated | ||
25 | */ | ||
26 | public interface SocialNetwork extends EObject { | ||
27 | /** | ||
28 | * Returns the value of the '<em><b>Name</b></em>' attribute. | ||
29 | * The default value is <code>"SocialNetwork"</code>. | ||
30 | * <!-- begin-user-doc --> | ||
31 | * <!-- end-user-doc --> | ||
32 | * @return the value of the '<em>Name</em>' attribute. | ||
33 | * @see #setName(String) | ||
34 | * @see socialnetwork.SocialnetworkPackage#getSocialNetwork_Name() | ||
35 | * @model default="SocialNetwork" | ||
36 | * @generated | ||
37 | */ | ||
38 | String getName(); | ||
39 | |||
40 | /** | ||
41 | * Sets the value of the '{@link socialnetwork.SocialNetwork#getName <em>Name</em>}' attribute. | ||
42 | * <!-- begin-user-doc --> | ||
43 | * <!-- end-user-doc --> | ||
44 | * @param value the new value of the '<em>Name</em>' attribute. | ||
45 | * @see #getName() | ||
46 | * @generated | ||
47 | */ | ||
48 | void setName(String value); | ||
49 | |||
50 | /** | ||
51 | * Returns the value of the '<em><b>Persons</b></em>' containment reference list. | ||
52 | * The list contents are of type {@link socialnetwork.Person}. | ||
53 | * <!-- begin-user-doc --> | ||
54 | * <!-- end-user-doc --> | ||
55 | * @return the value of the '<em>Persons</em>' containment reference list. | ||
56 | * @see socialnetwork.SocialnetworkPackage#getSocialNetwork_Persons() | ||
57 | * @model containment="true" | ||
58 | * @generated | ||
59 | */ | ||
60 | EList<Person> getPersons(); | ||
61 | |||
62 | } // SocialNetwork | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/SocialnetworkFactory.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/SocialnetworkFactory.java new file mode 100644 index 00000000..cf7a4250 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/SocialnetworkFactory.java | |||
@@ -0,0 +1,51 @@ | |||
1 | /** | ||
2 | */ | ||
3 | package socialnetwork; | ||
4 | |||
5 | import org.eclipse.emf.ecore.EFactory; | ||
6 | |||
7 | /** | ||
8 | * <!-- begin-user-doc --> | ||
9 | * The <b>Factory</b> for the model. | ||
10 | * It provides a create method for each non-abstract class of the model. | ||
11 | * <!-- end-user-doc --> | ||
12 | * @see socialnetwork.SocialnetworkPackage | ||
13 | * @generated | ||
14 | */ | ||
15 | public interface SocialnetworkFactory extends EFactory { | ||
16 | /** | ||
17 | * The singleton instance of the factory. | ||
18 | * <!-- begin-user-doc --> | ||
19 | * <!-- end-user-doc --> | ||
20 | * @generated | ||
21 | */ | ||
22 | SocialnetworkFactory eINSTANCE = socialnetwork.impl.SocialnetworkFactoryImpl.init(); | ||
23 | |||
24 | /** | ||
25 | * Returns a new object of class '<em>Social Network</em>'. | ||
26 | * <!-- begin-user-doc --> | ||
27 | * <!-- end-user-doc --> | ||
28 | * @return a new object of class '<em>Social Network</em>'. | ||
29 | * @generated | ||
30 | */ | ||
31 | SocialNetwork createSocialNetwork(); | ||
32 | |||
33 | /** | ||
34 | * Returns a new object of class '<em>Person</em>'. | ||
35 | * <!-- begin-user-doc --> | ||
36 | * <!-- end-user-doc --> | ||
37 | * @return a new object of class '<em>Person</em>'. | ||
38 | * @generated | ||
39 | */ | ||
40 | Person createPerson(); | ||
41 | |||
42 | /** | ||
43 | * Returns the package supported by this factory. | ||
44 | * <!-- begin-user-doc --> | ||
45 | * <!-- end-user-doc --> | ||
46 | * @return the package supported by this factory. | ||
47 | * @generated | ||
48 | */ | ||
49 | SocialnetworkPackage getSocialnetworkPackage(); | ||
50 | |||
51 | } //SocialnetworkFactory | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/SocialnetworkPackage.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/SocialnetworkPackage.java new file mode 100644 index 00000000..f215f469 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/SocialnetworkPackage.java | |||
@@ -0,0 +1,293 @@ | |||
1 | /** | ||
2 | */ | ||
3 | package socialnetwork; | ||
4 | |||
5 | import org.eclipse.emf.ecore.EAttribute; | ||
6 | import org.eclipse.emf.ecore.EClass; | ||
7 | import org.eclipse.emf.ecore.EPackage; | ||
8 | import org.eclipse.emf.ecore.EReference; | ||
9 | |||
10 | /** | ||
11 | * <!-- begin-user-doc --> | ||
12 | * The <b>Package</b> for the model. | ||
13 | * It contains accessors for the meta objects to represent | ||
14 | * <ul> | ||
15 | * <li>each class,</li> | ||
16 | * <li>each feature of each class,</li> | ||
17 | * <li>each operation of each class,</li> | ||
18 | * <li>each enum,</li> | ||
19 | * <li>and each data type</li> | ||
20 | * </ul> | ||
21 | * <!-- end-user-doc --> | ||
22 | * @see socialnetwork.SocialnetworkFactory | ||
23 | * @model kind="package" | ||
24 | * annotation="http://www.eclipse.org/emf/2002/Ecore" | ||
25 | * @generated | ||
26 | */ | ||
27 | public interface SocialnetworkPackage extends EPackage { | ||
28 | /** | ||
29 | * The package name. | ||
30 | * <!-- begin-user-doc --> | ||
31 | * <!-- end-user-doc --> | ||
32 | * @generated | ||
33 | */ | ||
34 | String eNAME = "socialnetwork"; | ||
35 | |||
36 | /** | ||
37 | * The package namespace URI. | ||
38 | * <!-- begin-user-doc --> | ||
39 | * <!-- end-user-doc --> | ||
40 | * @generated | ||
41 | */ | ||
42 | String eNS_URI = "http://ecse.mcgill.ca/socialnetwork"; | ||
43 | |||
44 | /** | ||
45 | * The package namespace name. | ||
46 | * <!-- begin-user-doc --> | ||
47 | * <!-- end-user-doc --> | ||
48 | * @generated | ||
49 | */ | ||
50 | String eNS_PREFIX = "socialnetwork"; | ||
51 | |||
52 | /** | ||
53 | * The singleton instance of the package. | ||
54 | * <!-- begin-user-doc --> | ||
55 | * <!-- end-user-doc --> | ||
56 | * @generated | ||
57 | */ | ||
58 | SocialnetworkPackage eINSTANCE = socialnetwork.impl.SocialnetworkPackageImpl.init(); | ||
59 | |||
60 | /** | ||
61 | * The meta object id for the '{@link socialnetwork.impl.SocialNetworkImpl <em>Social Network</em>}' class. | ||
62 | * <!-- begin-user-doc --> | ||
63 | * <!-- end-user-doc --> | ||
64 | * @see socialnetwork.impl.SocialNetworkImpl | ||
65 | * @see socialnetwork.impl.SocialnetworkPackageImpl#getSocialNetwork() | ||
66 | * @generated | ||
67 | */ | ||
68 | int SOCIAL_NETWORK = 0; | ||
69 | |||
70 | /** | ||
71 | * The feature id for the '<em><b>Name</b></em>' attribute. | ||
72 | * <!-- begin-user-doc --> | ||
73 | * <!-- end-user-doc --> | ||
74 | * @generated | ||
75 | * @ordered | ||
76 | */ | ||
77 | int SOCIAL_NETWORK__NAME = 0; | ||
78 | |||
79 | /** | ||
80 | * The feature id for the '<em><b>Persons</b></em>' containment reference list. | ||
81 | * <!-- begin-user-doc --> | ||
82 | * <!-- end-user-doc --> | ||
83 | * @generated | ||
84 | * @ordered | ||
85 | */ | ||
86 | int SOCIAL_NETWORK__PERSONS = 1; | ||
87 | |||
88 | /** | ||
89 | * The number of structural features of the '<em>Social Network</em>' class. | ||
90 | * <!-- begin-user-doc --> | ||
91 | * <!-- end-user-doc --> | ||
92 | * @generated | ||
93 | * @ordered | ||
94 | */ | ||
95 | int SOCIAL_NETWORK_FEATURE_COUNT = 2; | ||
96 | |||
97 | /** | ||
98 | * The number of operations of the '<em>Social Network</em>' class. | ||
99 | * <!-- begin-user-doc --> | ||
100 | * <!-- end-user-doc --> | ||
101 | * @generated | ||
102 | * @ordered | ||
103 | */ | ||
104 | int SOCIAL_NETWORK_OPERATION_COUNT = 0; | ||
105 | |||
106 | /** | ||
107 | * The meta object id for the '{@link socialnetwork.impl.PersonImpl <em>Person</em>}' class. | ||
108 | * <!-- begin-user-doc --> | ||
109 | * <!-- end-user-doc --> | ||
110 | * @see socialnetwork.impl.PersonImpl | ||
111 | * @see socialnetwork.impl.SocialnetworkPackageImpl#getPerson() | ||
112 | * @generated | ||
113 | */ | ||
114 | int PERSON = 1; | ||
115 | |||
116 | /** | ||
117 | * The feature id for the '<em><b>Friends</b></em>' reference list. | ||
118 | * <!-- begin-user-doc --> | ||
119 | * <!-- end-user-doc --> | ||
120 | * @generated | ||
121 | * @ordered | ||
122 | */ | ||
123 | int PERSON__FRIENDS = 0; | ||
124 | |||
125 | /** | ||
126 | * The feature id for the '<em><b>Name</b></em>' attribute. | ||
127 | * <!-- begin-user-doc --> | ||
128 | * <!-- end-user-doc --> | ||
129 | * @generated | ||
130 | * @ordered | ||
131 | */ | ||
132 | int PERSON__NAME = 1; | ||
133 | |||
134 | /** | ||
135 | * The number of structural features of the '<em>Person</em>' class. | ||
136 | * <!-- begin-user-doc --> | ||
137 | * <!-- end-user-doc --> | ||
138 | * @generated | ||
139 | * @ordered | ||
140 | */ | ||
141 | int PERSON_FEATURE_COUNT = 2; | ||
142 | |||
143 | /** | ||
144 | * The number of operations of the '<em>Person</em>' class. | ||
145 | * <!-- begin-user-doc --> | ||
146 | * <!-- end-user-doc --> | ||
147 | * @generated | ||
148 | * @ordered | ||
149 | */ | ||
150 | int PERSON_OPERATION_COUNT = 0; | ||
151 | |||
152 | /** | ||
153 | * Returns the meta object for class '{@link socialnetwork.SocialNetwork <em>Social Network</em>}'. | ||
154 | * <!-- begin-user-doc --> | ||
155 | * <!-- end-user-doc --> | ||
156 | * @return the meta object for class '<em>Social Network</em>'. | ||
157 | * @see socialnetwork.SocialNetwork | ||
158 | * @generated | ||
159 | */ | ||
160 | EClass getSocialNetwork(); | ||
161 | |||
162 | /** | ||
163 | * Returns the meta object for the attribute '{@link socialnetwork.SocialNetwork#getName <em>Name</em>}'. | ||
164 | * <!-- begin-user-doc --> | ||
165 | * <!-- end-user-doc --> | ||
166 | * @return the meta object for the attribute '<em>Name</em>'. | ||
167 | * @see socialnetwork.SocialNetwork#getName() | ||
168 | * @see #getSocialNetwork() | ||
169 | * @generated | ||
170 | */ | ||
171 | EAttribute getSocialNetwork_Name(); | ||
172 | |||
173 | /** | ||
174 | * Returns the meta object for the containment reference list '{@link socialnetwork.SocialNetwork#getPersons <em>Persons</em>}'. | ||
175 | * <!-- begin-user-doc --> | ||
176 | * <!-- end-user-doc --> | ||
177 | * @return the meta object for the containment reference list '<em>Persons</em>'. | ||
178 | * @see socialnetwork.SocialNetwork#getPersons() | ||
179 | * @see #getSocialNetwork() | ||
180 | * @generated | ||
181 | */ | ||
182 | EReference getSocialNetwork_Persons(); | ||
183 | |||
184 | /** | ||
185 | * Returns the meta object for class '{@link socialnetwork.Person <em>Person</em>}'. | ||
186 | * <!-- begin-user-doc --> | ||
187 | * <!-- end-user-doc --> | ||
188 | * @return the meta object for class '<em>Person</em>'. | ||
189 | * @see socialnetwork.Person | ||
190 | * @generated | ||
191 | */ | ||
192 | EClass getPerson(); | ||
193 | |||
194 | /** | ||
195 | * Returns the meta object for the reference list '{@link socialnetwork.Person#getFriends <em>Friends</em>}'. | ||
196 | * <!-- begin-user-doc --> | ||
197 | * <!-- end-user-doc --> | ||
198 | * @return the meta object for the reference list '<em>Friends</em>'. | ||
199 | * @see socialnetwork.Person#getFriends() | ||
200 | * @see #getPerson() | ||
201 | * @generated | ||
202 | */ | ||
203 | EReference getPerson_Friends(); | ||
204 | |||
205 | /** | ||
206 | * Returns the meta object for the attribute '{@link socialnetwork.Person#getName <em>Name</em>}'. | ||
207 | * <!-- begin-user-doc --> | ||
208 | * <!-- end-user-doc --> | ||
209 | * @return the meta object for the attribute '<em>Name</em>'. | ||
210 | * @see socialnetwork.Person#getName() | ||
211 | * @see #getPerson() | ||
212 | * @generated | ||
213 | */ | ||
214 | EAttribute getPerson_Name(); | ||
215 | |||
216 | /** | ||
217 | * Returns the factory that creates the instances of the model. | ||
218 | * <!-- begin-user-doc --> | ||
219 | * <!-- end-user-doc --> | ||
220 | * @return the factory that creates the instances of the model. | ||
221 | * @generated | ||
222 | */ | ||
223 | SocialnetworkFactory getSocialnetworkFactory(); | ||
224 | |||
225 | /** | ||
226 | * <!-- begin-user-doc --> | ||
227 | * Defines literals for the meta objects that represent | ||
228 | * <ul> | ||
229 | * <li>each class,</li> | ||
230 | * <li>each feature of each class,</li> | ||
231 | * <li>each operation of each class,</li> | ||
232 | * <li>each enum,</li> | ||
233 | * <li>and each data type</li> | ||
234 | * </ul> | ||
235 | * <!-- end-user-doc --> | ||
236 | * @generated | ||
237 | */ | ||
238 | interface Literals { | ||
239 | /** | ||
240 | * The meta object literal for the '{@link socialnetwork.impl.SocialNetworkImpl <em>Social Network</em>}' class. | ||
241 | * <!-- begin-user-doc --> | ||
242 | * <!-- end-user-doc --> | ||
243 | * @see socialnetwork.impl.SocialNetworkImpl | ||
244 | * @see socialnetwork.impl.SocialnetworkPackageImpl#getSocialNetwork() | ||
245 | * @generated | ||
246 | */ | ||
247 | EClass SOCIAL_NETWORK = eINSTANCE.getSocialNetwork(); | ||
248 | |||
249 | /** | ||
250 | * The meta object literal for the '<em><b>Name</b></em>' attribute feature. | ||
251 | * <!-- begin-user-doc --> | ||
252 | * <!-- end-user-doc --> | ||
253 | * @generated | ||
254 | */ | ||
255 | EAttribute SOCIAL_NETWORK__NAME = eINSTANCE.getSocialNetwork_Name(); | ||
256 | |||
257 | /** | ||
258 | * The meta object literal for the '<em><b>Persons</b></em>' containment reference list feature. | ||
259 | * <!-- begin-user-doc --> | ||
260 | * <!-- end-user-doc --> | ||
261 | * @generated | ||
262 | */ | ||
263 | EReference SOCIAL_NETWORK__PERSONS = eINSTANCE.getSocialNetwork_Persons(); | ||
264 | |||
265 | /** | ||
266 | * The meta object literal for the '{@link socialnetwork.impl.PersonImpl <em>Person</em>}' class. | ||
267 | * <!-- begin-user-doc --> | ||
268 | * <!-- end-user-doc --> | ||
269 | * @see socialnetwork.impl.PersonImpl | ||
270 | * @see socialnetwork.impl.SocialnetworkPackageImpl#getPerson() | ||
271 | * @generated | ||
272 | */ | ||
273 | EClass PERSON = eINSTANCE.getPerson(); | ||
274 | |||
275 | /** | ||
276 | * The meta object literal for the '<em><b>Friends</b></em>' reference list feature. | ||
277 | * <!-- begin-user-doc --> | ||
278 | * <!-- end-user-doc --> | ||
279 | * @generated | ||
280 | */ | ||
281 | EReference PERSON__FRIENDS = eINSTANCE.getPerson_Friends(); | ||
282 | |||
283 | /** | ||
284 | * The meta object literal for the '<em><b>Name</b></em>' attribute feature. | ||
285 | * <!-- begin-user-doc --> | ||
286 | * <!-- end-user-doc --> | ||
287 | * @generated | ||
288 | */ | ||
289 | EAttribute PERSON__NAME = eINSTANCE.getPerson_Name(); | ||
290 | |||
291 | } | ||
292 | |||
293 | } //SocialnetworkPackage | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/impl/PersonImpl.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/impl/PersonImpl.java new file mode 100644 index 00000000..d8bab731 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/impl/PersonImpl.java | |||
@@ -0,0 +1,208 @@ | |||
1 | /** | ||
2 | */ | ||
3 | package socialnetwork.impl; | ||
4 | |||
5 | import java.util.Collection; | ||
6 | |||
7 | import org.eclipse.emf.common.notify.Notification; | ||
8 | |||
9 | import org.eclipse.emf.common.util.EList; | ||
10 | |||
11 | import org.eclipse.emf.ecore.EClass; | ||
12 | |||
13 | import org.eclipse.emf.ecore.impl.ENotificationImpl; | ||
14 | import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; | ||
15 | |||
16 | import org.eclipse.emf.ecore.util.EObjectResolvingEList; | ||
17 | |||
18 | import socialnetwork.Person; | ||
19 | import socialnetwork.SocialnetworkPackage; | ||
20 | |||
21 | /** | ||
22 | * <!-- begin-user-doc --> | ||
23 | * An implementation of the model object '<em><b>Person</b></em>'. | ||
24 | * <!-- end-user-doc --> | ||
25 | * <p> | ||
26 | * The following features are implemented: | ||
27 | * </p> | ||
28 | * <ul> | ||
29 | * <li>{@link socialnetwork.impl.PersonImpl#getFriends <em>Friends</em>}</li> | ||
30 | * <li>{@link socialnetwork.impl.PersonImpl#getName <em>Name</em>}</li> | ||
31 | * </ul> | ||
32 | * | ||
33 | * @generated | ||
34 | */ | ||
35 | public class PersonImpl extends MinimalEObjectImpl.Container implements Person { | ||
36 | /** | ||
37 | * The cached value of the '{@link #getFriends() <em>Friends</em>}' reference list. | ||
38 | * <!-- begin-user-doc --> | ||
39 | * <!-- end-user-doc --> | ||
40 | * @see #getFriends() | ||
41 | * @generated | ||
42 | * @ordered | ||
43 | */ | ||
44 | protected EList<Person> friends; | ||
45 | |||
46 | /** | ||
47 | * The default value of the '{@link #getName() <em>Name</em>}' attribute. | ||
48 | * <!-- begin-user-doc --> | ||
49 | * <!-- end-user-doc --> | ||
50 | * @see #getName() | ||
51 | * @generated | ||
52 | * @ordered | ||
53 | */ | ||
54 | protected static final String NAME_EDEFAULT = "Name"; | ||
55 | |||
56 | /** | ||
57 | * The cached value of the '{@link #getName() <em>Name</em>}' attribute. | ||
58 | * <!-- begin-user-doc --> | ||
59 | * <!-- end-user-doc --> | ||
60 | * @see #getName() | ||
61 | * @generated | ||
62 | * @ordered | ||
63 | */ | ||
64 | protected String name = NAME_EDEFAULT; | ||
65 | |||
66 | /** | ||
67 | * <!-- begin-user-doc --> | ||
68 | * <!-- end-user-doc --> | ||
69 | * @generated | ||
70 | */ | ||
71 | protected PersonImpl() { | ||
72 | super(); | ||
73 | } | ||
74 | |||
75 | /** | ||
76 | * <!-- begin-user-doc --> | ||
77 | * <!-- end-user-doc --> | ||
78 | * @generated | ||
79 | */ | ||
80 | @Override | ||
81 | protected EClass eStaticClass() { | ||
82 | return SocialnetworkPackage.Literals.PERSON; | ||
83 | } | ||
84 | |||
85 | /** | ||
86 | * <!-- begin-user-doc --> | ||
87 | * <!-- end-user-doc --> | ||
88 | * @generated | ||
89 | */ | ||
90 | @Override | ||
91 | public EList<Person> getFriends() { | ||
92 | if (friends == null) { | ||
93 | friends = new EObjectResolvingEList<Person>(Person.class, this, SocialnetworkPackage.PERSON__FRIENDS); | ||
94 | } | ||
95 | return friends; | ||
96 | } | ||
97 | |||
98 | /** | ||
99 | * <!-- begin-user-doc --> | ||
100 | * <!-- end-user-doc --> | ||
101 | * @generated | ||
102 | */ | ||
103 | @Override | ||
104 | public String getName() { | ||
105 | return name; | ||
106 | } | ||
107 | |||
108 | /** | ||
109 | * <!-- begin-user-doc --> | ||
110 | * <!-- end-user-doc --> | ||
111 | * @generated | ||
112 | */ | ||
113 | @Override | ||
114 | public void setName(String newName) { | ||
115 | String oldName = name; | ||
116 | name = newName; | ||
117 | if (eNotificationRequired()) | ||
118 | eNotify(new ENotificationImpl(this, Notification.SET, SocialnetworkPackage.PERSON__NAME, oldName, name)); | ||
119 | } | ||
120 | |||
121 | /** | ||
122 | * <!-- begin-user-doc --> | ||
123 | * <!-- end-user-doc --> | ||
124 | * @generated | ||
125 | */ | ||
126 | @Override | ||
127 | public Object eGet(int featureID, boolean resolve, boolean coreType) { | ||
128 | switch (featureID) { | ||
129 | case SocialnetworkPackage.PERSON__FRIENDS: | ||
130 | return getFriends(); | ||
131 | case SocialnetworkPackage.PERSON__NAME: | ||
132 | return getName(); | ||
133 | } | ||
134 | return super.eGet(featureID, resolve, coreType); | ||
135 | } | ||
136 | |||
137 | /** | ||
138 | * <!-- begin-user-doc --> | ||
139 | * <!-- end-user-doc --> | ||
140 | * @generated | ||
141 | */ | ||
142 | @SuppressWarnings("unchecked") | ||
143 | @Override | ||
144 | public void eSet(int featureID, Object newValue) { | ||
145 | switch (featureID) { | ||
146 | case SocialnetworkPackage.PERSON__FRIENDS: | ||
147 | getFriends().clear(); | ||
148 | getFriends().addAll((Collection<? extends Person>) newValue); | ||
149 | return; | ||
150 | case SocialnetworkPackage.PERSON__NAME: | ||
151 | setName((String) newValue); | ||
152 | return; | ||
153 | } | ||
154 | super.eSet(featureID, newValue); | ||
155 | } | ||
156 | |||
157 | /** | ||
158 | * <!-- begin-user-doc --> | ||
159 | * <!-- end-user-doc --> | ||
160 | * @generated | ||
161 | */ | ||
162 | @Override | ||
163 | public void eUnset(int featureID) { | ||
164 | switch (featureID) { | ||
165 | case SocialnetworkPackage.PERSON__FRIENDS: | ||
166 | getFriends().clear(); | ||
167 | return; | ||
168 | case SocialnetworkPackage.PERSON__NAME: | ||
169 | setName(NAME_EDEFAULT); | ||
170 | return; | ||
171 | } | ||
172 | super.eUnset(featureID); | ||
173 | } | ||
174 | |||
175 | /** | ||
176 | * <!-- begin-user-doc --> | ||
177 | * <!-- end-user-doc --> | ||
178 | * @generated | ||
179 | */ | ||
180 | @Override | ||
181 | public boolean eIsSet(int featureID) { | ||
182 | switch (featureID) { | ||
183 | case SocialnetworkPackage.PERSON__FRIENDS: | ||
184 | return friends != null && !friends.isEmpty(); | ||
185 | case SocialnetworkPackage.PERSON__NAME: | ||
186 | return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name); | ||
187 | } | ||
188 | return super.eIsSet(featureID); | ||
189 | } | ||
190 | |||
191 | /** | ||
192 | * <!-- begin-user-doc --> | ||
193 | * <!-- end-user-doc --> | ||
194 | * @generated | ||
195 | */ | ||
196 | @Override | ||
197 | public String toString() { | ||
198 | if (eIsProxy()) | ||
199 | return super.toString(); | ||
200 | |||
201 | StringBuilder result = new StringBuilder(super.toString()); | ||
202 | result.append(" (name: "); | ||
203 | result.append(name); | ||
204 | result.append(')'); | ||
205 | return result.toString(); | ||
206 | } | ||
207 | |||
208 | } //PersonImpl | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/impl/SocialNetworkImpl.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/impl/SocialNetworkImpl.java new file mode 100644 index 00000000..cb28b749 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/impl/SocialNetworkImpl.java | |||
@@ -0,0 +1,228 @@ | |||
1 | /** | ||
2 | */ | ||
3 | package socialnetwork.impl; | ||
4 | |||
5 | import java.util.Collection; | ||
6 | |||
7 | import org.eclipse.emf.common.notify.Notification; | ||
8 | import org.eclipse.emf.common.notify.NotificationChain; | ||
9 | |||
10 | import org.eclipse.emf.common.util.EList; | ||
11 | |||
12 | import org.eclipse.emf.ecore.EClass; | ||
13 | import org.eclipse.emf.ecore.InternalEObject; | ||
14 | |||
15 | import org.eclipse.emf.ecore.impl.ENotificationImpl; | ||
16 | import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; | ||
17 | |||
18 | import org.eclipse.emf.ecore.util.EObjectContainmentEList; | ||
19 | import org.eclipse.emf.ecore.util.InternalEList; | ||
20 | |||
21 | import socialnetwork.Person; | ||
22 | import socialnetwork.SocialNetwork; | ||
23 | import socialnetwork.SocialnetworkPackage; | ||
24 | |||
25 | /** | ||
26 | * <!-- begin-user-doc --> | ||
27 | * An implementation of the model object '<em><b>Social Network</b></em>'. | ||
28 | * <!-- end-user-doc --> | ||
29 | * <p> | ||
30 | * The following features are implemented: | ||
31 | * </p> | ||
32 | * <ul> | ||
33 | * <li>{@link socialnetwork.impl.SocialNetworkImpl#getName <em>Name</em>}</li> | ||
34 | * <li>{@link socialnetwork.impl.SocialNetworkImpl#getPersons <em>Persons</em>}</li> | ||
35 | * </ul> | ||
36 | * | ||
37 | * @generated | ||
38 | */ | ||
39 | public class SocialNetworkImpl extends MinimalEObjectImpl.Container implements SocialNetwork { | ||
40 | /** | ||
41 | * The default value of the '{@link #getName() <em>Name</em>}' attribute. | ||
42 | * <!-- begin-user-doc --> | ||
43 | * <!-- end-user-doc --> | ||
44 | * @see #getName() | ||
45 | * @generated | ||
46 | * @ordered | ||
47 | */ | ||
48 | protected static final String NAME_EDEFAULT = "SocialNetwork"; | ||
49 | |||
50 | /** | ||
51 | * The cached value of the '{@link #getName() <em>Name</em>}' attribute. | ||
52 | * <!-- begin-user-doc --> | ||
53 | * <!-- end-user-doc --> | ||
54 | * @see #getName() | ||
55 | * @generated | ||
56 | * @ordered | ||
57 | */ | ||
58 | protected String name = NAME_EDEFAULT; | ||
59 | |||
60 | /** | ||
61 | * The cached value of the '{@link #getPersons() <em>Persons</em>}' containment reference list. | ||
62 | * <!-- begin-user-doc --> | ||
63 | * <!-- end-user-doc --> | ||
64 | * @see #getPersons() | ||
65 | * @generated | ||
66 | * @ordered | ||
67 | */ | ||
68 | protected EList<Person> persons; | ||
69 | |||
70 | /** | ||
71 | * <!-- begin-user-doc --> | ||
72 | * <!-- end-user-doc --> | ||
73 | * @generated | ||
74 | */ | ||
75 | protected SocialNetworkImpl() { | ||
76 | super(); | ||
77 | } | ||
78 | |||
79 | /** | ||
80 | * <!-- begin-user-doc --> | ||
81 | * <!-- end-user-doc --> | ||
82 | * @generated | ||
83 | */ | ||
84 | @Override | ||
85 | protected EClass eStaticClass() { | ||
86 | return SocialnetworkPackage.Literals.SOCIAL_NETWORK; | ||
87 | } | ||
88 | |||
89 | /** | ||
90 | * <!-- begin-user-doc --> | ||
91 | * <!-- end-user-doc --> | ||
92 | * @generated | ||
93 | */ | ||
94 | @Override | ||
95 | public String getName() { | ||
96 | return name; | ||
97 | } | ||
98 | |||
99 | /** | ||
100 | * <!-- begin-user-doc --> | ||
101 | * <!-- end-user-doc --> | ||
102 | * @generated | ||
103 | */ | ||
104 | @Override | ||
105 | public void setName(String newName) { | ||
106 | String oldName = name; | ||
107 | name = newName; | ||
108 | if (eNotificationRequired()) | ||
109 | eNotify(new ENotificationImpl(this, Notification.SET, SocialnetworkPackage.SOCIAL_NETWORK__NAME, oldName, | ||
110 | name)); | ||
111 | } | ||
112 | |||
113 | /** | ||
114 | * <!-- begin-user-doc --> | ||
115 | * <!-- end-user-doc --> | ||
116 | * @generated | ||
117 | */ | ||
118 | @Override | ||
119 | public EList<Person> getPersons() { | ||
120 | if (persons == null) { | ||
121 | persons = new EObjectContainmentEList<Person>(Person.class, this, | ||
122 | SocialnetworkPackage.SOCIAL_NETWORK__PERSONS); | ||
123 | } | ||
124 | return persons; | ||
125 | } | ||
126 | |||
127 | /** | ||
128 | * <!-- begin-user-doc --> | ||
129 | * <!-- end-user-doc --> | ||
130 | * @generated | ||
131 | */ | ||
132 | @Override | ||
133 | public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { | ||
134 | switch (featureID) { | ||
135 | case SocialnetworkPackage.SOCIAL_NETWORK__PERSONS: | ||
136 | return ((InternalEList<?>) getPersons()).basicRemove(otherEnd, msgs); | ||
137 | } | ||
138 | return super.eInverseRemove(otherEnd, featureID, msgs); | ||
139 | } | ||
140 | |||
141 | /** | ||
142 | * <!-- begin-user-doc --> | ||
143 | * <!-- end-user-doc --> | ||
144 | * @generated | ||
145 | */ | ||
146 | @Override | ||
147 | public Object eGet(int featureID, boolean resolve, boolean coreType) { | ||
148 | switch (featureID) { | ||
149 | case SocialnetworkPackage.SOCIAL_NETWORK__NAME: | ||
150 | return getName(); | ||
151 | case SocialnetworkPackage.SOCIAL_NETWORK__PERSONS: | ||
152 | return getPersons(); | ||
153 | } | ||
154 | return super.eGet(featureID, resolve, coreType); | ||
155 | } | ||
156 | |||
157 | /** | ||
158 | * <!-- begin-user-doc --> | ||
159 | * <!-- end-user-doc --> | ||
160 | * @generated | ||
161 | */ | ||
162 | @SuppressWarnings("unchecked") | ||
163 | @Override | ||
164 | public void eSet(int featureID, Object newValue) { | ||
165 | switch (featureID) { | ||
166 | case SocialnetworkPackage.SOCIAL_NETWORK__NAME: | ||
167 | setName((String) newValue); | ||
168 | return; | ||
169 | case SocialnetworkPackage.SOCIAL_NETWORK__PERSONS: | ||
170 | getPersons().clear(); | ||
171 | getPersons().addAll((Collection<? extends Person>) newValue); | ||
172 | return; | ||
173 | } | ||
174 | super.eSet(featureID, newValue); | ||
175 | } | ||
176 | |||
177 | /** | ||
178 | * <!-- begin-user-doc --> | ||
179 | * <!-- end-user-doc --> | ||
180 | * @generated | ||
181 | */ | ||
182 | @Override | ||
183 | public void eUnset(int featureID) { | ||
184 | switch (featureID) { | ||
185 | case SocialnetworkPackage.SOCIAL_NETWORK__NAME: | ||
186 | setName(NAME_EDEFAULT); | ||
187 | return; | ||
188 | case SocialnetworkPackage.SOCIAL_NETWORK__PERSONS: | ||
189 | getPersons().clear(); | ||
190 | return; | ||
191 | } | ||
192 | super.eUnset(featureID); | ||
193 | } | ||
194 | |||
195 | /** | ||
196 | * <!-- begin-user-doc --> | ||
197 | * <!-- end-user-doc --> | ||
198 | * @generated | ||
199 | */ | ||
200 | @Override | ||
201 | public boolean eIsSet(int featureID) { | ||
202 | switch (featureID) { | ||
203 | case SocialnetworkPackage.SOCIAL_NETWORK__NAME: | ||
204 | return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name); | ||
205 | case SocialnetworkPackage.SOCIAL_NETWORK__PERSONS: | ||
206 | return persons != null && !persons.isEmpty(); | ||
207 | } | ||
208 | return super.eIsSet(featureID); | ||
209 | } | ||
210 | |||
211 | /** | ||
212 | * <!-- begin-user-doc --> | ||
213 | * <!-- end-user-doc --> | ||
214 | * @generated | ||
215 | */ | ||
216 | @Override | ||
217 | public String toString() { | ||
218 | if (eIsProxy()) | ||
219 | return super.toString(); | ||
220 | |||
221 | StringBuilder result = new StringBuilder(super.toString()); | ||
222 | result.append(" (name: "); | ||
223 | result.append(name); | ||
224 | result.append(')'); | ||
225 | return result.toString(); | ||
226 | } | ||
227 | |||
228 | } //SocialNetworkImpl | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/impl/SocialnetworkFactoryImpl.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/impl/SocialnetworkFactoryImpl.java new file mode 100644 index 00000000..87fa3a87 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/impl/SocialnetworkFactoryImpl.java | |||
@@ -0,0 +1,111 @@ | |||
1 | /** | ||
2 | */ | ||
3 | package socialnetwork.impl; | ||
4 | |||
5 | import org.eclipse.emf.ecore.EClass; | ||
6 | import org.eclipse.emf.ecore.EObject; | ||
7 | import org.eclipse.emf.ecore.EPackage; | ||
8 | |||
9 | import org.eclipse.emf.ecore.impl.EFactoryImpl; | ||
10 | |||
11 | import org.eclipse.emf.ecore.plugin.EcorePlugin; | ||
12 | |||
13 | import socialnetwork.*; | ||
14 | |||
15 | /** | ||
16 | * <!-- begin-user-doc --> | ||
17 | * An implementation of the model <b>Factory</b>. | ||
18 | * <!-- end-user-doc --> | ||
19 | * @generated | ||
20 | */ | ||
21 | public class SocialnetworkFactoryImpl extends EFactoryImpl implements SocialnetworkFactory { | ||
22 | /** | ||
23 | * Creates the default factory implementation. | ||
24 | * <!-- begin-user-doc --> | ||
25 | * <!-- end-user-doc --> | ||
26 | * @generated | ||
27 | */ | ||
28 | public static SocialnetworkFactory init() { | ||
29 | try { | ||
30 | SocialnetworkFactory theSocialnetworkFactory = (SocialnetworkFactory) EPackage.Registry.INSTANCE | ||
31 | .getEFactory(SocialnetworkPackage.eNS_URI); | ||
32 | if (theSocialnetworkFactory != null) { | ||
33 | return theSocialnetworkFactory; | ||
34 | } | ||
35 | } catch (Exception exception) { | ||
36 | EcorePlugin.INSTANCE.log(exception); | ||
37 | } | ||
38 | return new SocialnetworkFactoryImpl(); | ||
39 | } | ||
40 | |||
41 | /** | ||
42 | * Creates an instance of the factory. | ||
43 | * <!-- begin-user-doc --> | ||
44 | * <!-- end-user-doc --> | ||
45 | * @generated | ||
46 | */ | ||
47 | public SocialnetworkFactoryImpl() { | ||
48 | super(); | ||
49 | } | ||
50 | |||
51 | /** | ||
52 | * <!-- begin-user-doc --> | ||
53 | * <!-- end-user-doc --> | ||
54 | * @generated | ||
55 | */ | ||
56 | @Override | ||
57 | public EObject create(EClass eClass) { | ||
58 | switch (eClass.getClassifierID()) { | ||
59 | case SocialnetworkPackage.SOCIAL_NETWORK: | ||
60 | return createSocialNetwork(); | ||
61 | case SocialnetworkPackage.PERSON: | ||
62 | return createPerson(); | ||
63 | default: | ||
64 | throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); | ||
65 | } | ||
66 | } | ||
67 | |||
68 | /** | ||
69 | * <!-- begin-user-doc --> | ||
70 | * <!-- end-user-doc --> | ||
71 | * @generated | ||
72 | */ | ||
73 | @Override | ||
74 | public SocialNetwork createSocialNetwork() { | ||
75 | SocialNetworkImpl socialNetwork = new SocialNetworkImpl(); | ||
76 | return socialNetwork; | ||
77 | } | ||
78 | |||
79 | /** | ||
80 | * <!-- begin-user-doc --> | ||
81 | * <!-- end-user-doc --> | ||
82 | * @generated | ||
83 | */ | ||
84 | @Override | ||
85 | public Person createPerson() { | ||
86 | PersonImpl person = new PersonImpl(); | ||
87 | return person; | ||
88 | } | ||
89 | |||
90 | /** | ||
91 | * <!-- begin-user-doc --> | ||
92 | * <!-- end-user-doc --> | ||
93 | * @generated | ||
94 | */ | ||
95 | @Override | ||
96 | public SocialnetworkPackage getSocialnetworkPackage() { | ||
97 | return (SocialnetworkPackage) getEPackage(); | ||
98 | } | ||
99 | |||
100 | /** | ||
101 | * <!-- begin-user-doc --> | ||
102 | * <!-- end-user-doc --> | ||
103 | * @deprecated | ||
104 | * @generated | ||
105 | */ | ||
106 | @Deprecated | ||
107 | public static SocialnetworkPackage getPackage() { | ||
108 | return SocialnetworkPackage.eINSTANCE; | ||
109 | } | ||
110 | |||
111 | } //SocialnetworkFactoryImpl | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/impl/SocialnetworkPackageImpl.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/impl/SocialnetworkPackageImpl.java new file mode 100644 index 00000000..7588df50 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/impl/SocialnetworkPackageImpl.java | |||
@@ -0,0 +1,267 @@ | |||
1 | /** | ||
2 | */ | ||
3 | package socialnetwork.impl; | ||
4 | |||
5 | import org.eclipse.emf.ecore.EAttribute; | ||
6 | import org.eclipse.emf.ecore.EClass; | ||
7 | import org.eclipse.emf.ecore.EPackage; | ||
8 | import org.eclipse.emf.ecore.EReference; | ||
9 | |||
10 | import org.eclipse.emf.ecore.impl.EPackageImpl; | ||
11 | |||
12 | import socialnetwork.Person; | ||
13 | import socialnetwork.SocialNetwork; | ||
14 | import socialnetwork.SocialnetworkFactory; | ||
15 | import socialnetwork.SocialnetworkPackage; | ||
16 | |||
17 | /** | ||
18 | * <!-- begin-user-doc --> | ||
19 | * An implementation of the model <b>Package</b>. | ||
20 | * <!-- end-user-doc --> | ||
21 | * @generated | ||
22 | */ | ||
23 | public class SocialnetworkPackageImpl extends EPackageImpl implements SocialnetworkPackage { | ||
24 | /** | ||
25 | * <!-- begin-user-doc --> | ||
26 | * <!-- end-user-doc --> | ||
27 | * @generated | ||
28 | */ | ||
29 | private EClass socialNetworkEClass = null; | ||
30 | |||
31 | /** | ||
32 | * <!-- begin-user-doc --> | ||
33 | * <!-- end-user-doc --> | ||
34 | * @generated | ||
35 | */ | ||
36 | private EClass personEClass = null; | ||
37 | |||
38 | /** | ||
39 | * Creates an instance of the model <b>Package</b>, registered with | ||
40 | * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package | ||
41 | * package URI value. | ||
42 | * <p>Note: the correct way to create the package is via the static | ||
43 | * factory method {@link #init init()}, which also performs | ||
44 | * initialization of the package, or returns the registered package, | ||
45 | * if one already exists. | ||
46 | * <!-- begin-user-doc --> | ||
47 | * <!-- end-user-doc --> | ||
48 | * @see org.eclipse.emf.ecore.EPackage.Registry | ||
49 | * @see socialnetwork.SocialnetworkPackage#eNS_URI | ||
50 | * @see #init() | ||
51 | * @generated | ||
52 | */ | ||
53 | private SocialnetworkPackageImpl() { | ||
54 | super(eNS_URI, SocialnetworkFactory.eINSTANCE); | ||
55 | } | ||
56 | |||
57 | /** | ||
58 | * <!-- begin-user-doc --> | ||
59 | * <!-- end-user-doc --> | ||
60 | * @generated | ||
61 | */ | ||
62 | private static boolean isInited = false; | ||
63 | |||
64 | /** | ||
65 | * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends. | ||
66 | * | ||
67 | * <p>This method is used to initialize {@link SocialnetworkPackage#eINSTANCE} when that field is accessed. | ||
68 | * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package. | ||
69 | * <!-- begin-user-doc --> | ||
70 | * <!-- end-user-doc --> | ||
71 | * @see #eNS_URI | ||
72 | * @see #createPackageContents() | ||
73 | * @see #initializePackageContents() | ||
74 | * @generated | ||
75 | */ | ||
76 | public static SocialnetworkPackage init() { | ||
77 | if (isInited) | ||
78 | return (SocialnetworkPackage) EPackage.Registry.INSTANCE.getEPackage(SocialnetworkPackage.eNS_URI); | ||
79 | |||
80 | // Obtain or create and register package | ||
81 | Object registeredSocialnetworkPackage = EPackage.Registry.INSTANCE.get(eNS_URI); | ||
82 | SocialnetworkPackageImpl theSocialnetworkPackage = registeredSocialnetworkPackage instanceof SocialnetworkPackageImpl | ||
83 | ? (SocialnetworkPackageImpl) registeredSocialnetworkPackage | ||
84 | : new SocialnetworkPackageImpl(); | ||
85 | |||
86 | isInited = true; | ||
87 | |||
88 | // Create package meta-data objects | ||
89 | theSocialnetworkPackage.createPackageContents(); | ||
90 | |||
91 | // Initialize created meta-data | ||
92 | theSocialnetworkPackage.initializePackageContents(); | ||
93 | |||
94 | // Mark meta-data to indicate it can't be changed | ||
95 | theSocialnetworkPackage.freeze(); | ||
96 | |||
97 | // Update the registry and return the package | ||
98 | EPackage.Registry.INSTANCE.put(SocialnetworkPackage.eNS_URI, theSocialnetworkPackage); | ||
99 | return theSocialnetworkPackage; | ||
100 | } | ||
101 | |||
102 | /** | ||
103 | * <!-- begin-user-doc --> | ||
104 | * <!-- end-user-doc --> | ||
105 | * @generated | ||
106 | */ | ||
107 | @Override | ||
108 | public EClass getSocialNetwork() { | ||
109 | return socialNetworkEClass; | ||
110 | } | ||
111 | |||
112 | /** | ||
113 | * <!-- begin-user-doc --> | ||
114 | * <!-- end-user-doc --> | ||
115 | * @generated | ||
116 | */ | ||
117 | @Override | ||
118 | public EAttribute getSocialNetwork_Name() { | ||
119 | return (EAttribute) socialNetworkEClass.getEStructuralFeatures().get(0); | ||
120 | } | ||
121 | |||
122 | /** | ||
123 | * <!-- begin-user-doc --> | ||
124 | * <!-- end-user-doc --> | ||
125 | * @generated | ||
126 | */ | ||
127 | @Override | ||
128 | public EReference getSocialNetwork_Persons() { | ||
129 | return (EReference) socialNetworkEClass.getEStructuralFeatures().get(1); | ||
130 | } | ||
131 | |||
132 | /** | ||
133 | * <!-- begin-user-doc --> | ||
134 | * <!-- end-user-doc --> | ||
135 | * @generated | ||
136 | */ | ||
137 | @Override | ||
138 | public EClass getPerson() { | ||
139 | return personEClass; | ||
140 | } | ||
141 | |||
142 | /** | ||
143 | * <!-- begin-user-doc --> | ||
144 | * <!-- end-user-doc --> | ||
145 | * @generated | ||
146 | */ | ||
147 | @Override | ||
148 | public EReference getPerson_Friends() { | ||
149 | return (EReference) personEClass.getEStructuralFeatures().get(0); | ||
150 | } | ||
151 | |||
152 | /** | ||
153 | * <!-- begin-user-doc --> | ||
154 | * <!-- end-user-doc --> | ||
155 | * @generated | ||
156 | */ | ||
157 | @Override | ||
158 | public EAttribute getPerson_Name() { | ||
159 | return (EAttribute) personEClass.getEStructuralFeatures().get(1); | ||
160 | } | ||
161 | |||
162 | /** | ||
163 | * <!-- begin-user-doc --> | ||
164 | * <!-- end-user-doc --> | ||
165 | * @generated | ||
166 | */ | ||
167 | @Override | ||
168 | public SocialnetworkFactory getSocialnetworkFactory() { | ||
169 | return (SocialnetworkFactory) getEFactoryInstance(); | ||
170 | } | ||
171 | |||
172 | /** | ||
173 | * <!-- begin-user-doc --> | ||
174 | * <!-- end-user-doc --> | ||
175 | * @generated | ||
176 | */ | ||
177 | private boolean isCreated = false; | ||
178 | |||
179 | /** | ||
180 | * Creates the meta-model objects for the package. This method is | ||
181 | * guarded to have no affect on any invocation but its first. | ||
182 | * <!-- begin-user-doc --> | ||
183 | * <!-- end-user-doc --> | ||
184 | * @generated | ||
185 | */ | ||
186 | public void createPackageContents() { | ||
187 | if (isCreated) | ||
188 | return; | ||
189 | isCreated = true; | ||
190 | |||
191 | // Create classes and their features | ||
192 | socialNetworkEClass = createEClass(SOCIAL_NETWORK); | ||
193 | createEAttribute(socialNetworkEClass, SOCIAL_NETWORK__NAME); | ||
194 | createEReference(socialNetworkEClass, SOCIAL_NETWORK__PERSONS); | ||
195 | |||
196 | personEClass = createEClass(PERSON); | ||
197 | createEReference(personEClass, PERSON__FRIENDS); | ||
198 | createEAttribute(personEClass, PERSON__NAME); | ||
199 | } | ||
200 | |||
201 | /** | ||
202 | * <!-- begin-user-doc --> | ||
203 | * <!-- end-user-doc --> | ||
204 | * @generated | ||
205 | */ | ||
206 | private boolean isInitialized = false; | ||
207 | |||
208 | /** | ||
209 | * Complete the initialization of the package and its meta-model. This | ||
210 | * method is guarded to have no affect on any invocation but its first. | ||
211 | * <!-- begin-user-doc --> | ||
212 | * <!-- end-user-doc --> | ||
213 | * @generated | ||
214 | */ | ||
215 | public void initializePackageContents() { | ||
216 | if (isInitialized) | ||
217 | return; | ||
218 | isInitialized = true; | ||
219 | |||
220 | // Initialize package | ||
221 | setName(eNAME); | ||
222 | setNsPrefix(eNS_PREFIX); | ||
223 | setNsURI(eNS_URI); | ||
224 | |||
225 | // Create type parameters | ||
226 | |||
227 | // Set bounds for type parameters | ||
228 | |||
229 | // Add supertypes to classes | ||
230 | |||
231 | // Initialize classes, features, and operations; add parameters | ||
232 | initEClass(socialNetworkEClass, SocialNetwork.class, "SocialNetwork", !IS_ABSTRACT, !IS_INTERFACE, | ||
233 | IS_GENERATED_INSTANCE_CLASS); | ||
234 | initEAttribute(getSocialNetwork_Name(), ecorePackage.getEString(), "name", "SocialNetwork", 0, 1, | ||
235 | SocialNetwork.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, | ||
236 | !IS_DERIVED, IS_ORDERED); | ||
237 | initEReference(getSocialNetwork_Persons(), this.getPerson(), null, "persons", null, 0, -1, SocialNetwork.class, | ||
238 | !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, | ||
239 | IS_UNIQUE, !IS_DERIVED, IS_ORDERED); | ||
240 | |||
241 | initEClass(personEClass, Person.class, "Person", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); | ||
242 | initEReference(getPerson_Friends(), this.getPerson(), null, "friends", null, 0, -1, Person.class, !IS_TRANSIENT, | ||
243 | !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, | ||
244 | IS_ORDERED); | ||
245 | initEAttribute(getPerson_Name(), ecorePackage.getEString(), "name", "Name", 0, 1, Person.class, !IS_TRANSIENT, | ||
246 | !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); | ||
247 | |||
248 | // Create resource | ||
249 | createResource(eNS_URI); | ||
250 | |||
251 | // Create annotations | ||
252 | // http://www.eclipse.org/emf/2002/Ecore | ||
253 | createEcoreAnnotations(); | ||
254 | } | ||
255 | |||
256 | /** | ||
257 | * Initializes the annotations for <b>http://www.eclipse.org/emf/2002/Ecore</b>. | ||
258 | * <!-- begin-user-doc --> | ||
259 | * <!-- end-user-doc --> | ||
260 | * @generated | ||
261 | */ | ||
262 | protected void createEcoreAnnotations() { | ||
263 | String source = "http://www.eclipse.org/emf/2002/Ecore"; | ||
264 | addAnnotation(this, source, new String[] {}); | ||
265 | } | ||
266 | |||
267 | } //SocialnetworkPackageImpl | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/util/SocialnetworkAdapterFactory.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/util/SocialnetworkAdapterFactory.java new file mode 100644 index 00000000..0dd30975 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/util/SocialnetworkAdapterFactory.java | |||
@@ -0,0 +1,138 @@ | |||
1 | /** | ||
2 | */ | ||
3 | package socialnetwork.util; | ||
4 | |||
5 | import org.eclipse.emf.common.notify.Adapter; | ||
6 | import org.eclipse.emf.common.notify.Notifier; | ||
7 | |||
8 | import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl; | ||
9 | |||
10 | import org.eclipse.emf.ecore.EObject; | ||
11 | |||
12 | import socialnetwork.*; | ||
13 | |||
14 | /** | ||
15 | * <!-- begin-user-doc --> | ||
16 | * The <b>Adapter Factory</b> for the model. | ||
17 | * It provides an adapter <code>createXXX</code> method for each class of the model. | ||
18 | * <!-- end-user-doc --> | ||
19 | * @see socialnetwork.SocialnetworkPackage | ||
20 | * @generated | ||
21 | */ | ||
22 | public class SocialnetworkAdapterFactory extends AdapterFactoryImpl { | ||
23 | /** | ||
24 | * The cached model package. | ||
25 | * <!-- begin-user-doc --> | ||
26 | * <!-- end-user-doc --> | ||
27 | * @generated | ||
28 | */ | ||
29 | protected static SocialnetworkPackage modelPackage; | ||
30 | |||
31 | /** | ||
32 | * Creates an instance of the adapter factory. | ||
33 | * <!-- begin-user-doc --> | ||
34 | * <!-- end-user-doc --> | ||
35 | * @generated | ||
36 | */ | ||
37 | public SocialnetworkAdapterFactory() { | ||
38 | if (modelPackage == null) { | ||
39 | modelPackage = SocialnetworkPackage.eINSTANCE; | ||
40 | } | ||
41 | } | ||
42 | |||
43 | /** | ||
44 | * Returns whether this factory is applicable for the type of the object. | ||
45 | * <!-- begin-user-doc --> | ||
46 | * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model. | ||
47 | * <!-- end-user-doc --> | ||
48 | * @return whether this factory is applicable for the type of the object. | ||
49 | * @generated | ||
50 | */ | ||
51 | @Override | ||
52 | public boolean isFactoryForType(Object object) { | ||
53 | if (object == modelPackage) { | ||
54 | return true; | ||
55 | } | ||
56 | if (object instanceof EObject) { | ||
57 | return ((EObject) object).eClass().getEPackage() == modelPackage; | ||
58 | } | ||
59 | return false; | ||
60 | } | ||
61 | |||
62 | /** | ||
63 | * The switch that delegates to the <code>createXXX</code> methods. | ||
64 | * <!-- begin-user-doc --> | ||
65 | * <!-- end-user-doc --> | ||
66 | * @generated | ||
67 | */ | ||
68 | protected SocialnetworkSwitch<Adapter> modelSwitch = new SocialnetworkSwitch<Adapter>() { | ||
69 | @Override | ||
70 | public Adapter caseSocialNetwork(SocialNetwork object) { | ||
71 | return createSocialNetworkAdapter(); | ||
72 | } | ||
73 | |||
74 | @Override | ||
75 | public Adapter casePerson(Person object) { | ||
76 | return createPersonAdapter(); | ||
77 | } | ||
78 | |||
79 | @Override | ||
80 | public Adapter defaultCase(EObject object) { | ||
81 | return createEObjectAdapter(); | ||
82 | } | ||
83 | }; | ||
84 | |||
85 | /** | ||
86 | * Creates an adapter for the <code>target</code>. | ||
87 | * <!-- begin-user-doc --> | ||
88 | * <!-- end-user-doc --> | ||
89 | * @param target the object to adapt. | ||
90 | * @return the adapter for the <code>target</code>. | ||
91 | * @generated | ||
92 | */ | ||
93 | @Override | ||
94 | public Adapter createAdapter(Notifier target) { | ||
95 | return modelSwitch.doSwitch((EObject) target); | ||
96 | } | ||
97 | |||
98 | /** | ||
99 | * Creates a new adapter for an object of class '{@link socialnetwork.SocialNetwork <em>Social Network</em>}'. | ||
100 | * <!-- begin-user-doc --> | ||
101 | * This default implementation returns null so that we can easily ignore cases; | ||
102 | * it's useful to ignore a case when inheritance will catch all the cases anyway. | ||
103 | * <!-- end-user-doc --> | ||
104 | * @return the new adapter. | ||
105 | * @see socialnetwork.SocialNetwork | ||
106 | * @generated | ||
107 | */ | ||
108 | public Adapter createSocialNetworkAdapter() { | ||
109 | return null; | ||
110 | } | ||
111 | |||
112 | /** | ||
113 | * Creates a new adapter for an object of class '{@link socialnetwork.Person <em>Person</em>}'. | ||
114 | * <!-- begin-user-doc --> | ||
115 | * This default implementation returns null so that we can easily ignore cases; | ||
116 | * it's useful to ignore a case when inheritance will catch all the cases anyway. | ||
117 | * <!-- end-user-doc --> | ||
118 | * @return the new adapter. | ||
119 | * @see socialnetwork.Person | ||
120 | * @generated | ||
121 | */ | ||
122 | public Adapter createPersonAdapter() { | ||
123 | return null; | ||
124 | } | ||
125 | |||
126 | /** | ||
127 | * Creates a new adapter for the default case. | ||
128 | * <!-- begin-user-doc --> | ||
129 | * This default implementation returns null. | ||
130 | * <!-- end-user-doc --> | ||
131 | * @return the new adapter. | ||
132 | * @generated | ||
133 | */ | ||
134 | public Adapter createEObjectAdapter() { | ||
135 | return null; | ||
136 | } | ||
137 | |||
138 | } //SocialnetworkAdapterFactory | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/util/SocialnetworkSwitch.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/util/SocialnetworkSwitch.java new file mode 100644 index 00000000..00d7955c --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/encore_gen/socialnetwork/util/SocialnetworkSwitch.java | |||
@@ -0,0 +1,134 @@ | |||
1 | /** | ||
2 | */ | ||
3 | package socialnetwork.util; | ||
4 | |||
5 | import org.eclipse.emf.ecore.EObject; | ||
6 | import org.eclipse.emf.ecore.EPackage; | ||
7 | |||
8 | import org.eclipse.emf.ecore.util.Switch; | ||
9 | |||
10 | import socialnetwork.*; | ||
11 | |||
12 | /** | ||
13 | * <!-- begin-user-doc --> | ||
14 | * The <b>Switch</b> for the model's inheritance hierarchy. | ||
15 | * It supports the call {@link #doSwitch(EObject) doSwitch(object)} | ||
16 | * to invoke the <code>caseXXX</code> method for each class of the model, | ||
17 | * starting with the actual class of the object | ||
18 | * and proceeding up the inheritance hierarchy | ||
19 | * until a non-null result is returned, | ||
20 | * which is the result of the switch. | ||
21 | * <!-- end-user-doc --> | ||
22 | * @see socialnetwork.SocialnetworkPackage | ||
23 | * @generated | ||
24 | */ | ||
25 | public class SocialnetworkSwitch<T> extends Switch<T> { | ||
26 | /** | ||
27 | * The cached model package | ||
28 | * <!-- begin-user-doc --> | ||
29 | * <!-- end-user-doc --> | ||
30 | * @generated | ||
31 | */ | ||
32 | protected static SocialnetworkPackage modelPackage; | ||
33 | |||
34 | /** | ||
35 | * Creates an instance of the switch. | ||
36 | * <!-- begin-user-doc --> | ||
37 | * <!-- end-user-doc --> | ||
38 | * @generated | ||
39 | */ | ||
40 | public SocialnetworkSwitch() { | ||
41 | if (modelPackage == null) { | ||
42 | modelPackage = SocialnetworkPackage.eINSTANCE; | ||
43 | } | ||
44 | } | ||
45 | |||
46 | /** | ||
47 | * Checks whether this is a switch for the given package. | ||
48 | * <!-- begin-user-doc --> | ||
49 | * <!-- end-user-doc --> | ||
50 | * @param ePackage the package in question. | ||
51 | * @return whether this is a switch for the given package. | ||
52 | * @generated | ||
53 | */ | ||
54 | @Override | ||
55 | protected boolean isSwitchFor(EPackage ePackage) { | ||
56 | return ePackage == modelPackage; | ||
57 | } | ||
58 | |||
59 | /** | ||
60 | * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result. | ||
61 | * <!-- begin-user-doc --> | ||
62 | * <!-- end-user-doc --> | ||
63 | * @return the first non-null result returned by a <code>caseXXX</code> call. | ||
64 | * @generated | ||
65 | */ | ||
66 | @Override | ||
67 | protected T doSwitch(int classifierID, EObject theEObject) { | ||
68 | switch (classifierID) { | ||
69 | case SocialnetworkPackage.SOCIAL_NETWORK: { | ||
70 | SocialNetwork socialNetwork = (SocialNetwork) theEObject; | ||
71 | T result = caseSocialNetwork(socialNetwork); | ||
72 | if (result == null) | ||
73 | result = defaultCase(theEObject); | ||
74 | return result; | ||
75 | } | ||
76 | case SocialnetworkPackage.PERSON: { | ||
77 | Person person = (Person) theEObject; | ||
78 | T result = casePerson(person); | ||
79 | if (result == null) | ||
80 | result = defaultCase(theEObject); | ||
81 | return result; | ||
82 | } | ||
83 | default: | ||
84 | return defaultCase(theEObject); | ||
85 | } | ||
86 | } | ||
87 | |||
88 | /** | ||
89 | * Returns the result of interpreting the object as an instance of '<em>Social Network</em>'. | ||
90 | * <!-- begin-user-doc --> | ||
91 | * This implementation returns null; | ||
92 | * returning a non-null result will terminate the switch. | ||
93 | * <!-- end-user-doc --> | ||
94 | * @param object the target of the switch. | ||
95 | * @return the result of interpreting the object as an instance of '<em>Social Network</em>'. | ||
96 | * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) | ||
97 | * @generated | ||
98 | */ | ||
99 | public T caseSocialNetwork(SocialNetwork object) { | ||
100 | return null; | ||
101 | } | ||
102 | |||
103 | /** | ||
104 | * Returns the result of interpreting the object as an instance of '<em>Person</em>'. | ||
105 | * <!-- begin-user-doc --> | ||
106 | * This implementation returns null; | ||
107 | * returning a non-null result will terminate the switch. | ||
108 | * <!-- end-user-doc --> | ||
109 | * @param object the target of the switch. | ||
110 | * @return the result of interpreting the object as an instance of '<em>Person</em>'. | ||
111 | * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) | ||
112 | * @generated | ||
113 | */ | ||
114 | public T casePerson(Person object) { | ||
115 | return null; | ||
116 | } | ||
117 | |||
118 | /** | ||
119 | * Returns the result of interpreting the object as an instance of '<em>EObject</em>'. | ||
120 | * <!-- begin-user-doc --> | ||
121 | * This implementation returns null; | ||
122 | * returning a non-null result will terminate the switch, but this is the last case anyway. | ||
123 | * <!-- end-user-doc --> | ||
124 | * @param object the target of the switch. | ||
125 | * @return the result of interpreting the object as an instance of '<em>EObject</em>'. | ||
126 | * @see #doSwitch(org.eclipse.emf.ecore.EObject) | ||
127 | * @generated | ||
128 | */ | ||
129 | @Override | ||
130 | public T defaultCase(EObject object) { | ||
131 | return null; | ||
132 | } | ||
133 | |||
134 | } //SocialnetworkSwitch | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/generator.vqgen b/Metrics/Metrics-Calculation/SocialNetwork_plugin/generator.vqgen new file mode 100644 index 00000000..902285d1 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/generator.vqgen | |||
@@ -0,0 +1 @@ | |||
genmodel "platform:/resource/SocialNetwork_plugin/model/socialnetwork.genmodel" \ No newline at end of file | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/github.vsconfig b/Metrics/Metrics-Calculation/SocialNetwork_plugin/github.vsconfig new file mode 100644 index 00000000..f037156a --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/github.vsconfig | |||
@@ -0,0 +1,212 @@ | |||
1 | import epackage "../../../Domains/github-graph/model/github.ecore" | ||
2 | import viatra "../../../Domains/github-graph/queries/queries/github.vql" | ||
3 | |||
4 | generate { | ||
5 | metamodel = {package github excluding{ Project.creatd_at, Project.updated_at, Project.url, User.name, User.url, | ||
6 | Commit.created_at, Commit.sha, Commit.parents_sha, Issue.created_at, Issue.url, PullRequest.url, IssueEvent.created_at, | ||
7 | IssueEvent.actor_url, Action, IssueEvent.action, Project.deleted}} | ||
8 | partial-model = { "inputs/github.xmi"} | ||
9 | constraints = { package queries } | ||
10 | |||
11 | |||
12 | solver = ViatraSolver | ||
13 | |||
14 | scope = { | ||
15 | #node = 30 | ||
16 | } | ||
17 | |||
18 | number = 1 | ||
19 | runs = 5 | ||
20 | config = { | ||
21 | log-level = none, | ||
22 | runtime = 300, | ||
23 | "optional-wf" = "false", | ||
24 | "realistic-guidance" = "Composite", | ||
25 | "allow-must-violations" = "false", | ||
26 | "domain" = "Github" | ||
27 | } | ||
28 | |||
29 | debug = "debug" | ||
30 | statistics = "statistics/Github/warmup.csv" | ||
31 | output = "output/Github/Composite" | ||
32 | } | ||
33 | |||
34 | // generate { | ||
35 | // metamodel = {package github excluding{ Project.creatd_at, Project.updated_at, Project.url, User.name, User.url, | ||
36 | // Commit.created_at, Commit.sha, Commit.parents_sha, Issue.created_at, Issue.url, PullRequest.url, IssueEvent.created_at, | ||
37 | // IssueEvent.actor_url, Action, IssueEvent.action, Project.deleted}} | ||
38 | // partial-model = { "inputs/github.xmi"} | ||
39 | // constraints = { package queries } | ||
40 | |||
41 | |||
42 | // solver = ViatraSolver | ||
43 | |||
44 | // scope = { | ||
45 | // #node = 30 | ||
46 | // } | ||
47 | |||
48 | // number = 1 | ||
49 | // runs = 20 | ||
50 | // config = { | ||
51 | // log-level = none, | ||
52 | // runtime = 300, | ||
53 | // "optional-wf" = "true", | ||
54 | // "realistic-guidance" = "Composite", | ||
55 | // "allow-must-violations" = "true", | ||
56 | // "domain" = "Github" | ||
57 | // } | ||
58 | |||
59 | // debug = "debug" | ||
60 | // statistics = "statistics/Github/30.csv" | ||
61 | // output = "output/Github/Composite" | ||
62 | // } | ||
63 | |||
64 | // generate { | ||
65 | // metamodel = {package github excluding{ Project.creatd_at, Project.updated_at, Project.url, User.name, User.url, | ||
66 | // Commit.created_at, Commit.sha, Commit.parents_sha, Issue.created_at, Issue.url, PullRequest.url, IssueEvent.created_at, | ||
67 | // IssueEvent.actor_url, Action, IssueEvent.action, Project.deleted}} | ||
68 | // partial-model = { "inputs/github.xmi"} | ||
69 | // constraints = { package queries } | ||
70 | |||
71 | |||
72 | // solver = ViatraSolver | ||
73 | |||
74 | // scope = { | ||
75 | // #node = 50 | ||
76 | // } | ||
77 | |||
78 | // number = 1 | ||
79 | // runs = 20 | ||
80 | // config = { | ||
81 | // log-level = none, | ||
82 | // runtime = 300, | ||
83 | // "optional-wf" = "true", | ||
84 | // "realistic-guidance" = "Composite", | ||
85 | // "allow-must-violations" = "true", | ||
86 | // "domain" = "Github" | ||
87 | // } | ||
88 | |||
89 | // debug = "debug" | ||
90 | // statistics = "statistics/Github/50.csv" | ||
91 | // output = "output/Github/Composite" | ||
92 | // } | ||
93 | |||
94 | // generate { | ||
95 | // metamodel = {package github excluding{ Project.creatd_at, Project.updated_at, Project.url, User.name, User.url, | ||
96 | // Commit.created_at, Commit.sha, Commit.parents_sha, Issue.created_at, Issue.url, PullRequest.url, IssueEvent.created_at, | ||
97 | // IssueEvent.actor_url, Action, IssueEvent.action, Project.deleted}} | ||
98 | // partial-model = { "inputs/github.xmi"} | ||
99 | // constraints = { package queries } | ||
100 | |||
101 | |||
102 | // solver = ViatraSolver | ||
103 | |||
104 | // scope = { | ||
105 | // #node = 80 | ||
106 | // } | ||
107 | |||
108 | // number = 1 | ||
109 | // runs = 20 | ||
110 | // config = { | ||
111 | // log-level = none, | ||
112 | // runtime = 300, | ||
113 | // "optional-wf" = "true", | ||
114 | // "realistic-guidance" = "Composite", | ||
115 | // "allow-must-violations" = "true", | ||
116 | // "domain" = "Github" | ||
117 | // } | ||
118 | |||
119 | // debug = "debug" | ||
120 | // statistics = "statistics/Github/80.csv" | ||
121 | // output = "output/Github/Composite" | ||
122 | // } | ||
123 | |||
124 | // generate { | ||
125 | // metamodel = {package github excluding{ Project.creatd_at, Project.updated_at, Project.url, User.name, User.url, | ||
126 | // Commit.created_at, Commit.sha, Commit.parents_sha, Issue.created_at, Issue.url, PullRequest.url, IssueEvent.created_at, | ||
127 | // IssueEvent.actor_url, Action, IssueEvent.action, Project.deleted}} | ||
128 | // partial-model = { "inputs/github.xmi"} | ||
129 | // constraints = { package queries } | ||
130 | |||
131 | |||
132 | // solver = ViatraSolver | ||
133 | |||
134 | // scope = { | ||
135 | // #node = 100 | ||
136 | // } | ||
137 | |||
138 | // number = 1 | ||
139 | // runs = 20 | ||
140 | // config = { | ||
141 | // log-level = none, | ||
142 | // runtime = 300, | ||
143 | // "optional-wf" = "true", | ||
144 | // "realistic-guidance" = "Composite", | ||
145 | // "allow-must-violations" = "true", | ||
146 | // "domain" = "Github" | ||
147 | // } | ||
148 | |||
149 | // debug = "debug" | ||
150 | // statistics = "statistics/Github/100.csv" | ||
151 | // output = "output/Github/Composite" | ||
152 | // } | ||
153 | |||
154 | // generate { | ||
155 | // metamodel = {package github excluding{ Project.creatd_at, Project.updated_at, Project.url, User.name, User.url, | ||
156 | // Commit.created_at, Commit.sha, Commit.parents_sha, Issue.created_at, Issue.url, PullRequest.url, IssueEvent.created_at, | ||
157 | // IssueEvent.actor_url, Action, IssueEvent.action, Project.deleted}} | ||
158 | // partial-model = { "inputs/github.xmi"} | ||
159 | // constraints = { package queries } | ||
160 | |||
161 | |||
162 | // solver = ViatraSolver | ||
163 | |||
164 | // scope = { | ||
165 | // #node = 120 | ||
166 | // } | ||
167 | |||
168 | // number = 1 | ||
169 | // runs = 20 | ||
170 | // config = { | ||
171 | // log-level = none, | ||
172 | // runtime = 300, | ||
173 | // "optional-wf" = "true", | ||
174 | // "realistic-guidance" = "Composite", | ||
175 | // "allow-must-violations" = "true", | ||
176 | // "domain" = "Github" | ||
177 | // } | ||
178 | |||
179 | // debug = "debug" | ||
180 | // statistics = "statistics/Github/120.csv" | ||
181 | // output = "output/Github/Composite" | ||
182 | // } | ||
183 | |||
184 | // generate { | ||
185 | // metamodel = {package github excluding{ Project.creatd_at, Project.updated_at, Project.url, User.name, User.url, | ||
186 | // Commit.created_at, Commit.sha, Commit.parents_sha, Issue.created_at, Issue.url, PullRequest.url, IssueEvent.created_at, | ||
187 | // IssueEvent.actor_url, Action, IssueEvent.action, Project.deleted}} | ||
188 | // partial-model = { "inputs/github.xmi"} | ||
189 | // constraints = { package queries } | ||
190 | |||
191 | |||
192 | // solver = ViatraSolver | ||
193 | |||
194 | // scope = { | ||
195 | // #node = 140 | ||
196 | // } | ||
197 | |||
198 | // number = 1 | ||
199 | // runs = 20 | ||
200 | // config = { | ||
201 | // log-level = none, | ||
202 | // runtime = 300, | ||
203 | // "optional-wf" = "true", | ||
204 | // "realistic-guidance" = "Composite", | ||
205 | // "allow-must-violations" = "true", | ||
206 | // "domain" = "Github" | ||
207 | // } | ||
208 | |||
209 | // debug = "debug" | ||
210 | // statistics = "statistics/Github/140.csv" | ||
211 | // output = "output/Github/Composite" | ||
212 | // } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/inputs/ecore.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/inputs/ecore.xmi new file mode 100644 index 00000000..c5721309 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/inputs/ecore.xmi | |||
@@ -0,0 +1,5 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
3 | xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"> | ||
4 | |||
5 | </ecore:EPackage> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/inputs/github.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/inputs/github.xmi new file mode 100644 index 00000000..ad497607 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/inputs/github.xmi | |||
@@ -0,0 +1,3 @@ | |||
1 | <?xml version="1.0" encoding="ASCII"?> | ||
2 | <github:Project xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:github="sure.ghtorrent.github"> | ||
3 | </github:Project> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/inputs/start.xmi b/Metrics/Metrics-Calculation/SocialNetwork_plugin/inputs/start.xmi new file mode 100644 index 00000000..f9a2a185 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/inputs/start.xmi | |||
@@ -0,0 +1,2 @@ | |||
1 | <?xml version="1.0" encoding="ASCII"?> | ||
2 | <hu.bme.mit.inf.yakindumm:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hu.bme.mit.inf.yakindumm="hu.bme.mit.inf.yakindumm" xsi:schemaLocation="hu.bme.mit.inf.yakindumm ../VIATRA-Generator/Domains/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/model/yakindu_simplified.ecore"/> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/ecore.ecore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/ecore.ecore new file mode 100644 index 00000000..eaaf3d11 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/ecore.ecore | |||
@@ -0,0 +1,1023 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
3 | xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="ecore" nsURI="http://www.eclipse.org/emf/2002/Ecore" nsPrefix="ecore"> | ||
4 | <eClassifiers xsi:type="ecore:EClass" name="EAnnotation" eSuperTypes="#//EModelElement"> | ||
5 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
6 | <details key="name" value="EAnnotation"/> | ||
7 | <details key="kind" value="elementOnly"/> | ||
8 | </eAnnotations> | ||
9 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
10 | <details key="constraints" value="WellFormedSourceURI"/> | ||
11 | </eAnnotations> | ||
12 | <eStructuralFeatures xsi:type="ecore:EReference" name="details" upperBound="-1" | ||
13 | eType="#//EStringToStringMapEntry" containment="true" resolveProxies="false"> | ||
14 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
15 | <details key="kind" value="element"/> | ||
16 | <details key="name" value="details"/> | ||
17 | </eAnnotations> | ||
18 | </eStructuralFeatures> | ||
19 | <eStructuralFeatures xsi:type="ecore:EReference" name="contents" upperBound="-1" | ||
20 | eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject" containment="true" | ||
21 | resolveProxies="false"> | ||
22 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
23 | <details key="kind" value="element"/> | ||
24 | <details key="name" value="contents"/> | ||
25 | </eAnnotations> | ||
26 | </eStructuralFeatures> | ||
27 | <eStructuralFeatures xsi:type="ecore:EReference" name="references" upperBound="-1" | ||
28 | eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"> | ||
29 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
30 | <details key="kind" value="attribute"/> | ||
31 | <details key="name" value="references"/> | ||
32 | </eAnnotations> | ||
33 | </eStructuralFeatures> | ||
34 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="source" eType="#//EString"> | ||
35 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
36 | <details key="kind" value="attribute"/> | ||
37 | <details key="name" value="source"/> | ||
38 | </eAnnotations> | ||
39 | </eStructuralFeatures> | ||
40 | <eStructuralFeatures xsi:type="ecore:EReference" name="eModelElement" eType="#//EModelElement" | ||
41 | transient="true" eOpposite="#//EModelElement/eAnnotations"/> | ||
42 | </eClassifiers> | ||
43 | <eClassifiers xsi:type="ecore:EClass" name="EAttribute" eSuperTypes="#//EStructuralFeature"> | ||
44 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
45 | <details key="name" value="EAttribute"/> | ||
46 | <details key="kind" value="elementOnly"/> | ||
47 | </eAnnotations> | ||
48 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
49 | <details key="constraints" value="ConsistentTransient"/> | ||
50 | </eAnnotations> | ||
51 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAttributeType" lowerBound="1" | ||
52 | eType="#//EDataType" changeable="false" volatile="true" transient="true" derived="true"> | ||
53 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
54 | <details key="kind" value="attribute"/> | ||
55 | <details key="name" value="eAttributeType"/> | ||
56 | </eAnnotations> | ||
57 | </eStructuralFeatures> | ||
58 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="iD" eType="#//EBoolean"> | ||
59 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
60 | <details key="kind" value="attribute"/> | ||
61 | <details key="name" value="iD"/> | ||
62 | </eAnnotations> | ||
63 | </eStructuralFeatures> | ||
64 | </eClassifiers> | ||
65 | <eClassifiers xsi:type="ecore:EDataType" name="EBigDecimal" instanceClassName="java.math.BigDecimal"> | ||
66 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
67 | <details key="name" value="EBigDecimal"/> | ||
68 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#decimal"/> | ||
69 | </eAnnotations> | ||
70 | </eClassifiers> | ||
71 | <eClassifiers xsi:type="ecore:EDataType" name="EBigInteger" instanceClassName="java.math.BigInteger"> | ||
72 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
73 | <details key="name" value="EBigInteger"/> | ||
74 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#integer"/> | ||
75 | </eAnnotations> | ||
76 | </eClassifiers> | ||
77 | <eClassifiers xsi:type="ecore:EDataType" name="EBoolean" instanceClassName="boolean"> | ||
78 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
79 | <details key="name" value="EBoolean"/> | ||
80 | </eAnnotations> | ||
81 | </eClassifiers> | ||
82 | <eClassifiers xsi:type="ecore:EDataType" name="EBooleanObject" instanceClassName="java.lang.Boolean"> | ||
83 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
84 | <details key="name" value="EBoolean:Object"/> | ||
85 | <details key="baseType" value="EBoolean"/> | ||
86 | </eAnnotations> | ||
87 | </eClassifiers> | ||
88 | <eClassifiers xsi:type="ecore:EDataType" name="EByte" instanceClassName="byte"> | ||
89 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
90 | <details key="name" value="EByte"/> | ||
91 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#byte"/> | ||
92 | </eAnnotations> | ||
93 | </eClassifiers> | ||
94 | <eClassifiers xsi:type="ecore:EDataType" name="EByteArray" instanceClassName="byte[]"> | ||
95 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
96 | <details key="name" value="EByteArray"/> | ||
97 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#hexBinary"/> | ||
98 | </eAnnotations> | ||
99 | </eClassifiers> | ||
100 | <eClassifiers xsi:type="ecore:EDataType" name="EByteObject" instanceClassName="java.lang.Byte"> | ||
101 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
102 | <details key="name" value="EByte:Object"/> | ||
103 | <details key="baseType" value="EByte"/> | ||
104 | </eAnnotations> | ||
105 | </eClassifiers> | ||
106 | <eClassifiers xsi:type="ecore:EDataType" name="EChar" instanceClassName="char"> | ||
107 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
108 | <details key="name" value="EChar"/> | ||
109 | </eAnnotations> | ||
110 | </eClassifiers> | ||
111 | <eClassifiers xsi:type="ecore:EDataType" name="ECharacterObject" instanceClassName="java.lang.Character"> | ||
112 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
113 | <details key="name" value="EChar:Object"/> | ||
114 | <details key="baseType" value="EChar"/> | ||
115 | </eAnnotations> | ||
116 | </eClassifiers> | ||
117 | <eClassifiers xsi:type="ecore:EClass" name="EClass" eSuperTypes="#//EClassifier"> | ||
118 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
119 | <details key="name" value="EClass"/> | ||
120 | <details key="kind" value="elementOnly"/> | ||
121 | </eAnnotations> | ||
122 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
123 | <details key="constraints" value="InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures"/> | ||
124 | </eAnnotations> | ||
125 | <eOperations name="isSuperTypeOf" eType="#//EBoolean"> | ||
126 | <eParameters name="someClass" eType="#//EClass"/> | ||
127 | </eOperations> | ||
128 | <eOperations name="getFeatureCount" eType="#//EInt"/> | ||
129 | <eOperations name="getEStructuralFeature" eType="#//EStructuralFeature"> | ||
130 | <eParameters name="featureID" eType="#//EInt"/> | ||
131 | </eOperations> | ||
132 | <eOperations name="getFeatureID" eType="#//EInt"> | ||
133 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
134 | </eOperations> | ||
135 | <eOperations name="getEStructuralFeature" eType="#//EStructuralFeature"> | ||
136 | <eParameters name="featureName" eType="#//EString"/> | ||
137 | </eOperations> | ||
138 | <eOperations name="getOperationCount" eType="#//EInt"/> | ||
139 | <eOperations name="getEOperation" eType="#//EOperation"> | ||
140 | <eParameters name="operationID" eType="#//EInt"/> | ||
141 | </eOperations> | ||
142 | <eOperations name="getOperationID" eType="#//EInt"> | ||
143 | <eParameters name="operation" eType="#//EOperation"/> | ||
144 | </eOperations> | ||
145 | <eOperations name="getOverride" eType="#//EOperation"> | ||
146 | <eParameters name="operation" eType="#//EOperation"/> | ||
147 | </eOperations> | ||
148 | <eStructuralFeatures xsi:type="ecore:EReference" name="eOperations" upperBound="-1" | ||
149 | eType="#//EOperation" containment="true" resolveProxies="false" eOpposite="#//EOperation/eContainingClass"> | ||
150 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
151 | <details key="kind" value="element"/> | ||
152 | <details key="name" value="eOperations"/> | ||
153 | </eAnnotations> | ||
154 | </eStructuralFeatures> | ||
155 | <eStructuralFeatures xsi:type="ecore:EReference" name="eStructuralFeatures" upperBound="-1" | ||
156 | eType="#//EStructuralFeature" containment="true" resolveProxies="false" eOpposite="#//EStructuralFeature/eContainingClass"> | ||
157 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
158 | <details key="kind" value="element"/> | ||
159 | <details key="name" value="eStructuralFeatures"/> | ||
160 | </eAnnotations> | ||
161 | </eStructuralFeatures> | ||
162 | <eStructuralFeatures xsi:type="ecore:EReference" name="eGenericSuperTypes" upperBound="-1" | ||
163 | eType="#//EGenericType" unsettable="true" containment="true" resolveProxies="false"> | ||
164 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
165 | <details key="kind" value="element"/> | ||
166 | <details key="name" value="eGenericSuperTypes"/> | ||
167 | </eAnnotations> | ||
168 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
169 | <details key="suppressedIsSetVisibility" value="true"/> | ||
170 | <details key="suppressedUnsetVisibility" value="true"/> | ||
171 | </eAnnotations> | ||
172 | </eStructuralFeatures> | ||
173 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="abstract" eType="#//EBoolean"> | ||
174 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
175 | <details key="kind" value="attribute"/> | ||
176 | <details key="name" value="abstract"/> | ||
177 | </eAnnotations> | ||
178 | </eStructuralFeatures> | ||
179 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllAttributes" upperBound="-1" | ||
180 | eType="#//EAttribute" changeable="false" volatile="true" transient="true" | ||
181 | derived="true"> | ||
182 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
183 | <details key="kind" value="attribute"/> | ||
184 | <details key="name" value="eAllAttributes"/> | ||
185 | </eAnnotations> | ||
186 | </eStructuralFeatures> | ||
187 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllContainments" upperBound="-1" | ||
188 | eType="#//EReference" changeable="false" volatile="true" transient="true" | ||
189 | derived="true"> | ||
190 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
191 | <details key="kind" value="attribute"/> | ||
192 | <details key="name" value="eAllContainments"/> | ||
193 | </eAnnotations> | ||
194 | </eStructuralFeatures> | ||
195 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllGenericSuperTypes" | ||
196 | upperBound="-1" eType="#//EGenericType" changeable="false" volatile="true" | ||
197 | transient="true" derived="true"> | ||
198 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
199 | <details key="kind" value="attribute"/> | ||
200 | <details key="name" value="eAllGenericSuperTypes"/> | ||
201 | </eAnnotations> | ||
202 | </eStructuralFeatures> | ||
203 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllOperations" upperBound="-1" | ||
204 | eType="#//EOperation" changeable="false" volatile="true" transient="true" | ||
205 | derived="true"> | ||
206 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
207 | <details key="kind" value="attribute"/> | ||
208 | <details key="name" value="eAllOperations"/> | ||
209 | </eAnnotations> | ||
210 | </eStructuralFeatures> | ||
211 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllReferences" upperBound="-1" | ||
212 | eType="#//EReference" changeable="false" volatile="true" transient="true" | ||
213 | derived="true"> | ||
214 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
215 | <details key="kind" value="attribute"/> | ||
216 | <details key="name" value="eAllReferences"/> | ||
217 | </eAnnotations> | ||
218 | </eStructuralFeatures> | ||
219 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllStructuralFeatures" | ||
220 | upperBound="-1" eType="#//EStructuralFeature" changeable="false" volatile="true" | ||
221 | transient="true" derived="true"> | ||
222 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
223 | <details key="kind" value="attribute"/> | ||
224 | <details key="name" value="eAllStructuralFeatures"/> | ||
225 | </eAnnotations> | ||
226 | </eStructuralFeatures> | ||
227 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllSuperTypes" upperBound="-1" | ||
228 | eType="#//EClass" changeable="false" volatile="true" transient="true" derived="true"> | ||
229 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
230 | <details key="kind" value="attribute"/> | ||
231 | <details key="name" value="eAllSuperTypes"/> | ||
232 | </eAnnotations> | ||
233 | </eStructuralFeatures> | ||
234 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAttributes" upperBound="-1" | ||
235 | eType="#//EAttribute" changeable="false" volatile="true" transient="true" | ||
236 | derived="true"> | ||
237 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
238 | <details key="kind" value="attribute"/> | ||
239 | <details key="name" value="eAttributes"/> | ||
240 | </eAnnotations> | ||
241 | </eStructuralFeatures> | ||
242 | <eStructuralFeatures xsi:type="ecore:EReference" name="eIDAttribute" eType="#//EAttribute" | ||
243 | changeable="false" volatile="true" transient="true" derived="true" resolveProxies="false"> | ||
244 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
245 | <details key="kind" value="attribute"/> | ||
246 | <details key="name" value="eIDAttribute"/> | ||
247 | </eAnnotations> | ||
248 | </eStructuralFeatures> | ||
249 | <eStructuralFeatures xsi:type="ecore:EReference" name="eReferences" upperBound="-1" | ||
250 | eType="#//EReference" changeable="false" volatile="true" transient="true" | ||
251 | derived="true"> | ||
252 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
253 | <details key="kind" value="attribute"/> | ||
254 | <details key="name" value="eReferences"/> | ||
255 | </eAnnotations> | ||
256 | </eStructuralFeatures> | ||
257 | <eStructuralFeatures xsi:type="ecore:EReference" name="eSuperTypes" upperBound="-1" | ||
258 | eType="#//EClass" unsettable="true"> | ||
259 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
260 | <details key="kind" value="attribute"/> | ||
261 | <details key="name" value="eSuperTypes"/> | ||
262 | </eAnnotations> | ||
263 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
264 | <details key="suppressedIsSetVisibility" value="true"/> | ||
265 | <details key="suppressedUnsetVisibility" value="true"/> | ||
266 | </eAnnotations> | ||
267 | </eStructuralFeatures> | ||
268 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="interface" eType="#//EBoolean"> | ||
269 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
270 | <details key="kind" value="attribute"/> | ||
271 | <details key="name" value="interface"/> | ||
272 | </eAnnotations> | ||
273 | </eStructuralFeatures> | ||
274 | </eClassifiers> | ||
275 | <eClassifiers xsi:type="ecore:EClass" name="EClassifier" abstract="true" eSuperTypes="#//ENamedElement"> | ||
276 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
277 | <details key="name" value="EClassifier"/> | ||
278 | <details key="kind" value="elementOnly"/> | ||
279 | </eAnnotations> | ||
280 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
281 | <details key="constraints" value="WellFormedInstanceTypeName UniqueTypeParameterNames"/> | ||
282 | </eAnnotations> | ||
283 | <eOperations name="isInstance" eType="#//EBoolean"> | ||
284 | <eParameters name="object" eType="#//EJavaObject"/> | ||
285 | </eOperations> | ||
286 | <eOperations name="getClassifierID" eType="#//EInt"/> | ||
287 | <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeParameters" upperBound="-1" | ||
288 | eType="#//ETypeParameter" containment="true"> | ||
289 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
290 | <details key="kind" value="element"/> | ||
291 | <details key="name" value="eTypeParameters"/> | ||
292 | </eAnnotations> | ||
293 | </eStructuralFeatures> | ||
294 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValue" eType="#//EJavaObject" | ||
295 | changeable="false" volatile="true" transient="true" derived="true"> | ||
296 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
297 | <details key="kind" value="attribute"/> | ||
298 | <details key="name" value="defaultValue"/> | ||
299 | </eAnnotations> | ||
300 | </eStructuralFeatures> | ||
301 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="instanceClass" changeable="false" | ||
302 | volatile="true" transient="true" derived="true"> | ||
303 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
304 | <details key="kind" value="attribute"/> | ||
305 | <details key="name" value="instanceClass"/> | ||
306 | </eAnnotations> | ||
307 | <eGenericType eClassifier="#//EJavaClass"> | ||
308 | <eTypeArguments/> | ||
309 | </eGenericType> | ||
310 | </eStructuralFeatures> | ||
311 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="instanceClassName" eType="#//EString" | ||
312 | volatile="true" unsettable="true"> | ||
313 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
314 | <details key="kind" value="attribute"/> | ||
315 | <details key="name" value="instanceClassName"/> | ||
316 | </eAnnotations> | ||
317 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
318 | <details key="suppressedIsSetVisibility" value="true"/> | ||
319 | <details key="suppressedUnsetVisibility" value="true"/> | ||
320 | </eAnnotations> | ||
321 | </eStructuralFeatures> | ||
322 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="instanceTypeName" eType="#//EString" | ||
323 | volatile="true" unsettable="true"> | ||
324 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
325 | <details key="kind" value="attribute"/> | ||
326 | <details key="name" value="instanceTypeName"/> | ||
327 | </eAnnotations> | ||
328 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
329 | <details key="suppressedIsSetVisibility" value="true"/> | ||
330 | <details key="suppressedUnsetVisibility" value="true"/> | ||
331 | </eAnnotations> | ||
332 | </eStructuralFeatures> | ||
333 | <eStructuralFeatures xsi:type="ecore:EReference" name="ePackage" eType="#//EPackage" | ||
334 | transient="true" eOpposite="#//EPackage/eClassifiers"/> | ||
335 | </eClassifiers> | ||
336 | <eClassifiers xsi:type="ecore:EClass" name="EDataType" eSuperTypes="#//EClassifier"> | ||
337 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
338 | <details key="name" value="EDataType"/> | ||
339 | <details key="kind" value="elementOnly"/> | ||
340 | </eAnnotations> | ||
341 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="serializable" eType="#//EBoolean" | ||
342 | defaultValueLiteral="true"> | ||
343 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
344 | <details key="kind" value="attribute"/> | ||
345 | <details key="name" value="serializable"/> | ||
346 | </eAnnotations> | ||
347 | </eStructuralFeatures> | ||
348 | </eClassifiers> | ||
349 | <eClassifiers xsi:type="ecore:EDataType" name="EDate" instanceClassName="java.util.Date"> | ||
350 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
351 | <details key="name" value="EDate"/> | ||
352 | </eAnnotations> | ||
353 | </eClassifiers> | ||
354 | <eClassifiers xsi:type="ecore:EDataType" name="EDiagnosticChain" instanceClassName="org.eclipse.emf.common.util.DiagnosticChain" | ||
355 | serializable="false"> | ||
356 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
357 | <details key="name" value="EDiagnosticChain"/> | ||
358 | </eAnnotations> | ||
359 | </eClassifiers> | ||
360 | <eClassifiers xsi:type="ecore:EDataType" name="EDouble" instanceClassName="double"> | ||
361 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
362 | <details key="name" value="EDouble"/> | ||
363 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#double"/> | ||
364 | </eAnnotations> | ||
365 | </eClassifiers> | ||
366 | <eClassifiers xsi:type="ecore:EDataType" name="EDoubleObject" instanceClassName="java.lang.Double"> | ||
367 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
368 | <details key="name" value="EDouble:Object"/> | ||
369 | <details key="baseType" value="EDouble"/> | ||
370 | </eAnnotations> | ||
371 | </eClassifiers> | ||
372 | <eClassifiers xsi:type="ecore:EDataType" name="EEList" instanceClassName="org.eclipse.emf.common.util.EList" | ||
373 | serializable="false"> | ||
374 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
375 | <details key="name" value="EEList"/> | ||
376 | </eAnnotations> | ||
377 | <eTypeParameters name="E"/> | ||
378 | </eClassifiers> | ||
379 | <eClassifiers xsi:type="ecore:EClass" name="EEnum" eSuperTypes="#//EDataType"> | ||
380 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
381 | <details key="name" value="EEnum"/> | ||
382 | <details key="kind" value="elementOnly"/> | ||
383 | </eAnnotations> | ||
384 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
385 | <details key="constraints" value="UniqueEnumeratorNames UniqueEnumeratorLiterals"/> | ||
386 | </eAnnotations> | ||
387 | <eOperations name="getEEnumLiteral" eType="#//EEnumLiteral"> | ||
388 | <eParameters name="name" eType="#//EString"/> | ||
389 | </eOperations> | ||
390 | <eOperations name="getEEnumLiteral" eType="#//EEnumLiteral"> | ||
391 | <eParameters name="value" eType="#//EInt"/> | ||
392 | </eOperations> | ||
393 | <eOperations name="getEEnumLiteralByLiteral" eType="#//EEnumLiteral"> | ||
394 | <eParameters name="literal" eType="#//EString"/> | ||
395 | </eOperations> | ||
396 | <eStructuralFeatures xsi:type="ecore:EReference" name="eLiterals" upperBound="-1" | ||
397 | eType="#//EEnumLiteral" containment="true" resolveProxies="false" eOpposite="#//EEnumLiteral/eEnum"> | ||
398 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
399 | <details key="kind" value="element"/> | ||
400 | <details key="name" value="eLiterals"/> | ||
401 | </eAnnotations> | ||
402 | </eStructuralFeatures> | ||
403 | </eClassifiers> | ||
404 | <eClassifiers xsi:type="ecore:EDataType" name="EEnumerator" instanceClassName="org.eclipse.emf.common.util.Enumerator" | ||
405 | serializable="false"> | ||
406 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
407 | <details key="name" value="EEnumerator"/> | ||
408 | </eAnnotations> | ||
409 | </eClassifiers> | ||
410 | <eClassifiers xsi:type="ecore:EClass" name="EEnumLiteral" eSuperTypes="#//ENamedElement"> | ||
411 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
412 | <details key="name" value="EEnumLiteral"/> | ||
413 | <details key="kind" value="elementOnly"/> | ||
414 | </eAnnotations> | ||
415 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="instance" eType="#//EEnumerator" | ||
416 | transient="true"> | ||
417 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
418 | <details key="kind" value="attribute"/> | ||
419 | <details key="name" value="instance"/> | ||
420 | </eAnnotations> | ||
421 | </eStructuralFeatures> | ||
422 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="literal" eType="#//EString"> | ||
423 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
424 | <details key="kind" value="attribute"/> | ||
425 | <details key="name" value="literal"/> | ||
426 | </eAnnotations> | ||
427 | </eStructuralFeatures> | ||
428 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="#//EInt"> | ||
429 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
430 | <details key="kind" value="attribute"/> | ||
431 | <details key="name" value="value"/> | ||
432 | </eAnnotations> | ||
433 | </eStructuralFeatures> | ||
434 | <eStructuralFeatures xsi:type="ecore:EReference" name="eEnum" eType="#//EEnum" | ||
435 | transient="true" eOpposite="#//EEnum/eLiterals"/> | ||
436 | </eClassifiers> | ||
437 | <eClassifiers xsi:type="ecore:EClass" name="EFactory" eSuperTypes="#//EModelElement"> | ||
438 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
439 | <details key="name" value="EFactory"/> | ||
440 | <details key="kind" value="elementOnly"/> | ||
441 | </eAnnotations> | ||
442 | <eOperations name="create" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"> | ||
443 | <eParameters name="eClass" eType="#//EClass"/> | ||
444 | </eOperations> | ||
445 | <eOperations name="createFromString" eType="#//EJavaObject"> | ||
446 | <eParameters name="eDataType" eType="#//EDataType"/> | ||
447 | <eParameters name="literalValue" eType="#//EString"/> | ||
448 | </eOperations> | ||
449 | <eOperations name="convertToString" eType="#//EString"> | ||
450 | <eParameters name="eDataType" eType="#//EDataType"/> | ||
451 | <eParameters name="instanceValue" eType="#//EJavaObject"/> | ||
452 | </eOperations> | ||
453 | <eStructuralFeatures xsi:type="ecore:EReference" name="ePackage" lowerBound="1" | ||
454 | eType="#//EPackage" transient="true" resolveProxies="false" eOpposite="#//EPackage/eFactoryInstance"> | ||
455 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
456 | <details key="kind" value="attribute"/> | ||
457 | <details key="name" value="ePackage"/> | ||
458 | </eAnnotations> | ||
459 | </eStructuralFeatures> | ||
460 | </eClassifiers> | ||
461 | <eClassifiers xsi:type="ecore:EDataType" name="EFeatureMap" instanceClassName="org.eclipse.emf.ecore.util.FeatureMap" | ||
462 | serializable="false"> | ||
463 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
464 | <details key="name" value="EFeatureMap"/> | ||
465 | </eAnnotations> | ||
466 | </eClassifiers> | ||
467 | <eClassifiers xsi:type="ecore:EDataType" name="EFeatureMapEntry" instanceClassName="org.eclipse.emf.ecore.util.FeatureMap$Entry" | ||
468 | serializable="false"> | ||
469 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
470 | <details key="name" value="EFeatureMapEntry"/> | ||
471 | </eAnnotations> | ||
472 | </eClassifiers> | ||
473 | <eClassifiers xsi:type="ecore:EDataType" name="EFloat" instanceClassName="float"> | ||
474 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
475 | <details key="name" value="EFloat"/> | ||
476 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#float"/> | ||
477 | </eAnnotations> | ||
478 | </eClassifiers> | ||
479 | <eClassifiers xsi:type="ecore:EDataType" name="EFloatObject" instanceClassName="java.lang.Float"> | ||
480 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
481 | <details key="name" value="EFloat:Object"/> | ||
482 | <details key="baseType" value="EFloat"/> | ||
483 | </eAnnotations> | ||
484 | </eClassifiers> | ||
485 | <eClassifiers xsi:type="ecore:EClass" name="EGenericType"> | ||
486 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
487 | <details key="name" value="EGenericType"/> | ||
488 | <details key="kind" value="elementOnly"/> | ||
489 | </eAnnotations> | ||
490 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
491 | <details key="constraints" value="ConsistentType ConsistentBounds ConsistentArguments"/> | ||
492 | </eAnnotations> | ||
493 | <eStructuralFeatures xsi:type="ecore:EReference" name="eUpperBound" eType="#//EGenericType" | ||
494 | containment="true" resolveProxies="false"> | ||
495 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
496 | <details key="kind" value="element"/> | ||
497 | <details key="name" value="eUpperBound"/> | ||
498 | </eAnnotations> | ||
499 | </eStructuralFeatures> | ||
500 | <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeArguments" upperBound="-1" | ||
501 | eType="#//EGenericType" containment="true" resolveProxies="false"> | ||
502 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
503 | <details key="kind" value="element"/> | ||
504 | <details key="name" value="eTypeArguments"/> | ||
505 | </eAnnotations> | ||
506 | </eStructuralFeatures> | ||
507 | <eStructuralFeatures xsi:type="ecore:EReference" name="eLowerBound" eType="#//EGenericType" | ||
508 | containment="true" resolveProxies="false"> | ||
509 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
510 | <details key="kind" value="element"/> | ||
511 | <details key="name" value="eLowerBound"/> | ||
512 | </eAnnotations> | ||
513 | </eStructuralFeatures> | ||
514 | <eStructuralFeatures xsi:type="ecore:EReference" name="eClassifier" eType="#//EClassifier"> | ||
515 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
516 | <details key="kind" value="attribute"/> | ||
517 | <details key="name" value="eClassifier"/> | ||
518 | </eAnnotations> | ||
519 | </eStructuralFeatures> | ||
520 | <eStructuralFeatures xsi:type="ecore:EReference" name="eRawType" lowerBound="1" | ||
521 | eType="#//EClassifier" changeable="false" transient="true" derived="true"> | ||
522 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
523 | <details key="kind" value="attribute"/> | ||
524 | <details key="name" value="eRawType"/> | ||
525 | </eAnnotations> | ||
526 | </eStructuralFeatures> | ||
527 | <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeParameter" eType="#//ETypeParameter" | ||
528 | resolveProxies="false"> | ||
529 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
530 | <details key="kind" value="attribute"/> | ||
531 | <details key="name" value="eTypeParameter"/> | ||
532 | </eAnnotations> | ||
533 | </eStructuralFeatures> | ||
534 | </eClassifiers> | ||
535 | <eClassifiers xsi:type="ecore:EDataType" name="EInt" instanceClassName="int"> | ||
536 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
537 | <details key="name" value="EInt"/> | ||
538 | </eAnnotations> | ||
539 | </eClassifiers> | ||
540 | <eClassifiers xsi:type="ecore:EDataType" name="EIntegerObject" instanceClassName="java.lang.Integer"> | ||
541 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
542 | <details key="name" value="EInt:Object"/> | ||
543 | <details key="baseType" value="EInt"/> | ||
544 | </eAnnotations> | ||
545 | </eClassifiers> | ||
546 | <eClassifiers xsi:type="ecore:EDataType" name="EInvocationTargetException" instanceClassName="java.lang.reflect.InvocationTargetException" | ||
547 | serializable="false"> | ||
548 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
549 | <details key="name" value="EInvocationTargetException"/> | ||
550 | </eAnnotations> | ||
551 | </eClassifiers> | ||
552 | <eClassifiers xsi:type="ecore:EDataType" name="EJavaClass" instanceClassName="java.lang.Class"> | ||
553 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
554 | <details key="name" value="EJavaClass"/> | ||
555 | </eAnnotations> | ||
556 | <eTypeParameters name="T"/> | ||
557 | </eClassifiers> | ||
558 | <eClassifiers xsi:type="ecore:EDataType" name="EJavaObject" instanceClassName="java.lang.Object"> | ||
559 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
560 | <details key="name" value="EJavaObject"/> | ||
561 | </eAnnotations> | ||
562 | </eClassifiers> | ||
563 | <eClassifiers xsi:type="ecore:EDataType" name="ELong" instanceClassName="long"> | ||
564 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
565 | <details key="name" value="ELong"/> | ||
566 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#long"/> | ||
567 | </eAnnotations> | ||
568 | </eClassifiers> | ||
569 | <eClassifiers xsi:type="ecore:EDataType" name="ELongObject" instanceClassName="java.lang.Long"> | ||
570 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
571 | <details key="name" value="ELong:Object"/> | ||
572 | <details key="baseType" value="ELong"/> | ||
573 | </eAnnotations> | ||
574 | </eClassifiers> | ||
575 | <eClassifiers xsi:type="ecore:EDataType" name="EMap" instanceClassName="java.util.Map" | ||
576 | serializable="false"> | ||
577 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
578 | <details key="name" value="EMap"/> | ||
579 | </eAnnotations> | ||
580 | <eTypeParameters name="K"/> | ||
581 | <eTypeParameters name="V"/> | ||
582 | </eClassifiers> | ||
583 | <eClassifiers xsi:type="ecore:EClass" name="EModelElement" abstract="true"> | ||
584 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
585 | <details key="name" value="EModelElement"/> | ||
586 | <details key="kind" value="elementOnly"/> | ||
587 | </eAnnotations> | ||
588 | <eOperations name="getEAnnotation" eType="#//EAnnotation"> | ||
589 | <eParameters name="source" eType="#//EString"/> | ||
590 | </eOperations> | ||
591 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAnnotations" upperBound="-1" | ||
592 | eType="#//EAnnotation" containment="true" resolveProxies="false" eOpposite="#//EAnnotation/eModelElement"> | ||
593 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
594 | <details key="kind" value="element"/> | ||
595 | <details key="name" value="eAnnotations"/> | ||
596 | </eAnnotations> | ||
597 | </eStructuralFeatures> | ||
598 | </eClassifiers> | ||
599 | <eClassifiers xsi:type="ecore:EClass" name="ENamedElement" abstract="true" eSuperTypes="#//EModelElement"> | ||
600 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
601 | <details key="name" value="ENamedElement"/> | ||
602 | <details key="kind" value="elementOnly"/> | ||
603 | </eAnnotations> | ||
604 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
605 | <details key="constraints" value="WellFormedName"/> | ||
606 | </eAnnotations> | ||
607 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="#//EString"> | ||
608 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
609 | <details key="kind" value="attribute"/> | ||
610 | <details key="name" value="name"/> | ||
611 | </eAnnotations> | ||
612 | </eStructuralFeatures> | ||
613 | </eClassifiers> | ||
614 | <eClassifiers xsi:type="ecore:EClass" name="EObject"> | ||
615 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
616 | <details key="name" value="EObject"/> | ||
617 | <details key="kind" value="empty"/> | ||
618 | </eAnnotations> | ||
619 | <eOperations name="eClass" eType="#//EClass"/> | ||
620 | <eOperations name="eIsProxy" eType="#//EBoolean"/> | ||
621 | <eOperations name="eResource" eType="#//EResource"/> | ||
622 | <eOperations name="eContainer" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/> | ||
623 | <eOperations name="eContainingFeature" eType="#//EStructuralFeature"/> | ||
624 | <eOperations name="eContainmentFeature" eType="#//EReference"/> | ||
625 | <eOperations name="eContents"> | ||
626 | <eGenericType eClassifier="#//EEList"> | ||
627 | <eTypeArguments eClassifier="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/> | ||
628 | </eGenericType> | ||
629 | </eOperations> | ||
630 | <eOperations name="eAllContents"> | ||
631 | <eGenericType eClassifier="#//ETreeIterator"> | ||
632 | <eTypeArguments eClassifier="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/> | ||
633 | </eGenericType> | ||
634 | </eOperations> | ||
635 | <eOperations name="eCrossReferences"> | ||
636 | <eGenericType eClassifier="#//EEList"> | ||
637 | <eTypeArguments eClassifier="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/> | ||
638 | </eGenericType> | ||
639 | </eOperations> | ||
640 | <eOperations name="eGet" eType="#//EJavaObject"> | ||
641 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
642 | </eOperations> | ||
643 | <eOperations name="eGet" eType="#//EJavaObject"> | ||
644 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
645 | <eParameters name="resolve" eType="#//EBoolean"/> | ||
646 | </eOperations> | ||
647 | <eOperations name="eSet"> | ||
648 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
649 | <eParameters name="newValue" eType="#//EJavaObject"/> | ||
650 | </eOperations> | ||
651 | <eOperations name="eIsSet" eType="#//EBoolean"> | ||
652 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
653 | </eOperations> | ||
654 | <eOperations name="eUnset"> | ||
655 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
656 | </eOperations> | ||
657 | <eOperations name="eInvoke" eType="#//EJavaObject" eExceptions="#//EInvocationTargetException"> | ||
658 | <eParameters name="operation" eType="#//EOperation"/> | ||
659 | <eParameters name="arguments"> | ||
660 | <eGenericType eClassifier="#//EEList"> | ||
661 | <eTypeArguments/> | ||
662 | </eGenericType> | ||
663 | </eParameters> | ||
664 | </eOperations> | ||
665 | </eClassifiers> | ||
666 | <eClassifiers xsi:type="ecore:EClass" name="EOperation" eSuperTypes="#//ETypedElement"> | ||
667 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
668 | <details key="name" value="EOperation"/> | ||
669 | <details key="kind" value="elementOnly"/> | ||
670 | </eAnnotations> | ||
671 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
672 | <details key="constraints" value="UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid"/> | ||
673 | </eAnnotations> | ||
674 | <eOperations name="getOperationID" eType="#//EInt"/> | ||
675 | <eOperations name="isOverrideOf" eType="#//EBoolean"> | ||
676 | <eParameters name="someOperation" eType="#//EOperation"/> | ||
677 | </eOperations> | ||
678 | <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeParameters" upperBound="-1" | ||
679 | eType="#//ETypeParameter" containment="true"> | ||
680 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
681 | <details key="kind" value="element"/> | ||
682 | <details key="name" value="eTypeParameters"/> | ||
683 | </eAnnotations> | ||
684 | </eStructuralFeatures> | ||
685 | <eStructuralFeatures xsi:type="ecore:EReference" name="eParameters" upperBound="-1" | ||
686 | eType="#//EParameter" containment="true" resolveProxies="false" eOpposite="#//EParameter/eOperation"> | ||
687 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
688 | <details key="kind" value="element"/> | ||
689 | <details key="name" value="eParameters"/> | ||
690 | </eAnnotations> | ||
691 | </eStructuralFeatures> | ||
692 | <eStructuralFeatures xsi:type="ecore:EReference" name="eGenericExceptions" upperBound="-1" | ||
693 | eType="#//EGenericType" unsettable="true" containment="true" resolveProxies="false"> | ||
694 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
695 | <details key="kind" value="element"/> | ||
696 | <details key="name" value="eGenericExceptions"/> | ||
697 | </eAnnotations> | ||
698 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
699 | <details key="suppressedIsSetVisibility" value="true"/> | ||
700 | <details key="suppressedUnsetVisibility" value="true"/> | ||
701 | </eAnnotations> | ||
702 | </eStructuralFeatures> | ||
703 | <eStructuralFeatures xsi:type="ecore:EReference" name="eExceptions" upperBound="-1" | ||
704 | eType="#//EClassifier" unsettable="true"> | ||
705 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
706 | <details key="kind" value="attribute"/> | ||
707 | <details key="name" value="eExceptions"/> | ||
708 | </eAnnotations> | ||
709 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
710 | <details key="suppressedIsSetVisibility" value="true"/> | ||
711 | <details key="suppressedUnsetVisibility" value="true"/> | ||
712 | </eAnnotations> | ||
713 | </eStructuralFeatures> | ||
714 | <eStructuralFeatures xsi:type="ecore:EReference" name="eContainingClass" eType="#//EClass" | ||
715 | transient="true" eOpposite="#//EClass/eOperations"/> | ||
716 | </eClassifiers> | ||
717 | <eClassifiers xsi:type="ecore:EClass" name="EPackage" eSuperTypes="#//ENamedElement"> | ||
718 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
719 | <details key="name" value="EPackage"/> | ||
720 | <details key="kind" value="elementOnly"/> | ||
721 | </eAnnotations> | ||
722 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
723 | <details key="constraints" value="WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs"/> | ||
724 | </eAnnotations> | ||
725 | <eOperations name="getEClassifier" eType="#//EClassifier"> | ||
726 | <eParameters name="name" eType="#//EString"/> | ||
727 | </eOperations> | ||
728 | <eStructuralFeatures xsi:type="ecore:EReference" name="eClassifiers" upperBound="-1" | ||
729 | eType="#//EClassifier" containment="true" eOpposite="#//EClassifier/ePackage"> | ||
730 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
731 | <details key="kind" value="element"/> | ||
732 | <details key="name" value="eClassifiers"/> | ||
733 | </eAnnotations> | ||
734 | </eStructuralFeatures> | ||
735 | <eStructuralFeatures xsi:type="ecore:EReference" name="eSubpackages" upperBound="-1" | ||
736 | eType="#//EPackage" containment="true" eOpposite="#//EPackage/eSuperPackage"> | ||
737 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
738 | <details key="kind" value="element"/> | ||
739 | <details key="name" value="eSubpackages"/> | ||
740 | </eAnnotations> | ||
741 | </eStructuralFeatures> | ||
742 | <eStructuralFeatures xsi:type="ecore:EReference" name="eFactoryInstance" lowerBound="1" | ||
743 | eType="#//EFactory" transient="true" resolveProxies="false" eOpposite="#//EFactory/ePackage"> | ||
744 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
745 | <details key="kind" value="attribute"/> | ||
746 | <details key="name" value="eFactoryInstance"/> | ||
747 | </eAnnotations> | ||
748 | </eStructuralFeatures> | ||
749 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="nsPrefix" eType="#//EString"> | ||
750 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
751 | <details key="kind" value="attribute"/> | ||
752 | <details key="name" value="nsPrefix"/> | ||
753 | </eAnnotations> | ||
754 | </eStructuralFeatures> | ||
755 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="nsURI" eType="#//EString"> | ||
756 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
757 | <details key="kind" value="attribute"/> | ||
758 | <details key="name" value="nsURI"/> | ||
759 | </eAnnotations> | ||
760 | </eStructuralFeatures> | ||
761 | <eStructuralFeatures xsi:type="ecore:EReference" name="eSuperPackage" eType="#//EPackage" | ||
762 | transient="true" eOpposite="#//EPackage/eSubpackages"/> | ||
763 | </eClassifiers> | ||
764 | <eClassifiers xsi:type="ecore:EClass" name="EParameter" eSuperTypes="#//ETypedElement"> | ||
765 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
766 | <details key="name" value="EParameter"/> | ||
767 | <details key="kind" value="elementOnly"/> | ||
768 | </eAnnotations> | ||
769 | <eStructuralFeatures xsi:type="ecore:EReference" name="eOperation" eType="#//EOperation" | ||
770 | transient="true" eOpposite="#//EOperation/eParameters"/> | ||
771 | </eClassifiers> | ||
772 | <eClassifiers xsi:type="ecore:EClass" name="EReference" eSuperTypes="#//EStructuralFeature"> | ||
773 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
774 | <details key="name" value="EReference"/> | ||
775 | <details key="kind" value="elementOnly"/> | ||
776 | </eAnnotations> | ||
777 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
778 | <details key="constraints" value="ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer"/> | ||
779 | </eAnnotations> | ||
780 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="container" eType="#//EBoolean" | ||
781 | changeable="false" volatile="true" transient="true" derived="true"> | ||
782 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
783 | <details key="kind" value="attribute"/> | ||
784 | <details key="name" value="container"/> | ||
785 | </eAnnotations> | ||
786 | </eStructuralFeatures> | ||
787 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="containment" eType="#//EBoolean"> | ||
788 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
789 | <details key="kind" value="attribute"/> | ||
790 | <details key="name" value="containment"/> | ||
791 | </eAnnotations> | ||
792 | </eStructuralFeatures> | ||
793 | <eStructuralFeatures xsi:type="ecore:EReference" name="eKeys" upperBound="-1" | ||
794 | eType="#//EAttribute"> | ||
795 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
796 | <details key="kind" value="attribute"/> | ||
797 | <details key="name" value="eKeys"/> | ||
798 | </eAnnotations> | ||
799 | </eStructuralFeatures> | ||
800 | <eStructuralFeatures xsi:type="ecore:EReference" name="eOpposite" eType="#//EReference"> | ||
801 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
802 | <details key="kind" value="attribute"/> | ||
803 | <details key="name" value="eOpposite"/> | ||
804 | </eAnnotations> | ||
805 | </eStructuralFeatures> | ||
806 | <eStructuralFeatures xsi:type="ecore:EReference" name="eReferenceType" lowerBound="1" | ||
807 | eType="#//EClass" changeable="false" volatile="true" transient="true" derived="true"> | ||
808 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
809 | <details key="kind" value="attribute"/> | ||
810 | <details key="name" value="eReferenceType"/> | ||
811 | </eAnnotations> | ||
812 | </eStructuralFeatures> | ||
813 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="resolveProxies" eType="#//EBoolean" | ||
814 | defaultValueLiteral="true"> | ||
815 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
816 | <details key="kind" value="attribute"/> | ||
817 | <details key="name" value="resolveProxies"/> | ||
818 | </eAnnotations> | ||
819 | </eStructuralFeatures> | ||
820 | </eClassifiers> | ||
821 | <eClassifiers xsi:type="ecore:EDataType" name="EResource" instanceClassName="org.eclipse.emf.ecore.resource.Resource" | ||
822 | serializable="false"> | ||
823 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
824 | <details key="name" value="EResource"/> | ||
825 | </eAnnotations> | ||
826 | </eClassifiers> | ||
827 | <eClassifiers xsi:type="ecore:EDataType" name="EResourceSet" instanceClassName="org.eclipse.emf.ecore.resource.ResourceSet" | ||
828 | serializable="false"> | ||
829 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
830 | <details key="name" value="EResourceSet"/> | ||
831 | </eAnnotations> | ||
832 | </eClassifiers> | ||
833 | <eClassifiers xsi:type="ecore:EDataType" name="EShort" instanceClassName="short"> | ||
834 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
835 | <details key="name" value="EShort"/> | ||
836 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#short"/> | ||
837 | </eAnnotations> | ||
838 | </eClassifiers> | ||
839 | <eClassifiers xsi:type="ecore:EDataType" name="EShortObject" instanceClassName="java.lang.Short"> | ||
840 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
841 | <details key="name" value="EShort:Object"/> | ||
842 | <details key="baseType" value="EShort"/> | ||
843 | </eAnnotations> | ||
844 | </eClassifiers> | ||
845 | <eClassifiers xsi:type="ecore:EDataType" name="EString" instanceClassName="java.lang.String"> | ||
846 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
847 | <details key="name" value="EString"/> | ||
848 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#string"/> | ||
849 | </eAnnotations> | ||
850 | </eClassifiers> | ||
851 | <eClassifiers xsi:type="ecore:EClass" name="EStringToStringMapEntry" instanceClassName="java.util.Map$Entry"> | ||
852 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
853 | <details key="name" value="EStringToStringMapEntry"/> | ||
854 | <details key="kind" value="empty"/> | ||
855 | </eAnnotations> | ||
856 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="key" eType="#//EString"> | ||
857 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
858 | <details key="kind" value="attribute"/> | ||
859 | <details key="name" value="key"/> | ||
860 | </eAnnotations> | ||
861 | </eStructuralFeatures> | ||
862 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="#//EString"> | ||
863 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
864 | <details key="kind" value="attribute"/> | ||
865 | <details key="name" value="value"/> | ||
866 | </eAnnotations> | ||
867 | </eStructuralFeatures> | ||
868 | </eClassifiers> | ||
869 | <eClassifiers xsi:type="ecore:EClass" name="EStructuralFeature" abstract="true" | ||
870 | eSuperTypes="#//ETypedElement"> | ||
871 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
872 | <details key="name" value="EStructuralFeature"/> | ||
873 | <details key="kind" value="elementOnly"/> | ||
874 | </eAnnotations> | ||
875 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
876 | <details key="constraints" value="ValidDefaultValueLiteral"/> | ||
877 | </eAnnotations> | ||
878 | <eOperations name="getFeatureID" eType="#//EInt"/> | ||
879 | <eOperations name="getContainerClass"> | ||
880 | <eGenericType eClassifier="#//EJavaClass"> | ||
881 | <eTypeArguments/> | ||
882 | </eGenericType> | ||
883 | </eOperations> | ||
884 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="changeable" eType="#//EBoolean" | ||
885 | defaultValueLiteral="true"> | ||
886 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
887 | <details key="kind" value="attribute"/> | ||
888 | <details key="name" value="changeable"/> | ||
889 | </eAnnotations> | ||
890 | </eStructuralFeatures> | ||
891 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValue" eType="#//EJavaObject" | ||
892 | changeable="false" volatile="true" transient="true" derived="true"> | ||
893 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
894 | <details key="kind" value="attribute"/> | ||
895 | <details key="name" value="defaultValue"/> | ||
896 | </eAnnotations> | ||
897 | </eStructuralFeatures> | ||
898 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValueLiteral" eType="#//EString"> | ||
899 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
900 | <details key="kind" value="attribute"/> | ||
901 | <details key="name" value="defaultValueLiteral"/> | ||
902 | </eAnnotations> | ||
903 | </eStructuralFeatures> | ||
904 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="derived" eType="#//EBoolean"> | ||
905 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
906 | <details key="kind" value="attribute"/> | ||
907 | <details key="name" value="derived"/> | ||
908 | </eAnnotations> | ||
909 | </eStructuralFeatures> | ||
910 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="transient" eType="#//EBoolean"> | ||
911 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
912 | <details key="kind" value="attribute"/> | ||
913 | <details key="name" value="transient"/> | ||
914 | </eAnnotations> | ||
915 | </eStructuralFeatures> | ||
916 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="unsettable" eType="#//EBoolean"> | ||
917 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
918 | <details key="kind" value="attribute"/> | ||
919 | <details key="name" value="unsettable"/> | ||
920 | </eAnnotations> | ||
921 | </eStructuralFeatures> | ||
922 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="volatile" eType="#//EBoolean"> | ||
923 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
924 | <details key="kind" value="attribute"/> | ||
925 | <details key="name" value="volatile"/> | ||
926 | </eAnnotations> | ||
927 | </eStructuralFeatures> | ||
928 | <eStructuralFeatures xsi:type="ecore:EReference" name="eContainingClass" eType="#//EClass" | ||
929 | transient="true" eOpposite="#//EClass/eStructuralFeatures"/> | ||
930 | </eClassifiers> | ||
931 | <eClassifiers xsi:type="ecore:EDataType" name="ETreeIterator" instanceClassName="org.eclipse.emf.common.util.TreeIterator" | ||
932 | serializable="false"> | ||
933 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
934 | <details key="name" value="ETreeIterator"/> | ||
935 | </eAnnotations> | ||
936 | <eTypeParameters name="E"/> | ||
937 | </eClassifiers> | ||
938 | <eClassifiers xsi:type="ecore:EClass" name="ETypedElement" abstract="true" eSuperTypes="#//ENamedElement"> | ||
939 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
940 | <details key="name" value="ETypedElement"/> | ||
941 | <details key="kind" value="elementOnly"/> | ||
942 | </eAnnotations> | ||
943 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
944 | <details key="constraints" value="ValidLowerBound ValidUpperBound ConsistentBounds ValidType"/> | ||
945 | </eAnnotations> | ||
946 | <eStructuralFeatures xsi:type="ecore:EReference" name="eGenericType" eType="#//EGenericType" | ||
947 | volatile="true" unsettable="true" containment="true" resolveProxies="false"> | ||
948 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
949 | <details key="kind" value="element"/> | ||
950 | <details key="name" value="eGenericType"/> | ||
951 | </eAnnotations> | ||
952 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
953 | <details key="suppressedIsSetVisibility" value="true"/> | ||
954 | <details key="suppressedUnsetVisibility" value="true"/> | ||
955 | </eAnnotations> | ||
956 | </eStructuralFeatures> | ||
957 | <eStructuralFeatures xsi:type="ecore:EReference" name="eType" eType="#//EClassifier" | ||
958 | volatile="true" unsettable="true"> | ||
959 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
960 | <details key="kind" value="attribute"/> | ||
961 | <details key="name" value="eType"/> | ||
962 | </eAnnotations> | ||
963 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
964 | <details key="suppressedIsSetVisibility" value="true"/> | ||
965 | <details key="suppressedUnsetVisibility" value="true"/> | ||
966 | </eAnnotations> | ||
967 | </eStructuralFeatures> | ||
968 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="lowerBound" eType="#//EInt"> | ||
969 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
970 | <details key="kind" value="attribute"/> | ||
971 | <details key="name" value="lowerBound"/> | ||
972 | </eAnnotations> | ||
973 | </eStructuralFeatures> | ||
974 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="many" eType="#//EBoolean" | ||
975 | changeable="false" volatile="true" transient="true" derived="true"> | ||
976 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
977 | <details key="kind" value="attribute"/> | ||
978 | <details key="name" value="many"/> | ||
979 | </eAnnotations> | ||
980 | </eStructuralFeatures> | ||
981 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="ordered" eType="#//EBoolean" | ||
982 | defaultValueLiteral="true"> | ||
983 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
984 | <details key="kind" value="attribute"/> | ||
985 | <details key="name" value="ordered"/> | ||
986 | </eAnnotations> | ||
987 | </eStructuralFeatures> | ||
988 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="required" eType="#//EBoolean" | ||
989 | changeable="false" volatile="true" transient="true" derived="true"> | ||
990 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
991 | <details key="kind" value="attribute"/> | ||
992 | <details key="name" value="required"/> | ||
993 | </eAnnotations> | ||
994 | </eStructuralFeatures> | ||
995 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="unique" eType="#//EBoolean" | ||
996 | defaultValueLiteral="true"> | ||
997 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
998 | <details key="kind" value="attribute"/> | ||
999 | <details key="name" value="unique"/> | ||
1000 | </eAnnotations> | ||
1001 | </eStructuralFeatures> | ||
1002 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperBound" eType="#//EInt" | ||
1003 | defaultValueLiteral="1"> | ||
1004 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
1005 | <details key="kind" value="attribute"/> | ||
1006 | <details key="name" value="upperBound"/> | ||
1007 | </eAnnotations> | ||
1008 | </eStructuralFeatures> | ||
1009 | </eClassifiers> | ||
1010 | <eClassifiers xsi:type="ecore:EClass" name="ETypeParameter" eSuperTypes="#//ENamedElement"> | ||
1011 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
1012 | <details key="name" value="ETypeParameter"/> | ||
1013 | <details key="kind" value="elementOnly"/> | ||
1014 | </eAnnotations> | ||
1015 | <eStructuralFeatures xsi:type="ecore:EReference" name="eBounds" upperBound="-1" | ||
1016 | eType="#//EGenericType" containment="true" resolveProxies="false"> | ||
1017 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
1018 | <details key="kind" value="element"/> | ||
1019 | <details key="name" value="eBounds"/> | ||
1020 | </eAnnotations> | ||
1021 | </eStructuralFeatures> | ||
1022 | </eClassifiers> | ||
1023 | </ecore:EPackage> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/socialnetwork.aird b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/socialnetwork.aird new file mode 100644 index 00000000..e7e28ecd --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/socialnetwork.aird | |||
@@ -0,0 +1,183 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style"> | ||
3 | <viewpoint:DAnalysis uid="_TZr30HA1EemKP426GDjFOg" selectedViews="_Ta8cEHA1EemKP426GDjFOg" version="14.1.0.201810161215"> | ||
4 | <semanticResources>socialnetwork.ecore</semanticResources> | ||
5 | <semanticResources>socialnetwork.genmodel</semanticResources> | ||
6 | <ownedViews xmi:type="viewpoint:DView" uid="_Ta8cEHA1EemKP426GDjFOg"> | ||
7 | <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/> | ||
8 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_TbTBZXA1EemKP426GDjFOg" name="socialnetwork" repPath="#_TbTBYHA1EemKP426GDjFOg"> | ||
9 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | ||
10 | <target xmi:type="ecore:EPackage" href="socialnetwork.ecore#/"/> | ||
11 | </ownedRepresentationDescriptors> | ||
12 | </ownedViews> | ||
13 | </viewpoint:DAnalysis> | ||
14 | <diagram:DSemanticDiagram uid="_TbTBYHA1EemKP426GDjFOg" name="socialnetwork"> | ||
15 | <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_TbTBYXA1EemKP426GDjFOg" source="DANNOTATION_CUSTOMIZATION_KEY"> | ||
16 | <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_TbTBYnA1EemKP426GDjFOg"> | ||
17 | <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_ZZkWoHA1EemKP426GDjFOg" sourceArrow="FillDiamond" routingStyle="manhattan"> | ||
18 | <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> | ||
19 | <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_ZZkWoXA1EemKP426GDjFOg" showIcon="false" labelExpression="service:render"> | ||
20 | <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> | ||
21 | </centerLabelStyleDescription> | ||
22 | <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_ZZkWonA1EemKP426GDjFOg" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel"> | ||
23 | <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> | ||
24 | </endLabelStyleDescription> | ||
25 | </computedStyleDescriptions> | ||
26 | </data> | ||
27 | </ownedAnnotationEntries> | ||
28 | <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_TbTBZnA1EemKP426GDjFOg" source="GMF_DIAGRAMS"> | ||
29 | <data xmi:type="notation:Diagram" xmi:id="_TbTBZ3A1EemKP426GDjFOg" type="Sirius" element="_TbTBYHA1EemKP426GDjFOg" measurementUnit="Pixel"> | ||
30 | <children xmi:type="notation:Node" xmi:id="_Ur9YAHA1EemKP426GDjFOg" type="2003" element="_Ur5GkHA1EemKP426GDjFOg"> | ||
31 | <children xmi:type="notation:Node" xmi:id="_Ur9YA3A1EemKP426GDjFOg" type="5007"/> | ||
32 | <children xmi:type="notation:Node" xmi:id="_Ur9YBHA1EemKP426GDjFOg" type="7004"> | ||
33 | <children xmi:type="notation:Node" xmi:id="_W_L-4HA1EemKP426GDjFOg" type="3010" element="_W_DcAHA1EemKP426GDjFOg"> | ||
34 | <styles xmi:type="notation:FontStyle" xmi:id="_W_L-4XA1EemKP426GDjFOg" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/> | ||
35 | <layoutConstraint xmi:type="notation:Location" xmi:id="_W_L-4nA1EemKP426GDjFOg"/> | ||
36 | </children> | ||
37 | <styles xmi:type="notation:SortingStyle" xmi:id="_Ur9YBXA1EemKP426GDjFOg"/> | ||
38 | <styles xmi:type="notation:FilteringStyle" xmi:id="_Ur9YBnA1EemKP426GDjFOg"/> | ||
39 | </children> | ||
40 | <styles xmi:type="notation:ShapeStyle" xmi:id="_Ur9YAXA1EemKP426GDjFOg" fontName="Segoe UI" fontHeight="8"/> | ||
41 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ur9YAnA1EemKP426GDjFOg" x="285" y="165" width="120" height="100"/> | ||
42 | </children> | ||
43 | <children xmi:type="notation:Node" xmi:id="_X2ASIHA1EemKP426GDjFOg" type="2003" element="_X14WUHA1EemKP426GDjFOg"> | ||
44 | <children xmi:type="notation:Node" xmi:id="_X2A5MHA1EemKP426GDjFOg" type="5007"/> | ||
45 | <children xmi:type="notation:Node" xmi:id="_X2A5MXA1EemKP426GDjFOg" type="7004"> | ||
46 | <children xmi:type="notation:Node" xmi:id="_jitw4HA1EemKP426GDjFOg" type="3010" element="_jirUoHA1EemKP426GDjFOg"> | ||
47 | <styles xmi:type="notation:FontStyle" xmi:id="_jitw4XA1EemKP426GDjFOg" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/> | ||
48 | <layoutConstraint xmi:type="notation:Location" xmi:id="_jitw4nA1EemKP426GDjFOg"/> | ||
49 | </children> | ||
50 | <styles xmi:type="notation:SortingStyle" xmi:id="_X2A5MnA1EemKP426GDjFOg"/> | ||
51 | <styles xmi:type="notation:FilteringStyle" xmi:id="_X2A5M3A1EemKP426GDjFOg"/> | ||
52 | </children> | ||
53 | <styles xmi:type="notation:ShapeStyle" xmi:id="_X2ASIXA1EemKP426GDjFOg" fontName="Segoe UI" fontHeight="8"/> | ||
54 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X2ASInA1EemKP426GDjFOg" x="690" y="180" width="120" height="100"/> | ||
55 | </children> | ||
56 | <styles xmi:type="notation:DiagramStyle" xmi:id="_TbTBaHA1EemKP426GDjFOg"/> | ||
57 | <edges xmi:type="notation:Edge" xmi:id="_ZZnZ8HA1EemKP426GDjFOg" type="4001" element="_ZZjvkHA1EemKP426GDjFOg" source="_Ur9YAHA1EemKP426GDjFOg" target="_X2ASIHA1EemKP426GDjFOg"> | ||
58 | <children xmi:type="notation:Node" xmi:id="_ZZnZ9HA1EemKP426GDjFOg" type="6001"> | ||
59 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZZnZ9XA1EemKP426GDjFOg" x="6" y="10"/> | ||
60 | </children> | ||
61 | <children xmi:type="notation:Node" xmi:id="_ZZnZ9nA1EemKP426GDjFOg" type="6002"> | ||
62 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZZnZ93A1EemKP426GDjFOg" x="1" y="10"/> | ||
63 | </children> | ||
64 | <children xmi:type="notation:Node" xmi:id="_ZZnZ-HA1EemKP426GDjFOg" type="6003"> | ||
65 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZZnZ-XA1EemKP426GDjFOg" x="-1" y="10"/> | ||
66 | </children> | ||
67 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_ZZnZ8XA1EemKP426GDjFOg" routing="Rectilinear"/> | ||
68 | <styles xmi:type="notation:FontStyle" xmi:id="_ZZnZ8nA1EemKP426GDjFOg" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> | ||
69 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZZnZ83A1EemKP426GDjFOg" points="[0, 0, -287, 4]$[143, 0, -144, 4]$[143, -4, -144, 0]$[287, -4, 0, 0]"/> | ||
70 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZZnZ-nA1EemKP426GDjFOg" id="(1.0,0.5)"/> | ||
71 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZZnZ-3A1EemKP426GDjFOg" id="(0.0,0.30612244897959184)"/> | ||
72 | </edges> | ||
73 | <edges xmi:type="notation:Edge" xmi:id="_f8gfMHA1EemKP426GDjFOg" type="4001" element="_f8eC8HA1EemKP426GDjFOg" source="_X2ASIHA1EemKP426GDjFOg" target="_X2ASIHA1EemKP426GDjFOg"> | ||
74 | <children xmi:type="notation:Node" xmi:id="_f8gfNHA1EemKP426GDjFOg" type="6001"> | ||
75 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8gfNXA1EemKP426GDjFOg" x="-8" y="7"/> | ||
76 | </children> | ||
77 | <children xmi:type="notation:Node" xmi:id="_f8hGQHA1EemKP426GDjFOg" type="6002"> | ||
78 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8hGQXA1EemKP426GDjFOg" x="12" y="10"/> | ||
79 | </children> | ||
80 | <children xmi:type="notation:Node" xmi:id="_f8hGQnA1EemKP426GDjFOg" type="6003"> | ||
81 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f8hGQ3A1EemKP426GDjFOg" y="-10"/> | ||
82 | </children> | ||
83 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_f8gfMXA1EemKP426GDjFOg" routing="Rectilinear"/> | ||
84 | <styles xmi:type="notation:FontStyle" xmi:id="_f8gfMnA1EemKP426GDjFOg" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> | ||
85 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f8gfM3A1EemKP426GDjFOg" points="[4, 1, 0, -21]$[51, 1, 47, -21]$[51, -53, 47, -75]$[-25, -53, -29, -75]$[-25, -8, -29, -30]"/> | ||
86 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_f8hGRHA1EemKP426GDjFOg" id="(0.9666666666666667,0.09)"/> | ||
87 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_f8hGRXA1EemKP426GDjFOg" id="(1.0,0.30612244897959184)"/> | ||
88 | </edges> | ||
89 | <edges xmi:type="notation:Edge" xmi:id="_eUOggHA6EemKP426GDjFOg" type="4001" element="_eULdMHA6EemKP426GDjFOg" source="_X2ASIHA1EemKP426GDjFOg" target="_X2ASIHA1EemKP426GDjFOg"> | ||
90 | <children xmi:type="notation:Node" xmi:id="_eUOghHA6EemKP426GDjFOg" type="6001"> | ||
91 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUOghXA6EemKP426GDjFOg" y="-10"/> | ||
92 | </children> | ||
93 | <children xmi:type="notation:Node" xmi:id="_eUOghnA6EemKP426GDjFOg" type="6002"> | ||
94 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUOgh3A6EemKP426GDjFOg" y="10"/> | ||
95 | </children> | ||
96 | <children xmi:type="notation:Node" xmi:id="_eUOgiHA6EemKP426GDjFOg" type="6003"> | ||
97 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUOgiXA6EemKP426GDjFOg" y="10"/> | ||
98 | </children> | ||
99 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_eUOggXA6EemKP426GDjFOg" routing="Rectilinear"/> | ||
100 | <styles xmi:type="notation:FontStyle" xmi:id="_eUOggnA6EemKP426GDjFOg" fontName="Segoe UI" fontHeight="8"/> | ||
101 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_eUOgg3A6EemKP426GDjFOg" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/> | ||
102 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eUOginA6EemKP426GDjFOg" id="(0.5,0.5)"/> | ||
103 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eUOgi3A6EemKP426GDjFOg" id="(0.5,0.5)"/> | ||
104 | </edges> | ||
105 | </data> | ||
106 | </ownedAnnotationEntries> | ||
107 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_Ur5GkHA1EemKP426GDjFOg" name="SocialNetwork" tooltipText="" outgoingEdges="_ZZjvkHA1EemKP426GDjFOg" width="12" height="10"> | ||
108 | <target xmi:type="ecore:EClass" href="socialnetwork.ecore#//SocialNetwork"/> | ||
109 | <semanticElements xmi:type="ecore:EClass" href="socialnetwork.ecore#//SocialNetwork"/> | ||
110 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_XY_mAHA1EemKP426GDjFOg" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | ||
111 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | ||
112 | </ownedStyle> | ||
113 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | ||
114 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_W_DcAHA1EemKP426GDjFOg" name="name : EString" tooltipText=""> | ||
115 | <target xmi:type="ecore:EAttribute" href="socialnetwork.ecore#//SocialNetwork/name"/> | ||
116 | <semanticElements xmi:type="ecore:EAttribute" href="socialnetwork.ecore#//SocialNetwork/name"/> | ||
117 | <ownedStyle xmi:type="diagram:BundledImage" uid="_XZANEHA1EemKP426GDjFOg" labelAlignment="LEFT"> | ||
118 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
119 | </ownedStyle> | ||
120 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
121 | </ownedElements> | ||
122 | </ownedDiagramElements> | ||
123 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_X14WUHA1EemKP426GDjFOg" name="Person" tooltipText="" outgoingEdges="_f8eC8HA1EemKP426GDjFOg _eULdMHA6EemKP426GDjFOg" incomingEdges="_ZZjvkHA1EemKP426GDjFOg _f8eC8HA1EemKP426GDjFOg _eULdMHA6EemKP426GDjFOg" width="12" height="10"> | ||
124 | <target xmi:type="ecore:EClass" href="socialnetwork.ecore#//Person"/> | ||
125 | <semanticElements xmi:type="ecore:EClass" href="socialnetwork.ecore#//Person"/> | ||
126 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
127 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
128 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
129 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_kAhuQHA1EemKP426GDjFOg" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | ||
130 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | ||
131 | </ownedStyle> | ||
132 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | ||
133 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_jirUoHA1EemKP426GDjFOg" name="name : EString" tooltipText=""> | ||
134 | <target xmi:type="ecore:EAttribute" href="socialnetwork.ecore#//Person/name"/> | ||
135 | <semanticElements xmi:type="ecore:EAttribute" href="socialnetwork.ecore#//Person/name"/> | ||
136 | <ownedStyle xmi:type="diagram:BundledImage" uid="_kAiVUHA1EemKP426GDjFOg" labelAlignment="LEFT"> | ||
137 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
138 | </ownedStyle> | ||
139 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
140 | </ownedElements> | ||
141 | </ownedDiagramElements> | ||
142 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_ZZjvkHA1EemKP426GDjFOg" name="[0..*] persons" sourceNode="_Ur5GkHA1EemKP426GDjFOg" targetNode="_X14WUHA1EemKP426GDjFOg"> | ||
143 | <target xmi:type="ecore:EReference" href="socialnetwork.ecore#//SocialNetwork/persons"/> | ||
144 | <semanticElements xmi:type="ecore:EReference" href="socialnetwork.ecore#//SocialNetwork/persons"/> | ||
145 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_ZZkWo3A1EemKP426GDjFOg" description="_ZZkWoHA1EemKP426GDjFOg" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0"> | ||
146 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_ZZkWpHA1EemKP426GDjFOg" showIcon="false"> | ||
147 | <customFeatures>labelSize</customFeatures> | ||
148 | </centerLabelStyle> | ||
149 | <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_ZZkWpXA1EemKP426GDjFOg" showIcon="false" labelColor="39,76,114"> | ||
150 | <customFeatures>labelSize</customFeatures> | ||
151 | </endLabelStyle> | ||
152 | </ownedStyle> | ||
153 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | ||
154 | </ownedDiagramElements> | ||
155 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_f8eC8HA1EemKP426GDjFOg" name="[0..*] friends" sourceNode="_X14WUHA1EemKP426GDjFOg" targetNode="_X14WUHA1EemKP426GDjFOg"> | ||
156 | <target xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/friends"/> | ||
157 | <semanticElements xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/friends"/> | ||
158 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_erMusHA9EemKP426GDjFOg" routingStyle="manhattan" strokeColor="0,0,0"> | ||
159 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/> | ||
160 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_erMusXA9EemKP426GDjFOg" showIcon="false"/> | ||
161 | <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_erMusnA9EemKP426GDjFOg" labelSize="6" showIcon="false" labelColor="39,76,114"/> | ||
162 | </ownedStyle> | ||
163 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | ||
164 | </ownedDiagramElements> | ||
165 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_eULdMHA6EemKP426GDjFOg" sourceNode="_X14WUHA1EemKP426GDjFOg" targetNode="_X14WUHA1EemKP426GDjFOg" beginLabel="[0..*] children" endLabel="[0..2] parents"> | ||
166 | <target xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/parents"/> | ||
167 | <semanticElements xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/children"/> | ||
168 | <semanticElements xmi:type="ecore:EReference" href="socialnetwork.ecore#//Person/parents"/> | ||
169 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_eUMEQHA6EemKP426GDjFOg" sourceArrow="InputArrow" routingStyle="manhattan" strokeColor="0,0,0"> | ||
170 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']/@style"/> | ||
171 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_eUMEQXA6EemKP426GDjFOg" showIcon="false"/> | ||
172 | <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_eUMEQnA6EemKP426GDjFOg" showIcon="false"/> | ||
173 | </ownedStyle> | ||
174 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/> | ||
175 | </ownedDiagramElements> | ||
176 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | ||
177 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_TbTBZHA1EemKP426GDjFOg"/> | ||
178 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> | ||
179 | <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/> | ||
180 | <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/> | ||
181 | <target xmi:type="ecore:EPackage" href="socialnetwork.ecore#/"/> | ||
182 | </diagram:DSemanticDiagram> | ||
183 | </xmi:XMI> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/socialnetwork.ecore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/socialnetwork.ecore new file mode 100644 index 00000000..cacf9921 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/socialnetwork.ecore | |||
@@ -0,0 +1,17 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
3 | xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="socialnetwork" nsURI="http://ecse.mcgill.ca/socialnetwork" nsPrefix="socialnetwork"> | ||
4 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/> | ||
5 | <eClassifiers xsi:type="ecore:EClass" name="SocialNetwork"> | ||
6 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" | ||
7 | defaultValueLiteral="SocialNetwork"/> | ||
8 | <eStructuralFeatures xsi:type="ecore:EReference" name="persons" upperBound="-1" | ||
9 | eType="#//Person" containment="true"/> | ||
10 | </eClassifiers> | ||
11 | <eClassifiers xsi:type="ecore:EClass" name="Person"> | ||
12 | <eStructuralFeatures xsi:type="ecore:EReference" name="friends" upperBound="-1" | ||
13 | eType="#//Person"/> | ||
14 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" | ||
15 | defaultValueLiteral="Name"/> | ||
16 | </eClassifiers> | ||
17 | </ecore:EPackage> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/socialnetwork.genmodel b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/socialnetwork.genmodel new file mode 100644 index 00000000..c9515653 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/socialnetwork.genmodel | |||
@@ -0,0 +1,21 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
3 | xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" | ||
4 | modelDirectory="/SocialNetwork_plugin/encore_gen" creationIcons="false" | ||
5 | editDirectory="/ca.mcgill.ecse.socialnetwork.edit/src-gen" editorDirectory="/ca.mcgill.ecse.socialnetwork.editor/src-gen" | ||
6 | modelPluginID="SocialNetwork_plugin" modelName="Socialnetwork" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" | ||
7 | codeFormatting="true" importerID="org.eclipse.emf.importer.ecore" complianceLevel="8.0" | ||
8 | copyrightFields="false" operationReflection="true" importOrganizing="true"> | ||
9 | <foreignModel>socialnetwork.ecore</foreignModel> | ||
10 | <testsDirectory xsi:nil="true"/> | ||
11 | <genPackages prefix="Socialnetwork" disposableProviderFactory="true" ecorePackage="socialnetwork.ecore#/"> | ||
12 | <genClasses ecoreClass="socialnetwork.ecore#//SocialNetwork"> | ||
13 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute socialnetwork.ecore#//SocialNetwork/name"/> | ||
14 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference socialnetwork.ecore#//SocialNetwork/persons"/> | ||
15 | </genClasses> | ||
16 | <genClasses ecoreClass="socialnetwork.ecore#//Person"> | ||
17 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference socialnetwork.ecore#//Person/friends"/> | ||
18 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute socialnetwork.ecore#//Person/name"/> | ||
19 | </genClasses> | ||
20 | </genPackages> | ||
21 | </genmodel:GenModel> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/200_nodes.jpg b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/200_nodes.jpg new file mode 100644 index 00000000..a35c291b --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/200_nodes.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/220_nodes.jpg b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/220_nodes.jpg new file mode 100644 index 00000000..4d41dff7 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/220_nodes.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/260_nodes.jpg b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/260_nodes.jpg new file mode 100644 index 00000000..b16cdfb2 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/260_nodes.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/280_nodes.jpg b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/280_nodes.jpg new file mode 100644 index 00000000..16c0ee23 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/280_nodes.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/output.txt b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/output.txt new file mode 100644 index 00000000..35158e20 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/output.txt | |||
@@ -0,0 +1,300 @@ | |||
1 | 1 | ||
2 | 9 | ||
3 | 7 | ||
4 | 0 | ||
5 | 4 | ||
6 | 6 | ||
7 | 16 | ||
8 | 0 | ||
9 | 2 | ||
10 | 4 | ||
11 | 17 | ||
12 | 20 | ||
13 | 1 | ||
14 | 5 | ||
15 | 2 | ||
16 | 3 | ||
17 | 11 | ||
18 | 6 | ||
19 | 4 | ||
20 | 0 | ||
21 | 2 | ||
22 | 1 | ||
23 | 3 | ||
24 | 5 | ||
25 | 9 | ||
26 | 13 | ||
27 | 11 | ||
28 | 0 | ||
29 | 1 | ||
30 | 10 | ||
31 | 3 | ||
32 | 0 | ||
33 | 1 | ||
34 | 1 | ||
35 | 0 | ||
36 | 17 | ||
37 | 0 | ||
38 | 4 | ||
39 | 2 | ||
40 | 0 | ||
41 | 1 | ||
42 | 10 | ||
43 | 10 | ||
44 | 0 | ||
45 | 24 | ||
46 | 9 | ||
47 | 0 | ||
48 | 14 | ||
49 | 1 | ||
50 | 11 | ||
51 | 2 | ||
52 | 17 | ||
53 | 3 | ||
54 | 3 | ||
55 | 3 | ||
56 | 0 | ||
57 | 3 | ||
58 | 1 | ||
59 | 3 | ||
60 | 2 | ||
61 | 2 | ||
62 | 1 | ||
63 | 0 | ||
64 | 3 | ||
65 | 6 | ||
66 | 3 | ||
67 | 16 | ||
68 | 3 | ||
69 | 10 | ||
70 | 6 | ||
71 | 6 | ||
72 | 6 | ||
73 | 11 | ||
74 | 6 | ||
75 | 10 | ||
76 | 20 | ||
77 | 1 | ||
78 | 4 | ||
79 | 13 | ||
80 | 0 | ||
81 | 0 | ||
82 | 3 | ||
83 | 2 | ||
84 | 0 | ||
85 | 12 | ||
86 | 0 | ||
87 | 0 | ||
88 | 22 | ||
89 | 4 | ||
90 | 0 | ||
91 | 0 | ||
92 | 20 | ||
93 | 1 | ||
94 | 10 | ||
95 | 9 | ||
96 | 11 | ||
97 | 5 | ||
98 | 27 | ||
99 | 1 | ||
100 | 3 | ||
101 | 9 | ||
102 | 0 | ||
103 | 23 | ||
104 | 10 | ||
105 | 9 | ||
106 | 23 | ||
107 | 0 | ||
108 | 3 | ||
109 | 7 | ||
110 | 2 | ||
111 | 0 | ||
112 | 9 | ||
113 | 3 | ||
114 | 0 | ||
115 | 12 | ||
116 | 11 | ||
117 | 7 | ||
118 | 6 | ||
119 | 9 | ||
120 | 2 | ||
121 | 0 | ||
122 | 3 | ||
123 | 4 | ||
124 | 3 | ||
125 | 9 | ||
126 | 3 | ||
127 | 0 | ||
128 | 7 | ||
129 | 2 | ||
130 | 1 | ||
131 | 9 | ||
132 | 1 | ||
133 | 11 | ||
134 | 6 | ||
135 | 5 | ||
136 | 16 | ||
137 | 0 | ||
138 | 19 | ||
139 | 14 | ||
140 | 9 | ||
141 | 13 | ||
142 | 2 | ||
143 | 8 | ||
144 | 0 | ||
145 | 6 | ||
146 | 1 | ||
147 | 1 | ||
148 | 2 | ||
149 | 0 | ||
150 | 3 | ||
151 | 15 | ||
152 | 3 | ||
153 | 0 | ||
154 | 3 | ||
155 | 17 | ||
156 | 1 | ||
157 | 15 | ||
158 | 5 | ||
159 | 1 | ||
160 | 21 | ||
161 | 8 | ||
162 | 2 | ||
163 | 7 | ||
164 | 3 | ||
165 | 16 | ||
166 | 11 | ||
167 | 1 | ||
168 | 5 | ||
169 | 1 | ||
170 | 5 | ||
171 | 1 | ||
172 | 6 | ||
173 | 3 | ||
174 | 16 | ||
175 | 6 | ||
176 | 17 | ||
177 | 3 | ||
178 | 5 | ||
179 | 7 | ||
180 | 2 | ||
181 | 9 | ||
182 | 2 | ||
183 | 1 | ||
184 | 11 | ||
185 | 1 | ||
186 | 0 | ||
187 | 3 | ||
188 | 5 | ||
189 | 6 | ||
190 | 2 | ||
191 | 5 | ||
192 | 1 | ||
193 | 4 | ||
194 | 9 | ||
195 | 0 | ||
196 | 11 | ||
197 | 1 | ||
198 | 10 | ||
199 | 13 | ||
200 | 6 | ||
201 | 2 | ||
202 | 1 | ||
203 | 3 | ||
204 | 4 | ||
205 | 0 | ||
206 | 1 | ||
207 | 2 | ||
208 | 10 | ||
209 | 12 | ||
210 | 3 | ||
211 | 3 | ||
212 | 3 | ||
213 | 0 | ||
214 | 2 | ||
215 | 4 | ||
216 | 2 | ||
217 | 18 | ||
218 | 3 | ||
219 | 8 | ||
220 | 7 | ||
221 | 5 | ||
222 | 3 | ||
223 | 16 | ||
224 | 1 | ||
225 | 4 | ||
226 | 8 | ||
227 | 15 | ||
228 | 1 | ||
229 | 11 | ||
230 | 15 | ||
231 | 1 | ||
232 | 8 | ||
233 | 7 | ||
234 | 1 | ||
235 | 2 | ||
236 | 0 | ||
237 | 9 | ||
238 | 5 | ||
239 | 2 | ||
240 | 1 | ||
241 | 3 | ||
242 | 6 | ||
243 | 4 | ||
244 | 8 | ||
245 | 3 | ||
246 | 12 | ||
247 | 4 | ||
248 | 21 | ||
249 | 9 | ||
250 | 2 | ||
251 | 3 | ||
252 | 2 | ||
253 | 1 | ||
254 | 3 | ||
255 | 11 | ||
256 | 2 | ||
257 | 9 | ||
258 | 0 | ||
259 | 10 | ||
260 | 6 | ||
261 | 1 | ||
262 | 2 | ||
263 | 0 | ||
264 | 8 | ||
265 | 5 | ||
266 | 2 | ||
267 | 3 | ||
268 | 8 | ||
269 | 1 | ||
270 | 13 | ||
271 | 8 | ||
272 | 2 | ||
273 | 2 | ||
274 | 11 | ||
275 | 4 | ||
276 | 21 | ||
277 | 6 | ||
278 | 5 | ||
279 | 0 | ||
280 | 8 | ||
281 | 8 | ||
282 | 12 | ||
283 | 0 | ||
284 | 0 | ||
285 | 4 | ||
286 | 1 | ||
287 | 19 | ||
288 | 5 | ||
289 | 3 | ||
290 | 1 | ||
291 | 3 | ||
292 | 12 | ||
293 | 2 | ||
294 | 6 | ||
295 | 11 | ||
296 | 8 | ||
297 | 8 | ||
298 | 2 | ||
299 | 18 | ||
300 | 0 | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/plot_distribution.m b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/plot_distribution.m new file mode 100644 index 00000000..4c67a191 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/model/statistics/plot_distribution.m | |||
@@ -0,0 +1,11 @@ | |||
1 | clear; | ||
2 | clc; | ||
3 | |||
4 | matrix = load('-ascii', "output.txt"); | ||
5 | hist(matrix,unique(matrix)); | ||
6 | hold on; | ||
7 | [a,b] = hist(matrix,unique(matrix)) | ||
8 | plot(b, a) | ||
9 | hold off; | ||
10 | sum(matrix) | ||
11 | average = sum(matrix) / length(matrix) \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/output/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/output/.gitignore new file mode 100644 index 00000000..17126b28 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/output/.gitignore | |||
@@ -0,0 +1,4 @@ | |||
1 | # ignore everything in this folder except for this folder it self | ||
2 | |||
3 | * | ||
4 | !.gitignore \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/plugin.properties b/Metrics/Metrics-Calculation/SocialNetwork_plugin/plugin.properties new file mode 100644 index 00000000..a6a0df71 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/plugin.properties | |||
@@ -0,0 +1,4 @@ | |||
1 | # | ||
2 | |||
3 | pluginName = SocialNetwork_plugin | ||
4 | providerName = www.example.org | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/plugin.xml b/Metrics/Metrics-Calculation/SocialNetwork_plugin/plugin.xml new file mode 100644 index 00000000..86211808 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/plugin.xml | |||
@@ -0,0 +1,25 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?><?eclipse version="3.0"?><!-- | ||
2 | --><plugin> | ||
3 | <extension point="org.eclipse.emf.ecore.generated_package"> | ||
4 | <!-- @generated socialnetwork --> | ||
5 | <package class="socialnetwork.SocialnetworkPackage" genModel="model/socialnetwork.genmodel" uri="http://ecse.mcgill.ca/socialnetwork"/> | ||
6 | </extension> | ||
7 | <extension id="ca.mcgill.ecse.socialnetwork.plugin.Queries" point="org.eclipse.viatra.query.runtime.queryspecification"> | ||
8 | <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:ca.mcgill.ecse.socialnetwork.plugin.Queries" id="ca.mcgill.ecse.socialnetwork.plugin.Queries"> | ||
9 | <query-specification fqn="ca.mcgill.ecse.socialnetwork.plugin.singleFriendship"/> | ||
10 | <query-specification fqn="ca.mcgill.ecse.socialnetwork.plugin.noFriend"/> | ||
11 | <query-specification fqn="ca.mcgill.ecse.socialnetwork.plugin.selfFriend"/> | ||
12 | <query-specification fqn="ca.mcgill.ecse.socialnetwork.plugin.friendship"/> | ||
13 | </group> | ||
14 | </extension> | ||
15 | <extension id="queries.Ecore" point="org.eclipse.viatra.query.runtime.queryspecification"> | ||
16 | <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:queries.Ecore" id="queries.Ecore"> | ||
17 | <query-specification fqn="queries.directSupertype"/> | ||
18 | <query-specification fqn="queries.loopInInheritence"/> | ||
19 | <query-specification fqn="queries.opposite"/> | ||
20 | <query-specification fqn="queries.oppositeDifferentClass"/> | ||
21 | <query-specification fqn="queries.nonSymmetricOpposite"/> | ||
22 | <query-specification fqn="queries.superTypes"/> | ||
23 | </group> | ||
24 | </extension> | ||
25 | </plugin> | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/queries/queries/Ecore.vql b/Metrics/Metrics-Calculation/SocialNetwork_plugin/queries/queries/Ecore.vql new file mode 100644 index 00000000..9ddb64c9 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/queries/queries/Ecore.vql | |||
@@ -0,0 +1,33 @@ | |||
1 | package queries | ||
2 | |||
3 | import epackage "http://www.eclipse.org/emf/2002/Ecore" | ||
4 | |||
5 | pattern directSupertype(a: EClass, b:EClass) { | ||
6 | EClass.eSuperTypes(a,b); | ||
7 | } | ||
8 | |||
9 | @Constraint(key={a}, severity="error", message="error") | ||
10 | pattern loopInInheritence(a: EClass) { | ||
11 | find directSupertype+(a,a); | ||
12 | } | ||
13 | |||
14 | pattern opposite(a:EReference, b: EReference) { | ||
15 | EReference.eOpposite(a,b); | ||
16 | } | ||
17 | @Constraint(key={a}, severity="error", message="error") | ||
18 | pattern oppositeDifferentClass(a:EReference) { | ||
19 | EReference.eOpposite(a,b); | ||
20 | EReference.eContainingClass(a,aContaining); | ||
21 | EReference.eType(b,bTarget); | ||
22 | aContaining != bTarget; | ||
23 | } | ||
24 | |||
25 | @Constraint(key={a}, severity="error", message="error") | ||
26 | pattern nonSymmetricOpposite(a:EReference, b:EReference) { | ||
27 | find opposite(a,b); | ||
28 | neg find opposite(b,a); | ||
29 | } | ||
30 | |||
31 | pattern superTypes(c1:EClass, c2:EClass){ | ||
32 | EClass.eSuperTypes(c1,c2); | ||
33 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/ca/mcgill/ecse/socialnetwork/plugin/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/ca/mcgill/ecse/socialnetwork/plugin/.gitignore new file mode 100644 index 00000000..f2558cf5 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/ca/mcgill/ecse/socialnetwork/plugin/.gitignore | |||
@@ -0,0 +1,10 @@ | |||
1 | /.Friendship.java._trace | ||
2 | /.NoFriend.java._trace | ||
3 | /.Queries.java._trace | ||
4 | /.SelfFriend.java._trace | ||
5 | /.SingleFriendship.java._trace | ||
6 | /Friendship.java | ||
7 | /NoFriend.java | ||
8 | /Queries.java | ||
9 | /SelfFriend.java | ||
10 | /SingleFriendship.java | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/constraints/ecore/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/constraints/ecore/.gitignore new file mode 100644 index 00000000..c42ca056 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/constraints/ecore/.gitignore | |||
@@ -0,0 +1,8 @@ | |||
1 | /.Ecore_pattern.java._trace | ||
2 | /.MoreThenFiveSuperTypes.java._trace | ||
3 | /.DirectSupertype.java._trace | ||
4 | /.Ecore.java._trace | ||
5 | /.LoopInInheritence.java._trace | ||
6 | /.NonSymmetricOpposite.java._trace | ||
7 | /.Opposite.java._trace | ||
8 | /.OppositeDifferentClass.java._trace | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/ecore/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/ecore/.gitignore new file mode 100644 index 00000000..c42ca056 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/ecore/.gitignore | |||
@@ -0,0 +1,8 @@ | |||
1 | /.Ecore_pattern.java._trace | ||
2 | /.MoreThenFiveSuperTypes.java._trace | ||
3 | /.DirectSupertype.java._trace | ||
4 | /.Ecore.java._trace | ||
5 | /.LoopInInheritence.java._trace | ||
6 | /.NonSymmetricOpposite.java._trace | ||
7 | /.Opposite.java._trace | ||
8 | /.OppositeDifferentClass.java._trace | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/.gitignore new file mode 100644 index 00000000..e9d711d4 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/.gitignore | |||
@@ -0,0 +1,9 @@ | |||
1 | /.Ecore_pattern.java._trace | ||
2 | /.MoreThenFiveSuperTypes.java._trace | ||
3 | /.DirectSupertype.java._trace | ||
4 | /.Ecore.java._trace | ||
5 | /.LoopInInheritence.java._trace | ||
6 | /.NonSymmetricOpposite.java._trace | ||
7 | /.Opposite.java._trace | ||
8 | /.OppositeDifferentClass.java._trace | ||
9 | /.SuperTypes.java._trace | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/DirectSupertype.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/DirectSupertype.java new file mode 100644 index 00000000..a557d865 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/DirectSupertype.java | |||
@@ -0,0 +1,703 @@ | |||
1 | /** | ||
2 | * Generated from platform:/resource/SocialNetwork_plugin/queries/queries/Ecore.vql | ||
3 | */ | ||
4 | package queries; | ||
5 | |||
6 | import java.util.Arrays; | ||
7 | import java.util.Collection; | ||
8 | import java.util.LinkedHashSet; | ||
9 | import java.util.List; | ||
10 | import java.util.Objects; | ||
11 | import java.util.Optional; | ||
12 | import java.util.Set; | ||
13 | import java.util.function.Consumer; | ||
14 | import java.util.stream.Collectors; | ||
15 | import java.util.stream.Stream; | ||
16 | import org.apache.log4j.Logger; | ||
17 | import org.eclipse.emf.ecore.EClass; | ||
18 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
19 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
20 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | ||
21 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; | ||
22 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; | ||
23 | import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; | ||
24 | import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; | ||
25 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; | ||
26 | import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; | ||
27 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | ||
28 | import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; | ||
29 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; | ||
30 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; | ||
31 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; | ||
32 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; | ||
33 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; | ||
34 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; | ||
35 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; | ||
36 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; | ||
37 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; | ||
38 | import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; | ||
39 | |||
40 | /** | ||
41 | * A pattern-specific query specification that can instantiate Matcher in a type-safe way. | ||
42 | * | ||
43 | * <p>Original source: | ||
44 | * <code><pre> | ||
45 | * pattern directSupertype(a: EClass, b:EClass) { | ||
46 | * EClass.eSuperTypes(a,b); | ||
47 | * } | ||
48 | * </pre></code> | ||
49 | * | ||
50 | * @see Matcher | ||
51 | * @see Match | ||
52 | * | ||
53 | */ | ||
54 | @SuppressWarnings("all") | ||
55 | public final class DirectSupertype extends BaseGeneratedEMFQuerySpecification<DirectSupertype.Matcher> { | ||
56 | /** | ||
57 | * Pattern-specific match representation of the queries.directSupertype pattern, | ||
58 | * to be used in conjunction with {@link Matcher}. | ||
59 | * | ||
60 | * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. | ||
61 | * Each instance is a (possibly partial) substitution of pattern parameters, | ||
62 | * usable to represent a match of the pattern in the result of a query, | ||
63 | * or to specify the bound (fixed) input parameters when issuing a query. | ||
64 | * | ||
65 | * @see Matcher | ||
66 | * | ||
67 | */ | ||
68 | public static abstract class Match extends BasePatternMatch { | ||
69 | private EClass fA; | ||
70 | |||
71 | private EClass fB; | ||
72 | |||
73 | private static List<String> parameterNames = makeImmutableList("a", "b"); | ||
74 | |||
75 | private Match(final EClass pA, final EClass pB) { | ||
76 | this.fA = pA; | ||
77 | this.fB = pB; | ||
78 | } | ||
79 | |||
80 | @Override | ||
81 | public Object get(final String parameterName) { | ||
82 | switch(parameterName) { | ||
83 | case "a": return this.fA; | ||
84 | case "b": return this.fB; | ||
85 | default: return null; | ||
86 | } | ||
87 | } | ||
88 | |||
89 | @Override | ||
90 | public Object get(final int index) { | ||
91 | switch(index) { | ||
92 | case 0: return this.fA; | ||
93 | case 1: return this.fB; | ||
94 | default: return null; | ||
95 | } | ||
96 | } | ||
97 | |||
98 | public EClass getA() { | ||
99 | return this.fA; | ||
100 | } | ||
101 | |||
102 | public EClass getB() { | ||
103 | return this.fB; | ||
104 | } | ||
105 | |||
106 | @Override | ||
107 | public boolean set(final String parameterName, final Object newValue) { | ||
108 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
109 | if ("a".equals(parameterName) ) { | ||
110 | this.fA = (EClass) newValue; | ||
111 | return true; | ||
112 | } | ||
113 | if ("b".equals(parameterName) ) { | ||
114 | this.fB = (EClass) newValue; | ||
115 | return true; | ||
116 | } | ||
117 | return false; | ||
118 | } | ||
119 | |||
120 | public void setA(final EClass pA) { | ||
121 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
122 | this.fA = pA; | ||
123 | } | ||
124 | |||
125 | public void setB(final EClass pB) { | ||
126 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
127 | this.fB = pB; | ||
128 | } | ||
129 | |||
130 | @Override | ||
131 | public String patternName() { | ||
132 | return "queries.directSupertype"; | ||
133 | } | ||
134 | |||
135 | @Override | ||
136 | public List<String> parameterNames() { | ||
137 | return DirectSupertype.Match.parameterNames; | ||
138 | } | ||
139 | |||
140 | @Override | ||
141 | public Object[] toArray() { | ||
142 | return new Object[]{fA, fB}; | ||
143 | } | ||
144 | |||
145 | @Override | ||
146 | public DirectSupertype.Match toImmutable() { | ||
147 | return isMutable() ? newMatch(fA, fB) : this; | ||
148 | } | ||
149 | |||
150 | @Override | ||
151 | public String prettyPrint() { | ||
152 | StringBuilder result = new StringBuilder(); | ||
153 | result.append("\"a\"=" + prettyPrintValue(fA) + ", "); | ||
154 | result.append("\"b\"=" + prettyPrintValue(fB)); | ||
155 | return result.toString(); | ||
156 | } | ||
157 | |||
158 | @Override | ||
159 | public int hashCode() { | ||
160 | return Objects.hash(fA, fB); | ||
161 | } | ||
162 | |||
163 | @Override | ||
164 | public boolean equals(final Object obj) { | ||
165 | if (this == obj) | ||
166 | return true; | ||
167 | if (obj == null) { | ||
168 | return false; | ||
169 | } | ||
170 | if ((obj instanceof DirectSupertype.Match)) { | ||
171 | DirectSupertype.Match other = (DirectSupertype.Match) obj; | ||
172 | return Objects.equals(fA, other.fA) && Objects.equals(fB, other.fB); | ||
173 | } else { | ||
174 | // this should be infrequent | ||
175 | if (!(obj instanceof IPatternMatch)) { | ||
176 | return false; | ||
177 | } | ||
178 | IPatternMatch otherSig = (IPatternMatch) obj; | ||
179 | return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); | ||
180 | } | ||
181 | } | ||
182 | |||
183 | @Override | ||
184 | public DirectSupertype specification() { | ||
185 | return DirectSupertype.instance(); | ||
186 | } | ||
187 | |||
188 | /** | ||
189 | * Returns an empty, mutable match. | ||
190 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
191 | * | ||
192 | * @return the empty match. | ||
193 | * | ||
194 | */ | ||
195 | public static DirectSupertype.Match newEmptyMatch() { | ||
196 | return new Mutable(null, null); | ||
197 | } | ||
198 | |||
199 | /** | ||
200 | * Returns a mutable (partial) match. | ||
201 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
202 | * | ||
203 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
204 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
205 | * @return the new, mutable (partial) match object. | ||
206 | * | ||
207 | */ | ||
208 | public static DirectSupertype.Match newMutableMatch(final EClass pA, final EClass pB) { | ||
209 | return new Mutable(pA, pB); | ||
210 | } | ||
211 | |||
212 | /** | ||
213 | * Returns a new (partial) match. | ||
214 | * This can be used e.g. to call the matcher with a partial match. | ||
215 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
216 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
217 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
218 | * @return the (partial) match object. | ||
219 | * | ||
220 | */ | ||
221 | public static DirectSupertype.Match newMatch(final EClass pA, final EClass pB) { | ||
222 | return new Immutable(pA, pB); | ||
223 | } | ||
224 | |||
225 | private static final class Mutable extends DirectSupertype.Match { | ||
226 | Mutable(final EClass pA, final EClass pB) { | ||
227 | super(pA, pB); | ||
228 | } | ||
229 | |||
230 | @Override | ||
231 | public boolean isMutable() { | ||
232 | return true; | ||
233 | } | ||
234 | } | ||
235 | |||
236 | private static final class Immutable extends DirectSupertype.Match { | ||
237 | Immutable(final EClass pA, final EClass pB) { | ||
238 | super(pA, pB); | ||
239 | } | ||
240 | |||
241 | @Override | ||
242 | public boolean isMutable() { | ||
243 | return false; | ||
244 | } | ||
245 | } | ||
246 | } | ||
247 | |||
248 | /** | ||
249 | * Generated pattern matcher API of the queries.directSupertype pattern, | ||
250 | * providing pattern-specific query methods. | ||
251 | * | ||
252 | * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, | ||
253 | * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. | ||
254 | * | ||
255 | * <p>Matches of the pattern will be represented as {@link Match}. | ||
256 | * | ||
257 | * <p>Original source: | ||
258 | * <code><pre> | ||
259 | * pattern directSupertype(a: EClass, b:EClass) { | ||
260 | * EClass.eSuperTypes(a,b); | ||
261 | * } | ||
262 | * </pre></code> | ||
263 | * | ||
264 | * @see Match | ||
265 | * @see DirectSupertype | ||
266 | * | ||
267 | */ | ||
268 | public static class Matcher extends BaseMatcher<DirectSupertype.Match> { | ||
269 | /** | ||
270 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
271 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
272 | * | ||
273 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
274 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
275 | * | ||
276 | */ | ||
277 | public static DirectSupertype.Matcher on(final ViatraQueryEngine engine) { | ||
278 | // check if matcher already exists | ||
279 | Matcher matcher = engine.getExistingMatcher(querySpecification()); | ||
280 | if (matcher == null) { | ||
281 | matcher = (Matcher)engine.getMatcher(querySpecification()); | ||
282 | } | ||
283 | return matcher; | ||
284 | } | ||
285 | |||
286 | /** | ||
287 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
288 | * @return an initialized matcher | ||
289 | * @noreference This method is for internal matcher initialization by the framework, do not call it manually. | ||
290 | * | ||
291 | */ | ||
292 | public static DirectSupertype.Matcher create() { | ||
293 | return new Matcher(); | ||
294 | } | ||
295 | |||
296 | private static final int POSITION_A = 0; | ||
297 | |||
298 | private static final int POSITION_B = 1; | ||
299 | |||
300 | private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(DirectSupertype.Matcher.class); | ||
301 | |||
302 | /** | ||
303 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
304 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
305 | * | ||
306 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
307 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
308 | * | ||
309 | */ | ||
310 | private Matcher() { | ||
311 | super(querySpecification()); | ||
312 | } | ||
313 | |||
314 | /** | ||
315 | * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. | ||
316 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
317 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
318 | * @return matches represented as a Match object. | ||
319 | * | ||
320 | */ | ||
321 | public Collection<DirectSupertype.Match> getAllMatches(final EClass pA, final EClass pB) { | ||
322 | return rawStreamAllMatches(new Object[]{pA, pB}).collect(Collectors.toSet()); | ||
323 | } | ||
324 | |||
325 | /** | ||
326 | * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. | ||
327 | * </p> | ||
328 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
329 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
330 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
331 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
332 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
333 | * @return a stream of matches represented as a Match object. | ||
334 | * | ||
335 | */ | ||
336 | public Stream<DirectSupertype.Match> streamAllMatches(final EClass pA, final EClass pB) { | ||
337 | return rawStreamAllMatches(new Object[]{pA, pB}); | ||
338 | } | ||
339 | |||
340 | /** | ||
341 | * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
342 | * Neither determinism nor randomness of selection is guaranteed. | ||
343 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
344 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
345 | * @return a match represented as a Match object, or null if no match is found. | ||
346 | * | ||
347 | */ | ||
348 | public Optional<DirectSupertype.Match> getOneArbitraryMatch(final EClass pA, final EClass pB) { | ||
349 | return rawGetOneArbitraryMatch(new Object[]{pA, pB}); | ||
350 | } | ||
351 | |||
352 | /** | ||
353 | * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, | ||
354 | * under any possible substitution of the unspecified parameters (if any). | ||
355 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
356 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
357 | * @return true if the input is a valid (partial) match of the pattern. | ||
358 | * | ||
359 | */ | ||
360 | public boolean hasMatch(final EClass pA, final EClass pB) { | ||
361 | return rawHasMatch(new Object[]{pA, pB}); | ||
362 | } | ||
363 | |||
364 | /** | ||
365 | * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. | ||
366 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
367 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
368 | * @return the number of pattern matches found. | ||
369 | * | ||
370 | */ | ||
371 | public int countMatches(final EClass pA, final EClass pB) { | ||
372 | return rawCountMatches(new Object[]{pA, pB}); | ||
373 | } | ||
374 | |||
375 | /** | ||
376 | * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
377 | * Neither determinism nor randomness of selection is guaranteed. | ||
378 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
379 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
380 | * @param processor the action that will process the selected match. | ||
381 | * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked | ||
382 | * | ||
383 | */ | ||
384 | public boolean forOneArbitraryMatch(final EClass pA, final EClass pB, final Consumer<? super DirectSupertype.Match> processor) { | ||
385 | return rawForOneArbitraryMatch(new Object[]{pA, pB}, processor); | ||
386 | } | ||
387 | |||
388 | /** | ||
389 | * Returns a new (partial) match. | ||
390 | * This can be used e.g. to call the matcher with a partial match. | ||
391 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
392 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
393 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
394 | * @return the (partial) match object. | ||
395 | * | ||
396 | */ | ||
397 | public DirectSupertype.Match newMatch(final EClass pA, final EClass pB) { | ||
398 | return DirectSupertype.Match.newMatch(pA, pB); | ||
399 | } | ||
400 | |||
401 | /** | ||
402 | * Retrieve the set of values that occur in matches for a. | ||
403 | * @return the Set of all values or empty set if there are no matches | ||
404 | * | ||
405 | */ | ||
406 | protected Stream<EClass> rawStreamAllValuesOfa(final Object[] parameters) { | ||
407 | return rawStreamAllValues(POSITION_A, parameters).map(EClass.class::cast); | ||
408 | } | ||
409 | |||
410 | /** | ||
411 | * Retrieve the set of values that occur in matches for a. | ||
412 | * @return the Set of all values or empty set if there are no matches | ||
413 | * | ||
414 | */ | ||
415 | public Set<EClass> getAllValuesOfa() { | ||
416 | return rawStreamAllValuesOfa(emptyArray()).collect(Collectors.toSet()); | ||
417 | } | ||
418 | |||
419 | /** | ||
420 | * Retrieve the set of values that occur in matches for a. | ||
421 | * @return the Set of all values or empty set if there are no matches | ||
422 | * | ||
423 | */ | ||
424 | public Stream<EClass> streamAllValuesOfa() { | ||
425 | return rawStreamAllValuesOfa(emptyArray()); | ||
426 | } | ||
427 | |||
428 | /** | ||
429 | * Retrieve the set of values that occur in matches for a. | ||
430 | * </p> | ||
431 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
432 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
433 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
434 | * | ||
435 | * @return the Stream of all values or empty set if there are no matches | ||
436 | * | ||
437 | */ | ||
438 | public Stream<EClass> streamAllValuesOfa(final DirectSupertype.Match partialMatch) { | ||
439 | return rawStreamAllValuesOfa(partialMatch.toArray()); | ||
440 | } | ||
441 | |||
442 | /** | ||
443 | * Retrieve the set of values that occur in matches for a. | ||
444 | * </p> | ||
445 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
446 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
447 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
448 | * | ||
449 | * @return the Stream of all values or empty set if there are no matches | ||
450 | * | ||
451 | */ | ||
452 | public Stream<EClass> streamAllValuesOfa(final EClass pB) { | ||
453 | return rawStreamAllValuesOfa(new Object[]{null, pB}); | ||
454 | } | ||
455 | |||
456 | /** | ||
457 | * Retrieve the set of values that occur in matches for a. | ||
458 | * @return the Set of all values or empty set if there are no matches | ||
459 | * | ||
460 | */ | ||
461 | public Set<EClass> getAllValuesOfa(final DirectSupertype.Match partialMatch) { | ||
462 | return rawStreamAllValuesOfa(partialMatch.toArray()).collect(Collectors.toSet()); | ||
463 | } | ||
464 | |||
465 | /** | ||
466 | * Retrieve the set of values that occur in matches for a. | ||
467 | * @return the Set of all values or empty set if there are no matches | ||
468 | * | ||
469 | */ | ||
470 | public Set<EClass> getAllValuesOfa(final EClass pB) { | ||
471 | return rawStreamAllValuesOfa(new Object[]{null, pB}).collect(Collectors.toSet()); | ||
472 | } | ||
473 | |||
474 | /** | ||
475 | * Retrieve the set of values that occur in matches for b. | ||
476 | * @return the Set of all values or empty set if there are no matches | ||
477 | * | ||
478 | */ | ||
479 | protected Stream<EClass> rawStreamAllValuesOfb(final Object[] parameters) { | ||
480 | return rawStreamAllValues(POSITION_B, parameters).map(EClass.class::cast); | ||
481 | } | ||
482 | |||
483 | /** | ||
484 | * Retrieve the set of values that occur in matches for b. | ||
485 | * @return the Set of all values or empty set if there are no matches | ||
486 | * | ||
487 | */ | ||
488 | public Set<EClass> getAllValuesOfb() { | ||
489 | return rawStreamAllValuesOfb(emptyArray()).collect(Collectors.toSet()); | ||
490 | } | ||
491 | |||
492 | /** | ||
493 | * Retrieve the set of values that occur in matches for b. | ||
494 | * @return the Set of all values or empty set if there are no matches | ||
495 | * | ||
496 | */ | ||
497 | public Stream<EClass> streamAllValuesOfb() { | ||
498 | return rawStreamAllValuesOfb(emptyArray()); | ||
499 | } | ||
500 | |||
501 | /** | ||
502 | * Retrieve the set of values that occur in matches for b. | ||
503 | * </p> | ||
504 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
505 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
506 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
507 | * | ||
508 | * @return the Stream of all values or empty set if there are no matches | ||
509 | * | ||
510 | */ | ||
511 | public Stream<EClass> streamAllValuesOfb(final DirectSupertype.Match partialMatch) { | ||
512 | return rawStreamAllValuesOfb(partialMatch.toArray()); | ||
513 | } | ||
514 | |||
515 | /** | ||
516 | * Retrieve the set of values that occur in matches for b. | ||
517 | * </p> | ||
518 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
519 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
520 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
521 | * | ||
522 | * @return the Stream of all values or empty set if there are no matches | ||
523 | * | ||
524 | */ | ||
525 | public Stream<EClass> streamAllValuesOfb(final EClass pA) { | ||
526 | return rawStreamAllValuesOfb(new Object[]{pA, null}); | ||
527 | } | ||
528 | |||
529 | /** | ||
530 | * Retrieve the set of values that occur in matches for b. | ||
531 | * @return the Set of all values or empty set if there are no matches | ||
532 | * | ||
533 | */ | ||
534 | public Set<EClass> getAllValuesOfb(final DirectSupertype.Match partialMatch) { | ||
535 | return rawStreamAllValuesOfb(partialMatch.toArray()).collect(Collectors.toSet()); | ||
536 | } | ||
537 | |||
538 | /** | ||
539 | * Retrieve the set of values that occur in matches for b. | ||
540 | * @return the Set of all values or empty set if there are no matches | ||
541 | * | ||
542 | */ | ||
543 | public Set<EClass> getAllValuesOfb(final EClass pA) { | ||
544 | return rawStreamAllValuesOfb(new Object[]{pA, null}).collect(Collectors.toSet()); | ||
545 | } | ||
546 | |||
547 | @Override | ||
548 | protected DirectSupertype.Match tupleToMatch(final Tuple t) { | ||
549 | try { | ||
550 | return DirectSupertype.Match.newMatch((EClass) t.get(POSITION_A), (EClass) t.get(POSITION_B)); | ||
551 | } catch(ClassCastException e) { | ||
552 | LOGGER.error("Element(s) in tuple not properly typed!",e); | ||
553 | return null; | ||
554 | } | ||
555 | } | ||
556 | |||
557 | @Override | ||
558 | protected DirectSupertype.Match arrayToMatch(final Object[] match) { | ||
559 | try { | ||
560 | return DirectSupertype.Match.newMatch((EClass) match[POSITION_A], (EClass) match[POSITION_B]); | ||
561 | } catch(ClassCastException e) { | ||
562 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
563 | return null; | ||
564 | } | ||
565 | } | ||
566 | |||
567 | @Override | ||
568 | protected DirectSupertype.Match arrayToMatchMutable(final Object[] match) { | ||
569 | try { | ||
570 | return DirectSupertype.Match.newMutableMatch((EClass) match[POSITION_A], (EClass) match[POSITION_B]); | ||
571 | } catch(ClassCastException e) { | ||
572 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
573 | return null; | ||
574 | } | ||
575 | } | ||
576 | |||
577 | /** | ||
578 | * @return the singleton instance of the query specification of this pattern | ||
579 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
580 | * | ||
581 | */ | ||
582 | public static IQuerySpecification<DirectSupertype.Matcher> querySpecification() { | ||
583 | return DirectSupertype.instance(); | ||
584 | } | ||
585 | } | ||
586 | |||
587 | private DirectSupertype() { | ||
588 | super(GeneratedPQuery.INSTANCE); | ||
589 | } | ||
590 | |||
591 | /** | ||
592 | * @return the singleton instance of the query specification | ||
593 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
594 | * | ||
595 | */ | ||
596 | public static DirectSupertype instance() { | ||
597 | try{ | ||
598 | return LazyHolder.INSTANCE; | ||
599 | } catch (ExceptionInInitializerError err) { | ||
600 | throw processInitializerError(err); | ||
601 | } | ||
602 | } | ||
603 | |||
604 | @Override | ||
605 | protected DirectSupertype.Matcher instantiate(final ViatraQueryEngine engine) { | ||
606 | return DirectSupertype.Matcher.on(engine); | ||
607 | } | ||
608 | |||
609 | @Override | ||
610 | public DirectSupertype.Matcher instantiate() { | ||
611 | return DirectSupertype.Matcher.create(); | ||
612 | } | ||
613 | |||
614 | @Override | ||
615 | public DirectSupertype.Match newEmptyMatch() { | ||
616 | return DirectSupertype.Match.newEmptyMatch(); | ||
617 | } | ||
618 | |||
619 | @Override | ||
620 | public DirectSupertype.Match newMatch(final Object... parameters) { | ||
621 | return DirectSupertype.Match.newMatch((org.eclipse.emf.ecore.EClass) parameters[0], (org.eclipse.emf.ecore.EClass) parameters[1]); | ||
622 | } | ||
623 | |||
624 | /** | ||
625 | * Inner class allowing the singleton instance of {@link DirectSupertype} to be created | ||
626 | * <b>not</b> at the class load time of the outer class, | ||
627 | * but rather at the first call to {@link DirectSupertype#instance()}. | ||
628 | * | ||
629 | * <p> This workaround is required e.g. to support recursion. | ||
630 | * | ||
631 | */ | ||
632 | private static class LazyHolder { | ||
633 | private static final DirectSupertype INSTANCE = new DirectSupertype(); | ||
634 | |||
635 | /** | ||
636 | * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned. | ||
637 | * This initialization order is required to support indirect recursion. | ||
638 | * | ||
639 | * <p> The static initializer is defined using a helper field to work around limitations of the code generator. | ||
640 | * | ||
641 | */ | ||
642 | private static final Object STATIC_INITIALIZER = ensureInitialized(); | ||
643 | |||
644 | public static Object ensureInitialized() { | ||
645 | INSTANCE.ensureInitializedInternal(); | ||
646 | return null; | ||
647 | } | ||
648 | } | ||
649 | |||
650 | private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { | ||
651 | private static final DirectSupertype.GeneratedPQuery INSTANCE = new GeneratedPQuery(); | ||
652 | |||
653 | private final PParameter parameter_a = new PParameter("a", "org.eclipse.emf.ecore.EClass", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EClass")), PParameterDirection.INOUT); | ||
654 | |||
655 | private final PParameter parameter_b = new PParameter("b", "org.eclipse.emf.ecore.EClass", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EClass")), PParameterDirection.INOUT); | ||
656 | |||
657 | private final List<PParameter> parameters = Arrays.asList(parameter_a, parameter_b); | ||
658 | |||
659 | private GeneratedPQuery() { | ||
660 | super(PVisibility.PUBLIC); | ||
661 | } | ||
662 | |||
663 | @Override | ||
664 | public String getFullyQualifiedName() { | ||
665 | return "queries.directSupertype"; | ||
666 | } | ||
667 | |||
668 | @Override | ||
669 | public List<String> getParameterNames() { | ||
670 | return Arrays.asList("a","b"); | ||
671 | } | ||
672 | |||
673 | @Override | ||
674 | public List<PParameter> getParameters() { | ||
675 | return parameters; | ||
676 | } | ||
677 | |||
678 | @Override | ||
679 | public Set<PBody> doGetContainedBodies() { | ||
680 | setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); | ||
681 | Set<PBody> bodies = new LinkedHashSet<>(); | ||
682 | { | ||
683 | PBody body = new PBody(this); | ||
684 | PVariable var_a = body.getOrCreateVariableByName("a"); | ||
685 | PVariable var_b = body.getOrCreateVariableByName("b"); | ||
686 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
687 | new TypeConstraint(body, Tuples.flatTupleOf(var_b), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
688 | body.setSymbolicParameters(Arrays.<ExportedParameter>asList( | ||
689 | new ExportedParameter(body, var_a, parameter_a), | ||
690 | new ExportedParameter(body, var_b, parameter_b) | ||
691 | )); | ||
692 | // EClass.eSuperTypes(a,b) | ||
693 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
694 | PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); | ||
695 | new TypeConstraint(body, Tuples.flatTupleOf(var_a, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass", "eSuperTypes"))); | ||
696 | new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
697 | new Equality(body, var__virtual_0_, var_b); | ||
698 | bodies.add(body); | ||
699 | } | ||
700 | return bodies; | ||
701 | } | ||
702 | } | ||
703 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/Ecore.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/Ecore.java new file mode 100644 index 00000000..adfa5cf8 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/Ecore.java | |||
@@ -0,0 +1,108 @@ | |||
1 | /** | ||
2 | * Generated from platform:/resource/SocialNetwork_plugin/queries/queries/Ecore.vql | ||
3 | */ | ||
4 | package queries; | ||
5 | |||
6 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | ||
7 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedPatternGroup; | ||
8 | import queries.DirectSupertype; | ||
9 | import queries.LoopInInheritence; | ||
10 | import queries.NonSymmetricOpposite; | ||
11 | import queries.Opposite; | ||
12 | import queries.OppositeDifferentClass; | ||
13 | import queries.SuperTypes; | ||
14 | |||
15 | /** | ||
16 | * A pattern group formed of all public patterns defined in Ecore.vql. | ||
17 | * | ||
18 | * <p>Use the static instance as any {@link interface org.eclipse.viatra.query.runtime.api.IQueryGroup}, to conveniently prepare | ||
19 | * a VIATRA Query engine for matching all patterns originally defined in file Ecore.vql, | ||
20 | * in order to achieve better performance than one-by-one on-demand matcher initialization. | ||
21 | * | ||
22 | * <p> From package queries, the group contains the definition of the following patterns: <ul> | ||
23 | * <li>directSupertype</li> | ||
24 | * <li>loopInInheritence</li> | ||
25 | * <li>opposite</li> | ||
26 | * <li>oppositeDifferentClass</li> | ||
27 | * <li>nonSymmetricOpposite</li> | ||
28 | * <li>superTypes</li> | ||
29 | * </ul> | ||
30 | * | ||
31 | * @see IQueryGroup | ||
32 | * | ||
33 | */ | ||
34 | @SuppressWarnings("all") | ||
35 | public final class Ecore extends BaseGeneratedPatternGroup { | ||
36 | /** | ||
37 | * Access the pattern group. | ||
38 | * | ||
39 | * @return the singleton instance of the group | ||
40 | * @throws ViatraQueryRuntimeException if there was an error loading the generated code of pattern specifications | ||
41 | * | ||
42 | */ | ||
43 | public static Ecore instance() { | ||
44 | if (INSTANCE == null) { | ||
45 | INSTANCE = new Ecore(); | ||
46 | } | ||
47 | return INSTANCE; | ||
48 | } | ||
49 | |||
50 | private static Ecore INSTANCE; | ||
51 | |||
52 | private Ecore() { | ||
53 | querySpecifications.add(DirectSupertype.instance()); | ||
54 | querySpecifications.add(LoopInInheritence.instance()); | ||
55 | querySpecifications.add(Opposite.instance()); | ||
56 | querySpecifications.add(OppositeDifferentClass.instance()); | ||
57 | querySpecifications.add(NonSymmetricOpposite.instance()); | ||
58 | querySpecifications.add(SuperTypes.instance()); | ||
59 | } | ||
60 | |||
61 | public DirectSupertype getDirectSupertype() { | ||
62 | return DirectSupertype.instance(); | ||
63 | } | ||
64 | |||
65 | public DirectSupertype.Matcher getDirectSupertype(final ViatraQueryEngine engine) { | ||
66 | return DirectSupertype.Matcher.on(engine); | ||
67 | } | ||
68 | |||
69 | public LoopInInheritence getLoopInInheritence() { | ||
70 | return LoopInInheritence.instance(); | ||
71 | } | ||
72 | |||
73 | public LoopInInheritence.Matcher getLoopInInheritence(final ViatraQueryEngine engine) { | ||
74 | return LoopInInheritence.Matcher.on(engine); | ||
75 | } | ||
76 | |||
77 | public Opposite getOpposite() { | ||
78 | return Opposite.instance(); | ||
79 | } | ||
80 | |||
81 | public Opposite.Matcher getOpposite(final ViatraQueryEngine engine) { | ||
82 | return Opposite.Matcher.on(engine); | ||
83 | } | ||
84 | |||
85 | public OppositeDifferentClass getOppositeDifferentClass() { | ||
86 | return OppositeDifferentClass.instance(); | ||
87 | } | ||
88 | |||
89 | public OppositeDifferentClass.Matcher getOppositeDifferentClass(final ViatraQueryEngine engine) { | ||
90 | return OppositeDifferentClass.Matcher.on(engine); | ||
91 | } | ||
92 | |||
93 | public NonSymmetricOpposite getNonSymmetricOpposite() { | ||
94 | return NonSymmetricOpposite.instance(); | ||
95 | } | ||
96 | |||
97 | public NonSymmetricOpposite.Matcher getNonSymmetricOpposite(final ViatraQueryEngine engine) { | ||
98 | return NonSymmetricOpposite.Matcher.on(engine); | ||
99 | } | ||
100 | |||
101 | public SuperTypes getSuperTypes() { | ||
102 | return SuperTypes.instance(); | ||
103 | } | ||
104 | |||
105 | public SuperTypes.Matcher getSuperTypes(final ViatraQueryEngine engine) { | ||
106 | return SuperTypes.Matcher.on(engine); | ||
107 | } | ||
108 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/LoopInInheritence.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/LoopInInheritence.java new file mode 100644 index 00000000..5212e3d2 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/LoopInInheritence.java | |||
@@ -0,0 +1,558 @@ | |||
1 | /** | ||
2 | * Generated from platform:/resource/SocialNetwork_plugin/queries/queries/Ecore.vql | ||
3 | */ | ||
4 | package queries; | ||
5 | |||
6 | import java.util.Arrays; | ||
7 | import java.util.Collection; | ||
8 | import java.util.LinkedHashSet; | ||
9 | import java.util.List; | ||
10 | import java.util.Objects; | ||
11 | import java.util.Optional; | ||
12 | import java.util.Set; | ||
13 | import java.util.function.Consumer; | ||
14 | import java.util.stream.Collectors; | ||
15 | import java.util.stream.Stream; | ||
16 | import org.apache.log4j.Logger; | ||
17 | import org.eclipse.emf.ecore.EClass; | ||
18 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
19 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
20 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | ||
21 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; | ||
22 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; | ||
23 | import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; | ||
24 | import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; | ||
25 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; | ||
26 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | ||
27 | import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; | ||
28 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; | ||
29 | import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; | ||
30 | import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; | ||
31 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; | ||
32 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.BinaryTransitiveClosure; | ||
33 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; | ||
34 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; | ||
35 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; | ||
36 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; | ||
37 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; | ||
38 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; | ||
39 | import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; | ||
40 | import queries.DirectSupertype; | ||
41 | |||
42 | /** | ||
43 | * A pattern-specific query specification that can instantiate Matcher in a type-safe way. | ||
44 | * | ||
45 | * <p>Original source: | ||
46 | * <code><pre> | ||
47 | * {@literal @}Constraint(key={a}, severity="error", message="error") | ||
48 | * pattern loopInInheritence(a: EClass) { | ||
49 | * find directSupertype+(a,a); | ||
50 | * } | ||
51 | * </pre></code> | ||
52 | * | ||
53 | * @see Matcher | ||
54 | * @see Match | ||
55 | * | ||
56 | */ | ||
57 | @SuppressWarnings("all") | ||
58 | public final class LoopInInheritence extends BaseGeneratedEMFQuerySpecification<LoopInInheritence.Matcher> { | ||
59 | /** | ||
60 | * Pattern-specific match representation of the queries.loopInInheritence pattern, | ||
61 | * to be used in conjunction with {@link Matcher}. | ||
62 | * | ||
63 | * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. | ||
64 | * Each instance is a (possibly partial) substitution of pattern parameters, | ||
65 | * usable to represent a match of the pattern in the result of a query, | ||
66 | * or to specify the bound (fixed) input parameters when issuing a query. | ||
67 | * | ||
68 | * @see Matcher | ||
69 | * | ||
70 | */ | ||
71 | public static abstract class Match extends BasePatternMatch { | ||
72 | private EClass fA; | ||
73 | |||
74 | private static List<String> parameterNames = makeImmutableList("a"); | ||
75 | |||
76 | private Match(final EClass pA) { | ||
77 | this.fA = pA; | ||
78 | } | ||
79 | |||
80 | @Override | ||
81 | public Object get(final String parameterName) { | ||
82 | switch(parameterName) { | ||
83 | case "a": return this.fA; | ||
84 | default: return null; | ||
85 | } | ||
86 | } | ||
87 | |||
88 | @Override | ||
89 | public Object get(final int index) { | ||
90 | switch(index) { | ||
91 | case 0: return this.fA; | ||
92 | default: return null; | ||
93 | } | ||
94 | } | ||
95 | |||
96 | public EClass getA() { | ||
97 | return this.fA; | ||
98 | } | ||
99 | |||
100 | @Override | ||
101 | public boolean set(final String parameterName, final Object newValue) { | ||
102 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
103 | if ("a".equals(parameterName) ) { | ||
104 | this.fA = (EClass) newValue; | ||
105 | return true; | ||
106 | } | ||
107 | return false; | ||
108 | } | ||
109 | |||
110 | public void setA(final EClass pA) { | ||
111 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
112 | this.fA = pA; | ||
113 | } | ||
114 | |||
115 | @Override | ||
116 | public String patternName() { | ||
117 | return "queries.loopInInheritence"; | ||
118 | } | ||
119 | |||
120 | @Override | ||
121 | public List<String> parameterNames() { | ||
122 | return LoopInInheritence.Match.parameterNames; | ||
123 | } | ||
124 | |||
125 | @Override | ||
126 | public Object[] toArray() { | ||
127 | return new Object[]{fA}; | ||
128 | } | ||
129 | |||
130 | @Override | ||
131 | public LoopInInheritence.Match toImmutable() { | ||
132 | return isMutable() ? newMatch(fA) : this; | ||
133 | } | ||
134 | |||
135 | @Override | ||
136 | public String prettyPrint() { | ||
137 | StringBuilder result = new StringBuilder(); | ||
138 | result.append("\"a\"=" + prettyPrintValue(fA)); | ||
139 | return result.toString(); | ||
140 | } | ||
141 | |||
142 | @Override | ||
143 | public int hashCode() { | ||
144 | return Objects.hash(fA); | ||
145 | } | ||
146 | |||
147 | @Override | ||
148 | public boolean equals(final Object obj) { | ||
149 | if (this == obj) | ||
150 | return true; | ||
151 | if (obj == null) { | ||
152 | return false; | ||
153 | } | ||
154 | if ((obj instanceof LoopInInheritence.Match)) { | ||
155 | LoopInInheritence.Match other = (LoopInInheritence.Match) obj; | ||
156 | return Objects.equals(fA, other.fA); | ||
157 | } else { | ||
158 | // this should be infrequent | ||
159 | if (!(obj instanceof IPatternMatch)) { | ||
160 | return false; | ||
161 | } | ||
162 | IPatternMatch otherSig = (IPatternMatch) obj; | ||
163 | return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); | ||
164 | } | ||
165 | } | ||
166 | |||
167 | @Override | ||
168 | public LoopInInheritence specification() { | ||
169 | return LoopInInheritence.instance(); | ||
170 | } | ||
171 | |||
172 | /** | ||
173 | * Returns an empty, mutable match. | ||
174 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
175 | * | ||
176 | * @return the empty match. | ||
177 | * | ||
178 | */ | ||
179 | public static LoopInInheritence.Match newEmptyMatch() { | ||
180 | return new Mutable(null); | ||
181 | } | ||
182 | |||
183 | /** | ||
184 | * Returns a mutable (partial) match. | ||
185 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
186 | * | ||
187 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
188 | * @return the new, mutable (partial) match object. | ||
189 | * | ||
190 | */ | ||
191 | public static LoopInInheritence.Match newMutableMatch(final EClass pA) { | ||
192 | return new Mutable(pA); | ||
193 | } | ||
194 | |||
195 | /** | ||
196 | * Returns a new (partial) match. | ||
197 | * This can be used e.g. to call the matcher with a partial match. | ||
198 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
199 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
200 | * @return the (partial) match object. | ||
201 | * | ||
202 | */ | ||
203 | public static LoopInInheritence.Match newMatch(final EClass pA) { | ||
204 | return new Immutable(pA); | ||
205 | } | ||
206 | |||
207 | private static final class Mutable extends LoopInInheritence.Match { | ||
208 | Mutable(final EClass pA) { | ||
209 | super(pA); | ||
210 | } | ||
211 | |||
212 | @Override | ||
213 | public boolean isMutable() { | ||
214 | return true; | ||
215 | } | ||
216 | } | ||
217 | |||
218 | private static final class Immutable extends LoopInInheritence.Match { | ||
219 | Immutable(final EClass pA) { | ||
220 | super(pA); | ||
221 | } | ||
222 | |||
223 | @Override | ||
224 | public boolean isMutable() { | ||
225 | return false; | ||
226 | } | ||
227 | } | ||
228 | } | ||
229 | |||
230 | /** | ||
231 | * Generated pattern matcher API of the queries.loopInInheritence pattern, | ||
232 | * providing pattern-specific query methods. | ||
233 | * | ||
234 | * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, | ||
235 | * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. | ||
236 | * | ||
237 | * <p>Matches of the pattern will be represented as {@link Match}. | ||
238 | * | ||
239 | * <p>Original source: | ||
240 | * <code><pre> | ||
241 | * {@literal @}Constraint(key={a}, severity="error", message="error") | ||
242 | * pattern loopInInheritence(a: EClass) { | ||
243 | * find directSupertype+(a,a); | ||
244 | * } | ||
245 | * </pre></code> | ||
246 | * | ||
247 | * @see Match | ||
248 | * @see LoopInInheritence | ||
249 | * | ||
250 | */ | ||
251 | public static class Matcher extends BaseMatcher<LoopInInheritence.Match> { | ||
252 | /** | ||
253 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
254 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
255 | * | ||
256 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
257 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
258 | * | ||
259 | */ | ||
260 | public static LoopInInheritence.Matcher on(final ViatraQueryEngine engine) { | ||
261 | // check if matcher already exists | ||
262 | Matcher matcher = engine.getExistingMatcher(querySpecification()); | ||
263 | if (matcher == null) { | ||
264 | matcher = (Matcher)engine.getMatcher(querySpecification()); | ||
265 | } | ||
266 | return matcher; | ||
267 | } | ||
268 | |||
269 | /** | ||
270 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
271 | * @return an initialized matcher | ||
272 | * @noreference This method is for internal matcher initialization by the framework, do not call it manually. | ||
273 | * | ||
274 | */ | ||
275 | public static LoopInInheritence.Matcher create() { | ||
276 | return new Matcher(); | ||
277 | } | ||
278 | |||
279 | private static final int POSITION_A = 0; | ||
280 | |||
281 | private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(LoopInInheritence.Matcher.class); | ||
282 | |||
283 | /** | ||
284 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
285 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
286 | * | ||
287 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
288 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
289 | * | ||
290 | */ | ||
291 | private Matcher() { | ||
292 | super(querySpecification()); | ||
293 | } | ||
294 | |||
295 | /** | ||
296 | * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. | ||
297 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
298 | * @return matches represented as a Match object. | ||
299 | * | ||
300 | */ | ||
301 | public Collection<LoopInInheritence.Match> getAllMatches(final EClass pA) { | ||
302 | return rawStreamAllMatches(new Object[]{pA}).collect(Collectors.toSet()); | ||
303 | } | ||
304 | |||
305 | /** | ||
306 | * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. | ||
307 | * </p> | ||
308 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
309 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
310 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
311 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
312 | * @return a stream of matches represented as a Match object. | ||
313 | * | ||
314 | */ | ||
315 | public Stream<LoopInInheritence.Match> streamAllMatches(final EClass pA) { | ||
316 | return rawStreamAllMatches(new Object[]{pA}); | ||
317 | } | ||
318 | |||
319 | /** | ||
320 | * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
321 | * Neither determinism nor randomness of selection is guaranteed. | ||
322 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
323 | * @return a match represented as a Match object, or null if no match is found. | ||
324 | * | ||
325 | */ | ||
326 | public Optional<LoopInInheritence.Match> getOneArbitraryMatch(final EClass pA) { | ||
327 | return rawGetOneArbitraryMatch(new Object[]{pA}); | ||
328 | } | ||
329 | |||
330 | /** | ||
331 | * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, | ||
332 | * under any possible substitution of the unspecified parameters (if any). | ||
333 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
334 | * @return true if the input is a valid (partial) match of the pattern. | ||
335 | * | ||
336 | */ | ||
337 | public boolean hasMatch(final EClass pA) { | ||
338 | return rawHasMatch(new Object[]{pA}); | ||
339 | } | ||
340 | |||
341 | /** | ||
342 | * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. | ||
343 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
344 | * @return the number of pattern matches found. | ||
345 | * | ||
346 | */ | ||
347 | public int countMatches(final EClass pA) { | ||
348 | return rawCountMatches(new Object[]{pA}); | ||
349 | } | ||
350 | |||
351 | /** | ||
352 | * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
353 | * Neither determinism nor randomness of selection is guaranteed. | ||
354 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
355 | * @param processor the action that will process the selected match. | ||
356 | * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked | ||
357 | * | ||
358 | */ | ||
359 | public boolean forOneArbitraryMatch(final EClass pA, final Consumer<? super LoopInInheritence.Match> processor) { | ||
360 | return rawForOneArbitraryMatch(new Object[]{pA}, processor); | ||
361 | } | ||
362 | |||
363 | /** | ||
364 | * Returns a new (partial) match. | ||
365 | * This can be used e.g. to call the matcher with a partial match. | ||
366 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
367 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
368 | * @return the (partial) match object. | ||
369 | * | ||
370 | */ | ||
371 | public LoopInInheritence.Match newMatch(final EClass pA) { | ||
372 | return LoopInInheritence.Match.newMatch(pA); | ||
373 | } | ||
374 | |||
375 | /** | ||
376 | * Retrieve the set of values that occur in matches for a. | ||
377 | * @return the Set of all values or empty set if there are no matches | ||
378 | * | ||
379 | */ | ||
380 | protected Stream<EClass> rawStreamAllValuesOfa(final Object[] parameters) { | ||
381 | return rawStreamAllValues(POSITION_A, parameters).map(EClass.class::cast); | ||
382 | } | ||
383 | |||
384 | /** | ||
385 | * Retrieve the set of values that occur in matches for a. | ||
386 | * @return the Set of all values or empty set if there are no matches | ||
387 | * | ||
388 | */ | ||
389 | public Set<EClass> getAllValuesOfa() { | ||
390 | return rawStreamAllValuesOfa(emptyArray()).collect(Collectors.toSet()); | ||
391 | } | ||
392 | |||
393 | /** | ||
394 | * Retrieve the set of values that occur in matches for a. | ||
395 | * @return the Set of all values or empty set if there are no matches | ||
396 | * | ||
397 | */ | ||
398 | public Stream<EClass> streamAllValuesOfa() { | ||
399 | return rawStreamAllValuesOfa(emptyArray()); | ||
400 | } | ||
401 | |||
402 | @Override | ||
403 | protected LoopInInheritence.Match tupleToMatch(final Tuple t) { | ||
404 | try { | ||
405 | return LoopInInheritence.Match.newMatch((EClass) t.get(POSITION_A)); | ||
406 | } catch(ClassCastException e) { | ||
407 | LOGGER.error("Element(s) in tuple not properly typed!",e); | ||
408 | return null; | ||
409 | } | ||
410 | } | ||
411 | |||
412 | @Override | ||
413 | protected LoopInInheritence.Match arrayToMatch(final Object[] match) { | ||
414 | try { | ||
415 | return LoopInInheritence.Match.newMatch((EClass) match[POSITION_A]); | ||
416 | } catch(ClassCastException e) { | ||
417 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
418 | return null; | ||
419 | } | ||
420 | } | ||
421 | |||
422 | @Override | ||
423 | protected LoopInInheritence.Match arrayToMatchMutable(final Object[] match) { | ||
424 | try { | ||
425 | return LoopInInheritence.Match.newMutableMatch((EClass) match[POSITION_A]); | ||
426 | } catch(ClassCastException e) { | ||
427 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
428 | return null; | ||
429 | } | ||
430 | } | ||
431 | |||
432 | /** | ||
433 | * @return the singleton instance of the query specification of this pattern | ||
434 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
435 | * | ||
436 | */ | ||
437 | public static IQuerySpecification<LoopInInheritence.Matcher> querySpecification() { | ||
438 | return LoopInInheritence.instance(); | ||
439 | } | ||
440 | } | ||
441 | |||
442 | private LoopInInheritence() { | ||
443 | super(GeneratedPQuery.INSTANCE); | ||
444 | } | ||
445 | |||
446 | /** | ||
447 | * @return the singleton instance of the query specification | ||
448 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
449 | * | ||
450 | */ | ||
451 | public static LoopInInheritence instance() { | ||
452 | try{ | ||
453 | return LazyHolder.INSTANCE; | ||
454 | } catch (ExceptionInInitializerError err) { | ||
455 | throw processInitializerError(err); | ||
456 | } | ||
457 | } | ||
458 | |||
459 | @Override | ||
460 | protected LoopInInheritence.Matcher instantiate(final ViatraQueryEngine engine) { | ||
461 | return LoopInInheritence.Matcher.on(engine); | ||
462 | } | ||
463 | |||
464 | @Override | ||
465 | public LoopInInheritence.Matcher instantiate() { | ||
466 | return LoopInInheritence.Matcher.create(); | ||
467 | } | ||
468 | |||
469 | @Override | ||
470 | public LoopInInheritence.Match newEmptyMatch() { | ||
471 | return LoopInInheritence.Match.newEmptyMatch(); | ||
472 | } | ||
473 | |||
474 | @Override | ||
475 | public LoopInInheritence.Match newMatch(final Object... parameters) { | ||
476 | return LoopInInheritence.Match.newMatch((org.eclipse.emf.ecore.EClass) parameters[0]); | ||
477 | } | ||
478 | |||
479 | /** | ||
480 | * Inner class allowing the singleton instance of {@link LoopInInheritence} to be created | ||
481 | * <b>not</b> at the class load time of the outer class, | ||
482 | * but rather at the first call to {@link LoopInInheritence#instance()}. | ||
483 | * | ||
484 | * <p> This workaround is required e.g. to support recursion. | ||
485 | * | ||
486 | */ | ||
487 | private static class LazyHolder { | ||
488 | private static final LoopInInheritence INSTANCE = new LoopInInheritence(); | ||
489 | |||
490 | /** | ||
491 | * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned. | ||
492 | * This initialization order is required to support indirect recursion. | ||
493 | * | ||
494 | * <p> The static initializer is defined using a helper field to work around limitations of the code generator. | ||
495 | * | ||
496 | */ | ||
497 | private static final Object STATIC_INITIALIZER = ensureInitialized(); | ||
498 | |||
499 | public static Object ensureInitialized() { | ||
500 | INSTANCE.ensureInitializedInternal(); | ||
501 | return null; | ||
502 | } | ||
503 | } | ||
504 | |||
505 | private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { | ||
506 | private static final LoopInInheritence.GeneratedPQuery INSTANCE = new GeneratedPQuery(); | ||
507 | |||
508 | private final PParameter parameter_a = new PParameter("a", "org.eclipse.emf.ecore.EClass", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EClass")), PParameterDirection.INOUT); | ||
509 | |||
510 | private final List<PParameter> parameters = Arrays.asList(parameter_a); | ||
511 | |||
512 | private GeneratedPQuery() { | ||
513 | super(PVisibility.PUBLIC); | ||
514 | } | ||
515 | |||
516 | @Override | ||
517 | public String getFullyQualifiedName() { | ||
518 | return "queries.loopInInheritence"; | ||
519 | } | ||
520 | |||
521 | @Override | ||
522 | public List<String> getParameterNames() { | ||
523 | return Arrays.asList("a"); | ||
524 | } | ||
525 | |||
526 | @Override | ||
527 | public List<PParameter> getParameters() { | ||
528 | return parameters; | ||
529 | } | ||
530 | |||
531 | @Override | ||
532 | public Set<PBody> doGetContainedBodies() { | ||
533 | setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); | ||
534 | Set<PBody> bodies = new LinkedHashSet<>(); | ||
535 | { | ||
536 | PBody body = new PBody(this); | ||
537 | PVariable var_a = body.getOrCreateVariableByName("a"); | ||
538 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
539 | body.setSymbolicParameters(Arrays.<ExportedParameter>asList( | ||
540 | new ExportedParameter(body, var_a, parameter_a) | ||
541 | )); | ||
542 | // find directSupertype+(a,a) | ||
543 | new BinaryTransitiveClosure(body, Tuples.flatTupleOf(var_a, var_a), DirectSupertype.instance().getInternalQueryRepresentation()); | ||
544 | bodies.add(body); | ||
545 | } | ||
546 | { | ||
547 | PAnnotation annotation = new PAnnotation("Constraint"); | ||
548 | annotation.addAttribute("key", Arrays.asList(new Object[] { | ||
549 | new ParameterReference("a") | ||
550 | })); | ||
551 | annotation.addAttribute("severity", "error"); | ||
552 | annotation.addAttribute("message", "error"); | ||
553 | addAnnotation(annotation); | ||
554 | } | ||
555 | return bodies; | ||
556 | } | ||
557 | } | ||
558 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/NonSymmetricOpposite.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/NonSymmetricOpposite.java new file mode 100644 index 00000000..c98014f5 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/NonSymmetricOpposite.java | |||
@@ -0,0 +1,718 @@ | |||
1 | /** | ||
2 | * Generated from platform:/resource/SocialNetwork_plugin/queries/queries/Ecore.vql | ||
3 | */ | ||
4 | package queries; | ||
5 | |||
6 | import java.util.Arrays; | ||
7 | import java.util.Collection; | ||
8 | import java.util.LinkedHashSet; | ||
9 | import java.util.List; | ||
10 | import java.util.Objects; | ||
11 | import java.util.Optional; | ||
12 | import java.util.Set; | ||
13 | import java.util.function.Consumer; | ||
14 | import java.util.stream.Collectors; | ||
15 | import java.util.stream.Stream; | ||
16 | import org.apache.log4j.Logger; | ||
17 | import org.eclipse.emf.ecore.EClass; | ||
18 | import org.eclipse.emf.ecore.EReference; | ||
19 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
20 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
21 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | ||
22 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; | ||
23 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; | ||
24 | import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; | ||
25 | import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; | ||
26 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; | ||
27 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | ||
28 | import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; | ||
29 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; | ||
30 | import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; | ||
31 | import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; | ||
32 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; | ||
33 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; | ||
34 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall; | ||
35 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; | ||
36 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; | ||
37 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; | ||
38 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; | ||
39 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; | ||
40 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; | ||
41 | import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; | ||
42 | import queries.Opposite; | ||
43 | |||
44 | /** | ||
45 | * A pattern-specific query specification that can instantiate Matcher in a type-safe way. | ||
46 | * | ||
47 | * <p>Original source: | ||
48 | * <code><pre> | ||
49 | * {@literal @}Constraint(key={a}, severity="error", message="error") | ||
50 | * pattern nonSymmetricOpposite(a:EReference, b:EReference) { | ||
51 | * find opposite(a,b); | ||
52 | * neg find opposite(b,a); | ||
53 | * } | ||
54 | * </pre></code> | ||
55 | * | ||
56 | * @see Matcher | ||
57 | * @see Match | ||
58 | * | ||
59 | */ | ||
60 | @SuppressWarnings("all") | ||
61 | public final class NonSymmetricOpposite extends BaseGeneratedEMFQuerySpecification<NonSymmetricOpposite.Matcher> { | ||
62 | /** | ||
63 | * Pattern-specific match representation of the queries.nonSymmetricOpposite pattern, | ||
64 | * to be used in conjunction with {@link Matcher}. | ||
65 | * | ||
66 | * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. | ||
67 | * Each instance is a (possibly partial) substitution of pattern parameters, | ||
68 | * usable to represent a match of the pattern in the result of a query, | ||
69 | * or to specify the bound (fixed) input parameters when issuing a query. | ||
70 | * | ||
71 | * @see Matcher | ||
72 | * | ||
73 | */ | ||
74 | public static abstract class Match extends BasePatternMatch { | ||
75 | private EReference fA; | ||
76 | |||
77 | private EReference fB; | ||
78 | |||
79 | private static List<String> parameterNames = makeImmutableList("a", "b"); | ||
80 | |||
81 | private Match(final EReference pA, final EReference pB) { | ||
82 | this.fA = pA; | ||
83 | this.fB = pB; | ||
84 | } | ||
85 | |||
86 | @Override | ||
87 | public Object get(final String parameterName) { | ||
88 | switch(parameterName) { | ||
89 | case "a": return this.fA; | ||
90 | case "b": return this.fB; | ||
91 | default: return null; | ||
92 | } | ||
93 | } | ||
94 | |||
95 | @Override | ||
96 | public Object get(final int index) { | ||
97 | switch(index) { | ||
98 | case 0: return this.fA; | ||
99 | case 1: return this.fB; | ||
100 | default: return null; | ||
101 | } | ||
102 | } | ||
103 | |||
104 | public EReference getA() { | ||
105 | return this.fA; | ||
106 | } | ||
107 | |||
108 | public EReference getB() { | ||
109 | return this.fB; | ||
110 | } | ||
111 | |||
112 | @Override | ||
113 | public boolean set(final String parameterName, final Object newValue) { | ||
114 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
115 | if ("a".equals(parameterName) ) { | ||
116 | this.fA = (EReference) newValue; | ||
117 | return true; | ||
118 | } | ||
119 | if ("b".equals(parameterName) ) { | ||
120 | this.fB = (EReference) newValue; | ||
121 | return true; | ||
122 | } | ||
123 | return false; | ||
124 | } | ||
125 | |||
126 | public void setA(final EReference pA) { | ||
127 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
128 | this.fA = pA; | ||
129 | } | ||
130 | |||
131 | public void setB(final EReference pB) { | ||
132 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
133 | this.fB = pB; | ||
134 | } | ||
135 | |||
136 | @Override | ||
137 | public String patternName() { | ||
138 | return "queries.nonSymmetricOpposite"; | ||
139 | } | ||
140 | |||
141 | @Override | ||
142 | public List<String> parameterNames() { | ||
143 | return NonSymmetricOpposite.Match.parameterNames; | ||
144 | } | ||
145 | |||
146 | @Override | ||
147 | public Object[] toArray() { | ||
148 | return new Object[]{fA, fB}; | ||
149 | } | ||
150 | |||
151 | @Override | ||
152 | public NonSymmetricOpposite.Match toImmutable() { | ||
153 | return isMutable() ? newMatch(fA, fB) : this; | ||
154 | } | ||
155 | |||
156 | @Override | ||
157 | public String prettyPrint() { | ||
158 | StringBuilder result = new StringBuilder(); | ||
159 | result.append("\"a\"=" + prettyPrintValue(fA) + ", "); | ||
160 | result.append("\"b\"=" + prettyPrintValue(fB)); | ||
161 | return result.toString(); | ||
162 | } | ||
163 | |||
164 | @Override | ||
165 | public int hashCode() { | ||
166 | return Objects.hash(fA, fB); | ||
167 | } | ||
168 | |||
169 | @Override | ||
170 | public boolean equals(final Object obj) { | ||
171 | if (this == obj) | ||
172 | return true; | ||
173 | if (obj == null) { | ||
174 | return false; | ||
175 | } | ||
176 | if ((obj instanceof NonSymmetricOpposite.Match)) { | ||
177 | NonSymmetricOpposite.Match other = (NonSymmetricOpposite.Match) obj; | ||
178 | return Objects.equals(fA, other.fA) && Objects.equals(fB, other.fB); | ||
179 | } else { | ||
180 | // this should be infrequent | ||
181 | if (!(obj instanceof IPatternMatch)) { | ||
182 | return false; | ||
183 | } | ||
184 | IPatternMatch otherSig = (IPatternMatch) obj; | ||
185 | return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); | ||
186 | } | ||
187 | } | ||
188 | |||
189 | @Override | ||
190 | public NonSymmetricOpposite specification() { | ||
191 | return NonSymmetricOpposite.instance(); | ||
192 | } | ||
193 | |||
194 | /** | ||
195 | * Returns an empty, mutable match. | ||
196 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
197 | * | ||
198 | * @return the empty match. | ||
199 | * | ||
200 | */ | ||
201 | public static NonSymmetricOpposite.Match newEmptyMatch() { | ||
202 | return new Mutable(null, null); | ||
203 | } | ||
204 | |||
205 | /** | ||
206 | * Returns a mutable (partial) match. | ||
207 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
208 | * | ||
209 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
210 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
211 | * @return the new, mutable (partial) match object. | ||
212 | * | ||
213 | */ | ||
214 | public static NonSymmetricOpposite.Match newMutableMatch(final EReference pA, final EReference pB) { | ||
215 | return new Mutable(pA, pB); | ||
216 | } | ||
217 | |||
218 | /** | ||
219 | * Returns a new (partial) match. | ||
220 | * This can be used e.g. to call the matcher with a partial match. | ||
221 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
222 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
223 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
224 | * @return the (partial) match object. | ||
225 | * | ||
226 | */ | ||
227 | public static NonSymmetricOpposite.Match newMatch(final EReference pA, final EReference pB) { | ||
228 | return new Immutable(pA, pB); | ||
229 | } | ||
230 | |||
231 | private static final class Mutable extends NonSymmetricOpposite.Match { | ||
232 | Mutable(final EReference pA, final EReference pB) { | ||
233 | super(pA, pB); | ||
234 | } | ||
235 | |||
236 | @Override | ||
237 | public boolean isMutable() { | ||
238 | return true; | ||
239 | } | ||
240 | } | ||
241 | |||
242 | private static final class Immutable extends NonSymmetricOpposite.Match { | ||
243 | Immutable(final EReference pA, final EReference pB) { | ||
244 | super(pA, pB); | ||
245 | } | ||
246 | |||
247 | @Override | ||
248 | public boolean isMutable() { | ||
249 | return false; | ||
250 | } | ||
251 | } | ||
252 | } | ||
253 | |||
254 | /** | ||
255 | * Generated pattern matcher API of the queries.nonSymmetricOpposite pattern, | ||
256 | * providing pattern-specific query methods. | ||
257 | * | ||
258 | * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, | ||
259 | * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. | ||
260 | * | ||
261 | * <p>Matches of the pattern will be represented as {@link Match}. | ||
262 | * | ||
263 | * <p>Original source: | ||
264 | * <code><pre> | ||
265 | * {@literal @}Constraint(key={a}, severity="error", message="error") | ||
266 | * pattern nonSymmetricOpposite(a:EReference, b:EReference) { | ||
267 | * find opposite(a,b); | ||
268 | * neg find opposite(b,a); | ||
269 | * } | ||
270 | * </pre></code> | ||
271 | * | ||
272 | * @see Match | ||
273 | * @see NonSymmetricOpposite | ||
274 | * | ||
275 | */ | ||
276 | public static class Matcher extends BaseMatcher<NonSymmetricOpposite.Match> { | ||
277 | /** | ||
278 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
279 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
280 | * | ||
281 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
282 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
283 | * | ||
284 | */ | ||
285 | public static NonSymmetricOpposite.Matcher on(final ViatraQueryEngine engine) { | ||
286 | // check if matcher already exists | ||
287 | Matcher matcher = engine.getExistingMatcher(querySpecification()); | ||
288 | if (matcher == null) { | ||
289 | matcher = (Matcher)engine.getMatcher(querySpecification()); | ||
290 | } | ||
291 | return matcher; | ||
292 | } | ||
293 | |||
294 | /** | ||
295 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
296 | * @return an initialized matcher | ||
297 | * @noreference This method is for internal matcher initialization by the framework, do not call it manually. | ||
298 | * | ||
299 | */ | ||
300 | public static NonSymmetricOpposite.Matcher create() { | ||
301 | return new Matcher(); | ||
302 | } | ||
303 | |||
304 | private static final int POSITION_A = 0; | ||
305 | |||
306 | private static final int POSITION_B = 1; | ||
307 | |||
308 | private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(NonSymmetricOpposite.Matcher.class); | ||
309 | |||
310 | /** | ||
311 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
312 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
313 | * | ||
314 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
315 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
316 | * | ||
317 | */ | ||
318 | private Matcher() { | ||
319 | super(querySpecification()); | ||
320 | } | ||
321 | |||
322 | /** | ||
323 | * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. | ||
324 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
325 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
326 | * @return matches represented as a Match object. | ||
327 | * | ||
328 | */ | ||
329 | public Collection<NonSymmetricOpposite.Match> getAllMatches(final EReference pA, final EReference pB) { | ||
330 | return rawStreamAllMatches(new Object[]{pA, pB}).collect(Collectors.toSet()); | ||
331 | } | ||
332 | |||
333 | /** | ||
334 | * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. | ||
335 | * </p> | ||
336 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
337 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
338 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
339 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
340 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
341 | * @return a stream of matches represented as a Match object. | ||
342 | * | ||
343 | */ | ||
344 | public Stream<NonSymmetricOpposite.Match> streamAllMatches(final EReference pA, final EReference pB) { | ||
345 | return rawStreamAllMatches(new Object[]{pA, pB}); | ||
346 | } | ||
347 | |||
348 | /** | ||
349 | * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
350 | * Neither determinism nor randomness of selection is guaranteed. | ||
351 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
352 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
353 | * @return a match represented as a Match object, or null if no match is found. | ||
354 | * | ||
355 | */ | ||
356 | public Optional<NonSymmetricOpposite.Match> getOneArbitraryMatch(final EReference pA, final EReference pB) { | ||
357 | return rawGetOneArbitraryMatch(new Object[]{pA, pB}); | ||
358 | } | ||
359 | |||
360 | /** | ||
361 | * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, | ||
362 | * under any possible substitution of the unspecified parameters (if any). | ||
363 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
364 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
365 | * @return true if the input is a valid (partial) match of the pattern. | ||
366 | * | ||
367 | */ | ||
368 | public boolean hasMatch(final EReference pA, final EReference pB) { | ||
369 | return rawHasMatch(new Object[]{pA, pB}); | ||
370 | } | ||
371 | |||
372 | /** | ||
373 | * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. | ||
374 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
375 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
376 | * @return the number of pattern matches found. | ||
377 | * | ||
378 | */ | ||
379 | public int countMatches(final EReference pA, final EReference pB) { | ||
380 | return rawCountMatches(new Object[]{pA, pB}); | ||
381 | } | ||
382 | |||
383 | /** | ||
384 | * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
385 | * Neither determinism nor randomness of selection is guaranteed. | ||
386 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
387 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
388 | * @param processor the action that will process the selected match. | ||
389 | * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked | ||
390 | * | ||
391 | */ | ||
392 | public boolean forOneArbitraryMatch(final EReference pA, final EReference pB, final Consumer<? super NonSymmetricOpposite.Match> processor) { | ||
393 | return rawForOneArbitraryMatch(new Object[]{pA, pB}, processor); | ||
394 | } | ||
395 | |||
396 | /** | ||
397 | * Returns a new (partial) match. | ||
398 | * This can be used e.g. to call the matcher with a partial match. | ||
399 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
400 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
401 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
402 | * @return the (partial) match object. | ||
403 | * | ||
404 | */ | ||
405 | public NonSymmetricOpposite.Match newMatch(final EReference pA, final EReference pB) { | ||
406 | return NonSymmetricOpposite.Match.newMatch(pA, pB); | ||
407 | } | ||
408 | |||
409 | /** | ||
410 | * Retrieve the set of values that occur in matches for a. | ||
411 | * @return the Set of all values or empty set if there are no matches | ||
412 | * | ||
413 | */ | ||
414 | protected Stream<EReference> rawStreamAllValuesOfa(final Object[] parameters) { | ||
415 | return rawStreamAllValues(POSITION_A, parameters).map(EReference.class::cast); | ||
416 | } | ||
417 | |||
418 | /** | ||
419 | * Retrieve the set of values that occur in matches for a. | ||
420 | * @return the Set of all values or empty set if there are no matches | ||
421 | * | ||
422 | */ | ||
423 | public Set<EReference> getAllValuesOfa() { | ||
424 | return rawStreamAllValuesOfa(emptyArray()).collect(Collectors.toSet()); | ||
425 | } | ||
426 | |||
427 | /** | ||
428 | * Retrieve the set of values that occur in matches for a. | ||
429 | * @return the Set of all values or empty set if there are no matches | ||
430 | * | ||
431 | */ | ||
432 | public Stream<EReference> streamAllValuesOfa() { | ||
433 | return rawStreamAllValuesOfa(emptyArray()); | ||
434 | } | ||
435 | |||
436 | /** | ||
437 | * Retrieve the set of values that occur in matches for a. | ||
438 | * </p> | ||
439 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
440 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
441 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
442 | * | ||
443 | * @return the Stream of all values or empty set if there are no matches | ||
444 | * | ||
445 | */ | ||
446 | public Stream<EReference> streamAllValuesOfa(final NonSymmetricOpposite.Match partialMatch) { | ||
447 | return rawStreamAllValuesOfa(partialMatch.toArray()); | ||
448 | } | ||
449 | |||
450 | /** | ||
451 | * Retrieve the set of values that occur in matches for a. | ||
452 | * </p> | ||
453 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
454 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
455 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
456 | * | ||
457 | * @return the Stream of all values or empty set if there are no matches | ||
458 | * | ||
459 | */ | ||
460 | public Stream<EReference> streamAllValuesOfa(final EReference pB) { | ||
461 | return rawStreamAllValuesOfa(new Object[]{null, pB}); | ||
462 | } | ||
463 | |||
464 | /** | ||
465 | * Retrieve the set of values that occur in matches for a. | ||
466 | * @return the Set of all values or empty set if there are no matches | ||
467 | * | ||
468 | */ | ||
469 | public Set<EReference> getAllValuesOfa(final NonSymmetricOpposite.Match partialMatch) { | ||
470 | return rawStreamAllValuesOfa(partialMatch.toArray()).collect(Collectors.toSet()); | ||
471 | } | ||
472 | |||
473 | /** | ||
474 | * Retrieve the set of values that occur in matches for a. | ||
475 | * @return the Set of all values or empty set if there are no matches | ||
476 | * | ||
477 | */ | ||
478 | public Set<EReference> getAllValuesOfa(final EReference pB) { | ||
479 | return rawStreamAllValuesOfa(new Object[]{null, pB}).collect(Collectors.toSet()); | ||
480 | } | ||
481 | |||
482 | /** | ||
483 | * Retrieve the set of values that occur in matches for b. | ||
484 | * @return the Set of all values or empty set if there are no matches | ||
485 | * | ||
486 | */ | ||
487 | protected Stream<EReference> rawStreamAllValuesOfb(final Object[] parameters) { | ||
488 | return rawStreamAllValues(POSITION_B, parameters).map(EReference.class::cast); | ||
489 | } | ||
490 | |||
491 | /** | ||
492 | * Retrieve the set of values that occur in matches for b. | ||
493 | * @return the Set of all values or empty set if there are no matches | ||
494 | * | ||
495 | */ | ||
496 | public Set<EReference> getAllValuesOfb() { | ||
497 | return rawStreamAllValuesOfb(emptyArray()).collect(Collectors.toSet()); | ||
498 | } | ||
499 | |||
500 | /** | ||
501 | * Retrieve the set of values that occur in matches for b. | ||
502 | * @return the Set of all values or empty set if there are no matches | ||
503 | * | ||
504 | */ | ||
505 | public Stream<EReference> streamAllValuesOfb() { | ||
506 | return rawStreamAllValuesOfb(emptyArray()); | ||
507 | } | ||
508 | |||
509 | /** | ||
510 | * Retrieve the set of values that occur in matches for b. | ||
511 | * </p> | ||
512 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
513 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
514 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
515 | * | ||
516 | * @return the Stream of all values or empty set if there are no matches | ||
517 | * | ||
518 | */ | ||
519 | public Stream<EReference> streamAllValuesOfb(final NonSymmetricOpposite.Match partialMatch) { | ||
520 | return rawStreamAllValuesOfb(partialMatch.toArray()); | ||
521 | } | ||
522 | |||
523 | /** | ||
524 | * Retrieve the set of values that occur in matches for b. | ||
525 | * </p> | ||
526 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
527 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
528 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
529 | * | ||
530 | * @return the Stream of all values or empty set if there are no matches | ||
531 | * | ||
532 | */ | ||
533 | public Stream<EReference> streamAllValuesOfb(final EReference pA) { | ||
534 | return rawStreamAllValuesOfb(new Object[]{pA, null}); | ||
535 | } | ||
536 | |||
537 | /** | ||
538 | * Retrieve the set of values that occur in matches for b. | ||
539 | * @return the Set of all values or empty set if there are no matches | ||
540 | * | ||
541 | */ | ||
542 | public Set<EReference> getAllValuesOfb(final NonSymmetricOpposite.Match partialMatch) { | ||
543 | return rawStreamAllValuesOfb(partialMatch.toArray()).collect(Collectors.toSet()); | ||
544 | } | ||
545 | |||
546 | /** | ||
547 | * Retrieve the set of values that occur in matches for b. | ||
548 | * @return the Set of all values or empty set if there are no matches | ||
549 | * | ||
550 | */ | ||
551 | public Set<EReference> getAllValuesOfb(final EReference pA) { | ||
552 | return rawStreamAllValuesOfb(new Object[]{pA, null}).collect(Collectors.toSet()); | ||
553 | } | ||
554 | |||
555 | @Override | ||
556 | protected NonSymmetricOpposite.Match tupleToMatch(final Tuple t) { | ||
557 | try { | ||
558 | return NonSymmetricOpposite.Match.newMatch((EReference) t.get(POSITION_A), (EReference) t.get(POSITION_B)); | ||
559 | } catch(ClassCastException e) { | ||
560 | LOGGER.error("Element(s) in tuple not properly typed!",e); | ||
561 | return null; | ||
562 | } | ||
563 | } | ||
564 | |||
565 | @Override | ||
566 | protected NonSymmetricOpposite.Match arrayToMatch(final Object[] match) { | ||
567 | try { | ||
568 | return NonSymmetricOpposite.Match.newMatch((EReference) match[POSITION_A], (EReference) match[POSITION_B]); | ||
569 | } catch(ClassCastException e) { | ||
570 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
571 | return null; | ||
572 | } | ||
573 | } | ||
574 | |||
575 | @Override | ||
576 | protected NonSymmetricOpposite.Match arrayToMatchMutable(final Object[] match) { | ||
577 | try { | ||
578 | return NonSymmetricOpposite.Match.newMutableMatch((EReference) match[POSITION_A], (EReference) match[POSITION_B]); | ||
579 | } catch(ClassCastException e) { | ||
580 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
581 | return null; | ||
582 | } | ||
583 | } | ||
584 | |||
585 | /** | ||
586 | * @return the singleton instance of the query specification of this pattern | ||
587 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
588 | * | ||
589 | */ | ||
590 | public static IQuerySpecification<NonSymmetricOpposite.Matcher> querySpecification() { | ||
591 | return NonSymmetricOpposite.instance(); | ||
592 | } | ||
593 | } | ||
594 | |||
595 | private NonSymmetricOpposite() { | ||
596 | super(GeneratedPQuery.INSTANCE); | ||
597 | } | ||
598 | |||
599 | /** | ||
600 | * @return the singleton instance of the query specification | ||
601 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
602 | * | ||
603 | */ | ||
604 | public static NonSymmetricOpposite instance() { | ||
605 | try{ | ||
606 | return LazyHolder.INSTANCE; | ||
607 | } catch (ExceptionInInitializerError err) { | ||
608 | throw processInitializerError(err); | ||
609 | } | ||
610 | } | ||
611 | |||
612 | @Override | ||
613 | protected NonSymmetricOpposite.Matcher instantiate(final ViatraQueryEngine engine) { | ||
614 | return NonSymmetricOpposite.Matcher.on(engine); | ||
615 | } | ||
616 | |||
617 | @Override | ||
618 | public NonSymmetricOpposite.Matcher instantiate() { | ||
619 | return NonSymmetricOpposite.Matcher.create(); | ||
620 | } | ||
621 | |||
622 | @Override | ||
623 | public NonSymmetricOpposite.Match newEmptyMatch() { | ||
624 | return NonSymmetricOpposite.Match.newEmptyMatch(); | ||
625 | } | ||
626 | |||
627 | @Override | ||
628 | public NonSymmetricOpposite.Match newMatch(final Object... parameters) { | ||
629 | return NonSymmetricOpposite.Match.newMatch((org.eclipse.emf.ecore.EReference) parameters[0], (org.eclipse.emf.ecore.EReference) parameters[1]); | ||
630 | } | ||
631 | |||
632 | /** | ||
633 | * Inner class allowing the singleton instance of {@link NonSymmetricOpposite} to be created | ||
634 | * <b>not</b> at the class load time of the outer class, | ||
635 | * but rather at the first call to {@link NonSymmetricOpposite#instance()}. | ||
636 | * | ||
637 | * <p> This workaround is required e.g. to support recursion. | ||
638 | * | ||
639 | */ | ||
640 | private static class LazyHolder { | ||
641 | private static final NonSymmetricOpposite INSTANCE = new NonSymmetricOpposite(); | ||
642 | |||
643 | /** | ||
644 | * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned. | ||
645 | * This initialization order is required to support indirect recursion. | ||
646 | * | ||
647 | * <p> The static initializer is defined using a helper field to work around limitations of the code generator. | ||
648 | * | ||
649 | */ | ||
650 | private static final Object STATIC_INITIALIZER = ensureInitialized(); | ||
651 | |||
652 | public static Object ensureInitialized() { | ||
653 | INSTANCE.ensureInitializedInternal(); | ||
654 | return null; | ||
655 | } | ||
656 | } | ||
657 | |||
658 | private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { | ||
659 | private static final NonSymmetricOpposite.GeneratedPQuery INSTANCE = new GeneratedPQuery(); | ||
660 | |||
661 | private final PParameter parameter_a = new PParameter("a", "org.eclipse.emf.ecore.EReference", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EReference")), PParameterDirection.INOUT); | ||
662 | |||
663 | private final PParameter parameter_b = new PParameter("b", "org.eclipse.emf.ecore.EReference", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EReference")), PParameterDirection.INOUT); | ||
664 | |||
665 | private final List<PParameter> parameters = Arrays.asList(parameter_a, parameter_b); | ||
666 | |||
667 | private GeneratedPQuery() { | ||
668 | super(PVisibility.PUBLIC); | ||
669 | } | ||
670 | |||
671 | @Override | ||
672 | public String getFullyQualifiedName() { | ||
673 | return "queries.nonSymmetricOpposite"; | ||
674 | } | ||
675 | |||
676 | @Override | ||
677 | public List<String> getParameterNames() { | ||
678 | return Arrays.asList("a","b"); | ||
679 | } | ||
680 | |||
681 | @Override | ||
682 | public List<PParameter> getParameters() { | ||
683 | return parameters; | ||
684 | } | ||
685 | |||
686 | @Override | ||
687 | public Set<PBody> doGetContainedBodies() { | ||
688 | setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); | ||
689 | Set<PBody> bodies = new LinkedHashSet<>(); | ||
690 | { | ||
691 | PBody body = new PBody(this); | ||
692 | PVariable var_a = body.getOrCreateVariableByName("a"); | ||
693 | PVariable var_b = body.getOrCreateVariableByName("b"); | ||
694 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
695 | new TypeConstraint(body, Tuples.flatTupleOf(var_b), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
696 | body.setSymbolicParameters(Arrays.<ExportedParameter>asList( | ||
697 | new ExportedParameter(body, var_a, parameter_a), | ||
698 | new ExportedParameter(body, var_b, parameter_b) | ||
699 | )); | ||
700 | // find opposite(a,b) | ||
701 | new PositivePatternCall(body, Tuples.flatTupleOf(var_a, var_b), Opposite.instance().getInternalQueryRepresentation()); | ||
702 | // neg find opposite(b,a) | ||
703 | new NegativePatternCall(body, Tuples.flatTupleOf(var_b, var_a), Opposite.instance().getInternalQueryRepresentation()); | ||
704 | bodies.add(body); | ||
705 | } | ||
706 | { | ||
707 | PAnnotation annotation = new PAnnotation("Constraint"); | ||
708 | annotation.addAttribute("key", Arrays.asList(new Object[] { | ||
709 | new ParameterReference("a") | ||
710 | })); | ||
711 | annotation.addAttribute("severity", "error"); | ||
712 | annotation.addAttribute("message", "error"); | ||
713 | addAnnotation(annotation); | ||
714 | } | ||
715 | return bodies; | ||
716 | } | ||
717 | } | ||
718 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/Opposite.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/Opposite.java new file mode 100644 index 00000000..ab808e10 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/Opposite.java | |||
@@ -0,0 +1,704 @@ | |||
1 | /** | ||
2 | * Generated from platform:/resource/SocialNetwork_plugin/queries/queries/Ecore.vql | ||
3 | */ | ||
4 | package queries; | ||
5 | |||
6 | import java.util.Arrays; | ||
7 | import java.util.Collection; | ||
8 | import java.util.LinkedHashSet; | ||
9 | import java.util.List; | ||
10 | import java.util.Objects; | ||
11 | import java.util.Optional; | ||
12 | import java.util.Set; | ||
13 | import java.util.function.Consumer; | ||
14 | import java.util.stream.Collectors; | ||
15 | import java.util.stream.Stream; | ||
16 | import org.apache.log4j.Logger; | ||
17 | import org.eclipse.emf.ecore.EClass; | ||
18 | import org.eclipse.emf.ecore.EReference; | ||
19 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
20 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
21 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | ||
22 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; | ||
23 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; | ||
24 | import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; | ||
25 | import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; | ||
26 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; | ||
27 | import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; | ||
28 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | ||
29 | import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; | ||
30 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; | ||
31 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; | ||
32 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; | ||
33 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; | ||
34 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; | ||
35 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; | ||
36 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; | ||
37 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; | ||
38 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; | ||
39 | import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; | ||
40 | |||
41 | /** | ||
42 | * A pattern-specific query specification that can instantiate Matcher in a type-safe way. | ||
43 | * | ||
44 | * <p>Original source: | ||
45 | * <code><pre> | ||
46 | * pattern opposite(a:EReference, b: EReference) { | ||
47 | * EReference.eOpposite(a,b); | ||
48 | * } | ||
49 | * </pre></code> | ||
50 | * | ||
51 | * @see Matcher | ||
52 | * @see Match | ||
53 | * | ||
54 | */ | ||
55 | @SuppressWarnings("all") | ||
56 | public final class Opposite extends BaseGeneratedEMFQuerySpecification<Opposite.Matcher> { | ||
57 | /** | ||
58 | * Pattern-specific match representation of the queries.opposite pattern, | ||
59 | * to be used in conjunction with {@link Matcher}. | ||
60 | * | ||
61 | * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. | ||
62 | * Each instance is a (possibly partial) substitution of pattern parameters, | ||
63 | * usable to represent a match of the pattern in the result of a query, | ||
64 | * or to specify the bound (fixed) input parameters when issuing a query. | ||
65 | * | ||
66 | * @see Matcher | ||
67 | * | ||
68 | */ | ||
69 | public static abstract class Match extends BasePatternMatch { | ||
70 | private EReference fA; | ||
71 | |||
72 | private EReference fB; | ||
73 | |||
74 | private static List<String> parameterNames = makeImmutableList("a", "b"); | ||
75 | |||
76 | private Match(final EReference pA, final EReference pB) { | ||
77 | this.fA = pA; | ||
78 | this.fB = pB; | ||
79 | } | ||
80 | |||
81 | @Override | ||
82 | public Object get(final String parameterName) { | ||
83 | switch(parameterName) { | ||
84 | case "a": return this.fA; | ||
85 | case "b": return this.fB; | ||
86 | default: return null; | ||
87 | } | ||
88 | } | ||
89 | |||
90 | @Override | ||
91 | public Object get(final int index) { | ||
92 | switch(index) { | ||
93 | case 0: return this.fA; | ||
94 | case 1: return this.fB; | ||
95 | default: return null; | ||
96 | } | ||
97 | } | ||
98 | |||
99 | public EReference getA() { | ||
100 | return this.fA; | ||
101 | } | ||
102 | |||
103 | public EReference getB() { | ||
104 | return this.fB; | ||
105 | } | ||
106 | |||
107 | @Override | ||
108 | public boolean set(final String parameterName, final Object newValue) { | ||
109 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
110 | if ("a".equals(parameterName) ) { | ||
111 | this.fA = (EReference) newValue; | ||
112 | return true; | ||
113 | } | ||
114 | if ("b".equals(parameterName) ) { | ||
115 | this.fB = (EReference) newValue; | ||
116 | return true; | ||
117 | } | ||
118 | return false; | ||
119 | } | ||
120 | |||
121 | public void setA(final EReference pA) { | ||
122 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
123 | this.fA = pA; | ||
124 | } | ||
125 | |||
126 | public void setB(final EReference pB) { | ||
127 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
128 | this.fB = pB; | ||
129 | } | ||
130 | |||
131 | @Override | ||
132 | public String patternName() { | ||
133 | return "queries.opposite"; | ||
134 | } | ||
135 | |||
136 | @Override | ||
137 | public List<String> parameterNames() { | ||
138 | return Opposite.Match.parameterNames; | ||
139 | } | ||
140 | |||
141 | @Override | ||
142 | public Object[] toArray() { | ||
143 | return new Object[]{fA, fB}; | ||
144 | } | ||
145 | |||
146 | @Override | ||
147 | public Opposite.Match toImmutable() { | ||
148 | return isMutable() ? newMatch(fA, fB) : this; | ||
149 | } | ||
150 | |||
151 | @Override | ||
152 | public String prettyPrint() { | ||
153 | StringBuilder result = new StringBuilder(); | ||
154 | result.append("\"a\"=" + prettyPrintValue(fA) + ", "); | ||
155 | result.append("\"b\"=" + prettyPrintValue(fB)); | ||
156 | return result.toString(); | ||
157 | } | ||
158 | |||
159 | @Override | ||
160 | public int hashCode() { | ||
161 | return Objects.hash(fA, fB); | ||
162 | } | ||
163 | |||
164 | @Override | ||
165 | public boolean equals(final Object obj) { | ||
166 | if (this == obj) | ||
167 | return true; | ||
168 | if (obj == null) { | ||
169 | return false; | ||
170 | } | ||
171 | if ((obj instanceof Opposite.Match)) { | ||
172 | Opposite.Match other = (Opposite.Match) obj; | ||
173 | return Objects.equals(fA, other.fA) && Objects.equals(fB, other.fB); | ||
174 | } else { | ||
175 | // this should be infrequent | ||
176 | if (!(obj instanceof IPatternMatch)) { | ||
177 | return false; | ||
178 | } | ||
179 | IPatternMatch otherSig = (IPatternMatch) obj; | ||
180 | return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); | ||
181 | } | ||
182 | } | ||
183 | |||
184 | @Override | ||
185 | public Opposite specification() { | ||
186 | return Opposite.instance(); | ||
187 | } | ||
188 | |||
189 | /** | ||
190 | * Returns an empty, mutable match. | ||
191 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
192 | * | ||
193 | * @return the empty match. | ||
194 | * | ||
195 | */ | ||
196 | public static Opposite.Match newEmptyMatch() { | ||
197 | return new Mutable(null, null); | ||
198 | } | ||
199 | |||
200 | /** | ||
201 | * Returns a mutable (partial) match. | ||
202 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
203 | * | ||
204 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
205 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
206 | * @return the new, mutable (partial) match object. | ||
207 | * | ||
208 | */ | ||
209 | public static Opposite.Match newMutableMatch(final EReference pA, final EReference pB) { | ||
210 | return new Mutable(pA, pB); | ||
211 | } | ||
212 | |||
213 | /** | ||
214 | * Returns a new (partial) match. | ||
215 | * This can be used e.g. to call the matcher with a partial match. | ||
216 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
217 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
218 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
219 | * @return the (partial) match object. | ||
220 | * | ||
221 | */ | ||
222 | public static Opposite.Match newMatch(final EReference pA, final EReference pB) { | ||
223 | return new Immutable(pA, pB); | ||
224 | } | ||
225 | |||
226 | private static final class Mutable extends Opposite.Match { | ||
227 | Mutable(final EReference pA, final EReference pB) { | ||
228 | super(pA, pB); | ||
229 | } | ||
230 | |||
231 | @Override | ||
232 | public boolean isMutable() { | ||
233 | return true; | ||
234 | } | ||
235 | } | ||
236 | |||
237 | private static final class Immutable extends Opposite.Match { | ||
238 | Immutable(final EReference pA, final EReference pB) { | ||
239 | super(pA, pB); | ||
240 | } | ||
241 | |||
242 | @Override | ||
243 | public boolean isMutable() { | ||
244 | return false; | ||
245 | } | ||
246 | } | ||
247 | } | ||
248 | |||
249 | /** | ||
250 | * Generated pattern matcher API of the queries.opposite pattern, | ||
251 | * providing pattern-specific query methods. | ||
252 | * | ||
253 | * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, | ||
254 | * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. | ||
255 | * | ||
256 | * <p>Matches of the pattern will be represented as {@link Match}. | ||
257 | * | ||
258 | * <p>Original source: | ||
259 | * <code><pre> | ||
260 | * pattern opposite(a:EReference, b: EReference) { | ||
261 | * EReference.eOpposite(a,b); | ||
262 | * } | ||
263 | * </pre></code> | ||
264 | * | ||
265 | * @see Match | ||
266 | * @see Opposite | ||
267 | * | ||
268 | */ | ||
269 | public static class Matcher extends BaseMatcher<Opposite.Match> { | ||
270 | /** | ||
271 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
272 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
273 | * | ||
274 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
275 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
276 | * | ||
277 | */ | ||
278 | public static Opposite.Matcher on(final ViatraQueryEngine engine) { | ||
279 | // check if matcher already exists | ||
280 | Matcher matcher = engine.getExistingMatcher(querySpecification()); | ||
281 | if (matcher == null) { | ||
282 | matcher = (Matcher)engine.getMatcher(querySpecification()); | ||
283 | } | ||
284 | return matcher; | ||
285 | } | ||
286 | |||
287 | /** | ||
288 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
289 | * @return an initialized matcher | ||
290 | * @noreference This method is for internal matcher initialization by the framework, do not call it manually. | ||
291 | * | ||
292 | */ | ||
293 | public static Opposite.Matcher create() { | ||
294 | return new Matcher(); | ||
295 | } | ||
296 | |||
297 | private static final int POSITION_A = 0; | ||
298 | |||
299 | private static final int POSITION_B = 1; | ||
300 | |||
301 | private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(Opposite.Matcher.class); | ||
302 | |||
303 | /** | ||
304 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
305 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
306 | * | ||
307 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
308 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
309 | * | ||
310 | */ | ||
311 | private Matcher() { | ||
312 | super(querySpecification()); | ||
313 | } | ||
314 | |||
315 | /** | ||
316 | * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. | ||
317 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
318 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
319 | * @return matches represented as a Match object. | ||
320 | * | ||
321 | */ | ||
322 | public Collection<Opposite.Match> getAllMatches(final EReference pA, final EReference pB) { | ||
323 | return rawStreamAllMatches(new Object[]{pA, pB}).collect(Collectors.toSet()); | ||
324 | } | ||
325 | |||
326 | /** | ||
327 | * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. | ||
328 | * </p> | ||
329 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
330 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
331 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
332 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
333 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
334 | * @return a stream of matches represented as a Match object. | ||
335 | * | ||
336 | */ | ||
337 | public Stream<Opposite.Match> streamAllMatches(final EReference pA, final EReference pB) { | ||
338 | return rawStreamAllMatches(new Object[]{pA, pB}); | ||
339 | } | ||
340 | |||
341 | /** | ||
342 | * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
343 | * Neither determinism nor randomness of selection is guaranteed. | ||
344 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
345 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
346 | * @return a match represented as a Match object, or null if no match is found. | ||
347 | * | ||
348 | */ | ||
349 | public Optional<Opposite.Match> getOneArbitraryMatch(final EReference pA, final EReference pB) { | ||
350 | return rawGetOneArbitraryMatch(new Object[]{pA, pB}); | ||
351 | } | ||
352 | |||
353 | /** | ||
354 | * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, | ||
355 | * under any possible substitution of the unspecified parameters (if any). | ||
356 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
357 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
358 | * @return true if the input is a valid (partial) match of the pattern. | ||
359 | * | ||
360 | */ | ||
361 | public boolean hasMatch(final EReference pA, final EReference pB) { | ||
362 | return rawHasMatch(new Object[]{pA, pB}); | ||
363 | } | ||
364 | |||
365 | /** | ||
366 | * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. | ||
367 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
368 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
369 | * @return the number of pattern matches found. | ||
370 | * | ||
371 | */ | ||
372 | public int countMatches(final EReference pA, final EReference pB) { | ||
373 | return rawCountMatches(new Object[]{pA, pB}); | ||
374 | } | ||
375 | |||
376 | /** | ||
377 | * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
378 | * Neither determinism nor randomness of selection is guaranteed. | ||
379 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
380 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
381 | * @param processor the action that will process the selected match. | ||
382 | * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked | ||
383 | * | ||
384 | */ | ||
385 | public boolean forOneArbitraryMatch(final EReference pA, final EReference pB, final Consumer<? super Opposite.Match> processor) { | ||
386 | return rawForOneArbitraryMatch(new Object[]{pA, pB}, processor); | ||
387 | } | ||
388 | |||
389 | /** | ||
390 | * Returns a new (partial) match. | ||
391 | * This can be used e.g. to call the matcher with a partial match. | ||
392 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
393 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
394 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
395 | * @return the (partial) match object. | ||
396 | * | ||
397 | */ | ||
398 | public Opposite.Match newMatch(final EReference pA, final EReference pB) { | ||
399 | return Opposite.Match.newMatch(pA, pB); | ||
400 | } | ||
401 | |||
402 | /** | ||
403 | * Retrieve the set of values that occur in matches for a. | ||
404 | * @return the Set of all values or empty set if there are no matches | ||
405 | * | ||
406 | */ | ||
407 | protected Stream<EReference> rawStreamAllValuesOfa(final Object[] parameters) { | ||
408 | return rawStreamAllValues(POSITION_A, parameters).map(EReference.class::cast); | ||
409 | } | ||
410 | |||
411 | /** | ||
412 | * Retrieve the set of values that occur in matches for a. | ||
413 | * @return the Set of all values or empty set if there are no matches | ||
414 | * | ||
415 | */ | ||
416 | public Set<EReference> getAllValuesOfa() { | ||
417 | return rawStreamAllValuesOfa(emptyArray()).collect(Collectors.toSet()); | ||
418 | } | ||
419 | |||
420 | /** | ||
421 | * Retrieve the set of values that occur in matches for a. | ||
422 | * @return the Set of all values or empty set if there are no matches | ||
423 | * | ||
424 | */ | ||
425 | public Stream<EReference> streamAllValuesOfa() { | ||
426 | return rawStreamAllValuesOfa(emptyArray()); | ||
427 | } | ||
428 | |||
429 | /** | ||
430 | * Retrieve the set of values that occur in matches for a. | ||
431 | * </p> | ||
432 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
433 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
434 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
435 | * | ||
436 | * @return the Stream of all values or empty set if there are no matches | ||
437 | * | ||
438 | */ | ||
439 | public Stream<EReference> streamAllValuesOfa(final Opposite.Match partialMatch) { | ||
440 | return rawStreamAllValuesOfa(partialMatch.toArray()); | ||
441 | } | ||
442 | |||
443 | /** | ||
444 | * Retrieve the set of values that occur in matches for a. | ||
445 | * </p> | ||
446 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
447 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
448 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
449 | * | ||
450 | * @return the Stream of all values or empty set if there are no matches | ||
451 | * | ||
452 | */ | ||
453 | public Stream<EReference> streamAllValuesOfa(final EReference pB) { | ||
454 | return rawStreamAllValuesOfa(new Object[]{null, pB}); | ||
455 | } | ||
456 | |||
457 | /** | ||
458 | * Retrieve the set of values that occur in matches for a. | ||
459 | * @return the Set of all values or empty set if there are no matches | ||
460 | * | ||
461 | */ | ||
462 | public Set<EReference> getAllValuesOfa(final Opposite.Match partialMatch) { | ||
463 | return rawStreamAllValuesOfa(partialMatch.toArray()).collect(Collectors.toSet()); | ||
464 | } | ||
465 | |||
466 | /** | ||
467 | * Retrieve the set of values that occur in matches for a. | ||
468 | * @return the Set of all values or empty set if there are no matches | ||
469 | * | ||
470 | */ | ||
471 | public Set<EReference> getAllValuesOfa(final EReference pB) { | ||
472 | return rawStreamAllValuesOfa(new Object[]{null, pB}).collect(Collectors.toSet()); | ||
473 | } | ||
474 | |||
475 | /** | ||
476 | * Retrieve the set of values that occur in matches for b. | ||
477 | * @return the Set of all values or empty set if there are no matches | ||
478 | * | ||
479 | */ | ||
480 | protected Stream<EReference> rawStreamAllValuesOfb(final Object[] parameters) { | ||
481 | return rawStreamAllValues(POSITION_B, parameters).map(EReference.class::cast); | ||
482 | } | ||
483 | |||
484 | /** | ||
485 | * Retrieve the set of values that occur in matches for b. | ||
486 | * @return the Set of all values or empty set if there are no matches | ||
487 | * | ||
488 | */ | ||
489 | public Set<EReference> getAllValuesOfb() { | ||
490 | return rawStreamAllValuesOfb(emptyArray()).collect(Collectors.toSet()); | ||
491 | } | ||
492 | |||
493 | /** | ||
494 | * Retrieve the set of values that occur in matches for b. | ||
495 | * @return the Set of all values or empty set if there are no matches | ||
496 | * | ||
497 | */ | ||
498 | public Stream<EReference> streamAllValuesOfb() { | ||
499 | return rawStreamAllValuesOfb(emptyArray()); | ||
500 | } | ||
501 | |||
502 | /** | ||
503 | * Retrieve the set of values that occur in matches for b. | ||
504 | * </p> | ||
505 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
506 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
507 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
508 | * | ||
509 | * @return the Stream of all values or empty set if there are no matches | ||
510 | * | ||
511 | */ | ||
512 | public Stream<EReference> streamAllValuesOfb(final Opposite.Match partialMatch) { | ||
513 | return rawStreamAllValuesOfb(partialMatch.toArray()); | ||
514 | } | ||
515 | |||
516 | /** | ||
517 | * Retrieve the set of values that occur in matches for b. | ||
518 | * </p> | ||
519 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
520 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
521 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
522 | * | ||
523 | * @return the Stream of all values or empty set if there are no matches | ||
524 | * | ||
525 | */ | ||
526 | public Stream<EReference> streamAllValuesOfb(final EReference pA) { | ||
527 | return rawStreamAllValuesOfb(new Object[]{pA, null}); | ||
528 | } | ||
529 | |||
530 | /** | ||
531 | * Retrieve the set of values that occur in matches for b. | ||
532 | * @return the Set of all values or empty set if there are no matches | ||
533 | * | ||
534 | */ | ||
535 | public Set<EReference> getAllValuesOfb(final Opposite.Match partialMatch) { | ||
536 | return rawStreamAllValuesOfb(partialMatch.toArray()).collect(Collectors.toSet()); | ||
537 | } | ||
538 | |||
539 | /** | ||
540 | * Retrieve the set of values that occur in matches for b. | ||
541 | * @return the Set of all values or empty set if there are no matches | ||
542 | * | ||
543 | */ | ||
544 | public Set<EReference> getAllValuesOfb(final EReference pA) { | ||
545 | return rawStreamAllValuesOfb(new Object[]{pA, null}).collect(Collectors.toSet()); | ||
546 | } | ||
547 | |||
548 | @Override | ||
549 | protected Opposite.Match tupleToMatch(final Tuple t) { | ||
550 | try { | ||
551 | return Opposite.Match.newMatch((EReference) t.get(POSITION_A), (EReference) t.get(POSITION_B)); | ||
552 | } catch(ClassCastException e) { | ||
553 | LOGGER.error("Element(s) in tuple not properly typed!",e); | ||
554 | return null; | ||
555 | } | ||
556 | } | ||
557 | |||
558 | @Override | ||
559 | protected Opposite.Match arrayToMatch(final Object[] match) { | ||
560 | try { | ||
561 | return Opposite.Match.newMatch((EReference) match[POSITION_A], (EReference) match[POSITION_B]); | ||
562 | } catch(ClassCastException e) { | ||
563 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
564 | return null; | ||
565 | } | ||
566 | } | ||
567 | |||
568 | @Override | ||
569 | protected Opposite.Match arrayToMatchMutable(final Object[] match) { | ||
570 | try { | ||
571 | return Opposite.Match.newMutableMatch((EReference) match[POSITION_A], (EReference) match[POSITION_B]); | ||
572 | } catch(ClassCastException e) { | ||
573 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
574 | return null; | ||
575 | } | ||
576 | } | ||
577 | |||
578 | /** | ||
579 | * @return the singleton instance of the query specification of this pattern | ||
580 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
581 | * | ||
582 | */ | ||
583 | public static IQuerySpecification<Opposite.Matcher> querySpecification() { | ||
584 | return Opposite.instance(); | ||
585 | } | ||
586 | } | ||
587 | |||
588 | private Opposite() { | ||
589 | super(GeneratedPQuery.INSTANCE); | ||
590 | } | ||
591 | |||
592 | /** | ||
593 | * @return the singleton instance of the query specification | ||
594 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
595 | * | ||
596 | */ | ||
597 | public static Opposite instance() { | ||
598 | try{ | ||
599 | return LazyHolder.INSTANCE; | ||
600 | } catch (ExceptionInInitializerError err) { | ||
601 | throw processInitializerError(err); | ||
602 | } | ||
603 | } | ||
604 | |||
605 | @Override | ||
606 | protected Opposite.Matcher instantiate(final ViatraQueryEngine engine) { | ||
607 | return Opposite.Matcher.on(engine); | ||
608 | } | ||
609 | |||
610 | @Override | ||
611 | public Opposite.Matcher instantiate() { | ||
612 | return Opposite.Matcher.create(); | ||
613 | } | ||
614 | |||
615 | @Override | ||
616 | public Opposite.Match newEmptyMatch() { | ||
617 | return Opposite.Match.newEmptyMatch(); | ||
618 | } | ||
619 | |||
620 | @Override | ||
621 | public Opposite.Match newMatch(final Object... parameters) { | ||
622 | return Opposite.Match.newMatch((org.eclipse.emf.ecore.EReference) parameters[0], (org.eclipse.emf.ecore.EReference) parameters[1]); | ||
623 | } | ||
624 | |||
625 | /** | ||
626 | * Inner class allowing the singleton instance of {@link Opposite} to be created | ||
627 | * <b>not</b> at the class load time of the outer class, | ||
628 | * but rather at the first call to {@link Opposite#instance()}. | ||
629 | * | ||
630 | * <p> This workaround is required e.g. to support recursion. | ||
631 | * | ||
632 | */ | ||
633 | private static class LazyHolder { | ||
634 | private static final Opposite INSTANCE = new Opposite(); | ||
635 | |||
636 | /** | ||
637 | * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned. | ||
638 | * This initialization order is required to support indirect recursion. | ||
639 | * | ||
640 | * <p> The static initializer is defined using a helper field to work around limitations of the code generator. | ||
641 | * | ||
642 | */ | ||
643 | private static final Object STATIC_INITIALIZER = ensureInitialized(); | ||
644 | |||
645 | public static Object ensureInitialized() { | ||
646 | INSTANCE.ensureInitializedInternal(); | ||
647 | return null; | ||
648 | } | ||
649 | } | ||
650 | |||
651 | private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { | ||
652 | private static final Opposite.GeneratedPQuery INSTANCE = new GeneratedPQuery(); | ||
653 | |||
654 | private final PParameter parameter_a = new PParameter("a", "org.eclipse.emf.ecore.EReference", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EReference")), PParameterDirection.INOUT); | ||
655 | |||
656 | private final PParameter parameter_b = new PParameter("b", "org.eclipse.emf.ecore.EReference", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EReference")), PParameterDirection.INOUT); | ||
657 | |||
658 | private final List<PParameter> parameters = Arrays.asList(parameter_a, parameter_b); | ||
659 | |||
660 | private GeneratedPQuery() { | ||
661 | super(PVisibility.PUBLIC); | ||
662 | } | ||
663 | |||
664 | @Override | ||
665 | public String getFullyQualifiedName() { | ||
666 | return "queries.opposite"; | ||
667 | } | ||
668 | |||
669 | @Override | ||
670 | public List<String> getParameterNames() { | ||
671 | return Arrays.asList("a","b"); | ||
672 | } | ||
673 | |||
674 | @Override | ||
675 | public List<PParameter> getParameters() { | ||
676 | return parameters; | ||
677 | } | ||
678 | |||
679 | @Override | ||
680 | public Set<PBody> doGetContainedBodies() { | ||
681 | setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); | ||
682 | Set<PBody> bodies = new LinkedHashSet<>(); | ||
683 | { | ||
684 | PBody body = new PBody(this); | ||
685 | PVariable var_a = body.getOrCreateVariableByName("a"); | ||
686 | PVariable var_b = body.getOrCreateVariableByName("b"); | ||
687 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
688 | new TypeConstraint(body, Tuples.flatTupleOf(var_b), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
689 | body.setSymbolicParameters(Arrays.<ExportedParameter>asList( | ||
690 | new ExportedParameter(body, var_a, parameter_a), | ||
691 | new ExportedParameter(body, var_b, parameter_b) | ||
692 | )); | ||
693 | // EReference.eOpposite(a,b) | ||
694 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
695 | PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); | ||
696 | new TypeConstraint(body, Tuples.flatTupleOf(var_a, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference", "eOpposite"))); | ||
697 | new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
698 | new Equality(body, var__virtual_0_, var_b); | ||
699 | bodies.add(body); | ||
700 | } | ||
701 | return bodies; | ||
702 | } | ||
703 | } | ||
704 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/OppositeDifferentClass.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/OppositeDifferentClass.java new file mode 100644 index 00000000..ff46566d --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/OppositeDifferentClass.java | |||
@@ -0,0 +1,587 @@ | |||
1 | /** | ||
2 | * Generated from platform:/resource/SocialNetwork_plugin/queries/queries/Ecore.vql | ||
3 | */ | ||
4 | package queries; | ||
5 | |||
6 | import java.util.Arrays; | ||
7 | import java.util.Collection; | ||
8 | import java.util.LinkedHashSet; | ||
9 | import java.util.List; | ||
10 | import java.util.Objects; | ||
11 | import java.util.Optional; | ||
12 | import java.util.Set; | ||
13 | import java.util.function.Consumer; | ||
14 | import java.util.stream.Collectors; | ||
15 | import java.util.stream.Stream; | ||
16 | import org.apache.log4j.Logger; | ||
17 | import org.eclipse.emf.ecore.EClass; | ||
18 | import org.eclipse.emf.ecore.EReference; | ||
19 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
20 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
21 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | ||
22 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; | ||
23 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; | ||
24 | import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; | ||
25 | import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; | ||
26 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; | ||
27 | import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; | ||
28 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | ||
29 | import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; | ||
30 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; | ||
31 | import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; | ||
32 | import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; | ||
33 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; | ||
34 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; | ||
35 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality; | ||
36 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; | ||
37 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; | ||
38 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; | ||
39 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; | ||
40 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; | ||
41 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; | ||
42 | import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; | ||
43 | |||
44 | /** | ||
45 | * A pattern-specific query specification that can instantiate Matcher in a type-safe way. | ||
46 | * | ||
47 | * <p>Original source: | ||
48 | * <code><pre> | ||
49 | * {@literal @}Constraint(key={a}, severity="error", message="error") | ||
50 | * pattern oppositeDifferentClass(a:EReference) { | ||
51 | * EReference.eOpposite(a,b); | ||
52 | * EReference.eContainingClass(a,aContaining); | ||
53 | * EReference.eType(b,bTarget); | ||
54 | * aContaining != bTarget; | ||
55 | * } | ||
56 | * </pre></code> | ||
57 | * | ||
58 | * @see Matcher | ||
59 | * @see Match | ||
60 | * | ||
61 | */ | ||
62 | @SuppressWarnings("all") | ||
63 | public final class OppositeDifferentClass extends BaseGeneratedEMFQuerySpecification<OppositeDifferentClass.Matcher> { | ||
64 | /** | ||
65 | * Pattern-specific match representation of the queries.oppositeDifferentClass pattern, | ||
66 | * to be used in conjunction with {@link Matcher}. | ||
67 | * | ||
68 | * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. | ||
69 | * Each instance is a (possibly partial) substitution of pattern parameters, | ||
70 | * usable to represent a match of the pattern in the result of a query, | ||
71 | * or to specify the bound (fixed) input parameters when issuing a query. | ||
72 | * | ||
73 | * @see Matcher | ||
74 | * | ||
75 | */ | ||
76 | public static abstract class Match extends BasePatternMatch { | ||
77 | private EReference fA; | ||
78 | |||
79 | private static List<String> parameterNames = makeImmutableList("a"); | ||
80 | |||
81 | private Match(final EReference pA) { | ||
82 | this.fA = pA; | ||
83 | } | ||
84 | |||
85 | @Override | ||
86 | public Object get(final String parameterName) { | ||
87 | switch(parameterName) { | ||
88 | case "a": return this.fA; | ||
89 | default: return null; | ||
90 | } | ||
91 | } | ||
92 | |||
93 | @Override | ||
94 | public Object get(final int index) { | ||
95 | switch(index) { | ||
96 | case 0: return this.fA; | ||
97 | default: return null; | ||
98 | } | ||
99 | } | ||
100 | |||
101 | public EReference getA() { | ||
102 | return this.fA; | ||
103 | } | ||
104 | |||
105 | @Override | ||
106 | public boolean set(final String parameterName, final Object newValue) { | ||
107 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
108 | if ("a".equals(parameterName) ) { | ||
109 | this.fA = (EReference) newValue; | ||
110 | return true; | ||
111 | } | ||
112 | return false; | ||
113 | } | ||
114 | |||
115 | public void setA(final EReference pA) { | ||
116 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
117 | this.fA = pA; | ||
118 | } | ||
119 | |||
120 | @Override | ||
121 | public String patternName() { | ||
122 | return "queries.oppositeDifferentClass"; | ||
123 | } | ||
124 | |||
125 | @Override | ||
126 | public List<String> parameterNames() { | ||
127 | return OppositeDifferentClass.Match.parameterNames; | ||
128 | } | ||
129 | |||
130 | @Override | ||
131 | public Object[] toArray() { | ||
132 | return new Object[]{fA}; | ||
133 | } | ||
134 | |||
135 | @Override | ||
136 | public OppositeDifferentClass.Match toImmutable() { | ||
137 | return isMutable() ? newMatch(fA) : this; | ||
138 | } | ||
139 | |||
140 | @Override | ||
141 | public String prettyPrint() { | ||
142 | StringBuilder result = new StringBuilder(); | ||
143 | result.append("\"a\"=" + prettyPrintValue(fA)); | ||
144 | return result.toString(); | ||
145 | } | ||
146 | |||
147 | @Override | ||
148 | public int hashCode() { | ||
149 | return Objects.hash(fA); | ||
150 | } | ||
151 | |||
152 | @Override | ||
153 | public boolean equals(final Object obj) { | ||
154 | if (this == obj) | ||
155 | return true; | ||
156 | if (obj == null) { | ||
157 | return false; | ||
158 | } | ||
159 | if ((obj instanceof OppositeDifferentClass.Match)) { | ||
160 | OppositeDifferentClass.Match other = (OppositeDifferentClass.Match) obj; | ||
161 | return Objects.equals(fA, other.fA); | ||
162 | } else { | ||
163 | // this should be infrequent | ||
164 | if (!(obj instanceof IPatternMatch)) { | ||
165 | return false; | ||
166 | } | ||
167 | IPatternMatch otherSig = (IPatternMatch) obj; | ||
168 | return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); | ||
169 | } | ||
170 | } | ||
171 | |||
172 | @Override | ||
173 | public OppositeDifferentClass specification() { | ||
174 | return OppositeDifferentClass.instance(); | ||
175 | } | ||
176 | |||
177 | /** | ||
178 | * Returns an empty, mutable match. | ||
179 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
180 | * | ||
181 | * @return the empty match. | ||
182 | * | ||
183 | */ | ||
184 | public static OppositeDifferentClass.Match newEmptyMatch() { | ||
185 | return new Mutable(null); | ||
186 | } | ||
187 | |||
188 | /** | ||
189 | * Returns a mutable (partial) match. | ||
190 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
191 | * | ||
192 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
193 | * @return the new, mutable (partial) match object. | ||
194 | * | ||
195 | */ | ||
196 | public static OppositeDifferentClass.Match newMutableMatch(final EReference pA) { | ||
197 | return new Mutable(pA); | ||
198 | } | ||
199 | |||
200 | /** | ||
201 | * Returns a new (partial) match. | ||
202 | * This can be used e.g. to call the matcher with a partial match. | ||
203 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
204 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
205 | * @return the (partial) match object. | ||
206 | * | ||
207 | */ | ||
208 | public static OppositeDifferentClass.Match newMatch(final EReference pA) { | ||
209 | return new Immutable(pA); | ||
210 | } | ||
211 | |||
212 | private static final class Mutable extends OppositeDifferentClass.Match { | ||
213 | Mutable(final EReference pA) { | ||
214 | super(pA); | ||
215 | } | ||
216 | |||
217 | @Override | ||
218 | public boolean isMutable() { | ||
219 | return true; | ||
220 | } | ||
221 | } | ||
222 | |||
223 | private static final class Immutable extends OppositeDifferentClass.Match { | ||
224 | Immutable(final EReference pA) { | ||
225 | super(pA); | ||
226 | } | ||
227 | |||
228 | @Override | ||
229 | public boolean isMutable() { | ||
230 | return false; | ||
231 | } | ||
232 | } | ||
233 | } | ||
234 | |||
235 | /** | ||
236 | * Generated pattern matcher API of the queries.oppositeDifferentClass pattern, | ||
237 | * providing pattern-specific query methods. | ||
238 | * | ||
239 | * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, | ||
240 | * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. | ||
241 | * | ||
242 | * <p>Matches of the pattern will be represented as {@link Match}. | ||
243 | * | ||
244 | * <p>Original source: | ||
245 | * <code><pre> | ||
246 | * {@literal @}Constraint(key={a}, severity="error", message="error") | ||
247 | * pattern oppositeDifferentClass(a:EReference) { | ||
248 | * EReference.eOpposite(a,b); | ||
249 | * EReference.eContainingClass(a,aContaining); | ||
250 | * EReference.eType(b,bTarget); | ||
251 | * aContaining != bTarget; | ||
252 | * } | ||
253 | * </pre></code> | ||
254 | * | ||
255 | * @see Match | ||
256 | * @see OppositeDifferentClass | ||
257 | * | ||
258 | */ | ||
259 | public static class Matcher extends BaseMatcher<OppositeDifferentClass.Match> { | ||
260 | /** | ||
261 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
262 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
263 | * | ||
264 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
265 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
266 | * | ||
267 | */ | ||
268 | public static OppositeDifferentClass.Matcher on(final ViatraQueryEngine engine) { | ||
269 | // check if matcher already exists | ||
270 | Matcher matcher = engine.getExistingMatcher(querySpecification()); | ||
271 | if (matcher == null) { | ||
272 | matcher = (Matcher)engine.getMatcher(querySpecification()); | ||
273 | } | ||
274 | return matcher; | ||
275 | } | ||
276 | |||
277 | /** | ||
278 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
279 | * @return an initialized matcher | ||
280 | * @noreference This method is for internal matcher initialization by the framework, do not call it manually. | ||
281 | * | ||
282 | */ | ||
283 | public static OppositeDifferentClass.Matcher create() { | ||
284 | return new Matcher(); | ||
285 | } | ||
286 | |||
287 | private static final int POSITION_A = 0; | ||
288 | |||
289 | private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(OppositeDifferentClass.Matcher.class); | ||
290 | |||
291 | /** | ||
292 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
293 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
294 | * | ||
295 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
296 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
297 | * | ||
298 | */ | ||
299 | private Matcher() { | ||
300 | super(querySpecification()); | ||
301 | } | ||
302 | |||
303 | /** | ||
304 | * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. | ||
305 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
306 | * @return matches represented as a Match object. | ||
307 | * | ||
308 | */ | ||
309 | public Collection<OppositeDifferentClass.Match> getAllMatches(final EReference pA) { | ||
310 | return rawStreamAllMatches(new Object[]{pA}).collect(Collectors.toSet()); | ||
311 | } | ||
312 | |||
313 | /** | ||
314 | * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. | ||
315 | * </p> | ||
316 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
317 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
318 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
319 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
320 | * @return a stream of matches represented as a Match object. | ||
321 | * | ||
322 | */ | ||
323 | public Stream<OppositeDifferentClass.Match> streamAllMatches(final EReference pA) { | ||
324 | return rawStreamAllMatches(new Object[]{pA}); | ||
325 | } | ||
326 | |||
327 | /** | ||
328 | * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
329 | * Neither determinism nor randomness of selection is guaranteed. | ||
330 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
331 | * @return a match represented as a Match object, or null if no match is found. | ||
332 | * | ||
333 | */ | ||
334 | public Optional<OppositeDifferentClass.Match> getOneArbitraryMatch(final EReference pA) { | ||
335 | return rawGetOneArbitraryMatch(new Object[]{pA}); | ||
336 | } | ||
337 | |||
338 | /** | ||
339 | * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, | ||
340 | * under any possible substitution of the unspecified parameters (if any). | ||
341 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
342 | * @return true if the input is a valid (partial) match of the pattern. | ||
343 | * | ||
344 | */ | ||
345 | public boolean hasMatch(final EReference pA) { | ||
346 | return rawHasMatch(new Object[]{pA}); | ||
347 | } | ||
348 | |||
349 | /** | ||
350 | * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. | ||
351 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
352 | * @return the number of pattern matches found. | ||
353 | * | ||
354 | */ | ||
355 | public int countMatches(final EReference pA) { | ||
356 | return rawCountMatches(new Object[]{pA}); | ||
357 | } | ||
358 | |||
359 | /** | ||
360 | * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
361 | * Neither determinism nor randomness of selection is guaranteed. | ||
362 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
363 | * @param processor the action that will process the selected match. | ||
364 | * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked | ||
365 | * | ||
366 | */ | ||
367 | public boolean forOneArbitraryMatch(final EReference pA, final Consumer<? super OppositeDifferentClass.Match> processor) { | ||
368 | return rawForOneArbitraryMatch(new Object[]{pA}, processor); | ||
369 | } | ||
370 | |||
371 | /** | ||
372 | * Returns a new (partial) match. | ||
373 | * This can be used e.g. to call the matcher with a partial match. | ||
374 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
375 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
376 | * @return the (partial) match object. | ||
377 | * | ||
378 | */ | ||
379 | public OppositeDifferentClass.Match newMatch(final EReference pA) { | ||
380 | return OppositeDifferentClass.Match.newMatch(pA); | ||
381 | } | ||
382 | |||
383 | /** | ||
384 | * Retrieve the set of values that occur in matches for a. | ||
385 | * @return the Set of all values or empty set if there are no matches | ||
386 | * | ||
387 | */ | ||
388 | protected Stream<EReference> rawStreamAllValuesOfa(final Object[] parameters) { | ||
389 | return rawStreamAllValues(POSITION_A, parameters).map(EReference.class::cast); | ||
390 | } | ||
391 | |||
392 | /** | ||
393 | * Retrieve the set of values that occur in matches for a. | ||
394 | * @return the Set of all values or empty set if there are no matches | ||
395 | * | ||
396 | */ | ||
397 | public Set<EReference> getAllValuesOfa() { | ||
398 | return rawStreamAllValuesOfa(emptyArray()).collect(Collectors.toSet()); | ||
399 | } | ||
400 | |||
401 | /** | ||
402 | * Retrieve the set of values that occur in matches for a. | ||
403 | * @return the Set of all values or empty set if there are no matches | ||
404 | * | ||
405 | */ | ||
406 | public Stream<EReference> streamAllValuesOfa() { | ||
407 | return rawStreamAllValuesOfa(emptyArray()); | ||
408 | } | ||
409 | |||
410 | @Override | ||
411 | protected OppositeDifferentClass.Match tupleToMatch(final Tuple t) { | ||
412 | try { | ||
413 | return OppositeDifferentClass.Match.newMatch((EReference) t.get(POSITION_A)); | ||
414 | } catch(ClassCastException e) { | ||
415 | LOGGER.error("Element(s) in tuple not properly typed!",e); | ||
416 | return null; | ||
417 | } | ||
418 | } | ||
419 | |||
420 | @Override | ||
421 | protected OppositeDifferentClass.Match arrayToMatch(final Object[] match) { | ||
422 | try { | ||
423 | return OppositeDifferentClass.Match.newMatch((EReference) match[POSITION_A]); | ||
424 | } catch(ClassCastException e) { | ||
425 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
426 | return null; | ||
427 | } | ||
428 | } | ||
429 | |||
430 | @Override | ||
431 | protected OppositeDifferentClass.Match arrayToMatchMutable(final Object[] match) { | ||
432 | try { | ||
433 | return OppositeDifferentClass.Match.newMutableMatch((EReference) match[POSITION_A]); | ||
434 | } catch(ClassCastException e) { | ||
435 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
436 | return null; | ||
437 | } | ||
438 | } | ||
439 | |||
440 | /** | ||
441 | * @return the singleton instance of the query specification of this pattern | ||
442 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
443 | * | ||
444 | */ | ||
445 | public static IQuerySpecification<OppositeDifferentClass.Matcher> querySpecification() { | ||
446 | return OppositeDifferentClass.instance(); | ||
447 | } | ||
448 | } | ||
449 | |||
450 | private OppositeDifferentClass() { | ||
451 | super(GeneratedPQuery.INSTANCE); | ||
452 | } | ||
453 | |||
454 | /** | ||
455 | * @return the singleton instance of the query specification | ||
456 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
457 | * | ||
458 | */ | ||
459 | public static OppositeDifferentClass instance() { | ||
460 | try{ | ||
461 | return LazyHolder.INSTANCE; | ||
462 | } catch (ExceptionInInitializerError err) { | ||
463 | throw processInitializerError(err); | ||
464 | } | ||
465 | } | ||
466 | |||
467 | @Override | ||
468 | protected OppositeDifferentClass.Matcher instantiate(final ViatraQueryEngine engine) { | ||
469 | return OppositeDifferentClass.Matcher.on(engine); | ||
470 | } | ||
471 | |||
472 | @Override | ||
473 | public OppositeDifferentClass.Matcher instantiate() { | ||
474 | return OppositeDifferentClass.Matcher.create(); | ||
475 | } | ||
476 | |||
477 | @Override | ||
478 | public OppositeDifferentClass.Match newEmptyMatch() { | ||
479 | return OppositeDifferentClass.Match.newEmptyMatch(); | ||
480 | } | ||
481 | |||
482 | @Override | ||
483 | public OppositeDifferentClass.Match newMatch(final Object... parameters) { | ||
484 | return OppositeDifferentClass.Match.newMatch((org.eclipse.emf.ecore.EReference) parameters[0]); | ||
485 | } | ||
486 | |||
487 | /** | ||
488 | * Inner class allowing the singleton instance of {@link OppositeDifferentClass} to be created | ||
489 | * <b>not</b> at the class load time of the outer class, | ||
490 | * but rather at the first call to {@link OppositeDifferentClass#instance()}. | ||
491 | * | ||
492 | * <p> This workaround is required e.g. to support recursion. | ||
493 | * | ||
494 | */ | ||
495 | private static class LazyHolder { | ||
496 | private static final OppositeDifferentClass INSTANCE = new OppositeDifferentClass(); | ||
497 | |||
498 | /** | ||
499 | * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned. | ||
500 | * This initialization order is required to support indirect recursion. | ||
501 | * | ||
502 | * <p> The static initializer is defined using a helper field to work around limitations of the code generator. | ||
503 | * | ||
504 | */ | ||
505 | private static final Object STATIC_INITIALIZER = ensureInitialized(); | ||
506 | |||
507 | public static Object ensureInitialized() { | ||
508 | INSTANCE.ensureInitializedInternal(); | ||
509 | return null; | ||
510 | } | ||
511 | } | ||
512 | |||
513 | private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { | ||
514 | private static final OppositeDifferentClass.GeneratedPQuery INSTANCE = new GeneratedPQuery(); | ||
515 | |||
516 | private final PParameter parameter_a = new PParameter("a", "org.eclipse.emf.ecore.EReference", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EReference")), PParameterDirection.INOUT); | ||
517 | |||
518 | private final List<PParameter> parameters = Arrays.asList(parameter_a); | ||
519 | |||
520 | private GeneratedPQuery() { | ||
521 | super(PVisibility.PUBLIC); | ||
522 | } | ||
523 | |||
524 | @Override | ||
525 | public String getFullyQualifiedName() { | ||
526 | return "queries.oppositeDifferentClass"; | ||
527 | } | ||
528 | |||
529 | @Override | ||
530 | public List<String> getParameterNames() { | ||
531 | return Arrays.asList("a"); | ||
532 | } | ||
533 | |||
534 | @Override | ||
535 | public List<PParameter> getParameters() { | ||
536 | return parameters; | ||
537 | } | ||
538 | |||
539 | @Override | ||
540 | public Set<PBody> doGetContainedBodies() { | ||
541 | setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); | ||
542 | Set<PBody> bodies = new LinkedHashSet<>(); | ||
543 | { | ||
544 | PBody body = new PBody(this); | ||
545 | PVariable var_a = body.getOrCreateVariableByName("a"); | ||
546 | PVariable var_b = body.getOrCreateVariableByName("b"); | ||
547 | PVariable var_aContaining = body.getOrCreateVariableByName("aContaining"); | ||
548 | PVariable var_bTarget = body.getOrCreateVariableByName("bTarget"); | ||
549 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
550 | body.setSymbolicParameters(Arrays.<ExportedParameter>asList( | ||
551 | new ExportedParameter(body, var_a, parameter_a) | ||
552 | )); | ||
553 | // EReference.eOpposite(a,b) | ||
554 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
555 | PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); | ||
556 | new TypeConstraint(body, Tuples.flatTupleOf(var_a, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference", "eOpposite"))); | ||
557 | new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
558 | new Equality(body, var__virtual_0_, var_b); | ||
559 | // EReference.eContainingClass(a,aContaining) | ||
560 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
561 | PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); | ||
562 | new TypeConstraint(body, Tuples.flatTupleOf(var_a, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.eclipse.org/emf/2002/Ecore", "EStructuralFeature", "eContainingClass"))); | ||
563 | new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
564 | new Equality(body, var__virtual_1_, var_aContaining); | ||
565 | // EReference.eType(b,bTarget) | ||
566 | new TypeConstraint(body, Tuples.flatTupleOf(var_b), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
567 | PVariable var__virtual_2_ = body.getOrCreateVariableByName(".virtual{2}"); | ||
568 | new TypeConstraint(body, Tuples.flatTupleOf(var_b, var__virtual_2_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.eclipse.org/emf/2002/Ecore", "ETypedElement", "eType"))); | ||
569 | new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_2_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClassifier"))); | ||
570 | new Equality(body, var__virtual_2_, var_bTarget); | ||
571 | // aContaining != bTarget | ||
572 | new Inequality(body, var_aContaining, var_bTarget); | ||
573 | bodies.add(body); | ||
574 | } | ||
575 | { | ||
576 | PAnnotation annotation = new PAnnotation("Constraint"); | ||
577 | annotation.addAttribute("key", Arrays.asList(new Object[] { | ||
578 | new ParameterReference("a") | ||
579 | })); | ||
580 | annotation.addAttribute("severity", "error"); | ||
581 | annotation.addAttribute("message", "error"); | ||
582 | addAnnotation(annotation); | ||
583 | } | ||
584 | return bodies; | ||
585 | } | ||
586 | } | ||
587 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/SuperTypes.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/SuperTypes.java new file mode 100644 index 00000000..4bf7a455 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src-gen/queries/SuperTypes.java | |||
@@ -0,0 +1,703 @@ | |||
1 | /** | ||
2 | * Generated from platform:/resource/SocialNetwork_plugin/queries/queries/Ecore.vql | ||
3 | */ | ||
4 | package queries; | ||
5 | |||
6 | import java.util.Arrays; | ||
7 | import java.util.Collection; | ||
8 | import java.util.LinkedHashSet; | ||
9 | import java.util.List; | ||
10 | import java.util.Objects; | ||
11 | import java.util.Optional; | ||
12 | import java.util.Set; | ||
13 | import java.util.function.Consumer; | ||
14 | import java.util.stream.Collectors; | ||
15 | import java.util.stream.Stream; | ||
16 | import org.apache.log4j.Logger; | ||
17 | import org.eclipse.emf.ecore.EClass; | ||
18 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
19 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
20 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | ||
21 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; | ||
22 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; | ||
23 | import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; | ||
24 | import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; | ||
25 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; | ||
26 | import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; | ||
27 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | ||
28 | import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; | ||
29 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; | ||
30 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; | ||
31 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; | ||
32 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; | ||
33 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; | ||
34 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; | ||
35 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; | ||
36 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; | ||
37 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; | ||
38 | import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; | ||
39 | |||
40 | /** | ||
41 | * A pattern-specific query specification that can instantiate Matcher in a type-safe way. | ||
42 | * | ||
43 | * <p>Original source: | ||
44 | * <code><pre> | ||
45 | * pattern superTypes(c1:EClass, c2:EClass){ | ||
46 | * EClass.eSuperTypes(c1,c2); | ||
47 | * } | ||
48 | * </pre></code> | ||
49 | * | ||
50 | * @see Matcher | ||
51 | * @see Match | ||
52 | * | ||
53 | */ | ||
54 | @SuppressWarnings("all") | ||
55 | public final class SuperTypes extends BaseGeneratedEMFQuerySpecification<SuperTypes.Matcher> { | ||
56 | /** | ||
57 | * Pattern-specific match representation of the queries.superTypes pattern, | ||
58 | * to be used in conjunction with {@link Matcher}. | ||
59 | * | ||
60 | * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. | ||
61 | * Each instance is a (possibly partial) substitution of pattern parameters, | ||
62 | * usable to represent a match of the pattern in the result of a query, | ||
63 | * or to specify the bound (fixed) input parameters when issuing a query. | ||
64 | * | ||
65 | * @see Matcher | ||
66 | * | ||
67 | */ | ||
68 | public static abstract class Match extends BasePatternMatch { | ||
69 | private EClass fC1; | ||
70 | |||
71 | private EClass fC2; | ||
72 | |||
73 | private static List<String> parameterNames = makeImmutableList("c1", "c2"); | ||
74 | |||
75 | private Match(final EClass pC1, final EClass pC2) { | ||
76 | this.fC1 = pC1; | ||
77 | this.fC2 = pC2; | ||
78 | } | ||
79 | |||
80 | @Override | ||
81 | public Object get(final String parameterName) { | ||
82 | switch(parameterName) { | ||
83 | case "c1": return this.fC1; | ||
84 | case "c2": return this.fC2; | ||
85 | default: return null; | ||
86 | } | ||
87 | } | ||
88 | |||
89 | @Override | ||
90 | public Object get(final int index) { | ||
91 | switch(index) { | ||
92 | case 0: return this.fC1; | ||
93 | case 1: return this.fC2; | ||
94 | default: return null; | ||
95 | } | ||
96 | } | ||
97 | |||
98 | public EClass getC1() { | ||
99 | return this.fC1; | ||
100 | } | ||
101 | |||
102 | public EClass getC2() { | ||
103 | return this.fC2; | ||
104 | } | ||
105 | |||
106 | @Override | ||
107 | public boolean set(final String parameterName, final Object newValue) { | ||
108 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
109 | if ("c1".equals(parameterName) ) { | ||
110 | this.fC1 = (EClass) newValue; | ||
111 | return true; | ||
112 | } | ||
113 | if ("c2".equals(parameterName) ) { | ||
114 | this.fC2 = (EClass) newValue; | ||
115 | return true; | ||
116 | } | ||
117 | return false; | ||
118 | } | ||
119 | |||
120 | public void setC1(final EClass pC1) { | ||
121 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
122 | this.fC1 = pC1; | ||
123 | } | ||
124 | |||
125 | public void setC2(final EClass pC2) { | ||
126 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
127 | this.fC2 = pC2; | ||
128 | } | ||
129 | |||
130 | @Override | ||
131 | public String patternName() { | ||
132 | return "queries.superTypes"; | ||
133 | } | ||
134 | |||
135 | @Override | ||
136 | public List<String> parameterNames() { | ||
137 | return SuperTypes.Match.parameterNames; | ||
138 | } | ||
139 | |||
140 | @Override | ||
141 | public Object[] toArray() { | ||
142 | return new Object[]{fC1, fC2}; | ||
143 | } | ||
144 | |||
145 | @Override | ||
146 | public SuperTypes.Match toImmutable() { | ||
147 | return isMutable() ? newMatch(fC1, fC2) : this; | ||
148 | } | ||
149 | |||
150 | @Override | ||
151 | public String prettyPrint() { | ||
152 | StringBuilder result = new StringBuilder(); | ||
153 | result.append("\"c1\"=" + prettyPrintValue(fC1) + ", "); | ||
154 | result.append("\"c2\"=" + prettyPrintValue(fC2)); | ||
155 | return result.toString(); | ||
156 | } | ||
157 | |||
158 | @Override | ||
159 | public int hashCode() { | ||
160 | return Objects.hash(fC1, fC2); | ||
161 | } | ||
162 | |||
163 | @Override | ||
164 | public boolean equals(final Object obj) { | ||
165 | if (this == obj) | ||
166 | return true; | ||
167 | if (obj == null) { | ||
168 | return false; | ||
169 | } | ||
170 | if ((obj instanceof SuperTypes.Match)) { | ||
171 | SuperTypes.Match other = (SuperTypes.Match) obj; | ||
172 | return Objects.equals(fC1, other.fC1) && Objects.equals(fC2, other.fC2); | ||
173 | } else { | ||
174 | // this should be infrequent | ||
175 | if (!(obj instanceof IPatternMatch)) { | ||
176 | return false; | ||
177 | } | ||
178 | IPatternMatch otherSig = (IPatternMatch) obj; | ||
179 | return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); | ||
180 | } | ||
181 | } | ||
182 | |||
183 | @Override | ||
184 | public SuperTypes specification() { | ||
185 | return SuperTypes.instance(); | ||
186 | } | ||
187 | |||
188 | /** | ||
189 | * Returns an empty, mutable match. | ||
190 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
191 | * | ||
192 | * @return the empty match. | ||
193 | * | ||
194 | */ | ||
195 | public static SuperTypes.Match newEmptyMatch() { | ||
196 | return new Mutable(null, null); | ||
197 | } | ||
198 | |||
199 | /** | ||
200 | * Returns a mutable (partial) match. | ||
201 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
202 | * | ||
203 | * @param pC1 the fixed value of pattern parameter c1, or null if not bound. | ||
204 | * @param pC2 the fixed value of pattern parameter c2, or null if not bound. | ||
205 | * @return the new, mutable (partial) match object. | ||
206 | * | ||
207 | */ | ||
208 | public static SuperTypes.Match newMutableMatch(final EClass pC1, final EClass pC2) { | ||
209 | return new Mutable(pC1, pC2); | ||
210 | } | ||
211 | |||
212 | /** | ||
213 | * Returns a new (partial) match. | ||
214 | * This can be used e.g. to call the matcher with a partial match. | ||
215 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
216 | * @param pC1 the fixed value of pattern parameter c1, or null if not bound. | ||
217 | * @param pC2 the fixed value of pattern parameter c2, or null if not bound. | ||
218 | * @return the (partial) match object. | ||
219 | * | ||
220 | */ | ||
221 | public static SuperTypes.Match newMatch(final EClass pC1, final EClass pC2) { | ||
222 | return new Immutable(pC1, pC2); | ||
223 | } | ||
224 | |||
225 | private static final class Mutable extends SuperTypes.Match { | ||
226 | Mutable(final EClass pC1, final EClass pC2) { | ||
227 | super(pC1, pC2); | ||
228 | } | ||
229 | |||
230 | @Override | ||
231 | public boolean isMutable() { | ||
232 | return true; | ||
233 | } | ||
234 | } | ||
235 | |||
236 | private static final class Immutable extends SuperTypes.Match { | ||
237 | Immutable(final EClass pC1, final EClass pC2) { | ||
238 | super(pC1, pC2); | ||
239 | } | ||
240 | |||
241 | @Override | ||
242 | public boolean isMutable() { | ||
243 | return false; | ||
244 | } | ||
245 | } | ||
246 | } | ||
247 | |||
248 | /** | ||
249 | * Generated pattern matcher API of the queries.superTypes pattern, | ||
250 | * providing pattern-specific query methods. | ||
251 | * | ||
252 | * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, | ||
253 | * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. | ||
254 | * | ||
255 | * <p>Matches of the pattern will be represented as {@link Match}. | ||
256 | * | ||
257 | * <p>Original source: | ||
258 | * <code><pre> | ||
259 | * pattern superTypes(c1:EClass, c2:EClass){ | ||
260 | * EClass.eSuperTypes(c1,c2); | ||
261 | * } | ||
262 | * </pre></code> | ||
263 | * | ||
264 | * @see Match | ||
265 | * @see SuperTypes | ||
266 | * | ||
267 | */ | ||
268 | public static class Matcher extends BaseMatcher<SuperTypes.Match> { | ||
269 | /** | ||
270 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
271 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
272 | * | ||
273 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
274 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
275 | * | ||
276 | */ | ||
277 | public static SuperTypes.Matcher on(final ViatraQueryEngine engine) { | ||
278 | // check if matcher already exists | ||
279 | Matcher matcher = engine.getExistingMatcher(querySpecification()); | ||
280 | if (matcher == null) { | ||
281 | matcher = (Matcher)engine.getMatcher(querySpecification()); | ||
282 | } | ||
283 | return matcher; | ||
284 | } | ||
285 | |||
286 | /** | ||
287 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
288 | * @return an initialized matcher | ||
289 | * @noreference This method is for internal matcher initialization by the framework, do not call it manually. | ||
290 | * | ||
291 | */ | ||
292 | public static SuperTypes.Matcher create() { | ||
293 | return new Matcher(); | ||
294 | } | ||
295 | |||
296 | private static final int POSITION_C1 = 0; | ||
297 | |||
298 | private static final int POSITION_C2 = 1; | ||
299 | |||
300 | private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(SuperTypes.Matcher.class); | ||
301 | |||
302 | /** | ||
303 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
304 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
305 | * | ||
306 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
307 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
308 | * | ||
309 | */ | ||
310 | private Matcher() { | ||
311 | super(querySpecification()); | ||
312 | } | ||
313 | |||
314 | /** | ||
315 | * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. | ||
316 | * @param pC1 the fixed value of pattern parameter c1, or null if not bound. | ||
317 | * @param pC2 the fixed value of pattern parameter c2, or null if not bound. | ||
318 | * @return matches represented as a Match object. | ||
319 | * | ||
320 | */ | ||
321 | public Collection<SuperTypes.Match> getAllMatches(final EClass pC1, final EClass pC2) { | ||
322 | return rawStreamAllMatches(new Object[]{pC1, pC2}).collect(Collectors.toSet()); | ||
323 | } | ||
324 | |||
325 | /** | ||
326 | * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. | ||
327 | * </p> | ||
328 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
329 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
330 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
331 | * @param pC1 the fixed value of pattern parameter c1, or null if not bound. | ||
332 | * @param pC2 the fixed value of pattern parameter c2, or null if not bound. | ||
333 | * @return a stream of matches represented as a Match object. | ||
334 | * | ||
335 | */ | ||
336 | public Stream<SuperTypes.Match> streamAllMatches(final EClass pC1, final EClass pC2) { | ||
337 | return rawStreamAllMatches(new Object[]{pC1, pC2}); | ||
338 | } | ||
339 | |||
340 | /** | ||
341 | * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
342 | * Neither determinism nor randomness of selection is guaranteed. | ||
343 | * @param pC1 the fixed value of pattern parameter c1, or null if not bound. | ||
344 | * @param pC2 the fixed value of pattern parameter c2, or null if not bound. | ||
345 | * @return a match represented as a Match object, or null if no match is found. | ||
346 | * | ||
347 | */ | ||
348 | public Optional<SuperTypes.Match> getOneArbitraryMatch(final EClass pC1, final EClass pC2) { | ||
349 | return rawGetOneArbitraryMatch(new Object[]{pC1, pC2}); | ||
350 | } | ||
351 | |||
352 | /** | ||
353 | * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, | ||
354 | * under any possible substitution of the unspecified parameters (if any). | ||
355 | * @param pC1 the fixed value of pattern parameter c1, or null if not bound. | ||
356 | * @param pC2 the fixed value of pattern parameter c2, or null if not bound. | ||
357 | * @return true if the input is a valid (partial) match of the pattern. | ||
358 | * | ||
359 | */ | ||
360 | public boolean hasMatch(final EClass pC1, final EClass pC2) { | ||
361 | return rawHasMatch(new Object[]{pC1, pC2}); | ||
362 | } | ||
363 | |||
364 | /** | ||
365 | * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. | ||
366 | * @param pC1 the fixed value of pattern parameter c1, or null if not bound. | ||
367 | * @param pC2 the fixed value of pattern parameter c2, or null if not bound. | ||
368 | * @return the number of pattern matches found. | ||
369 | * | ||
370 | */ | ||
371 | public int countMatches(final EClass pC1, final EClass pC2) { | ||
372 | return rawCountMatches(new Object[]{pC1, pC2}); | ||
373 | } | ||
374 | |||
375 | /** | ||
376 | * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
377 | * Neither determinism nor randomness of selection is guaranteed. | ||
378 | * @param pC1 the fixed value of pattern parameter c1, or null if not bound. | ||
379 | * @param pC2 the fixed value of pattern parameter c2, or null if not bound. | ||
380 | * @param processor the action that will process the selected match. | ||
381 | * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked | ||
382 | * | ||
383 | */ | ||
384 | public boolean forOneArbitraryMatch(final EClass pC1, final EClass pC2, final Consumer<? super SuperTypes.Match> processor) { | ||
385 | return rawForOneArbitraryMatch(new Object[]{pC1, pC2}, processor); | ||
386 | } | ||
387 | |||
388 | /** | ||
389 | * Returns a new (partial) match. | ||
390 | * This can be used e.g. to call the matcher with a partial match. | ||
391 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
392 | * @param pC1 the fixed value of pattern parameter c1, or null if not bound. | ||
393 | * @param pC2 the fixed value of pattern parameter c2, or null if not bound. | ||
394 | * @return the (partial) match object. | ||
395 | * | ||
396 | */ | ||
397 | public SuperTypes.Match newMatch(final EClass pC1, final EClass pC2) { | ||
398 | return SuperTypes.Match.newMatch(pC1, pC2); | ||
399 | } | ||
400 | |||
401 | /** | ||
402 | * Retrieve the set of values that occur in matches for c1. | ||
403 | * @return the Set of all values or empty set if there are no matches | ||
404 | * | ||
405 | */ | ||
406 | protected Stream<EClass> rawStreamAllValuesOfc1(final Object[] parameters) { | ||
407 | return rawStreamAllValues(POSITION_C1, parameters).map(EClass.class::cast); | ||
408 | } | ||
409 | |||
410 | /** | ||
411 | * Retrieve the set of values that occur in matches for c1. | ||
412 | * @return the Set of all values or empty set if there are no matches | ||
413 | * | ||
414 | */ | ||
415 | public Set<EClass> getAllValuesOfc1() { | ||
416 | return rawStreamAllValuesOfc1(emptyArray()).collect(Collectors.toSet()); | ||
417 | } | ||
418 | |||
419 | /** | ||
420 | * Retrieve the set of values that occur in matches for c1. | ||
421 | * @return the Set of all values or empty set if there are no matches | ||
422 | * | ||
423 | */ | ||
424 | public Stream<EClass> streamAllValuesOfc1() { | ||
425 | return rawStreamAllValuesOfc1(emptyArray()); | ||
426 | } | ||
427 | |||
428 | /** | ||
429 | * Retrieve the set of values that occur in matches for c1. | ||
430 | * </p> | ||
431 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
432 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
433 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
434 | * | ||
435 | * @return the Stream of all values or empty set if there are no matches | ||
436 | * | ||
437 | */ | ||
438 | public Stream<EClass> streamAllValuesOfc1(final SuperTypes.Match partialMatch) { | ||
439 | return rawStreamAllValuesOfc1(partialMatch.toArray()); | ||
440 | } | ||
441 | |||
442 | /** | ||
443 | * Retrieve the set of values that occur in matches for c1. | ||
444 | * </p> | ||
445 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
446 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
447 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
448 | * | ||
449 | * @return the Stream of all values or empty set if there are no matches | ||
450 | * | ||
451 | */ | ||
452 | public Stream<EClass> streamAllValuesOfc1(final EClass pC2) { | ||
453 | return rawStreamAllValuesOfc1(new Object[]{null, pC2}); | ||
454 | } | ||
455 | |||
456 | /** | ||
457 | * Retrieve the set of values that occur in matches for c1. | ||
458 | * @return the Set of all values or empty set if there are no matches | ||
459 | * | ||
460 | */ | ||
461 | public Set<EClass> getAllValuesOfc1(final SuperTypes.Match partialMatch) { | ||
462 | return rawStreamAllValuesOfc1(partialMatch.toArray()).collect(Collectors.toSet()); | ||
463 | } | ||
464 | |||
465 | /** | ||
466 | * Retrieve the set of values that occur in matches for c1. | ||
467 | * @return the Set of all values or empty set if there are no matches | ||
468 | * | ||
469 | */ | ||
470 | public Set<EClass> getAllValuesOfc1(final EClass pC2) { | ||
471 | return rawStreamAllValuesOfc1(new Object[]{null, pC2}).collect(Collectors.toSet()); | ||
472 | } | ||
473 | |||
474 | /** | ||
475 | * Retrieve the set of values that occur in matches for c2. | ||
476 | * @return the Set of all values or empty set if there are no matches | ||
477 | * | ||
478 | */ | ||
479 | protected Stream<EClass> rawStreamAllValuesOfc2(final Object[] parameters) { | ||
480 | return rawStreamAllValues(POSITION_C2, parameters).map(EClass.class::cast); | ||
481 | } | ||
482 | |||
483 | /** | ||
484 | * Retrieve the set of values that occur in matches for c2. | ||
485 | * @return the Set of all values or empty set if there are no matches | ||
486 | * | ||
487 | */ | ||
488 | public Set<EClass> getAllValuesOfc2() { | ||
489 | return rawStreamAllValuesOfc2(emptyArray()).collect(Collectors.toSet()); | ||
490 | } | ||
491 | |||
492 | /** | ||
493 | * Retrieve the set of values that occur in matches for c2. | ||
494 | * @return the Set of all values or empty set if there are no matches | ||
495 | * | ||
496 | */ | ||
497 | public Stream<EClass> streamAllValuesOfc2() { | ||
498 | return rawStreamAllValuesOfc2(emptyArray()); | ||
499 | } | ||
500 | |||
501 | /** | ||
502 | * Retrieve the set of values that occur in matches for c2. | ||
503 | * </p> | ||
504 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
505 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
506 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
507 | * | ||
508 | * @return the Stream of all values or empty set if there are no matches | ||
509 | * | ||
510 | */ | ||
511 | public Stream<EClass> streamAllValuesOfc2(final SuperTypes.Match partialMatch) { | ||
512 | return rawStreamAllValuesOfc2(partialMatch.toArray()); | ||
513 | } | ||
514 | |||
515 | /** | ||
516 | * Retrieve the set of values that occur in matches for c2. | ||
517 | * </p> | ||
518 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
519 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
520 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
521 | * | ||
522 | * @return the Stream of all values or empty set if there are no matches | ||
523 | * | ||
524 | */ | ||
525 | public Stream<EClass> streamAllValuesOfc2(final EClass pC1) { | ||
526 | return rawStreamAllValuesOfc2(new Object[]{pC1, null}); | ||
527 | } | ||
528 | |||
529 | /** | ||
530 | * Retrieve the set of values that occur in matches for c2. | ||
531 | * @return the Set of all values or empty set if there are no matches | ||
532 | * | ||
533 | */ | ||
534 | public Set<EClass> getAllValuesOfc2(final SuperTypes.Match partialMatch) { | ||
535 | return rawStreamAllValuesOfc2(partialMatch.toArray()).collect(Collectors.toSet()); | ||
536 | } | ||
537 | |||
538 | /** | ||
539 | * Retrieve the set of values that occur in matches for c2. | ||
540 | * @return the Set of all values or empty set if there are no matches | ||
541 | * | ||
542 | */ | ||
543 | public Set<EClass> getAllValuesOfc2(final EClass pC1) { | ||
544 | return rawStreamAllValuesOfc2(new Object[]{pC1, null}).collect(Collectors.toSet()); | ||
545 | } | ||
546 | |||
547 | @Override | ||
548 | protected SuperTypes.Match tupleToMatch(final Tuple t) { | ||
549 | try { | ||
550 | return SuperTypes.Match.newMatch((EClass) t.get(POSITION_C1), (EClass) t.get(POSITION_C2)); | ||
551 | } catch(ClassCastException e) { | ||
552 | LOGGER.error("Element(s) in tuple not properly typed!",e); | ||
553 | return null; | ||
554 | } | ||
555 | } | ||
556 | |||
557 | @Override | ||
558 | protected SuperTypes.Match arrayToMatch(final Object[] match) { | ||
559 | try { | ||
560 | return SuperTypes.Match.newMatch((EClass) match[POSITION_C1], (EClass) match[POSITION_C2]); | ||
561 | } catch(ClassCastException e) { | ||
562 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
563 | return null; | ||
564 | } | ||
565 | } | ||
566 | |||
567 | @Override | ||
568 | protected SuperTypes.Match arrayToMatchMutable(final Object[] match) { | ||
569 | try { | ||
570 | return SuperTypes.Match.newMutableMatch((EClass) match[POSITION_C1], (EClass) match[POSITION_C2]); | ||
571 | } catch(ClassCastException e) { | ||
572 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
573 | return null; | ||
574 | } | ||
575 | } | ||
576 | |||
577 | /** | ||
578 | * @return the singleton instance of the query specification of this pattern | ||
579 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
580 | * | ||
581 | */ | ||
582 | public static IQuerySpecification<SuperTypes.Matcher> querySpecification() { | ||
583 | return SuperTypes.instance(); | ||
584 | } | ||
585 | } | ||
586 | |||
587 | private SuperTypes() { | ||
588 | super(GeneratedPQuery.INSTANCE); | ||
589 | } | ||
590 | |||
591 | /** | ||
592 | * @return the singleton instance of the query specification | ||
593 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
594 | * | ||
595 | */ | ||
596 | public static SuperTypes instance() { | ||
597 | try{ | ||
598 | return LazyHolder.INSTANCE; | ||
599 | } catch (ExceptionInInitializerError err) { | ||
600 | throw processInitializerError(err); | ||
601 | } | ||
602 | } | ||
603 | |||
604 | @Override | ||
605 | protected SuperTypes.Matcher instantiate(final ViatraQueryEngine engine) { | ||
606 | return SuperTypes.Matcher.on(engine); | ||
607 | } | ||
608 | |||
609 | @Override | ||
610 | public SuperTypes.Matcher instantiate() { | ||
611 | return SuperTypes.Matcher.create(); | ||
612 | } | ||
613 | |||
614 | @Override | ||
615 | public SuperTypes.Match newEmptyMatch() { | ||
616 | return SuperTypes.Match.newEmptyMatch(); | ||
617 | } | ||
618 | |||
619 | @Override | ||
620 | public SuperTypes.Match newMatch(final Object... parameters) { | ||
621 | return SuperTypes.Match.newMatch((org.eclipse.emf.ecore.EClass) parameters[0], (org.eclipse.emf.ecore.EClass) parameters[1]); | ||
622 | } | ||
623 | |||
624 | /** | ||
625 | * Inner class allowing the singleton instance of {@link SuperTypes} to be created | ||
626 | * <b>not</b> at the class load time of the outer class, | ||
627 | * but rather at the first call to {@link SuperTypes#instance()}. | ||
628 | * | ||
629 | * <p> This workaround is required e.g. to support recursion. | ||
630 | * | ||
631 | */ | ||
632 | private static class LazyHolder { | ||
633 | private static final SuperTypes INSTANCE = new SuperTypes(); | ||
634 | |||
635 | /** | ||
636 | * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned. | ||
637 | * This initialization order is required to support indirect recursion. | ||
638 | * | ||
639 | * <p> The static initializer is defined using a helper field to work around limitations of the code generator. | ||
640 | * | ||
641 | */ | ||
642 | private static final Object STATIC_INITIALIZER = ensureInitialized(); | ||
643 | |||
644 | public static Object ensureInitialized() { | ||
645 | INSTANCE.ensureInitializedInternal(); | ||
646 | return null; | ||
647 | } | ||
648 | } | ||
649 | |||
650 | private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { | ||
651 | private static final SuperTypes.GeneratedPQuery INSTANCE = new GeneratedPQuery(); | ||
652 | |||
653 | private final PParameter parameter_c1 = new PParameter("c1", "org.eclipse.emf.ecore.EClass", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EClass")), PParameterDirection.INOUT); | ||
654 | |||
655 | private final PParameter parameter_c2 = new PParameter("c2", "org.eclipse.emf.ecore.EClass", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EClass")), PParameterDirection.INOUT); | ||
656 | |||
657 | private final List<PParameter> parameters = Arrays.asList(parameter_c1, parameter_c2); | ||
658 | |||
659 | private GeneratedPQuery() { | ||
660 | super(PVisibility.PUBLIC); | ||
661 | } | ||
662 | |||
663 | @Override | ||
664 | public String getFullyQualifiedName() { | ||
665 | return "queries.superTypes"; | ||
666 | } | ||
667 | |||
668 | @Override | ||
669 | public List<String> getParameterNames() { | ||
670 | return Arrays.asList("c1","c2"); | ||
671 | } | ||
672 | |||
673 | @Override | ||
674 | public List<PParameter> getParameters() { | ||
675 | return parameters; | ||
676 | } | ||
677 | |||
678 | @Override | ||
679 | public Set<PBody> doGetContainedBodies() { | ||
680 | setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); | ||
681 | Set<PBody> bodies = new LinkedHashSet<>(); | ||
682 | { | ||
683 | PBody body = new PBody(this); | ||
684 | PVariable var_c1 = body.getOrCreateVariableByName("c1"); | ||
685 | PVariable var_c2 = body.getOrCreateVariableByName("c2"); | ||
686 | new TypeConstraint(body, Tuples.flatTupleOf(var_c1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
687 | new TypeConstraint(body, Tuples.flatTupleOf(var_c2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
688 | body.setSymbolicParameters(Arrays.<ExportedParameter>asList( | ||
689 | new ExportedParameter(body, var_c1, parameter_c1), | ||
690 | new ExportedParameter(body, var_c2, parameter_c2) | ||
691 | )); | ||
692 | // EClass.eSuperTypes(c1,c2) | ||
693 | new TypeConstraint(body, Tuples.flatTupleOf(var_c1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
694 | PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); | ||
695 | new TypeConstraint(body, Tuples.flatTupleOf(var_c1, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass", "eSuperTypes"))); | ||
696 | new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
697 | new Equality(body, var__virtual_0_, var_c2); | ||
698 | bodies.add(body); | ||
699 | } | ||
700 | return bodies; | ||
701 | } | ||
702 | } | ||
703 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/plugin/Queries.vql b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/plugin/Queries.vql new file mode 100644 index 00000000..3e7fc68c --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/plugin/Queries.vql | |||
@@ -0,0 +1,54 @@ | |||
1 | package ca.mcgill.ecse.socialnetwork.plugin | ||
2 | |||
3 | import epackage "http://ecse.mcgill.ca/socialnetwork" | ||
4 | |||
5 | //@Constraint(message="terminatorAndInformation", severity="error", key={T}) | ||
6 | //pattern terminatorAndInformation(T : FAMTerminator, I : InformationLink) = { | ||
7 | // FunctionalOutput.outgoingLinks(Out,I); | ||
8 | // FunctionalOutput.terminator(Out,T); | ||
9 | //} or { | ||
10 | // InformationLink.to(I,In); | ||
11 | // FunctionalInput.terminator(In,T); | ||
12 | //} | ||
13 | |||
14 | @Constraint(message="singleFriendship", severity="error", key={p1}) | ||
15 | pattern singleFriendship(p1: Person) { | ||
16 | find friendship(p1, p); | ||
17 | neg find friendship(p, p1); | ||
18 | } | ||
19 | |||
20 | //@Constraint(message="cycle", severity="error", key={p}) | ||
21 | //pattern cycleInParenthood(p: Person) { | ||
22 | // find isAncestor(p, p); | ||
23 | //} | ||
24 | |||
25 | @Constraint(message="noFriend", severity="error", key={p}) | ||
26 | pattern noFriend(p: Person){ | ||
27 | neg find friendship(p, _); | ||
28 | } | ||
29 | |||
30 | //@Constraint(message="brothhoodParent", severity="error", key={p1,p2}) | ||
31 | //pattern brothhoodParent(p1: Person, p2: Person){ | ||
32 | // Person.parents(p1, parent1); | ||
33 | // Person.parents(p2, parent2); | ||
34 | // parent1 == parent2; | ||
35 | // find isAncestor(p1, p2); | ||
36 | //} | ||
37 | @Constraint(message="selfFriend", severity="error", key={p}) | ||
38 | pattern selfFriend(p: Person){ | ||
39 | Person.friends(p,p); | ||
40 | } | ||
41 | |||
42 | pattern friendship(p1: Person, p2: Person){ | ||
43 | Person.friends(p1,p2); | ||
44 | } | ||
45 | |||
46 | //pattern isAncestor(person : Person, ancestor : Person){ | ||
47 | // Person.parents(person, ancestor); | ||
48 | //} or { | ||
49 | // Person.parents(person, parent); | ||
50 | // find isAncestor(parent, ancestor); | ||
51 | //} | ||
52 | |||
53 | |||
54 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java new file mode 100644 index 00000000..e4e5b61f --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java | |||
@@ -0,0 +1,203 @@ | |||
1 | package ca.mcgill.ecse.socialnetwork.runner; | ||
2 | |||
3 | import java.io.File; | ||
4 | import java.io.FileNotFoundException; | ||
5 | import java.io.PrintStream; | ||
6 | import java.util.ArrayList; | ||
7 | import java.util.Map; | ||
8 | import java.util.Scanner; | ||
9 | |||
10 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain; | ||
11 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance; | ||
12 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph; | ||
13 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter; | ||
14 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader; | ||
15 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.RepMetricsReader; | ||
16 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup; | ||
17 | import hu.bme.mit.inf.dslreasoner.application.execution.StandaloneScriptExecutor; | ||
18 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.YakindummPackage; | ||
19 | import socialnetwork.Person; | ||
20 | |||
21 | public class Main { | ||
22 | |||
23 | private static String runWithPath(String path) { | ||
24 | String message = StandaloneScriptExecutor.executeScript(path); | ||
25 | return message; | ||
26 | } | ||
27 | |||
28 | private static String configFolder = "yakinduum/config22/"; | ||
29 | private static String configFileName = configFolder + "info_old_metric.csv"; | ||
30 | private static String aggregateViolationMeasureFileName = configFolder + "aggregateInfo.csv"; | ||
31 | private static String fileReadFolder = "output/Ecore_100/"; | ||
32 | |||
33 | public static void main(String args[]) { | ||
34 | String ecoreFile = args[0]; | ||
35 | System.out.println("Generation Started"); | ||
36 | |||
37 | System.out.println(System.getProperty("java.library.path")); | ||
38 | |||
39 | long begin = System.currentTimeMillis(); | ||
40 | String message = runWithPath(ecoreFile); | ||
41 | long elapsed = System.currentTimeMillis() - begin; | ||
42 | |||
43 | if(message != null) { | ||
44 | System.out.println(message); | ||
45 | return; | ||
46 | } | ||
47 | // ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>(); | ||
48 | // String time = formatTime(elapsed); | ||
49 | // ArrayList<String> infoOutput = new ArrayList<String>(); | ||
50 | // infoOutput.add(time); | ||
51 | // output.add(infoOutput); | ||
52 | // System.out.println(time); | ||
53 | // CsvFileWriter.write(output, configFileName); | ||
54 | // | ||
55 | // | ||
56 | // output = new ArrayList<ArrayList<String>>(); | ||
57 | // output.add(prepareInfo()); | ||
58 | // CsvFileWriter.append(output, configFileName); | ||
59 | // | ||
60 | // for(int i = 0; i < 50; i++) { | ||
61 | // generateModel(i+1); | ||
62 | // } | ||
63 | // aggregateViolationMeasure(50); | ||
64 | System.out.println("Finished"); | ||
65 | } | ||
66 | |||
67 | // public static void generateModel(int run) { | ||
68 | // String filename = run+"_1.xmi"; | ||
69 | // //prepare initial info | ||
70 | // ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>(); | ||
71 | // ArrayList<String> infoOutput = new ArrayList<String>(); | ||
72 | // infoOutput.add(run+ ""); | ||
73 | // infoOutput.addAll(calculateMetric(run)); | ||
74 | // | ||
75 | // YakinduumModel model = new YakinduumModel(fileReadFolder +"run" +run + "/" + filename); | ||
76 | // int violationCount = ViolationCheck.calculateViolationCounts(model.yakinduum); | ||
77 | // infoOutput.add(violationCount + ""); | ||
78 | // | ||
79 | // | ||
80 | // | ||
81 | // //save model to another directory | ||
82 | // model.save(configFolder + run + ".xmi"); | ||
83 | // output.add(infoOutput); | ||
84 | // CsvFileWriter.append(output, configFileName); | ||
85 | // } | ||
86 | // | ||
87 | // public static void singleModelViolationMeasure(int run) { | ||
88 | // String filename = run+"_1.xmi"; | ||
89 | // //prepare initial info | ||
90 | // ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>(); | ||
91 | // ArrayList<String> infoOutput = new ArrayList<String>(); | ||
92 | // infoOutput.add(run+ ""); | ||
93 | // | ||
94 | // YakinduumModel model = new YakinduumModel(fileReadFolder+"/run"+run+"/"+ filename); | ||
95 | // | ||
96 | // //parse map of violation counts to two list and add them to the result list | ||
97 | // Map<String, Integer> map = ViolationCheck.violationMaps(model.yakinduum); | ||
98 | // ArrayList<String> counts = new ArrayList<String>(); | ||
99 | // ArrayList<String> violationNames = new ArrayList<String>(map.keySet()); | ||
100 | // for(int i = 0; i < violationNames.size(); i++) { | ||
101 | // String name = violationNames.get(i); | ||
102 | // int total = map.get(name); | ||
103 | // counts.add(total + ""); | ||
104 | // } | ||
105 | // output.add(infoOutput); | ||
106 | // output.add(violationNames); | ||
107 | // output.add(counts); | ||
108 | // | ||
109 | // CsvFileWriter.append(output, configFileName); | ||
110 | // } | ||
111 | // | ||
112 | // public static void aggregateViolationMeasure(int size) { | ||
113 | // ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>(); | ||
114 | // ArrayList<String> counts = new ArrayList<String>(); | ||
115 | // ArrayList<String> violationNames = null; | ||
116 | // for(int run = 1; run < size+1; run++) { | ||
117 | // String filename = run+"_1.xmi"; | ||
118 | // YakinduumModel model = new YakinduumModel(fileReadFolder+"/run"+run+"/"+ filename); | ||
119 | // | ||
120 | // Map<String, Integer> map = ViolationCheck.violationMaps(model.yakinduum); | ||
121 | // if(run == 1) { | ||
122 | // violationNames = new ArrayList<String>(map.keySet()); | ||
123 | // for(int i = 0; i < violationNames.size(); i++) { | ||
124 | // String name = violationNames.get(i); | ||
125 | // int total = map.get(name); | ||
126 | // counts.add(total + ""); | ||
127 | // } | ||
128 | // }else { | ||
129 | // for(int i = 0; i < violationNames.size(); i++) { | ||
130 | // int count = Integer.parseInt(counts.get(i)); | ||
131 | // String name = violationNames.get(i); | ||
132 | // int total = count + map.get(name); | ||
133 | // counts.set(i, total + ""); | ||
134 | // } | ||
135 | // } | ||
136 | // } | ||
137 | // | ||
138 | // for(int i = 0; i < counts.size(); i++) { | ||
139 | // double count = Integer.parseInt(counts.get(i)) / (double) size; | ||
140 | // counts.set(i, count + ""); | ||
141 | // } | ||
142 | // | ||
143 | // output.add(violationNames); | ||
144 | // output.add(counts); | ||
145 | // CsvFileWriter.write(output, aggregateViolationMeasureFileName); | ||
146 | // } | ||
147 | // | ||
148 | public static ArrayList<String> calculateMetric(int run) { | ||
149 | //read model and metric | ||
150 | ArrayList<String> output = new ArrayList<String>(); | ||
151 | GraphReader reader = new GraphReader(YakindummPackage.eINSTANCE, ".xmi"); | ||
152 | EMFGraph graph = reader.readModel(fileReadFolder+"/run"+run, run + "_1.xmi"); | ||
153 | MetricSampleGroup metrics = RepMetricsReader.read(Domain.Yakindumm); | ||
154 | //KS distance | ||
155 | KSDistance ks = new KSDistance(metrics); | ||
156 | |||
157 | //calculate and put metric data to output array | ||
158 | MetricSampleGroup samples = graph.evaluateAllMetricsToSamples(); | ||
159 | output.add(graph.getStatistic().getAllNodes().size() + ""); | ||
160 | output.add(ks.outDegreeDistance(samples.outDegreeSamples) + ""); | ||
161 | output.add(ks.naDistance(samples.naSamples)+ ""); | ||
162 | output.add(ks.mpcDistance(samples.mpcSamples) + ""); | ||
163 | output.add(ks.typedOutDegreeDistance(samples.typedOutDegreeSamples) + ""); | ||
164 | return output; | ||
165 | } | ||
166 | |||
167 | public static ArrayList<String> prepareInfo() { | ||
168 | ArrayList<String> info = new ArrayList<String>(); | ||
169 | info.add("ID"); | ||
170 | info.add("# of Nodes"); | ||
171 | info.add("Out Degree"); | ||
172 | info.add("Node Activity"); | ||
173 | info.add("MPC"); | ||
174 | info.add("Typed Out Degree"); | ||
175 | info.add("Violations"); | ||
176 | return info; | ||
177 | } | ||
178 | |||
179 | public static String formatTime(long time) { | ||
180 | long mili = time % 1000; | ||
181 | long second = (time / 1000) % 60; | ||
182 | long minute = (time / (1000 * 60)); | ||
183 | return String.format("%d : %d.%d", minute, second, mili); | ||
184 | } | ||
185 | |||
186 | public static void statistics() { | ||
187 | String uri = "output/1.xmi"; | ||
188 | SocialNetworkModel socialNetwork = new SocialNetworkModel(uri); | ||
189 | System.out.println(socialNetwork.getPersons().size()); | ||
190 | |||
191 | File file = new File("model/statistics/output.txt"); | ||
192 | try { | ||
193 | @SuppressWarnings("resource") | ||
194 | PrintStream out = new PrintStream(file); | ||
195 | for(Person p : socialNetwork.getPersons()) { | ||
196 | out.println(p.getFriends().size()); | ||
197 | } | ||
198 | } catch (FileNotFoundException e) { | ||
199 | e.printStackTrace(); | ||
200 | } | ||
201 | System.out.println("Output Finished"); | ||
202 | } | ||
203 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Persisitence.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Persisitence.java new file mode 100644 index 00000000..3ebede25 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Persisitence.java | |||
@@ -0,0 +1,63 @@ | |||
1 | package ca.mcgill.ecse.socialnetwork.runner; | ||
2 | import java.io.IOException; | ||
3 | import java.util.Collections; | ||
4 | import java.util.Map; | ||
5 | |||
6 | import org.eclipse.emf.common.util.URI; | ||
7 | import org.eclipse.emf.ecore.EObject; | ||
8 | import org.eclipse.emf.ecore.resource.Resource; | ||
9 | import org.eclipse.emf.ecore.resource.ResourceSet; | ||
10 | import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; | ||
11 | import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; | ||
12 | |||
13 | public class Persisitence<G extends EObject> { | ||
14 | private String uri; | ||
15 | |||
16 | public Persisitence (String suffix, String uri){ | ||
17 | //prepare to save | ||
18 | Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE; | ||
19 | Map<String, Object> m = reg.getExtensionToFactoryMap(); | ||
20 | m.put(suffix, new XMIResourceFactoryImpl()); | ||
21 | this.uri = uri; | ||
22 | } | ||
23 | |||
24 | |||
25 | /** | ||
26 | * Save the model | ||
27 | * @return whether the model has saved successfully | ||
28 | */ | ||
29 | public boolean save(G model) { | ||
30 | //create resource | ||
31 | ResourceSet resSet = new ResourceSetImpl(); | ||
32 | Resource resource = resSet.createResource(URI.createURI(uri)); | ||
33 | resource.getContents().add(model); | ||
34 | try { | ||
35 | resource.save(Collections.EMPTY_MAP); | ||
36 | return true; | ||
37 | }catch(IOException e) { | ||
38 | e.printStackTrace(); | ||
39 | return false; | ||
40 | } | ||
41 | } | ||
42 | |||
43 | /** | ||
44 | * load the model from persistent | ||
45 | * @return: the model loaded | ||
46 | */ | ||
47 | @SuppressWarnings("unchecked") | ||
48 | public G load() { | ||
49 | G model = null; | ||
50 | // try { | ||
51 | ResourceSet resSet = new ResourceSetImpl(); | ||
52 | Resource resource = resSet.getResource(URI.createURI(uri), true); | ||
53 | model = (G) resource.getContents().get(0); | ||
54 | // }catch (org.eclipse.emf.common.util.WrappedException e) { | ||
55 | // // if the file cannot be found then return null | ||
56 | // if(e.getCause().getClass() == java.io.FileNotFoundException.class) { | ||
57 | // return null; | ||
58 | // } | ||
59 | // } | ||
60 | |||
61 | return model; | ||
62 | } | ||
63 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/RunnerTests.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/RunnerTests.java new file mode 100644 index 00000000..c09c55be --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/RunnerTests.java | |||
@@ -0,0 +1,18 @@ | |||
1 | package ca.mcgill.ecse.socialnetwork.runner; | ||
2 | |||
3 | import org.junit.Test; | ||
4 | |||
5 | import hu.bme.mit.inf.dslreasoner.application.execution.StandaloneScriptExecutor; | ||
6 | |||
7 | public class RunnerTests { | ||
8 | private static String runWithPath(String path) { | ||
9 | String message = StandaloneScriptExecutor.executeScript(path); | ||
10 | return message; | ||
11 | } | ||
12 | |||
13 | @Test | ||
14 | public void generateModel() { | ||
15 | String message = runWithPath("SocialNetworkGeneration.vsconfig"); | ||
16 | System.out.println(message); | ||
17 | } | ||
18 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/SocialNetworkModel.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/SocialNetworkModel.java new file mode 100644 index 00000000..51c50b11 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/SocialNetworkModel.java | |||
@@ -0,0 +1,62 @@ | |||
1 | package ca.mcgill.ecse.socialnetwork.runner; | ||
2 | |||
3 | import org.eclipse.emf.common.util.EList; | ||
4 | |||
5 | import socialnetwork.Person; | ||
6 | import socialnetwork.SocialNetwork; | ||
7 | import socialnetwork.SocialnetworkFactory; | ||
8 | import socialnetwork.SocialnetworkPackage; | ||
9 | import socialnetwork.impl.SocialnetworkFactoryImpl; | ||
10 | |||
11 | |||
12 | |||
13 | public class SocialNetworkModel { | ||
14 | private final static String SUFFIX = "xmi"; | ||
15 | |||
16 | private static boolean isInit = false; | ||
17 | |||
18 | public static void init() { | ||
19 | SocialnetworkFactory.eINSTANCE.eClass(); | ||
20 | SocialnetworkPackage.eINSTANCE.eClass(); | ||
21 | SocialnetworkFactoryImpl.init(); | ||
22 | } | ||
23 | |||
24 | // container for the social network model | ||
25 | public SocialNetwork socialNetwork; | ||
26 | |||
27 | // factory for social network model | ||
28 | SocialnetworkFactory factory; | ||
29 | |||
30 | // persistent | ||
31 | Persisitence<SocialNetwork> persistence; | ||
32 | |||
33 | |||
34 | public SocialNetworkModel(String uri){ | ||
35 | if(!isInit) { | ||
36 | init(); | ||
37 | } | ||
38 | |||
39 | //create persistence | ||
40 | persistence = new Persisitence<SocialNetwork>(SUFFIX, uri); | ||
41 | factory = SocialnetworkFactory.eINSTANCE; | ||
42 | // try load the model | ||
43 | this.socialNetwork = persistence.load(); | ||
44 | if(this.socialNetwork == null) { | ||
45 | this.socialNetwork = factory.createSocialNetwork(); | ||
46 | } | ||
47 | } | ||
48 | |||
49 | public Person createPerson() { | ||
50 | Person p = factory.createPerson(); | ||
51 | socialNetwork.getPersons().add(p); | ||
52 | return p; | ||
53 | } | ||
54 | |||
55 | public EList<Person> getPersons(){ | ||
56 | return socialNetwork.getPersons(); | ||
57 | } | ||
58 | |||
59 | public boolean save() { | ||
60 | return persistence.save(socialNetwork); | ||
61 | } | ||
62 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/YakinduumModel.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/YakinduumModel.java new file mode 100644 index 00000000..803daff4 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/YakinduumModel.java | |||
@@ -0,0 +1,52 @@ | |||
1 | package ca.mcgill.ecse.socialnetwork.runner; | ||
2 | |||
3 | import javax.annotation.Resource; | ||
4 | |||
5 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.Statechart; | ||
6 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.YakindummFactory; | ||
7 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.YakindummPackage; | ||
8 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummFactoryImpl; | ||
9 | import socialnetwork.SocialNetwork; | ||
10 | import socialnetwork.SocialnetworkFactory; | ||
11 | |||
12 | public class YakinduumModel { | ||
13 | private final static String SUFFIX = "xmi"; | ||
14 | |||
15 | private static boolean isInit = false; | ||
16 | |||
17 | private String uri; | ||
18 | |||
19 | public static void init() { | ||
20 | YakindummFactory.eINSTANCE.eClass(); | ||
21 | YakindummPackage.eINSTANCE.eClass(); | ||
22 | YakindummFactoryImpl.init(); | ||
23 | } | ||
24 | |||
25 | // container for the social network model | ||
26 | public Statechart yakinduum; | ||
27 | |||
28 | |||
29 | // persistent | ||
30 | Persisitence<Statechart> persistence; | ||
31 | |||
32 | |||
33 | public YakinduumModel(String uri){ | ||
34 | if(!isInit) { | ||
35 | init(); | ||
36 | } | ||
37 | this.uri = uri; | ||
38 | //create persistence | ||
39 | persistence = new Persisitence<Statechart>(SUFFIX, uri); | ||
40 | // try load the model | ||
41 | this.yakinduum = persistence.load(); | ||
42 | } | ||
43 | |||
44 | public boolean save(String uri) { | ||
45 | if(this.uri.equals(uri)) { | ||
46 | return persistence.save(yakinduum); | ||
47 | }else { | ||
48 | persistence = new Persisitence<Statechart>(SUFFIX, uri); | ||
49 | return persistence.save(yakinduum); | ||
50 | } | ||
51 | } | ||
52 | } | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/100.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/100.csv new file mode 100644 index 00000000..fd1af09c --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/100.csv | |||
@@ -0,0 +1,22 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,TransformationExecutionTime,TypeAnalysisTime,MetricCalculationTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime,_Solution0FoundAt | ||
2 | 5,1,InsuficientResourcesResultImpl,26,1815,305292,1000,16140,15,12210,260570,0,0, | ||
3 | 5,2,InsuficientResourcesResultImpl,26,1237,301846,700,14659,0,12249,259139,0,0, | ||
4 | 5,3,InsuficientResourcesResultImpl,26,1218,301687,600,15765,0,12876,256432,0,0, | ||
5 | 5,4,InsuficientResourcesResultImpl,26,1294,302248,800,18015,0,11131,255608,0,0, | ||
6 | 5,5,InsuficientResourcesResultImpl,26,1290,300894,900,14893,0,11118,259377,0,0, | ||
7 | 5,6,InsuficientResourcesResultImpl,26,1184,302351,900,16463,0,11499,258946,0,0, | ||
8 | 5,7,ModelResultImpl,26,1180,289935,35396400,17823,0,14375,240465,0,4,287519 | ||
9 | 5,8,InsuficientResourcesResultImpl,26,1298,304757,700,12762,0,10686,266461,0,0, | ||
10 | 5,9,ModelResultImpl,26,1166,287620,35860800,17055,0,15050,237850,0,1,285304 | ||
11 | 5,10,ModelResultImpl,26,1185,168322,32789700,15059,0,9955,132727,0,0,166044 | ||
12 | 5,11,InsuficientResourcesResultImpl,26,1176,302293,900,12773,0,10338,264930,0,0, | ||
13 | 5,12,InsuficientResourcesResultImpl,26,1200,300206,600,14139,0,11334,260462,0,0, | ||
14 | 5,13,InsuficientResourcesResultImpl,26,1199,305554,500,12939,0,11144,266919,0,0, | ||
15 | 5,14,InsuficientResourcesResultImpl,26,1193,300864,700,18895,0,14266,250111,0,0, | ||
16 | 5,15,InsuficientResourcesResultImpl,26,1197,303894,700,14501,0,12313,262474,0,0, | ||
17 | 5,16,InsuficientResourcesResultImpl,26,1171,303003,700,13178,0,11827,263585,0,0, | ||
18 | 5,17,InsuficientResourcesResultImpl,26,1169,305501,600,13479,0,11788,265540,0,0, | ||
19 | 5,18,InsuficientResourcesResultImpl,26,1175,301967,700,13531,0,11415,262420,0,0, | ||
20 | 5,19,InsuficientResourcesResultImpl,26,1274,300241,800,13254,0,11607,260895,0,0, | ||
21 | 5,20,ModelResultImpl,26,1166,269530,42362900,17007,0,13440,223316,0,1,267245 | ||
22 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/30.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/30.csv new file mode 100644 index 00000000..0022e984 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/30.csv | |||
@@ -0,0 +1,22 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,_Solution0FoundAt,TransformationExecutionTime,TypeAnalysisTime,MetricCalculationTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime | ||
2 | 2,1,ModelResultImpl,19,1721,35221,15771300,32311,7042,34,1895,16580,0,1 | ||
3 | 2,2,ModelResultImpl,19,1610,35749,11651300,32635,6745,1,1736,18895,0,1 | ||
4 | 2,3,ModelResultImpl,19,1640,27258,16117300,24303,6429,0,1323,12286,0,1 | ||
5 | 2,4,ModelResultImpl,19,1634,35933,20450700,33223,6381,0,1605,20611,0,2 | ||
6 | 2,5,ModelResultImpl,19,1612,23612,11651100,19721,6887,0,1099,8730,0,0 | ||
7 | 2,6,ModelResultImpl,19,1319,22727,9964000,20364,4974,0,1147,11737,0,0 | ||
8 | 2,7,ModelResultImpl,19,1278,22340,12342400,19967,4711,0,1078,11660,0,0 | ||
9 | 2,8,ModelResultImpl,19,1292,20551,10731500,18317,4260,0,1007,11070,0,0 | ||
10 | 2,9,ModelResultImpl,19,1378,18306,12922900,15874,4176,0,928,8796,0,1 | ||
11 | 2,10,ModelResultImpl,19,1330,25726,10084700,23254,6531,0,1345,10615,0,0 | ||
12 | 2,11,ModelResultImpl,19,1229,33084,12002300,30734,5309,0,1584,19392,0,0 | ||
13 | 2,12,ModelResultImpl,19,1240,24555,9818800,22179,5967,1,1405,10083,0,0 | ||
14 | 2,13,ModelResultImpl,19,1264,28275,11451700,25939,5692,0,1395,14547,0,0 | ||
15 | 2,14,ModelResultImpl,19,1276,36197,10007300,33900,5461,0,1659,22219,0,0 | ||
16 | 2,15,ModelResultImpl,19,1230,30436,9231400,28100,5354,0,1488,16718,0,0 | ||
17 | 2,16,ModelResultImpl,19,1217,22614,8885000,20287,6795,0,1371,7299,0,0 | ||
18 | 2,17,ModelResultImpl,19,1262,29600,12922400,27253,5298,0,1528,15895,0,0 | ||
19 | 2,18,ModelResultImpl,19,1243,28214,10765500,25879,5412,0,1292,15319,0,0 | ||
20 | 2,19,ModelResultImpl,19,1299,20845,11064400,18336,5327,0,1048,8903,0,0 | ||
21 | 2,20,ModelResultImpl,19,1280,26352,10670800,23901,6709,0,1454,11410,0,1 | ||
22 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/50.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/50.csv new file mode 100644 index 00000000..1ea0ccaf --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/50.csv | |||
@@ -0,0 +1,22 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,_Solution0FoundAt,TransformationExecutionTime,TypeAnalysisTime,MetricCalculationTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime | ||
2 | 3,1,ModelResultImpl,7,1300,78258,16468500,75732,13071,7,4896,46003,0,2 | ||
3 | 3,2,ModelResultImpl,7,1255,72729,15062600,70201,10011,0,4148,48760,0,0 | ||
4 | 3,3,ModelResultImpl,7,1284,85751,18952400,83381,10015,0,4783,59452,0,0 | ||
5 | 3,4,ModelResultImpl,7,1312,80702,18255000,78055,9873,0,3766,56886,0,1 | ||
6 | 3,5,ModelResultImpl,7,2192,111362,20902300,108184,12705,0,5062,79232,0,0 | ||
7 | 3,6,ModelResultImpl,7,1275,88255,20727400,85645,9667,0,3925,64755,0,0 | ||
8 | 3,7,ModelResultImpl,7,1228,95312,23184200,92818,9763,0,4466,69648,0,1 | ||
9 | 3,8,ModelResultImpl,7,1421,102160,16746000,99564,13923,0,5149,68705,0,1 | ||
10 | 3,9,ModelResultImpl,7,1542,74130,15142300,71709,10116,0,4021,50574,0,0 | ||
11 | 3,10,ModelResultImpl,7,1370,106586,18544500,103524,11809,0,4614,78092,0,1 | ||
12 | 3,11,ModelResultImpl,7,1977,81554,14689300,78988,9059,0,4109,58293,0,1 | ||
13 | 3,12,ModelResultImpl,7,1282,80592,17114200,77924,10654,0,4120,55221,0,0 | ||
14 | 3,13,ModelResultImpl,7,1470,50749,14006900,47249,7112,0,2464,34560,0,0 | ||
15 | 3,14,ModelResultImpl,7,1189,96780,16081900,94561,8346,0,4262,74850,0,0 | ||
16 | 3,15,ModelResultImpl,7,1187,104866,17029000,102503,8484,0,4673,81148,0,0 | ||
17 | 3,16,ModelResultImpl,7,1192,83407,19208900,81122,8548,0,4154,61175,0,1 | ||
18 | 3,17,ModelResultImpl,7,1291,84064,18326300,81220,10675,0,4308,57616,0,0 | ||
19 | 3,18,ModelResultImpl,7,1924,92524,20324400,89145,9764,0,4238,66918,0,1 | ||
20 | 3,19,ModelResultImpl,7,1284,85575,14840500,82932,10403,0,4104,60536,0,0 | ||
21 | 3,20,ModelResultImpl,7,1239,78254,21057200,75918,9173,0,3958,55242,0,0 | ||
22 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/80.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/80.csv new file mode 100644 index 00000000..034a2048 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/80.csv | |||
@@ -0,0 +1,22 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,_Solution0FoundAt,TransformationExecutionTime,TypeAnalysisTime,MetricCalculationTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime | ||
2 | 4,1,ModelResultImpl,10,1339,187225,43638100,184585,14565,8,8893,149868,0,0 | ||
3 | 4,2,ModelResultImpl,10,1336,258364,34407600,255655,14281,1,9835,217586,0,0 | ||
4 | 4,3,InsuficientResourcesResultImpl,10,1321,302464,3900,,14999,0,10218,258608,0,0 | ||
5 | 4,4,ModelResultImpl,10,1569,272300,28546600,269342,14187,0,9965,231046,0,0 | ||
6 | 4,5,ModelResultImpl,10,1315,244950,39639300,242286,14765,0,10575,202813,0,0 | ||
7 | 4,6,ModelResultImpl,10,1223,185629,34348900,183286,14074,0,9227,147910,0,0 | ||
8 | 4,7,ModelResultImpl,10,1271,243243,28619100,240866,16030,0,10594,199605,0,1 | ||
9 | 4,8,ModelResultImpl,10,1229,247712,31642900,244834,14393,0,9543,207278,0,0 | ||
10 | 4,9,ModelResultImpl,10,1284,209619,24479700,207199,18848,0,10225,164689,0,0 | ||
11 | 4,10,ModelResultImpl,10,1240,252740,36766100,250104,15959,0,10730,208822,0,1 | ||
12 | 4,11,ModelResultImpl,10,1315,192678,27966300,190097,15350,0,9230,152579,0,1 | ||
13 | 4,12,ModelResultImpl,10,1767,199644,24666200,195878,16171,0,9709,158015,0,1 | ||
14 | 4,13,ModelResultImpl,10,1411,209397,29226100,206486,17127,0,10334,164735,0,0 | ||
15 | 4,14,InsuficientResourcesResultImpl,10,1292,300133,800,,13558,0,10569,258303,0,0 | ||
16 | 4,15,ModelResultImpl,10,1188,277607,29611300,275175,13898,0,11204,234760,0,0 | ||
17 | 4,16,ModelResultImpl,10,1383,257815,41453700,255328,13012,0,10666,216491,0,1 | ||
18 | 4,17,ModelResultImpl,10,1335,217424,30586300,214754,15737,0,9889,176416,0,0 | ||
19 | 4,18,ModelResultImpl,10,1317,214706,28448000,211898,15332,0,9390,175241,0,1 | ||
20 | 4,19,ModelResultImpl,10,1429,235982,26350500,233087,15836,0,10258,192499,0,1 | ||
21 | 4,20,InsuficientResourcesResultImpl,10,1150,302957,1100,,16272,0,12639,253942,0,0 | ||
22 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/warmup.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/warmup.csv new file mode 100644 index 00000000..126b6dca --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Ecore/warmup.csv | |||
@@ -0,0 +1,3 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,Solution1FoundAt,ExplorationInitializationTime,TransformationExecutionTime,TypeAnalysisTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime,ActivationSelectionTime,NumericalSolverSumTime,NumericalSolverProblemFormingTime,NumericalSolverSolvingTime,NumericalSolverInterpretingSolution,NumericalSolverCachingTime,NumericalSolverCallNumber,NumericalSolverCachedAnswerNumber | ||
2 | 1,1,ModelResultImpl,1224,3526,17696,152,12788,5289,2215,356,1661,0,8,1,0,0,0,0,0,0,0 | ||
3 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Github/30.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Github/30.csv new file mode 100644 index 00000000..d1ec723b --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Github/30.csv | |||
@@ -0,0 +1,22 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,_Solution0FoundAt,TransformationExecutionTime,TypeAnalysisTime,MetricCalculationTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime | ||
2 | 2,1,ModelResultImpl,5,753,17109,13399400,16654,1789,9,696,11984,0,0 | ||
3 | 2,2,ModelResultImpl,5,628,17801,12301800,17369,1678,0,715,12727,0,0 | ||
4 | 2,3,ModelResultImpl,5,610,15430,13989100,14970,1285,0,586,11377,0,0 | ||
5 | 2,4,ModelResultImpl,5,803,14781,11475500,14220,1483,0,640,10196,0,0 | ||
6 | 2,5,ModelResultImpl,5,581,22641,12669300,22193,1558,0,707,17778,0,0 | ||
7 | 2,6,ModelResultImpl,5,611,22649,11553300,22203,1508,0,660,17965,0,0 | ||
8 | 2,7,ModelResultImpl,5,548,12438,10128400,12033,1584,0,616,7995,0,0 | ||
9 | 2,8,ModelResultImpl,5,655,17624,10593200,17198,1404,0,619,13273,0,0 | ||
10 | 2,9,ModelResultImpl,5,596,16946,10102500,16528,1717,0,705,11847,0,0 | ||
11 | 2,10,ModelResultImpl,5,537,17896,10038000,17507,1414,0,626,13625,0,0 | ||
12 | 2,11,ModelResultImpl,5,535,13771,11741600,13353,1411,0,613,9547,0,0 | ||
13 | 2,12,ModelResultImpl,5,531,16728,11768600,16257,1448,0,635,12199,0,0 | ||
14 | 2,13,ModelResultImpl,5,549,14647,11546900,14254,1201,0,573,10920,0,0 | ||
15 | 2,14,ModelResultImpl,5,552,15942,10918300,15492,1502,0,610,11459,0,0 | ||
16 | 2,15,ModelResultImpl,5,563,15196,12483700,14773,1389,0,574,11130,0,0 | ||
17 | 2,16,ModelResultImpl,5,566,10267,10445100,9864,1364,0,523,6468,0,0 | ||
18 | 2,17,ModelResultImpl,5,600,15595,8099800,15147,1341,0,624,11381,0,0 | ||
19 | 2,18,ModelResultImpl,5,561,11172,9144100,10776,1167,0,487,7740,0,0 | ||
20 | 2,19,ModelResultImpl,5,548,14818,9372000,14441,1565,0,658,10261,0,0 | ||
21 | 2,20,ModelResultImpl,5,559,17497,9881500,17059,1532,0,651,12811,0,0 | ||
22 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Github/50.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Github/50.csv new file mode 100644 index 00000000..7ed016e0 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Github/50.csv | |||
@@ -0,0 +1,22 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,_Solution0FoundAt,TransformationExecutionTime,TypeAnalysisTime,MetricCalculationTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime | ||
2 | 4,1,ModelResultImpl,11,730,72467,34401400,71866,4026,10,1998,59824,0,0 | ||
3 | 4,2,ModelResultImpl,11,761,67853,11838400,67382,3819,0,1957,55882,0,0 | ||
4 | 4,3,ModelResultImpl,11,734,45541,10393700,45056,3529,0,1779,34849,0,0 | ||
5 | 4,4,ModelResultImpl,11,619,55697,17081600,55167,3617,0,1898,44356,0,0 | ||
6 | 4,5,ModelResultImpl,11,726,64846,29758900,64208,3905,0,2030,52466,0,0 | ||
7 | 4,6,ModelResultImpl,11,712,65893,13089200,65423,3972,0,2029,53618,0,0 | ||
8 | 4,7,ModelResultImpl,11,742,50982,16405400,50469,3638,0,1857,39804,0,0 | ||
9 | 4,8,ModelResultImpl,11,590,50309,15985400,49731,3572,0,1877,39187,0,0 | ||
10 | 4,9,ModelResultImpl,11,761,65533,23499900,65008,3890,0,2000,53225,0,0 | ||
11 | 4,10,ModelResultImpl,11,688,44853,23629200,44348,3255,0,1695,34758,0,0 | ||
12 | 4,11,ModelResultImpl,11,626,59167,38070600,58611,3942,0,1864,47290,0,0 | ||
13 | 4,12,ModelResultImpl,11,642,66860,18966400,66364,3732,0,1987,54960,0,0 | ||
14 | 4,13,ModelResultImpl,11,622,65317,12053900,64842,3176,0,1633,55177,0,1 | ||
15 | 4,14,ModelResultImpl,11,687,45481,79001300,44944,3485,0,1661,35036,0,0 | ||
16 | 4,15,ModelResultImpl,11,881,74988,14027700,74444,4150,0,2191,61881,0,0 | ||
17 | 4,16,ModelResultImpl,11,691,56609,11960900,56125,3776,0,1943,45015,0,0 | ||
18 | 4,17,ModelResultImpl,11,631,103459,26319900,102823,4720,0,2390,88314,0,1 | ||
19 | 4,18,ModelResultImpl,11,2263,61989,12371400,61101,3751,0,1902,50076,0,0 | ||
20 | 4,19,ModelResultImpl,11,575,75135,19514700,74621,4810,0,2552,60068,0,1 | ||
21 | 4,20,ModelResultImpl,11,1069,94884,21924000,94062,5623,0,3121,77010,0,1 | ||
22 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Github/80.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Github/80.csv new file mode 100644 index 00000000..257b7ddb --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Github/80.csv | |||
@@ -0,0 +1,22 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,TransformationExecutionTime,TypeAnalysisTime,MetricCalculationTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime,_Solution0FoundAt | ||
2 | 5,1,InsuficientResourcesResultImpl,8,1163,301236,6700,11611,7,8030,261757,0,0, | ||
3 | 5,2,ModelResultImpl,8,1125,214262,41193500,10675,0,7433,179009,0,1,213284 | ||
4 | 5,3,InsuficientResourcesResultImpl,8,1097,301100,1400,10110,0,6697,266325,0,0, | ||
5 | 5,4,ModelResultImpl,8,1202,243793,34411800,11329,0,7710,206562,0,0,242815 | ||
6 | 5,5,ModelResultImpl,8,1130,266540,38153400,12190,0,8455,225879,0,1,265458 | ||
7 | 5,6,ModelResultImpl,8,1136,244077,43614700,10925,0,7347,207698,0,0,243138 | ||
8 | 5,7,ModelResultImpl,8,1263,270364,44901700,10715,0,7520,233664,0,0,269383 | ||
9 | 5,8,ModelResultImpl,8,1062,228653,36320200,11042,0,7673,191829,0,0,227652 | ||
10 | 5,9,ModelResultImpl,8,1060,284484,38198200,12105,0,8129,244192,0,1,283520 | ||
11 | 5,10,ModelResultImpl,8,1087,245757,38745600,10898,0,7835,208781,0,0,244833 | ||
12 | 5,11,InsuficientResourcesResultImpl,8,1003,302539,1700,9666,0,6798,267961,0,0, | ||
13 | 5,12,ModelResultImpl,8,657,143583,35565200,6948,0,4448,120639,0,0,142951 | ||
14 | 5,13,ModelResultImpl,8,1061,292041,44607000,12010,0,8656,250579,0,1,291061 | ||
15 | 5,14,ModelResultImpl,8,1034,255307,37454100,11242,0,7789,217397,0,0,254393 | ||
16 | 5,15,InsuficientResourcesResultImpl,8,1194,300839,1500,9997,0,7300,265245,0,0, | ||
17 | 5,16,ModelResultImpl,8,1070,274358,38762800,11730,0,7864,235472,0,1,273383 | ||
18 | 5,17,ModelResultImpl,8,1099,259378,84148300,11340,0,7784,221204,0,0,258553 | ||
19 | 5,18,ModelResultImpl,8,1084,255262,38991800,11989,0,7795,215829,0,1,254328 | ||
20 | 5,19,ModelResultImpl,8,1111,293515,47026100,12037,0,8609,252172,0,1,292504 | ||
21 | 5,20,ModelResultImpl,8,1106,278558,32886300,12080,0,8000,237985,0,1,277745 | ||
22 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Github/warmup.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Github/warmup.csv new file mode 100644 index 00000000..989c2411 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Github/warmup.csv | |||
@@ -0,0 +1,7 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,_Solution0FoundAt,TransformationExecutionTime,TypeAnalysisTime,MetricCalculationTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime | ||
2 | 1,1,ModelResultImpl,1483,2558,3108,60043900,1609,456,424,87,272,0,1 | ||
3 | 1,2,ModelResultImpl,1483,1126,1487,9020100,931,292,1,60,256,0,1 | ||
4 | 1,3,ModelResultImpl,1483,927,1424,9739900,827,263,0,51,217,0,0 | ||
5 | 1,4,ModelResultImpl,1483,886,1069,8613600,495,208,1,25,97,0,0 | ||
6 | 1,5,ModelResultImpl,1483,768,1268,9369800,856,262,0,35,223,0,0 | ||
7 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/100.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/100.csv new file mode 100644 index 00000000..a2628ad1 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/100.csv | |||
@@ -0,0 +1,22 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,_Solution0FoundAt,TransformationExecutionTime,TypeAnalysisTime,MetricCalculationTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime | ||
2 | 5,1,ModelResultImpl,12,865,91787,64960700,91078,17340,6,2469,61497,0,3 | ||
3 | 5,2,ModelResultImpl,12,956,118267,65616400,117553,16353,0,2810,85627,0,1 | ||
4 | 5,3,ModelResultImpl,12,900,116093,69616600,115364,17281,0,2800,82376,0,0 | ||
5 | 5,4,ModelResultImpl,12,907,96027,78796000,95287,19233,0,2643,63089,0,0 | ||
6 | 5,5,ModelResultImpl,12,961,133615,61595600,132840,17098,0,2970,99041,0,0 | ||
7 | 5,6,ModelResultImpl,12,917,120673,61159000,119930,18320,0,2889,85737,0,0 | ||
8 | 5,7,ModelResultImpl,12,941,101988,69310400,101183,18258,0,2694,69616,0,0 | ||
9 | 5,8,ModelResultImpl,12,910,117121,58731900,116373,16751,0,2954,83990,0,1 | ||
10 | 5,9,ModelResultImpl,12,939,98738,60204200,97988,15671,0,2643,69051,0,0 | ||
11 | 5,10,ModelResultImpl,12,907,109216,62901700,108450,18563,0,2855,74361,0,0 | ||
12 | 5,11,ModelResultImpl,12,989,101313,70288400,100570,19059,0,2653,68951,0,0 | ||
13 | 5,12,ModelResultImpl,12,847,110986,71960700,110229,20031,0,2484,77376,0,0 | ||
14 | 5,13,ModelResultImpl,12,924,99847,65101400,99083,18276,0,2732,67006,0,0 | ||
15 | 5,14,ModelResultImpl,12,908,113484,61073000,112675,20588,0,2760,77595,0,0 | ||
16 | 5,15,ModelResultImpl,12,859,107243,118083900,106494,16814,0,2826,74774,0,0 | ||
17 | 5,16,ModelResultImpl,12,896,101005,60113300,100198,16591,0,2670,70482,0,0 | ||
18 | 5,17,ModelResultImpl,12,909,150888,90178000,150032,18804,0,3644,112370,0,2 | ||
19 | 5,18,ModelResultImpl,12,1988,224882,111051700,223272,35288,0,5245,160716,0,2 | ||
20 | 5,19,ModelResultImpl,12,1710,180301,103042800,178853,31026,0,4421,125609,0,1 | ||
21 | 5,20,ModelResultImpl,12,2294,236789,120962500,234776,34043,0,4964,172403,0,1 | ||
22 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/120.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/120.csv new file mode 100644 index 00000000..03ee084b --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/120.csv | |||
@@ -0,0 +1,22 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,_Solution0FoundAt,TransformationExecutionTime,TypeAnalysisTime,MetricCalculationTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime | ||
2 | 2,1,ModelResultImpl,11,1049,149253,202983100,148329,21687,8,3820,108113,0,4 | ||
3 | 2,2,ModelResultImpl,11,1131,173214,111640800,172206,24930,0,3926,128120,0,1 | ||
4 | 2,3,ModelResultImpl,11,1027,157782,120804000,157006,19292,0,3948,119012,0,1 | ||
5 | 2,4,ModelResultImpl,11,1063,169577,126195200,168692,22819,0,4027,126643,0,1 | ||
6 | 2,5,ModelResultImpl,11,984,164004,93016300,163235,23449,0,3830,121474,0,1 | ||
7 | 2,6,ModelResultImpl,11,1005,146874,94077300,146111,20382,0,3734,108542,0,1 | ||
8 | 2,7,ModelResultImpl,11,904,148997,92734800,148172,19769,0,3763,111141,0,1 | ||
9 | 2,8,ModelResultImpl,11,911,145947,99103000,145197,21375,0,3757,106317,0,1 | ||
10 | 2,9,ModelResultImpl,11,911,154022,91420700,153225,21687,0,3781,113566,0,1 | ||
11 | 2,10,ModelResultImpl,11,994,144253,105623000,143479,19514,0,3736,106547,0,1 | ||
12 | 2,11,ModelResultImpl,11,943,146057,85565700,145235,20168,0,3830,107696,0,1 | ||
13 | 2,12,ModelResultImpl,11,933,153728,93877000,152956,18549,0,4136,115265,0,0 | ||
14 | 2,13,ModelResultImpl,11,989,135785,101796800,135043,19930,0,3590,98576,0,1 | ||
15 | 2,14,ModelResultImpl,11,942,158905,115031700,158150,21663,0,3796,118239,0,0 | ||
16 | 2,15,ModelResultImpl,11,897,138727,116266900,137918,19116,1,3652,102641,0,0 | ||
17 | 2,16,ModelResultImpl,11,851,145221,95232500,144453,18026,0,3913,108945,0,0 | ||
18 | 2,17,ModelResultImpl,11,928,154148,88476300,153396,21053,0,3827,113763,0,0 | ||
19 | 2,18,ModelResultImpl,11,859,166408,95546600,165666,22619,0,3922,123707,0,1 | ||
20 | 2,19,ModelResultImpl,11,909,136564,91353600,135766,17841,0,3665,101835,0,0 | ||
21 | 2,20,ModelResultImpl,11,873,147664,91153300,146866,17705,0,3874,111410,0,0 | ||
22 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/140.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/140.csv new file mode 100644 index 00000000..293f51a5 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/140.csv | |||
@@ -0,0 +1,22 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,Solution1FoundAt,ExplorationInitializationTime,TransformationExecutionTime,TypeAnalysisTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime,ActivationSelectionTime,NumericalSolverSumTime,NumericalSolverProblemFormingTime,NumericalSolverSolvingTime,NumericalSolverInterpretingSolution,NumericalSolverCachingTime,NumericalSolverCallNumber,NumericalSolverCachedAnswerNumber | ||
2 | 2,1,ModelResultImpl,49,948,55965,249,54293,1336,6134,11,17708,0,3,2,0,0,0,0,0,0,0 | ||
3 | 2,2,ModelResultImpl,49,638,65106,310,63703,837,7067,0,20870,0,3,2,0,0,0,0,0,0,0 | ||
4 | 2,3,ModelResultImpl,49,1929,69666,268,67267,1926,7537,0,20708,0,1,0,0,0,0,0,0,0,0 | ||
5 | 2,4,ModelResultImpl,49,617,67091,318,65452,1078,8304,0,18694,0,1,0,0,0,0,0,0,0,0 | ||
6 | 2,5,ModelResultImpl,49,1068,75850,145,74083,1480,8386,0,19637,0,1,0,0,0,0,0,0,0,0 | ||
7 | 2,6,ModelResultImpl,49,785,65738,301,63408,1430,7695,0,16497,0,3,0,0,0,0,0,0,0,0 | ||
8 | 2,7,ModelResultImpl,49,1055,85078,387,82888,1365,9313,0,22220,0,1,0,0,0,0,0,0,0,0 | ||
9 | 2,8,ModelResultImpl,49,1189,63131,136,61246,1586,7804,0,17380,0,2,1,0,0,0,0,0,0,0 | ||
10 | 2,9,ModelResultImpl,49,530,60098,248,58756,657,6900,0,18737,0,2,0,0,0,0,0,0,0,0 | ||
11 | 2,10,ModelResultImpl,49,706,58634,247,56728,1023,6237,0,18909,0,1,0,0,0,0,0,0,0,0 | ||
12 | 2,11,ModelResultImpl,49,683,55087,174,53903,749,5838,0,17665,0,1,0,0,0,0,0,0,0,0 | ||
13 | 2,12,ModelResultImpl,49,533,69793,206,68720,625,7827,0,22340,0,1,0,0,0,0,0,0,0,0 | ||
14 | 2,13,ModelResultImpl,49,625,58198,256,56830,781,6177,0,20134,0,2,0,0,0,0,0,0,0,0 | ||
15 | 2,14,ModelResultImpl,49,555,66046,250,64950,664,7385,0,15860,0,0,0,0,0,0,0,0,0,0 | ||
16 | 2,15,ModelResultImpl,49,586,96452,367,92042,1007,12651,0,23019,0,6,0,0,0,0,0,0,0,0 | ||
17 | 2,16,ModelResultImpl,49,1523,72460,210,70549,1181,9123,1,21222,0,2,0,0,0,0,0,0,0,0 | ||
18 | 2,17,ModelResultImpl,49,734,74551,417,72763,842,8117,0,21326,0,3,0,0,0,0,0,0,0,0 | ||
19 | 2,18,ModelResultImpl,49,1282,75020,208,72887,1459,8671,0,22596,0,3,1,0,0,0,0,0,0,0 | ||
20 | 2,19,ModelResultImpl,49,871,70125,286,68362,947,8755,0,18829,0,1,0,0,0,0,0,0,0,0 | ||
21 | 2,20,ModelResultImpl,49,633,65564,149,64398,816,7912,0,15815,0,0,0,0,0,0,0,0,0,0 | ||
22 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/30.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/30.csv new file mode 100644 index 00000000..ec0afb94 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/30.csv | |||
@@ -0,0 +1,22 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,_Solution0FoundAt,TransformationExecutionTime,TypeAnalysisTime,MetricCalculationTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime | ||
2 | 2,1,ModelResultImpl,37,1267,42409,28515700,41220,5066,11,614,29095,0,1 | ||
3 | 2,2,ModelResultImpl,37,1919,14164,22580700,12518,3986,2,344,5463,0,2 | ||
4 | 2,3,ModelResultImpl,37,1916,41597,31164300,40290,5050,1,614,28209,0,1 | ||
5 | 2,4,ModelResultImpl,37,2023,41518,20216100,40199,5825,0,549,27332,0,1 | ||
6 | 2,5,ModelResultImpl,37,2052,21630,32282400,20128,4713,0,456,10817,0,1 | ||
7 | 2,6,ModelResultImpl,37,2070,40984,24514000,39602,5997,0,528,26649,0,2 | ||
8 | 2,7,ModelResultImpl,37,2249,40677,22780300,39309,4977,0,600,27410,0,1 | ||
9 | 2,8,ModelResultImpl,37,1887,34102,17897400,32571,5103,0,524,21184,0,1 | ||
10 | 2,9,ModelResultImpl,37,1826,11685,12854100,10430,3316,0,298,4382,0,1 | ||
11 | 2,10,ModelResultImpl,37,1795,20933,19823700,19703,4431,0,435,10642,0,1 | ||
12 | 2,11,ModelResultImpl,37,1849,33111,18648500,31757,5743,0,375,20404,0,1 | ||
13 | 2,12,ModelResultImpl,37,1829,36099,18177300,34869,5689,0,525,22643,0,1 | ||
14 | 2,13,ModelResultImpl,37,1875,36431,20140100,35116,5371,0,500,23462,0,1 | ||
15 | 2,14,ModelResultImpl,37,1796,32322,24371800,31185,4939,0,493,20307,0,1 | ||
16 | 2,15,ModelResultImpl,37,1961,43764,24819800,42470,6248,0,593,27586,0,1 | ||
17 | 2,16,ModelResultImpl,37,1737,16231,16437300,14995,3805,0,388,7679,0,0 | ||
18 | 2,17,ModelResultImpl,37,1685,14223,36835700,12964,3783,0,338,6108,0,1 | ||
19 | 2,18,ModelResultImpl,37,1910,30550,21296200,29359,4813,0,517,18691,0,1 | ||
20 | 2,19,ModelResultImpl,37,1622,30723,17831800,29572,5299,0,560,18198,0,1 | ||
21 | 2,20,ModelResultImpl,37,1915,15410,15827800,14223,3856,0,353,7093,0,1 | ||
22 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/50.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/50.csv new file mode 100644 index 00000000..80122e3d --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/50.csv | |||
@@ -0,0 +1,22 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,_Solution0FoundAt,TransformationExecutionTime,TypeAnalysisTime,MetricCalculationTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime | ||
2 | 3,1,ModelResultImpl,16,1695,34619,47365200,33379,7951,23,1005,19203,0,0 | ||
3 | 3,2,ModelResultImpl,16,1952,66272,40194500,65033,10142,0,1381,45195,0,1 | ||
4 | 3,3,ModelResultImpl,16,1882,50684,57411900,49392,9412,0,1181,31167,0,2 | ||
5 | 3,4,ModelResultImpl,16,1835,52174,29585500,50841,9443,0,1265,32497,0,1 | ||
6 | 3,5,ModelResultImpl,16,1817,37087,24158900,35809,8374,0,1106,20620,0,1 | ||
7 | 3,6,ModelResultImpl,16,1822,96082,35393500,94837,10814,0,1314,71854,0,1 | ||
8 | 3,7,ModelResultImpl,16,1845,65727,37723300,64268,10857,0,1392,42620,0,1 | ||
9 | 3,8,ModelResultImpl,16,1715,36063,56419600,34810,8195,0,1065,19928,0,2 | ||
10 | 3,9,ModelResultImpl,16,1814,53418,68855200,52040,9364,0,1248,33127,0,1 | ||
11 | 3,10,ModelResultImpl,16,1688,146193,34004300,144953,23393,0,2677,96521,0,2 | ||
12 | 3,11,ModelResultImpl,16,1887,56839,38787000,55478,11029,0,1309,34905,0,1 | ||
13 | 3,12,ModelResultImpl,16,1852,43970,32684100,42779,10114,0,1121,25234,0,1 | ||
14 | 3,13,ModelResultImpl,16,1766,68078,29662000,66581,12700,0,1445,42619,0,1 | ||
15 | 3,14,ModelResultImpl,16,2033,137006,39601900,135475,10041,0,1736,110352,0,1 | ||
16 | 3,15,ModelResultImpl,16,1792,36929,30425200,35576,8499,0,1112,19855,0,1 | ||
17 | 3,16,ModelResultImpl,16,1861,79893,19417500,78581,10278,0,1253,56995,0,0 | ||
18 | 3,17,ModelResultImpl,16,1651,34149,32888300,33294,8334,0,1016,18514,0,1 | ||
19 | 3,18,ModelResultImpl,16,1799,51965,35639300,50624,11417,0,1355,29874,0,0 | ||
20 | 3,19,ModelResultImpl,16,2032,46469,44756500,45006,10308,0,1323,25809,0,1 | ||
21 | 3,20,ModelResultImpl,16,1839,75448,32863500,74051,11465,0,1499,50558,0,1 | ||
22 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/80.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/80.csv new file mode 100644 index 00000000..ae7f7ca1 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/80.csv | |||
@@ -0,0 +1,22 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,_Solution0FoundAt,TransformationExecutionTime,TypeAnalysisTime,MetricCalculationTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime | ||
2 | 4,1,ModelResultImpl,20,2105,122193,47975800,120819,22172,21,3111,81933,0,0 | ||
3 | 4,2,ModelResultImpl,20,948,71430,38366700,70718,10799,0,1803,49089,0,0 | ||
4 | 4,3,ModelResultImpl,20,907,71011,42371700,70320,12614,0,1751,47228,0,0 | ||
5 | 4,4,ModelResultImpl,20,888,57574,43253600,56870,10097,0,1721,37819,0,0 | ||
6 | 4,5,ModelResultImpl,20,918,50961,39099900,50235,9718,0,1667,31881,0,0 | ||
7 | 4,6,ModelResultImpl,20,929,54262,48948700,53554,10095,0,1701,35294,0,0 | ||
8 | 4,7,ModelResultImpl,20,914,69271,42306400,68596,12610,0,1788,45775,0,0 | ||
9 | 4,8,ModelResultImpl,20,887,58304,42858800,57604,10861,0,1641,37653,0,0 | ||
10 | 4,9,ModelResultImpl,20,923,61436,40388600,60755,11478,0,1812,38983,0,0 | ||
11 | 4,10,ModelResultImpl,20,950,51010,44099800,50294,11361,0,1496,30951,0,1 | ||
12 | 4,11,ModelResultImpl,20,879,56153,40079800,55455,11776,0,1587,35227,0,0 | ||
13 | 4,12,ModelResultImpl,20,939,55164,41385200,54450,9786,0,1675,35778,0,0 | ||
14 | 4,13,ModelResultImpl,20,947,59424,49539400,58684,10955,0,1776,38126,0,0 | ||
15 | 4,14,ModelResultImpl,20,973,61843,36537600,61086,10883,0,1685,40830,0,0 | ||
16 | 4,15,ModelResultImpl,20,867,54362,38663100,53666,10015,0,1611,35234,0,0 | ||
17 | 4,16,ModelResultImpl,20,915,108777,49507000,108033,20987,0,2938,71959,0,1 | ||
18 | 4,17,ModelResultImpl,20,922,55218,41448600,54548,9665,0,1657,36387,0,0 | ||
19 | 4,18,ModelResultImpl,20,921,57210,60622400,56526,10429,0,1747,36425,0,0 | ||
20 | 4,19,ModelResultImpl,20,911,70900,47211300,70230,11669,0,1714,48547,0,0 | ||
21 | 4,20,ModelResultImpl,20,887,74363,36468500,73658,12552,0,1800,50208,0,0 | ||
22 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/warmup.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/warmup.csv new file mode 100644 index 00000000..51fae097 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/Yakindu/warmup.csv | |||
@@ -0,0 +1,3 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,Solution1FoundAt,ExplorationInitializationTime,TransformationExecutionTime,TypeAnalysisTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime,ActivationSelectionTime,NumericalSolverSumTime,NumericalSolverProblemFormingTime,NumericalSolverSolvingTime,NumericalSolverInterpretingSolution,NumericalSolverCachingTime,NumericalSolverCallNumber,NumericalSolverCachedAnswerNumber | ||
2 | 1,1,ModelResultImpl,1214,3343,41674,560,39465,2089,5088,301,10507,0,16,2,0,0,0,0,0,0,0 | ||
3 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/file.csv b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/file.csv new file mode 100644 index 00000000..c3c77053 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/statistics/file.csv | |||
@@ -0,0 +1,4 @@ | |||
1 | Task,Run,Result,Domain to logic transformation time,Logic to solver transformation time,Solver time,Postprocessing time,TransformationExecutionTime,TypeAnalysisTime,MetricCalculationTime,StateCoderTime,StateCoderFailCount,SolutionCopyTime,_Solution0FoundAt | ||
2 | 1,1,InsuficientResourcesResultImpl,453,3378,5255,7500,1236,131,79,245,0,0, | ||
3 | 1,2,ModelResultImpl,453,1965,4628,31696400,1014,3,58,307,0,1,1957 | ||
4 | |||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduGeneration.vsconfig b/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduGeneration.vsconfig new file mode 100644 index 00000000..56921884 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduGeneration.vsconfig | |||
@@ -0,0 +1,106 @@ | |||
1 | import epackage "../../../Domains/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/model/yakindu_simplified.ecore" | ||
2 | import viatra "../../../Domains/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/queries/hu/bme/mit/inf/dslreasoner/partialsnapshot_mavo/yakindu/patterns.vql" | ||
3 | |||
4 | generate { | ||
5 | metamodel = { package yakindumm excluding { Synchronization}} | ||
6 | constraints = { package hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu } | ||
7 | partial-model = { "inputs/start.xmi"} | ||
8 | |||
9 | solver = ViatraSolver | ||
10 | |||
11 | scope = { | ||
12 | #node = 100 | ||
13 | } | ||
14 | |||
15 | number = 1 | ||
16 | runs = 1 | ||
17 | config = { | ||
18 | log-level = none, | ||
19 | "optional-wf" = "false", | ||
20 | "realistic-guidance" = "Composite", | ||
21 | "allow-must-violations" = "false", | ||
22 | "domain" = "Yakindumm" | ||
23 | } | ||
24 | |||
25 | statistics = "statistics/Yakindu/warmup.csv" //give different set up different filenames | ||
26 | debug = "debug" | ||
27 | output = "output/Yakindu/run_time/" | ||
28 | } | ||
29 | |||
30 | // generate { | ||
31 | // metamodel = { package yakindumm excluding { Synchronization}} | ||
32 | // constraints = { package hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu } | ||
33 | // partial-model = { "inputs/start.xmi"} | ||
34 | |||
35 | // solver = ViatraSolver | ||
36 | |||
37 | // scope = { | ||
38 | // #node = 140 | ||
39 | // } | ||
40 | |||
41 | // number = 1 | ||
42 | // runs = 20 | ||
43 | // config = { | ||
44 | // log-level = none, | ||
45 | // "optional-wf" = "false", | ||
46 | // "realistic-guidance" = "Composite", | ||
47 | // "allow-must-violations" = "false", | ||
48 | // "domain" = "Yakindumm" | ||
49 | // } | ||
50 | |||
51 | // statistics = "statistics/Yakindu/140.csv" //give different set up different filenames | ||
52 | // debug = "debug" | ||
53 | // output = "output/Yakindu/run_time/" | ||
54 | // } | ||
55 | |||
56 | // generate { | ||
57 | // metamodel = { package yakindumm excluding { Synchronization}} | ||
58 | // constraints = { package hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu } | ||
59 | // partial-model = { "inputs/start.xmi"} | ||
60 | |||
61 | // solver = ViatraSolver | ||
62 | |||
63 | // scope = { | ||
64 | // #node = 160 | ||
65 | // } | ||
66 | |||
67 | // number = 1 | ||
68 | // runs = 20 | ||
69 | // config = { | ||
70 | // log-level = none, | ||
71 | // "optional-wf" = "false", | ||
72 | // "realistic-guidance" = "Composite", | ||
73 | // "allow-must-violations" = "false", | ||
74 | // "domain" = "Yakindumm" | ||
75 | // } | ||
76 | |||
77 | // statistics = "statistics/Yakindu/160.csv" //give different set up different filenames | ||
78 | // debug = "debug" | ||
79 | // output = "output/Yakindu/run_time/" | ||
80 | // } | ||
81 | |||
82 | // generate { | ||
83 | // metamodel = { package yakindumm excluding { Synchronization}} | ||
84 | // constraints = { package hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu } | ||
85 | // partial-model = { "inputs/start.xmi"} | ||
86 | |||
87 | // solver = ViatraSolver | ||
88 | |||
89 | // scope = { | ||
90 | // #node = 180 | ||
91 | // } | ||
92 | |||
93 | // number = 1 | ||
94 | // runs = 20 | ||
95 | // config = { | ||
96 | // log-level = none, | ||
97 | // "optional-wf" = "false", | ||
98 | // "realistic-guidance" = "Composite", | ||
99 | // "allow-must-violations" = "false", | ||
100 | // "domain" = "Yakindumm" | ||
101 | // } | ||
102 | |||
103 | // statistics = "statistics/Yakindu/180.csv" //give different set up different filenames | ||
104 | // debug = "debug" | ||
105 | // output = "output/Yakindu/run_time/" | ||
106 | // } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/.gitignore b/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/.gitignore new file mode 100644 index 00000000..17126b28 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/yakinduum/.gitignore | |||
@@ -0,0 +1,4 @@ | |||
1 | # ignore everything in this folder except for this folder it self | ||
2 | |||
3 | * | ||
4 | !.gitignore \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.classpath b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.classpath new file mode 100644 index 00000000..c5fe8c25 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.classpath | |||
@@ -0,0 +1,12 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <classpath> | ||
3 | <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> | ||
4 | <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> | ||
5 | <classpathentry kind="src" path="src"/> | ||
6 | <classpathentry kind="src" path="xtend-gen"/> | ||
7 | <classpathentry kind="src" path="constraints"/> | ||
8 | <classpathentry kind="lib" path="C:/Users/chenp/eclipse-workspace/VIATRA-Generator/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/lib/commons-math3-3.6.1.jar"/> | ||
9 | <classpathentry kind="lib" path="C:/Users/chenp/eclipse-workspace/VIATRA-Generator/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/lib/commons-math3-3.6.1-javadoc.jar"/> | ||
10 | <classpathentry kind="lib" path="C:/Users/chenp/eclipse-workspace/VIATRA-Generator/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/lib/weka.jar"/> | ||
11 | <classpathentry kind="output" path="bin"/> | ||
12 | </classpath> | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.gitignore b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.gitignore new file mode 100644 index 00000000..317e68e2 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.gitignore | |||
@@ -0,0 +1,6 @@ | |||
1 | /bin/ | ||
2 | bin/ | ||
3 | testInput/ | ||
4 | testOutput/ | ||
5 | xtend-gen/ | ||
6 | *.csv \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.project b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.project new file mode 100644 index 00000000..5154dea0 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.project | |||
@@ -0,0 +1,34 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <projectDescription> | ||
3 | <name>ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator</name> | ||
4 | <comment></comment> | ||
5 | <projects> | ||
6 | </projects> | ||
7 | <buildSpec> | ||
8 | <buildCommand> | ||
9 | <name>org.eclipse.xtext.ui.shared.xtextBuilder</name> | ||
10 | <arguments> | ||
11 | </arguments> | ||
12 | </buildCommand> | ||
13 | <buildCommand> | ||
14 | <name>org.eclipse.jdt.core.javabuilder</name> | ||
15 | <arguments> | ||
16 | </arguments> | ||
17 | </buildCommand> | ||
18 | <buildCommand> | ||
19 | <name>org.eclipse.pde.ManifestBuilder</name> | ||
20 | <arguments> | ||
21 | </arguments> | ||
22 | </buildCommand> | ||
23 | <buildCommand> | ||
24 | <name>org.eclipse.pde.SchemaBuilder</name> | ||
25 | <arguments> | ||
26 | </arguments> | ||
27 | </buildCommand> | ||
28 | </buildSpec> | ||
29 | <natures> | ||
30 | <nature>org.eclipse.pde.PluginNature</nature> | ||
31 | <nature>org.eclipse.jdt.core.javanature</nature> | ||
32 | <nature>org.eclipse.xtext.ui.shared.xtextNature</nature> | ||
33 | </natures> | ||
34 | </projectDescription> | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.settings/org.eclipse.jdt.core.prefs b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..0c68a61d --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.settings/org.eclipse.jdt.core.prefs | |||
@@ -0,0 +1,7 @@ | |||
1 | eclipse.preferences.version=1 | ||
2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled | ||
3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 | ||
4 | org.eclipse.jdt.core.compiler.compliance=1.8 | ||
5 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error | ||
6 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error | ||
7 | org.eclipse.jdt.core.compiler.source=1.8 | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.settings/org.eclipse.wst.validation.prefs b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 00000000..b0a80408 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.settings/org.eclipse.wst.validation.prefs | |||
@@ -0,0 +1,10 @@ | |||
1 | DELEGATES_PREFERENCE=delegateValidatorList | ||
2 | USER_BUILD_PREFERENCE=enabledBuildValidatorList | ||
3 | USER_MANUAL_PREFERENCE=enabledManualValidatorList | ||
4 | USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.2.701.v201810290944 | ||
5 | eclipse.preferences.version=1 | ||
6 | override=true | ||
7 | suspend=false | ||
8 | vals/org.eclipse.wst.xml.core.xml/global=FF03 | ||
9 | vals/org.eclipse.wst.xsd.core.xsd/global=FF02162org.eclipse.wst.xsd.core.internal.validation.eclipse.Validator | ||
10 | vf.version=3 | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/Inputs/.gitignore b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/Inputs/.gitignore new file mode 100644 index 00000000..17126b28 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/Inputs/.gitignore | |||
@@ -0,0 +1,4 @@ | |||
1 | # ignore everything in this folder except for this folder it self | ||
2 | |||
3 | * | ||
4 | !.gitignore \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/META-INF/MANIFEST.MF b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/META-INF/MANIFEST.MF new file mode 100644 index 00000000..7c4f553d --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/META-INF/MANIFEST.MF | |||
@@ -0,0 +1,30 @@ | |||
1 | Manifest-Version: 1.0 | ||
2 | Bundle-ManifestVersion: 2 | ||
3 | Bundle-Name: Graph_metrics_calculation | ||
4 | Bundle-SymbolicName: ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator | ||
5 | Bundle-Version: 1.0.0.qualifier | ||
6 | Automatic-Module-Name: graph_metrics_calculation | ||
7 | Bundle-RequiredExecutionEnvironment: JavaSE-1.8 | ||
8 | Require-Bundle: com.google.guava, | ||
9 | org.eclipse.xtext.xbase.lib, | ||
10 | org.eclipse.xtend.lib, | ||
11 | org.eclipse.xtend.lib.macro, | ||
12 | org.eclipse.emf.ecore;bundle-version="2.17.0", | ||
13 | org.eclipse.emf.ecore.xmi;bundle-version="2.15.0", | ||
14 | hu.bme.mit.inf.dslreasoner.viatra2logic;bundle-version="1.0.0", | ||
15 | hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage;bundle-version="1.0.0", | ||
16 | org.eclipse.viatra.dse;bundle-version="0.21.2", | ||
17 | org.eclipse.viatra.query.runtime.rete;bundle-version="2.1.2", | ||
18 | org.eclipse.viatra.addon.validation.core;bundle-version="2.1.2", | ||
19 | org.eclipse.collections;bundle-version="9.2.0", | ||
20 | org.eclipse.viatra.query.runtime.localsearch;bundle-version="2.1.2", | ||
21 | org.apache.log4j;bundle-version="1.2.15", | ||
22 | hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph;bundle-version="1.0.0", | ||
23 | github-graph;bundle-version="0.1.0" | ||
24 | Export-Package: ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app, | ||
25 | ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance, | ||
26 | ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph, | ||
27 | ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io, | ||
28 | ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics, | ||
29 | ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.predictor, | ||
30 | ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.validation | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/build.properties b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/build.properties new file mode 100644 index 00000000..34d2e4d2 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/build.properties | |||
@@ -0,0 +1,4 @@ | |||
1 | source.. = src/ | ||
2 | output.. = bin/ | ||
3 | bin.includes = META-INF/,\ | ||
4 | . | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/LoopInInheritenceConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/LoopInInheritenceConstraint0.java new file mode 100644 index 00000000..c31e59e7 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/LoopInInheritenceConstraint0.java | |||
@@ -0,0 +1,79 @@ | |||
1 | /** | ||
2 | Generated from platform:/resource/SocialNetwork_plugin/queries/queries/Ecore.vql | ||
3 | */ | ||
4 | package constraints.ecore; | ||
5 | |||
6 | import java.util.Arrays; | ||
7 | import java.util.HashMap; | ||
8 | import java.util.HashSet; | ||
9 | import java.util.List; | ||
10 | import java.util.Map; | ||
11 | import java.util.Set; | ||
12 | |||
13 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; | ||
14 | import org.eclipse.viatra.addon.validation.core.api.Severity; | ||
15 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
16 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
17 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | ||
18 | |||
19 | import ecore.LoopInInheritence; | ||
20 | |||
21 | public class LoopInInheritenceConstraint0 implements IConstraintSpecification { | ||
22 | |||
23 | private LoopInInheritence querySpecification; | ||
24 | |||
25 | public LoopInInheritenceConstraint0() { | ||
26 | querySpecification = LoopInInheritence.instance(); | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public String getMessageFormat() { | ||
31 | return "error"; | ||
32 | } | ||
33 | |||
34 | |||
35 | @Override | ||
36 | public Map<String,Object> getKeyObjects(IPatternMatch signature) { | ||
37 | Map<String,Object> map = new HashMap<>(); | ||
38 | map.put("a",signature.get("a")); | ||
39 | return map; | ||
40 | } | ||
41 | |||
42 | @Override | ||
43 | public List<String> getKeyNames() { | ||
44 | List<String> keyNames = Arrays.asList( | ||
45 | "a" | ||
46 | ); | ||
47 | return keyNames; | ||
48 | } | ||
49 | |||
50 | @Override | ||
51 | public List<String> getPropertyNames() { | ||
52 | List<String> propertyNames = Arrays.asList( | ||
53 | ); | ||
54 | return propertyNames; | ||
55 | } | ||
56 | |||
57 | @Override | ||
58 | public Set<List<String>> getSymmetricPropertyNames() { | ||
59 | Set<List<String>> symmetricPropertyNamesSet = new HashSet<>(); | ||
60 | return symmetricPropertyNamesSet; | ||
61 | } | ||
62 | |||
63 | @Override | ||
64 | public Set<List<String>> getSymmetricKeyNames() { | ||
65 | Set<List<String>> symmetricKeyNamesSet = new HashSet<>(); | ||
66 | return symmetricKeyNamesSet; | ||
67 | } | ||
68 | |||
69 | @Override | ||
70 | public Severity getSeverity() { | ||
71 | return Severity.ERROR; | ||
72 | } | ||
73 | |||
74 | @Override | ||
75 | public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() { | ||
76 | return querySpecification; | ||
77 | } | ||
78 | |||
79 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/NonSymmetricOppositeConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/NonSymmetricOppositeConstraint0.java new file mode 100644 index 00000000..29b35552 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/NonSymmetricOppositeConstraint0.java | |||
@@ -0,0 +1,80 @@ | |||
1 | /** | ||
2 | Generated from platform:/resource/SocialNetwork_plugin/queries/queries/Ecore.vql | ||
3 | */ | ||
4 | package constraints.ecore; | ||
5 | |||
6 | import java.util.Arrays; | ||
7 | import java.util.HashMap; | ||
8 | import java.util.HashSet; | ||
9 | import java.util.List; | ||
10 | import java.util.Map; | ||
11 | import java.util.Set; | ||
12 | |||
13 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; | ||
14 | import org.eclipse.viatra.addon.validation.core.api.Severity; | ||
15 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
16 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
17 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | ||
18 | |||
19 | import ecore.NonSymmetricOpposite; | ||
20 | |||
21 | public class NonSymmetricOppositeConstraint0 implements IConstraintSpecification { | ||
22 | |||
23 | private NonSymmetricOpposite querySpecification; | ||
24 | |||
25 | public NonSymmetricOppositeConstraint0() { | ||
26 | querySpecification = NonSymmetricOpposite.instance(); | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public String getMessageFormat() { | ||
31 | return "error"; | ||
32 | } | ||
33 | |||
34 | |||
35 | @Override | ||
36 | public Map<String,Object> getKeyObjects(IPatternMatch signature) { | ||
37 | Map<String,Object> map = new HashMap<>(); | ||
38 | map.put("a",signature.get("a")); | ||
39 | return map; | ||
40 | } | ||
41 | |||
42 | @Override | ||
43 | public List<String> getKeyNames() { | ||
44 | List<String> keyNames = Arrays.asList( | ||
45 | "a" | ||
46 | ); | ||
47 | return keyNames; | ||
48 | } | ||
49 | |||
50 | @Override | ||
51 | public List<String> getPropertyNames() { | ||
52 | List<String> propertyNames = Arrays.asList( | ||
53 | "b" | ||
54 | ); | ||
55 | return propertyNames; | ||
56 | } | ||
57 | |||
58 | @Override | ||
59 | public Set<List<String>> getSymmetricPropertyNames() { | ||
60 | Set<List<String>> symmetricPropertyNamesSet = new HashSet<>(); | ||
61 | return symmetricPropertyNamesSet; | ||
62 | } | ||
63 | |||
64 | @Override | ||
65 | public Set<List<String>> getSymmetricKeyNames() { | ||
66 | Set<List<String>> symmetricKeyNamesSet = new HashSet<>(); | ||
67 | return symmetricKeyNamesSet; | ||
68 | } | ||
69 | |||
70 | @Override | ||
71 | public Severity getSeverity() { | ||
72 | return Severity.ERROR; | ||
73 | } | ||
74 | |||
75 | @Override | ||
76 | public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() { | ||
77 | return querySpecification; | ||
78 | } | ||
79 | |||
80 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/OppositeDifferentClassConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/OppositeDifferentClassConstraint0.java new file mode 100644 index 00000000..9ef4e35e --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/OppositeDifferentClassConstraint0.java | |||
@@ -0,0 +1,79 @@ | |||
1 | /** | ||
2 | Generated from platform:/resource/SocialNetwork_plugin/queries/queries/Ecore.vql | ||
3 | */ | ||
4 | package constraints.ecore; | ||
5 | |||
6 | import java.util.Arrays; | ||
7 | import java.util.HashMap; | ||
8 | import java.util.HashSet; | ||
9 | import java.util.List; | ||
10 | import java.util.Map; | ||
11 | import java.util.Set; | ||
12 | |||
13 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; | ||
14 | import org.eclipse.viatra.addon.validation.core.api.Severity; | ||
15 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
16 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
17 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | ||
18 | |||
19 | import ecore.OppositeDifferentClass; | ||
20 | |||
21 | public class OppositeDifferentClassConstraint0 implements IConstraintSpecification { | ||
22 | |||
23 | private OppositeDifferentClass querySpecification; | ||
24 | |||
25 | public OppositeDifferentClassConstraint0() { | ||
26 | querySpecification = OppositeDifferentClass.instance(); | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public String getMessageFormat() { | ||
31 | return "error"; | ||
32 | } | ||
33 | |||
34 | |||
35 | @Override | ||
36 | public Map<String,Object> getKeyObjects(IPatternMatch signature) { | ||
37 | Map<String,Object> map = new HashMap<>(); | ||
38 | map.put("a",signature.get("a")); | ||
39 | return map; | ||
40 | } | ||
41 | |||
42 | @Override | ||
43 | public List<String> getKeyNames() { | ||
44 | List<String> keyNames = Arrays.asList( | ||
45 | "a" | ||
46 | ); | ||
47 | return keyNames; | ||
48 | } | ||
49 | |||
50 | @Override | ||
51 | public List<String> getPropertyNames() { | ||
52 | List<String> propertyNames = Arrays.asList( | ||
53 | ); | ||
54 | return propertyNames; | ||
55 | } | ||
56 | |||
57 | @Override | ||
58 | public Set<List<String>> getSymmetricPropertyNames() { | ||
59 | Set<List<String>> symmetricPropertyNamesSet = new HashSet<>(); | ||
60 | return symmetricPropertyNamesSet; | ||
61 | } | ||
62 | |||
63 | @Override | ||
64 | public Set<List<String>> getSymmetricKeyNames() { | ||
65 | Set<List<String>> symmetricKeyNamesSet = new HashSet<>(); | ||
66 | return symmetricKeyNamesSet; | ||
67 | } | ||
68 | |||
69 | @Override | ||
70 | public Severity getSeverity() { | ||
71 | return Severity.ERROR; | ||
72 | } | ||
73 | |||
74 | @Override | ||
75 | public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() { | ||
76 | return querySpecification; | ||
77 | } | ||
78 | |||
79 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/ChoiceHasNoIncomingConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/ChoiceHasNoIncomingConstraint0.java new file mode 100644 index 00000000..dbc51a5e --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/ChoiceHasNoIncomingConstraint0.java | |||
@@ -0,0 +1,79 @@ | |||
1 | /** | ||
2 | Generated from platform:/resource/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/queries/hu/bme/mit/inf/dslreasoner/partialsnapshot_mavo/yakindu/patterns.vql | ||
3 | */ | ||
4 | package constraints.yakindumm; | ||
5 | |||
6 | import java.util.HashMap; | ||
7 | import java.util.HashSet; | ||
8 | import java.util.List; | ||
9 | import java.util.Map; | ||
10 | import java.util.Set; | ||
11 | import java.util.Arrays; | ||
12 | |||
13 | import org.eclipse.viatra.addon.validation.core.api.Severity; | ||
14 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; | ||
15 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
16 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
17 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | ||
18 | |||
19 | import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.ChoiceHasNoIncoming; | ||
20 | |||
21 | public class ChoiceHasNoIncomingConstraint0 implements IConstraintSpecification { | ||
22 | |||
23 | private ChoiceHasNoIncoming querySpecification; | ||
24 | |||
25 | public ChoiceHasNoIncomingConstraint0() { | ||
26 | querySpecification = ChoiceHasNoIncoming.instance(); | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public String getMessageFormat() { | ||
31 | return "error"; | ||
32 | } | ||
33 | |||
34 | |||
35 | @Override | ||
36 | public Map<String,Object> getKeyObjects(IPatternMatch signature) { | ||
37 | Map<String,Object> map = new HashMap<>(); | ||
38 | map.put("c",signature.get("c")); | ||
39 | return map; | ||
40 | } | ||
41 | |||
42 | @Override | ||
43 | public List<String> getKeyNames() { | ||
44 | List<String> keyNames = Arrays.asList( | ||
45 | "c" | ||
46 | ); | ||
47 | return keyNames; | ||
48 | } | ||
49 | |||
50 | @Override | ||
51 | public List<String> getPropertyNames() { | ||
52 | List<String> propertyNames = Arrays.asList( | ||
53 | ); | ||
54 | return propertyNames; | ||
55 | } | ||
56 | |||
57 | @Override | ||
58 | public Set<List<String>> getSymmetricPropertyNames() { | ||
59 | Set<List<String>> symmetricPropertyNamesSet = new HashSet<>(); | ||
60 | return symmetricPropertyNamesSet; | ||
61 | } | ||
62 | |||
63 | @Override | ||
64 | public Set<List<String>> getSymmetricKeyNames() { | ||
65 | Set<List<String>> symmetricKeyNamesSet = new HashSet<>(); | ||
66 | return symmetricKeyNamesSet; | ||
67 | } | ||
68 | |||
69 | @Override | ||
70 | public Severity getSeverity() { | ||
71 | return Severity.ERROR; | ||
72 | } | ||
73 | |||
74 | @Override | ||
75 | public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() { | ||
76 | return querySpecification; | ||
77 | } | ||
78 | |||
79 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/ChoiceHasNoOutgoingConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/ChoiceHasNoOutgoingConstraint0.java new file mode 100644 index 00000000..bdddd5b5 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/ChoiceHasNoOutgoingConstraint0.java | |||
@@ -0,0 +1,79 @@ | |||
1 | /** | ||
2 | Generated from platform:/resource/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/queries/hu/bme/mit/inf/dslreasoner/partialsnapshot_mavo/yakindu/patterns.vql | ||
3 | */ | ||
4 | package constraints.yakindumm; | ||
5 | |||
6 | import java.util.HashMap; | ||
7 | import java.util.HashSet; | ||
8 | import java.util.List; | ||
9 | import java.util.Map; | ||
10 | import java.util.Set; | ||
11 | import java.util.Arrays; | ||
12 | |||
13 | import org.eclipse.viatra.addon.validation.core.api.Severity; | ||
14 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; | ||
15 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
16 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
17 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | ||
18 | |||
19 | import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.ChoiceHasNoOutgoing; | ||
20 | |||
21 | public class ChoiceHasNoOutgoingConstraint0 implements IConstraintSpecification { | ||
22 | |||
23 | private ChoiceHasNoOutgoing querySpecification; | ||
24 | |||
25 | public ChoiceHasNoOutgoingConstraint0() { | ||
26 | querySpecification = ChoiceHasNoOutgoing.instance(); | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public String getMessageFormat() { | ||
31 | return "error"; | ||
32 | } | ||
33 | |||
34 | |||
35 | @Override | ||
36 | public Map<String,Object> getKeyObjects(IPatternMatch signature) { | ||
37 | Map<String,Object> map = new HashMap<>(); | ||
38 | map.put("c",signature.get("c")); | ||
39 | return map; | ||
40 | } | ||
41 | |||
42 | @Override | ||
43 | public List<String> getKeyNames() { | ||
44 | List<String> keyNames = Arrays.asList( | ||
45 | "c" | ||
46 | ); | ||
47 | return keyNames; | ||
48 | } | ||
49 | |||
50 | @Override | ||
51 | public List<String> getPropertyNames() { | ||
52 | List<String> propertyNames = Arrays.asList( | ||
53 | ); | ||
54 | return propertyNames; | ||
55 | } | ||
56 | |||
57 | @Override | ||
58 | public Set<List<String>> getSymmetricPropertyNames() { | ||
59 | Set<List<String>> symmetricPropertyNamesSet = new HashSet<>(); | ||
60 | return symmetricPropertyNamesSet; | ||
61 | } | ||
62 | |||
63 | @Override | ||
64 | public Set<List<String>> getSymmetricKeyNames() { | ||
65 | Set<List<String>> symmetricKeyNamesSet = new HashSet<>(); | ||
66 | return symmetricKeyNamesSet; | ||
67 | } | ||
68 | |||
69 | @Override | ||
70 | public Severity getSeverity() { | ||
71 | return Severity.ERROR; | ||
72 | } | ||
73 | |||
74 | @Override | ||
75 | public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() { | ||
76 | return querySpecification; | ||
77 | } | ||
78 | |||
79 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/IncomingToEntryConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/IncomingToEntryConstraint0.java new file mode 100644 index 00000000..b49d9474 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/IncomingToEntryConstraint0.java | |||
@@ -0,0 +1,80 @@ | |||
1 | /** | ||
2 | Generated from platform:/resource/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/queries/hu/bme/mit/inf/dslreasoner/partialsnapshot_mavo/yakindu/patterns.vql | ||
3 | */ | ||
4 | package constraints.yakindumm; | ||
5 | |||
6 | import java.util.HashMap; | ||
7 | import java.util.HashSet; | ||
8 | import java.util.List; | ||
9 | import java.util.Map; | ||
10 | import java.util.Set; | ||
11 | import java.util.Arrays; | ||
12 | |||
13 | import org.eclipse.viatra.addon.validation.core.api.Severity; | ||
14 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; | ||
15 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
16 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
17 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | ||
18 | |||
19 | import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.IncomingToEntry; | ||
20 | |||
21 | public class IncomingToEntryConstraint0 implements IConstraintSpecification { | ||
22 | |||
23 | private IncomingToEntry querySpecification; | ||
24 | |||
25 | public IncomingToEntryConstraint0() { | ||
26 | querySpecification = IncomingToEntry.instance(); | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public String getMessageFormat() { | ||
31 | return "error"; | ||
32 | } | ||
33 | |||
34 | |||
35 | @Override | ||
36 | public Map<String,Object> getKeyObjects(IPatternMatch signature) { | ||
37 | Map<String,Object> map = new HashMap<>(); | ||
38 | map.put("e",signature.get("e")); | ||
39 | return map; | ||
40 | } | ||
41 | |||
42 | @Override | ||
43 | public List<String> getKeyNames() { | ||
44 | List<String> keyNames = Arrays.asList( | ||
45 | "e" | ||
46 | ); | ||
47 | return keyNames; | ||
48 | } | ||
49 | |||
50 | @Override | ||
51 | public List<String> getPropertyNames() { | ||
52 | List<String> propertyNames = Arrays.asList( | ||
53 | "t" | ||
54 | ); | ||
55 | return propertyNames; | ||
56 | } | ||
57 | |||
58 | @Override | ||
59 | public Set<List<String>> getSymmetricPropertyNames() { | ||
60 | Set<List<String>> symmetricPropertyNamesSet = new HashSet<>(); | ||
61 | return symmetricPropertyNamesSet; | ||
62 | } | ||
63 | |||
64 | @Override | ||
65 | public Set<List<String>> getSymmetricKeyNames() { | ||
66 | Set<List<String>> symmetricKeyNamesSet = new HashSet<>(); | ||
67 | return symmetricKeyNamesSet; | ||
68 | } | ||
69 | |||
70 | @Override | ||
71 | public Severity getSeverity() { | ||
72 | return Severity.ERROR; | ||
73 | } | ||
74 | |||
75 | @Override | ||
76 | public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() { | ||
77 | return querySpecification; | ||
78 | } | ||
79 | |||
80 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/MultipleEntryInRegionConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/MultipleEntryInRegionConstraint0.java new file mode 100644 index 00000000..535e7eee --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/MultipleEntryInRegionConstraint0.java | |||
@@ -0,0 +1,79 @@ | |||
1 | /** | ||
2 | Generated from platform:/resource/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/queries/hu/bme/mit/inf/dslreasoner/partialsnapshot_mavo/yakindu/patterns.vql | ||
3 | */ | ||
4 | package constraints.yakindumm; | ||
5 | |||
6 | import java.util.HashMap; | ||
7 | import java.util.HashSet; | ||
8 | import java.util.List; | ||
9 | import java.util.Map; | ||
10 | import java.util.Set; | ||
11 | import java.util.Arrays; | ||
12 | |||
13 | import org.eclipse.viatra.addon.validation.core.api.Severity; | ||
14 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; | ||
15 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
16 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
17 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | ||
18 | |||
19 | import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.MultipleEntryInRegion; | ||
20 | |||
21 | public class MultipleEntryInRegionConstraint0 implements IConstraintSpecification { | ||
22 | |||
23 | private MultipleEntryInRegion querySpecification; | ||
24 | |||
25 | public MultipleEntryInRegionConstraint0() { | ||
26 | querySpecification = MultipleEntryInRegion.instance(); | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public String getMessageFormat() { | ||
31 | return "error"; | ||
32 | } | ||
33 | |||
34 | |||
35 | @Override | ||
36 | public Map<String,Object> getKeyObjects(IPatternMatch signature) { | ||
37 | Map<String,Object> map = new HashMap<>(); | ||
38 | map.put("r",signature.get("r")); | ||
39 | return map; | ||
40 | } | ||
41 | |||
42 | @Override | ||
43 | public List<String> getKeyNames() { | ||
44 | List<String> keyNames = Arrays.asList( | ||
45 | "r" | ||
46 | ); | ||
47 | return keyNames; | ||
48 | } | ||
49 | |||
50 | @Override | ||
51 | public List<String> getPropertyNames() { | ||
52 | List<String> propertyNames = Arrays.asList( | ||
53 | ); | ||
54 | return propertyNames; | ||
55 | } | ||
56 | |||
57 | @Override | ||
58 | public Set<List<String>> getSymmetricPropertyNames() { | ||
59 | Set<List<String>> symmetricPropertyNamesSet = new HashSet<>(); | ||
60 | return symmetricPropertyNamesSet; | ||
61 | } | ||
62 | |||
63 | @Override | ||
64 | public Set<List<String>> getSymmetricKeyNames() { | ||
65 | Set<List<String>> symmetricKeyNamesSet = new HashSet<>(); | ||
66 | return symmetricKeyNamesSet; | ||
67 | } | ||
68 | |||
69 | @Override | ||
70 | public Severity getSeverity() { | ||
71 | return Severity.ERROR; | ||
72 | } | ||
73 | |||
74 | @Override | ||
75 | public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() { | ||
76 | return querySpecification; | ||
77 | } | ||
78 | |||
79 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/MultipleTransitionFromEntryConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/MultipleTransitionFromEntryConstraint0.java new file mode 100644 index 00000000..a41b2fc1 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/MultipleTransitionFromEntryConstraint0.java | |||
@@ -0,0 +1,81 @@ | |||
1 | /** | ||
2 | Generated from platform:/resource/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/queries/hu/bme/mit/inf/dslreasoner/partialsnapshot_mavo/yakindu/patterns.vql | ||
3 | */ | ||
4 | package constraints.yakindumm; | ||
5 | |||
6 | import java.util.HashMap; | ||
7 | import java.util.HashSet; | ||
8 | import java.util.List; | ||
9 | import java.util.Map; | ||
10 | import java.util.Set; | ||
11 | import java.util.Arrays; | ||
12 | |||
13 | import org.eclipse.viatra.addon.validation.core.api.Severity; | ||
14 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; | ||
15 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
16 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
17 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | ||
18 | |||
19 | import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.MultipleTransitionFromEntry; | ||
20 | |||
21 | public class MultipleTransitionFromEntryConstraint0 implements IConstraintSpecification { | ||
22 | |||
23 | private MultipleTransitionFromEntry querySpecification; | ||
24 | |||
25 | public MultipleTransitionFromEntryConstraint0() { | ||
26 | querySpecification = MultipleTransitionFromEntry.instance(); | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public String getMessageFormat() { | ||
31 | return "error"; | ||
32 | } | ||
33 | |||
34 | |||
35 | @Override | ||
36 | public Map<String,Object> getKeyObjects(IPatternMatch signature) { | ||
37 | Map<String,Object> map = new HashMap<>(); | ||
38 | map.put("e",signature.get("e")); | ||
39 | return map; | ||
40 | } | ||
41 | |||
42 | @Override | ||
43 | public List<String> getKeyNames() { | ||
44 | List<String> keyNames = Arrays.asList( | ||
45 | "e" | ||
46 | ); | ||
47 | return keyNames; | ||
48 | } | ||
49 | |||
50 | @Override | ||
51 | public List<String> getPropertyNames() { | ||
52 | List<String> propertyNames = Arrays.asList( | ||
53 | "t1", | ||
54 | "t2" | ||
55 | ); | ||
56 | return propertyNames; | ||
57 | } | ||
58 | |||
59 | @Override | ||
60 | public Set<List<String>> getSymmetricPropertyNames() { | ||
61 | Set<List<String>> symmetricPropertyNamesSet = new HashSet<>(); | ||
62 | return symmetricPropertyNamesSet; | ||
63 | } | ||
64 | |||
65 | @Override | ||
66 | public Set<List<String>> getSymmetricKeyNames() { | ||
67 | Set<List<String>> symmetricKeyNamesSet = new HashSet<>(); | ||
68 | return symmetricKeyNamesSet; | ||
69 | } | ||
70 | |||
71 | @Override | ||
72 | public Severity getSeverity() { | ||
73 | return Severity.ERROR; | ||
74 | } | ||
75 | |||
76 | @Override | ||
77 | public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() { | ||
78 | return querySpecification; | ||
79 | } | ||
80 | |||
81 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/NoEntryInRegionConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/NoEntryInRegionConstraint0.java new file mode 100644 index 00000000..9eb7783f --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/NoEntryInRegionConstraint0.java | |||
@@ -0,0 +1,79 @@ | |||
1 | /** | ||
2 | Generated from platform:/resource/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/queries/hu/bme/mit/inf/dslreasoner/partialsnapshot_mavo/yakindu/patterns.vql | ||
3 | */ | ||
4 | package constraints.yakindumm; | ||
5 | |||
6 | import java.util.HashMap; | ||
7 | import java.util.HashSet; | ||
8 | import java.util.List; | ||
9 | import java.util.Map; | ||
10 | import java.util.Set; | ||
11 | import java.util.Arrays; | ||
12 | |||
13 | import org.eclipse.viatra.addon.validation.core.api.Severity; | ||
14 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; | ||
15 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
16 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
17 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | ||
18 | |||
19 | import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.NoEntryInRegion; | ||
20 | |||
21 | public class NoEntryInRegionConstraint0 implements IConstraintSpecification { | ||
22 | |||
23 | private NoEntryInRegion querySpecification; | ||
24 | |||
25 | public NoEntryInRegionConstraint0() { | ||
26 | querySpecification = NoEntryInRegion.instance(); | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public String getMessageFormat() { | ||
31 | return "error"; | ||
32 | } | ||
33 | |||
34 | |||
35 | @Override | ||
36 | public Map<String,Object> getKeyObjects(IPatternMatch signature) { | ||
37 | Map<String,Object> map = new HashMap<>(); | ||
38 | map.put("r1",signature.get("r1")); | ||
39 | return map; | ||
40 | } | ||
41 | |||
42 | @Override | ||
43 | public List<String> getKeyNames() { | ||
44 | List<String> keyNames = Arrays.asList( | ||
45 | "r1" | ||
46 | ); | ||
47 | return keyNames; | ||
48 | } | ||
49 | |||
50 | @Override | ||
51 | public List<String> getPropertyNames() { | ||
52 | List<String> propertyNames = Arrays.asList( | ||
53 | ); | ||
54 | return propertyNames; | ||
55 | } | ||
56 | |||
57 | @Override | ||
58 | public Set<List<String>> getSymmetricPropertyNames() { | ||
59 | Set<List<String>> symmetricPropertyNamesSet = new HashSet<>(); | ||
60 | return symmetricPropertyNamesSet; | ||
61 | } | ||
62 | |||
63 | @Override | ||
64 | public Set<List<String>> getSymmetricKeyNames() { | ||
65 | Set<List<String>> symmetricKeyNamesSet = new HashSet<>(); | ||
66 | return symmetricKeyNamesSet; | ||
67 | } | ||
68 | |||
69 | @Override | ||
70 | public Severity getSeverity() { | ||
71 | return Severity.ERROR; | ||
72 | } | ||
73 | |||
74 | @Override | ||
75 | public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() { | ||
76 | return querySpecification; | ||
77 | } | ||
78 | |||
79 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/NoOutgoingTransitionFromEntryConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/NoOutgoingTransitionFromEntryConstraint0.java new file mode 100644 index 00000000..35d54e8e --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/NoOutgoingTransitionFromEntryConstraint0.java | |||
@@ -0,0 +1,79 @@ | |||
1 | /** | ||
2 | Generated from platform:/resource/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/queries/hu/bme/mit/inf/dslreasoner/partialsnapshot_mavo/yakindu/patterns.vql | ||
3 | */ | ||
4 | package constraints.yakindumm; | ||
5 | |||
6 | import java.util.HashMap; | ||
7 | import java.util.HashSet; | ||
8 | import java.util.List; | ||
9 | import java.util.Map; | ||
10 | import java.util.Set; | ||
11 | import java.util.Arrays; | ||
12 | |||
13 | import org.eclipse.viatra.addon.validation.core.api.Severity; | ||
14 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; | ||
15 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
16 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
17 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | ||
18 | |||
19 | import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.NoOutgoingTransitionFromEntry; | ||
20 | |||
21 | public class NoOutgoingTransitionFromEntryConstraint0 implements IConstraintSpecification { | ||
22 | |||
23 | private NoOutgoingTransitionFromEntry querySpecification; | ||
24 | |||
25 | public NoOutgoingTransitionFromEntryConstraint0() { | ||
26 | querySpecification = NoOutgoingTransitionFromEntry.instance(); | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public String getMessageFormat() { | ||
31 | return "error"; | ||
32 | } | ||
33 | |||
34 | |||
35 | @Override | ||
36 | public Map<String,Object> getKeyObjects(IPatternMatch signature) { | ||
37 | Map<String,Object> map = new HashMap<>(); | ||
38 | map.put("e",signature.get("e")); | ||
39 | return map; | ||
40 | } | ||
41 | |||
42 | @Override | ||
43 | public List<String> getKeyNames() { | ||
44 | List<String> keyNames = Arrays.asList( | ||
45 | "e" | ||
46 | ); | ||
47 | return keyNames; | ||
48 | } | ||
49 | |||
50 | @Override | ||
51 | public List<String> getPropertyNames() { | ||
52 | List<String> propertyNames = Arrays.asList( | ||
53 | ); | ||
54 | return propertyNames; | ||
55 | } | ||
56 | |||
57 | @Override | ||
58 | public Set<List<String>> getSymmetricPropertyNames() { | ||
59 | Set<List<String>> symmetricPropertyNamesSet = new HashSet<>(); | ||
60 | return symmetricPropertyNamesSet; | ||
61 | } | ||
62 | |||
63 | @Override | ||
64 | public Set<List<String>> getSymmetricKeyNames() { | ||
65 | Set<List<String>> symmetricKeyNamesSet = new HashSet<>(); | ||
66 | return symmetricKeyNamesSet; | ||
67 | } | ||
68 | |||
69 | @Override | ||
70 | public Severity getSeverity() { | ||
71 | return Severity.ERROR; | ||
72 | } | ||
73 | |||
74 | @Override | ||
75 | public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() { | ||
76 | return querySpecification; | ||
77 | } | ||
78 | |||
79 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/NoStateInRegionConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/NoStateInRegionConstraint0.java new file mode 100644 index 00000000..49c0063f --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/NoStateInRegionConstraint0.java | |||
@@ -0,0 +1,79 @@ | |||
1 | /** | ||
2 | Generated from platform:/resource/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/queries/hu/bme/mit/inf/dslreasoner/partialsnapshot_mavo/yakindu/patterns.vql | ||
3 | */ | ||
4 | package constraints.yakindumm; | ||
5 | |||
6 | import java.util.HashMap; | ||
7 | import java.util.HashSet; | ||
8 | import java.util.List; | ||
9 | import java.util.Map; | ||
10 | import java.util.Set; | ||
11 | import java.util.Arrays; | ||
12 | |||
13 | import org.eclipse.viatra.addon.validation.core.api.Severity; | ||
14 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; | ||
15 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
16 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
17 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | ||
18 | |||
19 | import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.NoStateInRegion; | ||
20 | |||
21 | public class NoStateInRegionConstraint0 implements IConstraintSpecification { | ||
22 | |||
23 | private NoStateInRegion querySpecification; | ||
24 | |||
25 | public NoStateInRegionConstraint0() { | ||
26 | querySpecification = NoStateInRegion.instance(); | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public String getMessageFormat() { | ||
31 | return "error"; | ||
32 | } | ||
33 | |||
34 | |||
35 | @Override | ||
36 | public Map<String,Object> getKeyObjects(IPatternMatch signature) { | ||
37 | Map<String,Object> map = new HashMap<>(); | ||
38 | map.put("region",signature.get("region")); | ||
39 | return map; | ||
40 | } | ||
41 | |||
42 | @Override | ||
43 | public List<String> getKeyNames() { | ||
44 | List<String> keyNames = Arrays.asList( | ||
45 | "region" | ||
46 | ); | ||
47 | return keyNames; | ||
48 | } | ||
49 | |||
50 | @Override | ||
51 | public List<String> getPropertyNames() { | ||
52 | List<String> propertyNames = Arrays.asList( | ||
53 | ); | ||
54 | return propertyNames; | ||
55 | } | ||
56 | |||
57 | @Override | ||
58 | public Set<List<String>> getSymmetricPropertyNames() { | ||
59 | Set<List<String>> symmetricPropertyNamesSet = new HashSet<>(); | ||
60 | return symmetricPropertyNamesSet; | ||
61 | } | ||
62 | |||
63 | @Override | ||
64 | public Set<List<String>> getSymmetricKeyNames() { | ||
65 | Set<List<String>> symmetricKeyNamesSet = new HashSet<>(); | ||
66 | return symmetricKeyNamesSet; | ||
67 | } | ||
68 | |||
69 | @Override | ||
70 | public Severity getSeverity() { | ||
71 | return Severity.ERROR; | ||
72 | } | ||
73 | |||
74 | @Override | ||
75 | public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() { | ||
76 | return querySpecification; | ||
77 | } | ||
78 | |||
79 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/OutgoingFromExitConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/OutgoingFromExitConstraint0.java new file mode 100644 index 00000000..ddb907ff --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/OutgoingFromExitConstraint0.java | |||
@@ -0,0 +1,80 @@ | |||
1 | /** | ||
2 | Generated from platform:/resource/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/queries/hu/bme/mit/inf/dslreasoner/partialsnapshot_mavo/yakindu/patterns.vql | ||
3 | */ | ||
4 | package constraints.yakindumm; | ||
5 | |||
6 | import java.util.HashMap; | ||
7 | import java.util.HashSet; | ||
8 | import java.util.List; | ||
9 | import java.util.Map; | ||
10 | import java.util.Set; | ||
11 | import java.util.Arrays; | ||
12 | |||
13 | import org.eclipse.viatra.addon.validation.core.api.Severity; | ||
14 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; | ||
15 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
16 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
17 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | ||
18 | |||
19 | import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.OutgoingFromExit; | ||
20 | |||
21 | public class OutgoingFromExitConstraint0 implements IConstraintSpecification { | ||
22 | |||
23 | private OutgoingFromExit querySpecification; | ||
24 | |||
25 | public OutgoingFromExitConstraint0() { | ||
26 | querySpecification = OutgoingFromExit.instance(); | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public String getMessageFormat() { | ||
31 | return "error"; | ||
32 | } | ||
33 | |||
34 | |||
35 | @Override | ||
36 | public Map<String,Object> getKeyObjects(IPatternMatch signature) { | ||
37 | Map<String,Object> map = new HashMap<>(); | ||
38 | map.put("e",signature.get("e")); | ||
39 | return map; | ||
40 | } | ||
41 | |||
42 | @Override | ||
43 | public List<String> getKeyNames() { | ||
44 | List<String> keyNames = Arrays.asList( | ||
45 | "e" | ||
46 | ); | ||
47 | return keyNames; | ||
48 | } | ||
49 | |||
50 | @Override | ||
51 | public List<String> getPropertyNames() { | ||
52 | List<String> propertyNames = Arrays.asList( | ||
53 | "t" | ||
54 | ); | ||
55 | return propertyNames; | ||
56 | } | ||
57 | |||
58 | @Override | ||
59 | public Set<List<String>> getSymmetricPropertyNames() { | ||
60 | Set<List<String>> symmetricPropertyNamesSet = new HashSet<>(); | ||
61 | return symmetricPropertyNamesSet; | ||
62 | } | ||
63 | |||
64 | @Override | ||
65 | public Set<List<String>> getSymmetricKeyNames() { | ||
66 | Set<List<String>> symmetricKeyNamesSet = new HashSet<>(); | ||
67 | return symmetricKeyNamesSet; | ||
68 | } | ||
69 | |||
70 | @Override | ||
71 | public Severity getSeverity() { | ||
72 | return Severity.ERROR; | ||
73 | } | ||
74 | |||
75 | @Override | ||
76 | public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() { | ||
77 | return querySpecification; | ||
78 | } | ||
79 | |||
80 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/OutgoingFromFinalConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/OutgoingFromFinalConstraint0.java new file mode 100644 index 00000000..3b2949fd --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/yakindumm/OutgoingFromFinalConstraint0.java | |||
@@ -0,0 +1,80 @@ | |||
1 | /** | ||
2 | Generated from platform:/resource/hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph/queries/hu/bme/mit/inf/dslreasoner/partialsnapshot_mavo/yakindu/patterns.vql | ||
3 | */ | ||
4 | package constraints.yakindumm; | ||
5 | |||
6 | import java.util.HashMap; | ||
7 | import java.util.HashSet; | ||
8 | import java.util.List; | ||
9 | import java.util.Map; | ||
10 | import java.util.Set; | ||
11 | import java.util.Arrays; | ||
12 | |||
13 | import org.eclipse.viatra.addon.validation.core.api.Severity; | ||
14 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; | ||
15 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
16 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
17 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | ||
18 | |||
19 | import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.OutgoingFromFinal; | ||
20 | |||
21 | public class OutgoingFromFinalConstraint0 implements IConstraintSpecification { | ||
22 | |||
23 | private OutgoingFromFinal querySpecification; | ||
24 | |||
25 | public OutgoingFromFinalConstraint0() { | ||
26 | querySpecification = OutgoingFromFinal.instance(); | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public String getMessageFormat() { | ||
31 | return "error"; | ||
32 | } | ||
33 | |||
34 | |||
35 | @Override | ||
36 | public Map<String,Object> getKeyObjects(IPatternMatch signature) { | ||
37 | Map<String,Object> map = new HashMap<>(); | ||
38 | map.put("f",signature.get("f")); | ||
39 | return map; | ||
40 | } | ||
41 | |||
42 | @Override | ||
43 | public List<String> getKeyNames() { | ||
44 | List<String> keyNames = Arrays.asList( | ||
45 | "f" | ||
46 | ); | ||
47 | return keyNames; | ||
48 | } | ||
49 | |||
50 | @Override | ||
51 | public List<String> getPropertyNames() { | ||
52 | List<String> propertyNames = Arrays.asList( | ||
53 | "t" | ||
54 | ); | ||
55 | return propertyNames; | ||
56 | } | ||
57 | |||
58 | @Override | ||
59 | public Set<List<String>> getSymmetricPropertyNames() { | ||
60 | Set<List<String>> symmetricPropertyNamesSet = new HashSet<>(); | ||
61 | return symmetricPropertyNamesSet; | ||
62 | } | ||
63 | |||
64 | @Override | ||
65 | public Set<List<String>> getSymmetricKeyNames() { | ||
66 | Set<List<String>> symmetricKeyNamesSet = new HashSet<>(); | ||
67 | return symmetricKeyNamesSet; | ||
68 | } | ||
69 | |||
70 | @Override | ||
71 | public Severity getSeverity() { | ||
72 | return Severity.ERROR; | ||
73 | } | ||
74 | |||
75 | @Override | ||
76 | public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() { | ||
77 | return querySpecification; | ||
78 | } | ||
79 | |||
80 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/.gitignore b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/.gitignore new file mode 100644 index 00000000..c42ca056 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/.gitignore | |||
@@ -0,0 +1,8 @@ | |||
1 | /.Ecore_pattern.java._trace | ||
2 | /.MoreThenFiveSuperTypes.java._trace | ||
3 | /.DirectSupertype.java._trace | ||
4 | /.Ecore.java._trace | ||
5 | /.LoopInInheritence.java._trace | ||
6 | /.NonSymmetricOpposite.java._trace | ||
7 | /.Opposite.java._trace | ||
8 | /.OppositeDifferentClass.java._trace | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/DirectSupertype.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/DirectSupertype.java new file mode 100644 index 00000000..a6ffad45 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/DirectSupertype.java | |||
@@ -0,0 +1,692 @@ | |||
1 | /** | ||
2 | * Generated from platform:/resource/SocialNetwork_plugin/queries/ecore/Ecore.vql | ||
3 | */ | ||
4 | package ecore; | ||
5 | |||
6 | import java.util.Arrays; | ||
7 | import java.util.Collection; | ||
8 | import java.util.LinkedHashSet; | ||
9 | import java.util.List; | ||
10 | import java.util.Objects; | ||
11 | import java.util.Optional; | ||
12 | import java.util.Set; | ||
13 | import java.util.function.Consumer; | ||
14 | import java.util.stream.Collectors; | ||
15 | import java.util.stream.Stream; | ||
16 | import org.apache.log4j.Logger; | ||
17 | import org.eclipse.emf.ecore.EClass; | ||
18 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
19 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
20 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | ||
21 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; | ||
22 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; | ||
23 | import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; | ||
24 | import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; | ||
25 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; | ||
26 | import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; | ||
27 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | ||
28 | import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; | ||
29 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; | ||
30 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; | ||
31 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; | ||
32 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; | ||
33 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; | ||
34 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; | ||
35 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; | ||
36 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; | ||
37 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; | ||
38 | import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; | ||
39 | |||
40 | /** | ||
41 | * A pattern-specific query specification that can instantiate Matcher in a type-safe way. | ||
42 | * | ||
43 | * <p>Original source: | ||
44 | * <code><pre> | ||
45 | * pattern directSupertype(a: EClass, b:EClass) { | ||
46 | * EClass.eSuperTypes(a,b); | ||
47 | * } | ||
48 | * </pre></code> | ||
49 | * | ||
50 | * @see Matcher | ||
51 | * @see Match | ||
52 | * | ||
53 | */ | ||
54 | @SuppressWarnings("all") | ||
55 | public final class DirectSupertype extends BaseGeneratedEMFQuerySpecification<DirectSupertype.Matcher> { | ||
56 | /** | ||
57 | * Pattern-specific match representation of the ecore.directSupertype pattern, | ||
58 | * to be used in conjunction with {@link Matcher}. | ||
59 | * | ||
60 | * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. | ||
61 | * Each instance is a (possibly partial) substitution of pattern parameters, | ||
62 | * usable to represent a match of the pattern in the result of a query, | ||
63 | * or to specify the bound (fixed) input parameters when issuing a query. | ||
64 | * | ||
65 | * @see Matcher | ||
66 | * | ||
67 | */ | ||
68 | public static abstract class Match extends BasePatternMatch { | ||
69 | private EClass fA; | ||
70 | |||
71 | private EClass fB; | ||
72 | |||
73 | private static List<String> parameterNames = makeImmutableList("a", "b"); | ||
74 | |||
75 | private Match(final EClass pA, final EClass pB) { | ||
76 | this.fA = pA; | ||
77 | this.fB = pB; | ||
78 | } | ||
79 | |||
80 | @Override | ||
81 | public Object get(final String parameterName) { | ||
82 | if ("a".equals(parameterName)) return this.fA; | ||
83 | if ("b".equals(parameterName)) return this.fB; | ||
84 | return null; | ||
85 | } | ||
86 | |||
87 | public EClass getA() { | ||
88 | return this.fA; | ||
89 | } | ||
90 | |||
91 | public EClass getB() { | ||
92 | return this.fB; | ||
93 | } | ||
94 | |||
95 | @Override | ||
96 | public boolean set(final String parameterName, final Object newValue) { | ||
97 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
98 | if ("a".equals(parameterName) ) { | ||
99 | this.fA = (EClass) newValue; | ||
100 | return true; | ||
101 | } | ||
102 | if ("b".equals(parameterName) ) { | ||
103 | this.fB = (EClass) newValue; | ||
104 | return true; | ||
105 | } | ||
106 | return false; | ||
107 | } | ||
108 | |||
109 | public void setA(final EClass pA) { | ||
110 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
111 | this.fA = pA; | ||
112 | } | ||
113 | |||
114 | public void setB(final EClass pB) { | ||
115 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
116 | this.fB = pB; | ||
117 | } | ||
118 | |||
119 | @Override | ||
120 | public String patternName() { | ||
121 | return "ecore.directSupertype"; | ||
122 | } | ||
123 | |||
124 | @Override | ||
125 | public List<String> parameterNames() { | ||
126 | return DirectSupertype.Match.parameterNames; | ||
127 | } | ||
128 | |||
129 | @Override | ||
130 | public Object[] toArray() { | ||
131 | return new Object[]{fA, fB}; | ||
132 | } | ||
133 | |||
134 | @Override | ||
135 | public DirectSupertype.Match toImmutable() { | ||
136 | return isMutable() ? newMatch(fA, fB) : this; | ||
137 | } | ||
138 | |||
139 | @Override | ||
140 | public String prettyPrint() { | ||
141 | StringBuilder result = new StringBuilder(); | ||
142 | result.append("\"a\"=" + prettyPrintValue(fA) + ", "); | ||
143 | result.append("\"b\"=" + prettyPrintValue(fB)); | ||
144 | return result.toString(); | ||
145 | } | ||
146 | |||
147 | @Override | ||
148 | public int hashCode() { | ||
149 | return Objects.hash(fA, fB); | ||
150 | } | ||
151 | |||
152 | @Override | ||
153 | public boolean equals(final Object obj) { | ||
154 | if (this == obj) | ||
155 | return true; | ||
156 | if (obj == null) { | ||
157 | return false; | ||
158 | } | ||
159 | if ((obj instanceof DirectSupertype.Match)) { | ||
160 | DirectSupertype.Match other = (DirectSupertype.Match) obj; | ||
161 | return Objects.equals(fA, other.fA) && Objects.equals(fB, other.fB); | ||
162 | } else { | ||
163 | // this should be infrequent | ||
164 | if (!(obj instanceof IPatternMatch)) { | ||
165 | return false; | ||
166 | } | ||
167 | IPatternMatch otherSig = (IPatternMatch) obj; | ||
168 | return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); | ||
169 | } | ||
170 | } | ||
171 | |||
172 | @Override | ||
173 | public DirectSupertype specification() { | ||
174 | return DirectSupertype.instance(); | ||
175 | } | ||
176 | |||
177 | /** | ||
178 | * Returns an empty, mutable match. | ||
179 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
180 | * | ||
181 | * @return the empty match. | ||
182 | * | ||
183 | */ | ||
184 | public static DirectSupertype.Match newEmptyMatch() { | ||
185 | return new Mutable(null, null); | ||
186 | } | ||
187 | |||
188 | /** | ||
189 | * Returns a mutable (partial) match. | ||
190 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
191 | * | ||
192 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
193 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
194 | * @return the new, mutable (partial) match object. | ||
195 | * | ||
196 | */ | ||
197 | public static DirectSupertype.Match newMutableMatch(final EClass pA, final EClass pB) { | ||
198 | return new Mutable(pA, pB); | ||
199 | } | ||
200 | |||
201 | /** | ||
202 | * Returns a new (partial) match. | ||
203 | * This can be used e.g. to call the matcher with a partial match. | ||
204 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
205 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
206 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
207 | * @return the (partial) match object. | ||
208 | * | ||
209 | */ | ||
210 | public static DirectSupertype.Match newMatch(final EClass pA, final EClass pB) { | ||
211 | return new Immutable(pA, pB); | ||
212 | } | ||
213 | |||
214 | private static final class Mutable extends DirectSupertype.Match { | ||
215 | Mutable(final EClass pA, final EClass pB) { | ||
216 | super(pA, pB); | ||
217 | } | ||
218 | |||
219 | @Override | ||
220 | public boolean isMutable() { | ||
221 | return true; | ||
222 | } | ||
223 | } | ||
224 | |||
225 | private static final class Immutable extends DirectSupertype.Match { | ||
226 | Immutable(final EClass pA, final EClass pB) { | ||
227 | super(pA, pB); | ||
228 | } | ||
229 | |||
230 | @Override | ||
231 | public boolean isMutable() { | ||
232 | return false; | ||
233 | } | ||
234 | } | ||
235 | } | ||
236 | |||
237 | /** | ||
238 | * Generated pattern matcher API of the ecore.directSupertype pattern, | ||
239 | * providing pattern-specific query methods. | ||
240 | * | ||
241 | * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, | ||
242 | * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. | ||
243 | * | ||
244 | * <p>Matches of the pattern will be represented as {@link Match}. | ||
245 | * | ||
246 | * <p>Original source: | ||
247 | * <code><pre> | ||
248 | * pattern directSupertype(a: EClass, b:EClass) { | ||
249 | * EClass.eSuperTypes(a,b); | ||
250 | * } | ||
251 | * </pre></code> | ||
252 | * | ||
253 | * @see Match | ||
254 | * @see DirectSupertype | ||
255 | * | ||
256 | */ | ||
257 | public static class Matcher extends BaseMatcher<DirectSupertype.Match> { | ||
258 | /** | ||
259 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
260 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
261 | * | ||
262 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
263 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
264 | * | ||
265 | */ | ||
266 | public static DirectSupertype.Matcher on(final ViatraQueryEngine engine) { | ||
267 | // check if matcher already exists | ||
268 | Matcher matcher = engine.getExistingMatcher(querySpecification()); | ||
269 | if (matcher == null) { | ||
270 | matcher = (Matcher)engine.getMatcher(querySpecification()); | ||
271 | } | ||
272 | return matcher; | ||
273 | } | ||
274 | |||
275 | /** | ||
276 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
277 | * @return an initialized matcher | ||
278 | * @noreference This method is for internal matcher initialization by the framework, do not call it manually. | ||
279 | * | ||
280 | */ | ||
281 | public static DirectSupertype.Matcher create() { | ||
282 | return new Matcher(); | ||
283 | } | ||
284 | |||
285 | private static final int POSITION_A = 0; | ||
286 | |||
287 | private static final int POSITION_B = 1; | ||
288 | |||
289 | private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(DirectSupertype.Matcher.class); | ||
290 | |||
291 | /** | ||
292 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
293 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
294 | * | ||
295 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
296 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
297 | * | ||
298 | */ | ||
299 | private Matcher() { | ||
300 | super(querySpecification()); | ||
301 | } | ||
302 | |||
303 | /** | ||
304 | * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. | ||
305 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
306 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
307 | * @return matches represented as a Match object. | ||
308 | * | ||
309 | */ | ||
310 | public Collection<DirectSupertype.Match> getAllMatches(final EClass pA, final EClass pB) { | ||
311 | return rawStreamAllMatches(new Object[]{pA, pB}).collect(Collectors.toSet()); | ||
312 | } | ||
313 | |||
314 | /** | ||
315 | * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. | ||
316 | * </p> | ||
317 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
318 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
319 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
320 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
321 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
322 | * @return a stream of matches represented as a Match object. | ||
323 | * | ||
324 | */ | ||
325 | public Stream<DirectSupertype.Match> streamAllMatches(final EClass pA, final EClass pB) { | ||
326 | return rawStreamAllMatches(new Object[]{pA, pB}); | ||
327 | } | ||
328 | |||
329 | /** | ||
330 | * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
331 | * Neither determinism nor randomness of selection is guaranteed. | ||
332 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
333 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
334 | * @return a match represented as a Match object, or null if no match is found. | ||
335 | * | ||
336 | */ | ||
337 | public Optional<DirectSupertype.Match> getOneArbitraryMatch(final EClass pA, final EClass pB) { | ||
338 | return rawGetOneArbitraryMatch(new Object[]{pA, pB}); | ||
339 | } | ||
340 | |||
341 | /** | ||
342 | * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, | ||
343 | * under any possible substitution of the unspecified parameters (if any). | ||
344 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
345 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
346 | * @return true if the input is a valid (partial) match of the pattern. | ||
347 | * | ||
348 | */ | ||
349 | public boolean hasMatch(final EClass pA, final EClass pB) { | ||
350 | return rawHasMatch(new Object[]{pA, pB}); | ||
351 | } | ||
352 | |||
353 | /** | ||
354 | * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. | ||
355 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
356 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
357 | * @return the number of pattern matches found. | ||
358 | * | ||
359 | */ | ||
360 | public int countMatches(final EClass pA, final EClass pB) { | ||
361 | return rawCountMatches(new Object[]{pA, pB}); | ||
362 | } | ||
363 | |||
364 | /** | ||
365 | * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
366 | * Neither determinism nor randomness of selection is guaranteed. | ||
367 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
368 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
369 | * @param processor the action that will process the selected match. | ||
370 | * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked | ||
371 | * | ||
372 | */ | ||
373 | public boolean forOneArbitraryMatch(final EClass pA, final EClass pB, final Consumer<? super DirectSupertype.Match> processor) { | ||
374 | return rawForOneArbitraryMatch(new Object[]{pA, pB}, processor); | ||
375 | } | ||
376 | |||
377 | /** | ||
378 | * Returns a new (partial) match. | ||
379 | * This can be used e.g. to call the matcher with a partial match. | ||
380 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
381 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
382 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
383 | * @return the (partial) match object. | ||
384 | * | ||
385 | */ | ||
386 | public DirectSupertype.Match newMatch(final EClass pA, final EClass pB) { | ||
387 | return DirectSupertype.Match.newMatch(pA, pB); | ||
388 | } | ||
389 | |||
390 | /** | ||
391 | * Retrieve the set of values that occur in matches for a. | ||
392 | * @return the Set of all values or empty set if there are no matches | ||
393 | * | ||
394 | */ | ||
395 | protected Stream<EClass> rawStreamAllValuesOfa(final Object[] parameters) { | ||
396 | return rawStreamAllValues(POSITION_A, parameters).map(EClass.class::cast); | ||
397 | } | ||
398 | |||
399 | /** | ||
400 | * Retrieve the set of values that occur in matches for a. | ||
401 | * @return the Set of all values or empty set if there are no matches | ||
402 | * | ||
403 | */ | ||
404 | public Set<EClass> getAllValuesOfa() { | ||
405 | return rawStreamAllValuesOfa(emptyArray()).collect(Collectors.toSet()); | ||
406 | } | ||
407 | |||
408 | /** | ||
409 | * Retrieve the set of values that occur in matches for a. | ||
410 | * @return the Set of all values or empty set if there are no matches | ||
411 | * | ||
412 | */ | ||
413 | public Stream<EClass> streamAllValuesOfa() { | ||
414 | return rawStreamAllValuesOfa(emptyArray()); | ||
415 | } | ||
416 | |||
417 | /** | ||
418 | * Retrieve the set of values that occur in matches for a. | ||
419 | * </p> | ||
420 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
421 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
422 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
423 | * | ||
424 | * @return the Stream of all values or empty set if there are no matches | ||
425 | * | ||
426 | */ | ||
427 | public Stream<EClass> streamAllValuesOfa(final DirectSupertype.Match partialMatch) { | ||
428 | return rawStreamAllValuesOfa(partialMatch.toArray()); | ||
429 | } | ||
430 | |||
431 | /** | ||
432 | * Retrieve the set of values that occur in matches for a. | ||
433 | * </p> | ||
434 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
435 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
436 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
437 | * | ||
438 | * @return the Stream of all values or empty set if there are no matches | ||
439 | * | ||
440 | */ | ||
441 | public Stream<EClass> streamAllValuesOfa(final EClass pB) { | ||
442 | return rawStreamAllValuesOfa(new Object[]{null, pB}); | ||
443 | } | ||
444 | |||
445 | /** | ||
446 | * Retrieve the set of values that occur in matches for a. | ||
447 | * @return the Set of all values or empty set if there are no matches | ||
448 | * | ||
449 | */ | ||
450 | public Set<EClass> getAllValuesOfa(final DirectSupertype.Match partialMatch) { | ||
451 | return rawStreamAllValuesOfa(partialMatch.toArray()).collect(Collectors.toSet()); | ||
452 | } | ||
453 | |||
454 | /** | ||
455 | * Retrieve the set of values that occur in matches for a. | ||
456 | * @return the Set of all values or empty set if there are no matches | ||
457 | * | ||
458 | */ | ||
459 | public Set<EClass> getAllValuesOfa(final EClass pB) { | ||
460 | return rawStreamAllValuesOfa(new Object[]{null, pB}).collect(Collectors.toSet()); | ||
461 | } | ||
462 | |||
463 | /** | ||
464 | * Retrieve the set of values that occur in matches for b. | ||
465 | * @return the Set of all values or empty set if there are no matches | ||
466 | * | ||
467 | */ | ||
468 | protected Stream<EClass> rawStreamAllValuesOfb(final Object[] parameters) { | ||
469 | return rawStreamAllValues(POSITION_B, parameters).map(EClass.class::cast); | ||
470 | } | ||
471 | |||
472 | /** | ||
473 | * Retrieve the set of values that occur in matches for b. | ||
474 | * @return the Set of all values or empty set if there are no matches | ||
475 | * | ||
476 | */ | ||
477 | public Set<EClass> getAllValuesOfb() { | ||
478 | return rawStreamAllValuesOfb(emptyArray()).collect(Collectors.toSet()); | ||
479 | } | ||
480 | |||
481 | /** | ||
482 | * Retrieve the set of values that occur in matches for b. | ||
483 | * @return the Set of all values or empty set if there are no matches | ||
484 | * | ||
485 | */ | ||
486 | public Stream<EClass> streamAllValuesOfb() { | ||
487 | return rawStreamAllValuesOfb(emptyArray()); | ||
488 | } | ||
489 | |||
490 | /** | ||
491 | * Retrieve the set of values that occur in matches for b. | ||
492 | * </p> | ||
493 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
494 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
495 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
496 | * | ||
497 | * @return the Stream of all values or empty set if there are no matches | ||
498 | * | ||
499 | */ | ||
500 | public Stream<EClass> streamAllValuesOfb(final DirectSupertype.Match partialMatch) { | ||
501 | return rawStreamAllValuesOfb(partialMatch.toArray()); | ||
502 | } | ||
503 | |||
504 | /** | ||
505 | * Retrieve the set of values that occur in matches for b. | ||
506 | * </p> | ||
507 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
508 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
509 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
510 | * | ||
511 | * @return the Stream of all values or empty set if there are no matches | ||
512 | * | ||
513 | */ | ||
514 | public Stream<EClass> streamAllValuesOfb(final EClass pA) { | ||
515 | return rawStreamAllValuesOfb(new Object[]{pA, null}); | ||
516 | } | ||
517 | |||
518 | /** | ||
519 | * Retrieve the set of values that occur in matches for b. | ||
520 | * @return the Set of all values or empty set if there are no matches | ||
521 | * | ||
522 | */ | ||
523 | public Set<EClass> getAllValuesOfb(final DirectSupertype.Match partialMatch) { | ||
524 | return rawStreamAllValuesOfb(partialMatch.toArray()).collect(Collectors.toSet()); | ||
525 | } | ||
526 | |||
527 | /** | ||
528 | * Retrieve the set of values that occur in matches for b. | ||
529 | * @return the Set of all values or empty set if there are no matches | ||
530 | * | ||
531 | */ | ||
532 | public Set<EClass> getAllValuesOfb(final EClass pA) { | ||
533 | return rawStreamAllValuesOfb(new Object[]{pA, null}).collect(Collectors.toSet()); | ||
534 | } | ||
535 | |||
536 | @Override | ||
537 | protected DirectSupertype.Match tupleToMatch(final Tuple t) { | ||
538 | try { | ||
539 | return DirectSupertype.Match.newMatch((EClass) t.get(POSITION_A), (EClass) t.get(POSITION_B)); | ||
540 | } catch(ClassCastException e) { | ||
541 | LOGGER.error("Element(s) in tuple not properly typed!",e); | ||
542 | return null; | ||
543 | } | ||
544 | } | ||
545 | |||
546 | @Override | ||
547 | protected DirectSupertype.Match arrayToMatch(final Object[] match) { | ||
548 | try { | ||
549 | return DirectSupertype.Match.newMatch((EClass) match[POSITION_A], (EClass) match[POSITION_B]); | ||
550 | } catch(ClassCastException e) { | ||
551 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
552 | return null; | ||
553 | } | ||
554 | } | ||
555 | |||
556 | @Override | ||
557 | protected DirectSupertype.Match arrayToMatchMutable(final Object[] match) { | ||
558 | try { | ||
559 | return DirectSupertype.Match.newMutableMatch((EClass) match[POSITION_A], (EClass) match[POSITION_B]); | ||
560 | } catch(ClassCastException e) { | ||
561 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
562 | return null; | ||
563 | } | ||
564 | } | ||
565 | |||
566 | /** | ||
567 | * @return the singleton instance of the query specification of this pattern | ||
568 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
569 | * | ||
570 | */ | ||
571 | public static IQuerySpecification<DirectSupertype.Matcher> querySpecification() { | ||
572 | return DirectSupertype.instance(); | ||
573 | } | ||
574 | } | ||
575 | |||
576 | private DirectSupertype() { | ||
577 | super(GeneratedPQuery.INSTANCE); | ||
578 | } | ||
579 | |||
580 | /** | ||
581 | * @return the singleton instance of the query specification | ||
582 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
583 | * | ||
584 | */ | ||
585 | public static DirectSupertype instance() { | ||
586 | try{ | ||
587 | return LazyHolder.INSTANCE; | ||
588 | } catch (ExceptionInInitializerError err) { | ||
589 | throw processInitializerError(err); | ||
590 | } | ||
591 | } | ||
592 | |||
593 | @Override | ||
594 | protected DirectSupertype.Matcher instantiate(final ViatraQueryEngine engine) { | ||
595 | return DirectSupertype.Matcher.on(engine); | ||
596 | } | ||
597 | |||
598 | @Override | ||
599 | public DirectSupertype.Matcher instantiate() { | ||
600 | return DirectSupertype.Matcher.create(); | ||
601 | } | ||
602 | |||
603 | @Override | ||
604 | public DirectSupertype.Match newEmptyMatch() { | ||
605 | return DirectSupertype.Match.newEmptyMatch(); | ||
606 | } | ||
607 | |||
608 | @Override | ||
609 | public DirectSupertype.Match newMatch(final Object... parameters) { | ||
610 | return DirectSupertype.Match.newMatch((org.eclipse.emf.ecore.EClass) parameters[0], (org.eclipse.emf.ecore.EClass) parameters[1]); | ||
611 | } | ||
612 | |||
613 | /** | ||
614 | * Inner class allowing the singleton instance of {@link JvmGenericType: ecore.DirectSupertype (visibility: PUBLIC, simpleName: DirectSupertype, identifier: ecore.DirectSupertype, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ecore) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created | ||
615 | * <b>not</b> at the class load time of the outer class, | ||
616 | * but rather at the first call to {@link JvmGenericType: ecore.DirectSupertype (visibility: PUBLIC, simpleName: DirectSupertype, identifier: ecore.DirectSupertype, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ecore) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. | ||
617 | * | ||
618 | * <p> This workaround is required e.g. to support recursion. | ||
619 | * | ||
620 | */ | ||
621 | private static class LazyHolder { | ||
622 | private static final DirectSupertype INSTANCE = new DirectSupertype(); | ||
623 | |||
624 | /** | ||
625 | * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned. | ||
626 | * This initialization order is required to support indirect recursion. | ||
627 | * | ||
628 | * <p> The static initializer is defined using a helper field to work around limitations of the code generator. | ||
629 | * | ||
630 | */ | ||
631 | private static final Object STATIC_INITIALIZER = ensureInitialized(); | ||
632 | |||
633 | public static Object ensureInitialized() { | ||
634 | INSTANCE.ensureInitializedInternal(); | ||
635 | return null; | ||
636 | } | ||
637 | } | ||
638 | |||
639 | private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { | ||
640 | private static final DirectSupertype.GeneratedPQuery INSTANCE = new GeneratedPQuery(); | ||
641 | |||
642 | private final PParameter parameter_a = new PParameter("a", "org.eclipse.emf.ecore.EClass", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EClass")), PParameterDirection.INOUT); | ||
643 | |||
644 | private final PParameter parameter_b = new PParameter("b", "org.eclipse.emf.ecore.EClass", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EClass")), PParameterDirection.INOUT); | ||
645 | |||
646 | private final List<PParameter> parameters = Arrays.asList(parameter_a, parameter_b); | ||
647 | |||
648 | private GeneratedPQuery() { | ||
649 | super(PVisibility.PUBLIC); | ||
650 | } | ||
651 | |||
652 | @Override | ||
653 | public String getFullyQualifiedName() { | ||
654 | return "ecore.directSupertype"; | ||
655 | } | ||
656 | |||
657 | @Override | ||
658 | public List<String> getParameterNames() { | ||
659 | return Arrays.asList("a","b"); | ||
660 | } | ||
661 | |||
662 | @Override | ||
663 | public List<PParameter> getParameters() { | ||
664 | return parameters; | ||
665 | } | ||
666 | |||
667 | @Override | ||
668 | public Set<PBody> doGetContainedBodies() { | ||
669 | setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); | ||
670 | Set<PBody> bodies = new LinkedHashSet<>(); | ||
671 | { | ||
672 | PBody body = new PBody(this); | ||
673 | PVariable var_a = body.getOrCreateVariableByName("a"); | ||
674 | PVariable var_b = body.getOrCreateVariableByName("b"); | ||
675 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
676 | new TypeConstraint(body, Tuples.flatTupleOf(var_b), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
677 | body.setSymbolicParameters(Arrays.<ExportedParameter>asList( | ||
678 | new ExportedParameter(body, var_a, parameter_a), | ||
679 | new ExportedParameter(body, var_b, parameter_b) | ||
680 | )); | ||
681 | // EClass.eSuperTypes(a,b) | ||
682 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
683 | PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); | ||
684 | new TypeConstraint(body, Tuples.flatTupleOf(var_a, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass", "eSuperTypes"))); | ||
685 | new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
686 | new Equality(body, var__virtual_0_, var_b); | ||
687 | bodies.add(body); | ||
688 | } | ||
689 | return bodies; | ||
690 | } | ||
691 | } | ||
692 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/Ecore.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/Ecore.java new file mode 100644 index 00000000..bca43a17 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/Ecore.java | |||
@@ -0,0 +1,97 @@ | |||
1 | /** | ||
2 | * Generated from platform:/resource/SocialNetwork_plugin/queries/ecore/Ecore.vql | ||
3 | */ | ||
4 | package ecore; | ||
5 | |||
6 | import ecore.DirectSupertype; | ||
7 | import ecore.LoopInInheritence; | ||
8 | import ecore.NonSymmetricOpposite; | ||
9 | import ecore.Opposite; | ||
10 | import ecore.OppositeDifferentClass; | ||
11 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | ||
12 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedPatternGroup; | ||
13 | |||
14 | /** | ||
15 | * A pattern group formed of all public patterns defined in Ecore.vql. | ||
16 | * | ||
17 | * <p>Use the static instance as any {@link interface org.eclipse.viatra.query.runtime.api.IQueryGroup}, to conveniently prepare | ||
18 | * a VIATRA Query engine for matching all patterns originally defined in file Ecore.vql, | ||
19 | * in order to achieve better performance than one-by-one on-demand matcher initialization. | ||
20 | * | ||
21 | * <p> From package ecore, the group contains the definition of the following patterns: <ul> | ||
22 | * <li>directSupertype</li> | ||
23 | * <li>loopInInheritence</li> | ||
24 | * <li>opposite</li> | ||
25 | * <li>oppositeDifferentClass</li> | ||
26 | * <li>nonSymmetricOpposite</li> | ||
27 | * </ul> | ||
28 | * | ||
29 | * @see IQueryGroup | ||
30 | * | ||
31 | */ | ||
32 | @SuppressWarnings("all") | ||
33 | public final class Ecore extends BaseGeneratedPatternGroup { | ||
34 | /** | ||
35 | * Access the pattern group. | ||
36 | * | ||
37 | * @return the singleton instance of the group | ||
38 | * @throws ViatraQueryRuntimeException if there was an error loading the generated code of pattern specifications | ||
39 | * | ||
40 | */ | ||
41 | public static Ecore instance() { | ||
42 | if (INSTANCE == null) { | ||
43 | INSTANCE = new Ecore(); | ||
44 | } | ||
45 | return INSTANCE; | ||
46 | } | ||
47 | |||
48 | private static Ecore INSTANCE; | ||
49 | |||
50 | private Ecore() { | ||
51 | querySpecifications.add(DirectSupertype.instance()); | ||
52 | querySpecifications.add(LoopInInheritence.instance()); | ||
53 | querySpecifications.add(Opposite.instance()); | ||
54 | querySpecifications.add(OppositeDifferentClass.instance()); | ||
55 | querySpecifications.add(NonSymmetricOpposite.instance()); | ||
56 | } | ||
57 | |||
58 | public DirectSupertype getDirectSupertype() { | ||
59 | return DirectSupertype.instance(); | ||
60 | } | ||
61 | |||
62 | public DirectSupertype.Matcher getDirectSupertype(final ViatraQueryEngine engine) { | ||
63 | return DirectSupertype.Matcher.on(engine); | ||
64 | } | ||
65 | |||
66 | public LoopInInheritence getLoopInInheritence() { | ||
67 | return LoopInInheritence.instance(); | ||
68 | } | ||
69 | |||
70 | public LoopInInheritence.Matcher getLoopInInheritence(final ViatraQueryEngine engine) { | ||
71 | return LoopInInheritence.Matcher.on(engine); | ||
72 | } | ||
73 | |||
74 | public Opposite getOpposite() { | ||
75 | return Opposite.instance(); | ||
76 | } | ||
77 | |||
78 | public Opposite.Matcher getOpposite(final ViatraQueryEngine engine) { | ||
79 | return Opposite.Matcher.on(engine); | ||
80 | } | ||
81 | |||
82 | public OppositeDifferentClass getOppositeDifferentClass() { | ||
83 | return OppositeDifferentClass.instance(); | ||
84 | } | ||
85 | |||
86 | public OppositeDifferentClass.Matcher getOppositeDifferentClass(final ViatraQueryEngine engine) { | ||
87 | return OppositeDifferentClass.Matcher.on(engine); | ||
88 | } | ||
89 | |||
90 | public NonSymmetricOpposite getNonSymmetricOpposite() { | ||
91 | return NonSymmetricOpposite.instance(); | ||
92 | } | ||
93 | |||
94 | public NonSymmetricOpposite.Matcher getNonSymmetricOpposite(final ViatraQueryEngine engine) { | ||
95 | return NonSymmetricOpposite.Matcher.on(engine); | ||
96 | } | ||
97 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/LoopInInheritence.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/LoopInInheritence.java new file mode 100644 index 00000000..fb14941f --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/LoopInInheritence.java | |||
@@ -0,0 +1,548 @@ | |||
1 | /** | ||
2 | * Generated from platform:/resource/SocialNetwork_plugin/queries/ecore/Ecore.vql | ||
3 | */ | ||
4 | package ecore; | ||
5 | |||
6 | import ecore.DirectSupertype; | ||
7 | import java.util.Arrays; | ||
8 | import java.util.Collection; | ||
9 | import java.util.LinkedHashSet; | ||
10 | import java.util.List; | ||
11 | import java.util.Objects; | ||
12 | import java.util.Optional; | ||
13 | import java.util.Set; | ||
14 | import java.util.function.Consumer; | ||
15 | import java.util.stream.Collectors; | ||
16 | import java.util.stream.Stream; | ||
17 | import org.apache.log4j.Logger; | ||
18 | import org.eclipse.emf.ecore.EClass; | ||
19 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
20 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
21 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | ||
22 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; | ||
23 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; | ||
24 | import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; | ||
25 | import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; | ||
26 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; | ||
27 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | ||
28 | import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; | ||
29 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; | ||
30 | import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; | ||
31 | import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; | ||
32 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; | ||
33 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.BinaryTransitiveClosure; | ||
34 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; | ||
35 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; | ||
36 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; | ||
37 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; | ||
38 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; | ||
39 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; | ||
40 | import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; | ||
41 | |||
42 | /** | ||
43 | * A pattern-specific query specification that can instantiate Matcher in a type-safe way. | ||
44 | * | ||
45 | * <p>Original source: | ||
46 | * <code><pre> | ||
47 | * {@literal @}Constraint(key={a}, severity="error", message="error") | ||
48 | * pattern loopInInheritence(a: EClass) { | ||
49 | * find directSupertype+(a,a); | ||
50 | * } | ||
51 | * </pre></code> | ||
52 | * | ||
53 | * @see Matcher | ||
54 | * @see Match | ||
55 | * | ||
56 | */ | ||
57 | @SuppressWarnings("all") | ||
58 | public final class LoopInInheritence extends BaseGeneratedEMFQuerySpecification<LoopInInheritence.Matcher> { | ||
59 | /** | ||
60 | * Pattern-specific match representation of the ecore.loopInInheritence pattern, | ||
61 | * to be used in conjunction with {@link Matcher}. | ||
62 | * | ||
63 | * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. | ||
64 | * Each instance is a (possibly partial) substitution of pattern parameters, | ||
65 | * usable to represent a match of the pattern in the result of a query, | ||
66 | * or to specify the bound (fixed) input parameters when issuing a query. | ||
67 | * | ||
68 | * @see Matcher | ||
69 | * | ||
70 | */ | ||
71 | public static abstract class Match extends BasePatternMatch { | ||
72 | private EClass fA; | ||
73 | |||
74 | private static List<String> parameterNames = makeImmutableList("a"); | ||
75 | |||
76 | private Match(final EClass pA) { | ||
77 | this.fA = pA; | ||
78 | } | ||
79 | |||
80 | @Override | ||
81 | public Object get(final String parameterName) { | ||
82 | if ("a".equals(parameterName)) return this.fA; | ||
83 | return null; | ||
84 | } | ||
85 | |||
86 | public EClass getA() { | ||
87 | return this.fA; | ||
88 | } | ||
89 | |||
90 | @Override | ||
91 | public boolean set(final String parameterName, final Object newValue) { | ||
92 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
93 | if ("a".equals(parameterName) ) { | ||
94 | this.fA = (EClass) newValue; | ||
95 | return true; | ||
96 | } | ||
97 | return false; | ||
98 | } | ||
99 | |||
100 | public void setA(final EClass pA) { | ||
101 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
102 | this.fA = pA; | ||
103 | } | ||
104 | |||
105 | @Override | ||
106 | public String patternName() { | ||
107 | return "ecore.loopInInheritence"; | ||
108 | } | ||
109 | |||
110 | @Override | ||
111 | public List<String> parameterNames() { | ||
112 | return LoopInInheritence.Match.parameterNames; | ||
113 | } | ||
114 | |||
115 | @Override | ||
116 | public Object[] toArray() { | ||
117 | return new Object[]{fA}; | ||
118 | } | ||
119 | |||
120 | @Override | ||
121 | public LoopInInheritence.Match toImmutable() { | ||
122 | return isMutable() ? newMatch(fA) : this; | ||
123 | } | ||
124 | |||
125 | @Override | ||
126 | public String prettyPrint() { | ||
127 | StringBuilder result = new StringBuilder(); | ||
128 | result.append("\"a\"=" + prettyPrintValue(fA)); | ||
129 | return result.toString(); | ||
130 | } | ||
131 | |||
132 | @Override | ||
133 | public int hashCode() { | ||
134 | return Objects.hash(fA); | ||
135 | } | ||
136 | |||
137 | @Override | ||
138 | public boolean equals(final Object obj) { | ||
139 | if (this == obj) | ||
140 | return true; | ||
141 | if (obj == null) { | ||
142 | return false; | ||
143 | } | ||
144 | if ((obj instanceof LoopInInheritence.Match)) { | ||
145 | LoopInInheritence.Match other = (LoopInInheritence.Match) obj; | ||
146 | return Objects.equals(fA, other.fA); | ||
147 | } else { | ||
148 | // this should be infrequent | ||
149 | if (!(obj instanceof IPatternMatch)) { | ||
150 | return false; | ||
151 | } | ||
152 | IPatternMatch otherSig = (IPatternMatch) obj; | ||
153 | return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); | ||
154 | } | ||
155 | } | ||
156 | |||
157 | @Override | ||
158 | public LoopInInheritence specification() { | ||
159 | return LoopInInheritence.instance(); | ||
160 | } | ||
161 | |||
162 | /** | ||
163 | * Returns an empty, mutable match. | ||
164 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
165 | * | ||
166 | * @return the empty match. | ||
167 | * | ||
168 | */ | ||
169 | public static LoopInInheritence.Match newEmptyMatch() { | ||
170 | return new Mutable(null); | ||
171 | } | ||
172 | |||
173 | /** | ||
174 | * Returns a mutable (partial) match. | ||
175 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
176 | * | ||
177 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
178 | * @return the new, mutable (partial) match object. | ||
179 | * | ||
180 | */ | ||
181 | public static LoopInInheritence.Match newMutableMatch(final EClass pA) { | ||
182 | return new Mutable(pA); | ||
183 | } | ||
184 | |||
185 | /** | ||
186 | * Returns a new (partial) match. | ||
187 | * This can be used e.g. to call the matcher with a partial match. | ||
188 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
189 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
190 | * @return the (partial) match object. | ||
191 | * | ||
192 | */ | ||
193 | public static LoopInInheritence.Match newMatch(final EClass pA) { | ||
194 | return new Immutable(pA); | ||
195 | } | ||
196 | |||
197 | private static final class Mutable extends LoopInInheritence.Match { | ||
198 | Mutable(final EClass pA) { | ||
199 | super(pA); | ||
200 | } | ||
201 | |||
202 | @Override | ||
203 | public boolean isMutable() { | ||
204 | return true; | ||
205 | } | ||
206 | } | ||
207 | |||
208 | private static final class Immutable extends LoopInInheritence.Match { | ||
209 | Immutable(final EClass pA) { | ||
210 | super(pA); | ||
211 | } | ||
212 | |||
213 | @Override | ||
214 | public boolean isMutable() { | ||
215 | return false; | ||
216 | } | ||
217 | } | ||
218 | } | ||
219 | |||
220 | /** | ||
221 | * Generated pattern matcher API of the ecore.loopInInheritence pattern, | ||
222 | * providing pattern-specific query methods. | ||
223 | * | ||
224 | * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, | ||
225 | * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. | ||
226 | * | ||
227 | * <p>Matches of the pattern will be represented as {@link Match}. | ||
228 | * | ||
229 | * <p>Original source: | ||
230 | * <code><pre> | ||
231 | * {@literal @}Constraint(key={a}, severity="error", message="error") | ||
232 | * pattern loopInInheritence(a: EClass) { | ||
233 | * find directSupertype+(a,a); | ||
234 | * } | ||
235 | * </pre></code> | ||
236 | * | ||
237 | * @see Match | ||
238 | * @see LoopInInheritence | ||
239 | * | ||
240 | */ | ||
241 | public static class Matcher extends BaseMatcher<LoopInInheritence.Match> { | ||
242 | /** | ||
243 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
244 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
245 | * | ||
246 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
247 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
248 | * | ||
249 | */ | ||
250 | public static LoopInInheritence.Matcher on(final ViatraQueryEngine engine) { | ||
251 | // check if matcher already exists | ||
252 | Matcher matcher = engine.getExistingMatcher(querySpecification()); | ||
253 | if (matcher == null) { | ||
254 | matcher = (Matcher)engine.getMatcher(querySpecification()); | ||
255 | } | ||
256 | return matcher; | ||
257 | } | ||
258 | |||
259 | /** | ||
260 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
261 | * @return an initialized matcher | ||
262 | * @noreference This method is for internal matcher initialization by the framework, do not call it manually. | ||
263 | * | ||
264 | */ | ||
265 | public static LoopInInheritence.Matcher create() { | ||
266 | return new Matcher(); | ||
267 | } | ||
268 | |||
269 | private static final int POSITION_A = 0; | ||
270 | |||
271 | private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(LoopInInheritence.Matcher.class); | ||
272 | |||
273 | /** | ||
274 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
275 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
276 | * | ||
277 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
278 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
279 | * | ||
280 | */ | ||
281 | private Matcher() { | ||
282 | super(querySpecification()); | ||
283 | } | ||
284 | |||
285 | /** | ||
286 | * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. | ||
287 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
288 | * @return matches represented as a Match object. | ||
289 | * | ||
290 | */ | ||
291 | public Collection<LoopInInheritence.Match> getAllMatches(final EClass pA) { | ||
292 | return rawStreamAllMatches(new Object[]{pA}).collect(Collectors.toSet()); | ||
293 | } | ||
294 | |||
295 | /** | ||
296 | * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. | ||
297 | * </p> | ||
298 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
299 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
300 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
301 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
302 | * @return a stream of matches represented as a Match object. | ||
303 | * | ||
304 | */ | ||
305 | public Stream<LoopInInheritence.Match> streamAllMatches(final EClass pA) { | ||
306 | return rawStreamAllMatches(new Object[]{pA}); | ||
307 | } | ||
308 | |||
309 | /** | ||
310 | * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
311 | * Neither determinism nor randomness of selection is guaranteed. | ||
312 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
313 | * @return a match represented as a Match object, or null if no match is found. | ||
314 | * | ||
315 | */ | ||
316 | public Optional<LoopInInheritence.Match> getOneArbitraryMatch(final EClass pA) { | ||
317 | return rawGetOneArbitraryMatch(new Object[]{pA}); | ||
318 | } | ||
319 | |||
320 | /** | ||
321 | * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, | ||
322 | * under any possible substitution of the unspecified parameters (if any). | ||
323 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
324 | * @return true if the input is a valid (partial) match of the pattern. | ||
325 | * | ||
326 | */ | ||
327 | public boolean hasMatch(final EClass pA) { | ||
328 | return rawHasMatch(new Object[]{pA}); | ||
329 | } | ||
330 | |||
331 | /** | ||
332 | * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. | ||
333 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
334 | * @return the number of pattern matches found. | ||
335 | * | ||
336 | */ | ||
337 | public int countMatches(final EClass pA) { | ||
338 | return rawCountMatches(new Object[]{pA}); | ||
339 | } | ||
340 | |||
341 | /** | ||
342 | * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
343 | * Neither determinism nor randomness of selection is guaranteed. | ||
344 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
345 | * @param processor the action that will process the selected match. | ||
346 | * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked | ||
347 | * | ||
348 | */ | ||
349 | public boolean forOneArbitraryMatch(final EClass pA, final Consumer<? super LoopInInheritence.Match> processor) { | ||
350 | return rawForOneArbitraryMatch(new Object[]{pA}, processor); | ||
351 | } | ||
352 | |||
353 | /** | ||
354 | * Returns a new (partial) match. | ||
355 | * This can be used e.g. to call the matcher with a partial match. | ||
356 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
357 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
358 | * @return the (partial) match object. | ||
359 | * | ||
360 | */ | ||
361 | public LoopInInheritence.Match newMatch(final EClass pA) { | ||
362 | return LoopInInheritence.Match.newMatch(pA); | ||
363 | } | ||
364 | |||
365 | /** | ||
366 | * Retrieve the set of values that occur in matches for a. | ||
367 | * @return the Set of all values or empty set if there are no matches | ||
368 | * | ||
369 | */ | ||
370 | protected Stream<EClass> rawStreamAllValuesOfa(final Object[] parameters) { | ||
371 | return rawStreamAllValues(POSITION_A, parameters).map(EClass.class::cast); | ||
372 | } | ||
373 | |||
374 | /** | ||
375 | * Retrieve the set of values that occur in matches for a. | ||
376 | * @return the Set of all values or empty set if there are no matches | ||
377 | * | ||
378 | */ | ||
379 | public Set<EClass> getAllValuesOfa() { | ||
380 | return rawStreamAllValuesOfa(emptyArray()).collect(Collectors.toSet()); | ||
381 | } | ||
382 | |||
383 | /** | ||
384 | * Retrieve the set of values that occur in matches for a. | ||
385 | * @return the Set of all values or empty set if there are no matches | ||
386 | * | ||
387 | */ | ||
388 | public Stream<EClass> streamAllValuesOfa() { | ||
389 | return rawStreamAllValuesOfa(emptyArray()); | ||
390 | } | ||
391 | |||
392 | @Override | ||
393 | protected LoopInInheritence.Match tupleToMatch(final Tuple t) { | ||
394 | try { | ||
395 | return LoopInInheritence.Match.newMatch((EClass) t.get(POSITION_A)); | ||
396 | } catch(ClassCastException e) { | ||
397 | LOGGER.error("Element(s) in tuple not properly typed!",e); | ||
398 | return null; | ||
399 | } | ||
400 | } | ||
401 | |||
402 | @Override | ||
403 | protected LoopInInheritence.Match arrayToMatch(final Object[] match) { | ||
404 | try { | ||
405 | return LoopInInheritence.Match.newMatch((EClass) match[POSITION_A]); | ||
406 | } catch(ClassCastException e) { | ||
407 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
408 | return null; | ||
409 | } | ||
410 | } | ||
411 | |||
412 | @Override | ||
413 | protected LoopInInheritence.Match arrayToMatchMutable(final Object[] match) { | ||
414 | try { | ||
415 | return LoopInInheritence.Match.newMutableMatch((EClass) match[POSITION_A]); | ||
416 | } catch(ClassCastException e) { | ||
417 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
418 | return null; | ||
419 | } | ||
420 | } | ||
421 | |||
422 | /** | ||
423 | * @return the singleton instance of the query specification of this pattern | ||
424 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
425 | * | ||
426 | */ | ||
427 | public static IQuerySpecification<LoopInInheritence.Matcher> querySpecification() { | ||
428 | return LoopInInheritence.instance(); | ||
429 | } | ||
430 | } | ||
431 | |||
432 | private LoopInInheritence() { | ||
433 | super(GeneratedPQuery.INSTANCE); | ||
434 | } | ||
435 | |||
436 | /** | ||
437 | * @return the singleton instance of the query specification | ||
438 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
439 | * | ||
440 | */ | ||
441 | public static LoopInInheritence instance() { | ||
442 | try{ | ||
443 | return LazyHolder.INSTANCE; | ||
444 | } catch (ExceptionInInitializerError err) { | ||
445 | throw processInitializerError(err); | ||
446 | } | ||
447 | } | ||
448 | |||
449 | @Override | ||
450 | protected LoopInInheritence.Matcher instantiate(final ViatraQueryEngine engine) { | ||
451 | return LoopInInheritence.Matcher.on(engine); | ||
452 | } | ||
453 | |||
454 | @Override | ||
455 | public LoopInInheritence.Matcher instantiate() { | ||
456 | return LoopInInheritence.Matcher.create(); | ||
457 | } | ||
458 | |||
459 | @Override | ||
460 | public LoopInInheritence.Match newEmptyMatch() { | ||
461 | return LoopInInheritence.Match.newEmptyMatch(); | ||
462 | } | ||
463 | |||
464 | @Override | ||
465 | public LoopInInheritence.Match newMatch(final Object... parameters) { | ||
466 | return LoopInInheritence.Match.newMatch((org.eclipse.emf.ecore.EClass) parameters[0]); | ||
467 | } | ||
468 | |||
469 | /** | ||
470 | * Inner class allowing the singleton instance of {@link JvmGenericType: ecore.LoopInInheritence (visibility: PUBLIC, simpleName: LoopInInheritence, identifier: ecore.LoopInInheritence, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ecore) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created | ||
471 | * <b>not</b> at the class load time of the outer class, | ||
472 | * but rather at the first call to {@link JvmGenericType: ecore.LoopInInheritence (visibility: PUBLIC, simpleName: LoopInInheritence, identifier: ecore.LoopInInheritence, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ecore) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. | ||
473 | * | ||
474 | * <p> This workaround is required e.g. to support recursion. | ||
475 | * | ||
476 | */ | ||
477 | private static class LazyHolder { | ||
478 | private static final LoopInInheritence INSTANCE = new LoopInInheritence(); | ||
479 | |||
480 | /** | ||
481 | * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned. | ||
482 | * This initialization order is required to support indirect recursion. | ||
483 | * | ||
484 | * <p> The static initializer is defined using a helper field to work around limitations of the code generator. | ||
485 | * | ||
486 | */ | ||
487 | private static final Object STATIC_INITIALIZER = ensureInitialized(); | ||
488 | |||
489 | public static Object ensureInitialized() { | ||
490 | INSTANCE.ensureInitializedInternal(); | ||
491 | return null; | ||
492 | } | ||
493 | } | ||
494 | |||
495 | private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { | ||
496 | private static final LoopInInheritence.GeneratedPQuery INSTANCE = new GeneratedPQuery(); | ||
497 | |||
498 | private final PParameter parameter_a = new PParameter("a", "org.eclipse.emf.ecore.EClass", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EClass")), PParameterDirection.INOUT); | ||
499 | |||
500 | private final List<PParameter> parameters = Arrays.asList(parameter_a); | ||
501 | |||
502 | private GeneratedPQuery() { | ||
503 | super(PVisibility.PUBLIC); | ||
504 | } | ||
505 | |||
506 | @Override | ||
507 | public String getFullyQualifiedName() { | ||
508 | return "ecore.loopInInheritence"; | ||
509 | } | ||
510 | |||
511 | @Override | ||
512 | public List<String> getParameterNames() { | ||
513 | return Arrays.asList("a"); | ||
514 | } | ||
515 | |||
516 | @Override | ||
517 | public List<PParameter> getParameters() { | ||
518 | return parameters; | ||
519 | } | ||
520 | |||
521 | @Override | ||
522 | public Set<PBody> doGetContainedBodies() { | ||
523 | setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); | ||
524 | Set<PBody> bodies = new LinkedHashSet<>(); | ||
525 | { | ||
526 | PBody body = new PBody(this); | ||
527 | PVariable var_a = body.getOrCreateVariableByName("a"); | ||
528 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
529 | body.setSymbolicParameters(Arrays.<ExportedParameter>asList( | ||
530 | new ExportedParameter(body, var_a, parameter_a) | ||
531 | )); | ||
532 | // find directSupertype+(a,a) | ||
533 | new BinaryTransitiveClosure(body, Tuples.flatTupleOf(var_a, var_a), DirectSupertype.instance().getInternalQueryRepresentation()); | ||
534 | bodies.add(body); | ||
535 | } | ||
536 | { | ||
537 | PAnnotation annotation = new PAnnotation("Constraint"); | ||
538 | annotation.addAttribute("key", Arrays.asList(new Object[] { | ||
539 | new ParameterReference("a") | ||
540 | })); | ||
541 | annotation.addAttribute("severity", "error"); | ||
542 | annotation.addAttribute("message", "error"); | ||
543 | addAnnotation(annotation); | ||
544 | } | ||
545 | return bodies; | ||
546 | } | ||
547 | } | ||
548 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/NonSymmetricOpposite.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/NonSymmetricOpposite.java new file mode 100644 index 00000000..d230e3f4 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/NonSymmetricOpposite.java | |||
@@ -0,0 +1,707 @@ | |||
1 | /** | ||
2 | * Generated from platform:/resource/SocialNetwork_plugin/queries/ecore/Ecore.vql | ||
3 | */ | ||
4 | package ecore; | ||
5 | |||
6 | import ecore.Opposite; | ||
7 | import java.util.Arrays; | ||
8 | import java.util.Collection; | ||
9 | import java.util.LinkedHashSet; | ||
10 | import java.util.List; | ||
11 | import java.util.Objects; | ||
12 | import java.util.Optional; | ||
13 | import java.util.Set; | ||
14 | import java.util.function.Consumer; | ||
15 | import java.util.stream.Collectors; | ||
16 | import java.util.stream.Stream; | ||
17 | import org.apache.log4j.Logger; | ||
18 | import org.eclipse.emf.ecore.EClass; | ||
19 | import org.eclipse.emf.ecore.EReference; | ||
20 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
21 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
22 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | ||
23 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; | ||
24 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; | ||
25 | import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; | ||
26 | import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; | ||
27 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; | ||
28 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | ||
29 | import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; | ||
30 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; | ||
31 | import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; | ||
32 | import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; | ||
33 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; | ||
34 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; | ||
35 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall; | ||
36 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; | ||
37 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; | ||
38 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; | ||
39 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; | ||
40 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; | ||
41 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; | ||
42 | import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; | ||
43 | |||
44 | /** | ||
45 | * A pattern-specific query specification that can instantiate Matcher in a type-safe way. | ||
46 | * | ||
47 | * <p>Original source: | ||
48 | * <code><pre> | ||
49 | * {@literal @}Constraint(key={a}, severity="error", message="error") | ||
50 | * pattern nonSymmetricOpposite(a:EReference, b:EReference) { | ||
51 | * find opposite(a,b); | ||
52 | * neg find opposite(b,a); | ||
53 | * } | ||
54 | * </pre></code> | ||
55 | * | ||
56 | * @see Matcher | ||
57 | * @see Match | ||
58 | * | ||
59 | */ | ||
60 | @SuppressWarnings("all") | ||
61 | public final class NonSymmetricOpposite extends BaseGeneratedEMFQuerySpecification<NonSymmetricOpposite.Matcher> { | ||
62 | /** | ||
63 | * Pattern-specific match representation of the ecore.nonSymmetricOpposite pattern, | ||
64 | * to be used in conjunction with {@link Matcher}. | ||
65 | * | ||
66 | * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. | ||
67 | * Each instance is a (possibly partial) substitution of pattern parameters, | ||
68 | * usable to represent a match of the pattern in the result of a query, | ||
69 | * or to specify the bound (fixed) input parameters when issuing a query. | ||
70 | * | ||
71 | * @see Matcher | ||
72 | * | ||
73 | */ | ||
74 | public static abstract class Match extends BasePatternMatch { | ||
75 | private EReference fA; | ||
76 | |||
77 | private EReference fB; | ||
78 | |||
79 | private static List<String> parameterNames = makeImmutableList("a", "b"); | ||
80 | |||
81 | private Match(final EReference pA, final EReference pB) { | ||
82 | this.fA = pA; | ||
83 | this.fB = pB; | ||
84 | } | ||
85 | |||
86 | @Override | ||
87 | public Object get(final String parameterName) { | ||
88 | if ("a".equals(parameterName)) return this.fA; | ||
89 | if ("b".equals(parameterName)) return this.fB; | ||
90 | return null; | ||
91 | } | ||
92 | |||
93 | public EReference getA() { | ||
94 | return this.fA; | ||
95 | } | ||
96 | |||
97 | public EReference getB() { | ||
98 | return this.fB; | ||
99 | } | ||
100 | |||
101 | @Override | ||
102 | public boolean set(final String parameterName, final Object newValue) { | ||
103 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
104 | if ("a".equals(parameterName) ) { | ||
105 | this.fA = (EReference) newValue; | ||
106 | return true; | ||
107 | } | ||
108 | if ("b".equals(parameterName) ) { | ||
109 | this.fB = (EReference) newValue; | ||
110 | return true; | ||
111 | } | ||
112 | return false; | ||
113 | } | ||
114 | |||
115 | public void setA(final EReference pA) { | ||
116 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
117 | this.fA = pA; | ||
118 | } | ||
119 | |||
120 | public void setB(final EReference pB) { | ||
121 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
122 | this.fB = pB; | ||
123 | } | ||
124 | |||
125 | @Override | ||
126 | public String patternName() { | ||
127 | return "ecore.nonSymmetricOpposite"; | ||
128 | } | ||
129 | |||
130 | @Override | ||
131 | public List<String> parameterNames() { | ||
132 | return NonSymmetricOpposite.Match.parameterNames; | ||
133 | } | ||
134 | |||
135 | @Override | ||
136 | public Object[] toArray() { | ||
137 | return new Object[]{fA, fB}; | ||
138 | } | ||
139 | |||
140 | @Override | ||
141 | public NonSymmetricOpposite.Match toImmutable() { | ||
142 | return isMutable() ? newMatch(fA, fB) : this; | ||
143 | } | ||
144 | |||
145 | @Override | ||
146 | public String prettyPrint() { | ||
147 | StringBuilder result = new StringBuilder(); | ||
148 | result.append("\"a\"=" + prettyPrintValue(fA) + ", "); | ||
149 | result.append("\"b\"=" + prettyPrintValue(fB)); | ||
150 | return result.toString(); | ||
151 | } | ||
152 | |||
153 | @Override | ||
154 | public int hashCode() { | ||
155 | return Objects.hash(fA, fB); | ||
156 | } | ||
157 | |||
158 | @Override | ||
159 | public boolean equals(final Object obj) { | ||
160 | if (this == obj) | ||
161 | return true; | ||
162 | if (obj == null) { | ||
163 | return false; | ||
164 | } | ||
165 | if ((obj instanceof NonSymmetricOpposite.Match)) { | ||
166 | NonSymmetricOpposite.Match other = (NonSymmetricOpposite.Match) obj; | ||
167 | return Objects.equals(fA, other.fA) && Objects.equals(fB, other.fB); | ||
168 | } else { | ||
169 | // this should be infrequent | ||
170 | if (!(obj instanceof IPatternMatch)) { | ||
171 | return false; | ||
172 | } | ||
173 | IPatternMatch otherSig = (IPatternMatch) obj; | ||
174 | return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); | ||
175 | } | ||
176 | } | ||
177 | |||
178 | @Override | ||
179 | public NonSymmetricOpposite specification() { | ||
180 | return NonSymmetricOpposite.instance(); | ||
181 | } | ||
182 | |||
183 | /** | ||
184 | * Returns an empty, mutable match. | ||
185 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
186 | * | ||
187 | * @return the empty match. | ||
188 | * | ||
189 | */ | ||
190 | public static NonSymmetricOpposite.Match newEmptyMatch() { | ||
191 | return new Mutable(null, null); | ||
192 | } | ||
193 | |||
194 | /** | ||
195 | * Returns a mutable (partial) match. | ||
196 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
197 | * | ||
198 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
199 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
200 | * @return the new, mutable (partial) match object. | ||
201 | * | ||
202 | */ | ||
203 | public static NonSymmetricOpposite.Match newMutableMatch(final EReference pA, final EReference pB) { | ||
204 | return new Mutable(pA, pB); | ||
205 | } | ||
206 | |||
207 | /** | ||
208 | * Returns a new (partial) match. | ||
209 | * This can be used e.g. to call the matcher with a partial match. | ||
210 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
211 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
212 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
213 | * @return the (partial) match object. | ||
214 | * | ||
215 | */ | ||
216 | public static NonSymmetricOpposite.Match newMatch(final EReference pA, final EReference pB) { | ||
217 | return new Immutable(pA, pB); | ||
218 | } | ||
219 | |||
220 | private static final class Mutable extends NonSymmetricOpposite.Match { | ||
221 | Mutable(final EReference pA, final EReference pB) { | ||
222 | super(pA, pB); | ||
223 | } | ||
224 | |||
225 | @Override | ||
226 | public boolean isMutable() { | ||
227 | return true; | ||
228 | } | ||
229 | } | ||
230 | |||
231 | private static final class Immutable extends NonSymmetricOpposite.Match { | ||
232 | Immutable(final EReference pA, final EReference pB) { | ||
233 | super(pA, pB); | ||
234 | } | ||
235 | |||
236 | @Override | ||
237 | public boolean isMutable() { | ||
238 | return false; | ||
239 | } | ||
240 | } | ||
241 | } | ||
242 | |||
243 | /** | ||
244 | * Generated pattern matcher API of the ecore.nonSymmetricOpposite pattern, | ||
245 | * providing pattern-specific query methods. | ||
246 | * | ||
247 | * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, | ||
248 | * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. | ||
249 | * | ||
250 | * <p>Matches of the pattern will be represented as {@link Match}. | ||
251 | * | ||
252 | * <p>Original source: | ||
253 | * <code><pre> | ||
254 | * {@literal @}Constraint(key={a}, severity="error", message="error") | ||
255 | * pattern nonSymmetricOpposite(a:EReference, b:EReference) { | ||
256 | * find opposite(a,b); | ||
257 | * neg find opposite(b,a); | ||
258 | * } | ||
259 | * </pre></code> | ||
260 | * | ||
261 | * @see Match | ||
262 | * @see NonSymmetricOpposite | ||
263 | * | ||
264 | */ | ||
265 | public static class Matcher extends BaseMatcher<NonSymmetricOpposite.Match> { | ||
266 | /** | ||
267 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
268 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
269 | * | ||
270 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
271 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
272 | * | ||
273 | */ | ||
274 | public static NonSymmetricOpposite.Matcher on(final ViatraQueryEngine engine) { | ||
275 | // check if matcher already exists | ||
276 | Matcher matcher = engine.getExistingMatcher(querySpecification()); | ||
277 | if (matcher == null) { | ||
278 | matcher = (Matcher)engine.getMatcher(querySpecification()); | ||
279 | } | ||
280 | return matcher; | ||
281 | } | ||
282 | |||
283 | /** | ||
284 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
285 | * @return an initialized matcher | ||
286 | * @noreference This method is for internal matcher initialization by the framework, do not call it manually. | ||
287 | * | ||
288 | */ | ||
289 | public static NonSymmetricOpposite.Matcher create() { | ||
290 | return new Matcher(); | ||
291 | } | ||
292 | |||
293 | private static final int POSITION_A = 0; | ||
294 | |||
295 | private static final int POSITION_B = 1; | ||
296 | |||
297 | private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(NonSymmetricOpposite.Matcher.class); | ||
298 | |||
299 | /** | ||
300 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
301 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
302 | * | ||
303 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
304 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
305 | * | ||
306 | */ | ||
307 | private Matcher() { | ||
308 | super(querySpecification()); | ||
309 | } | ||
310 | |||
311 | /** | ||
312 | * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. | ||
313 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
314 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
315 | * @return matches represented as a Match object. | ||
316 | * | ||
317 | */ | ||
318 | public Collection<NonSymmetricOpposite.Match> getAllMatches(final EReference pA, final EReference pB) { | ||
319 | return rawStreamAllMatches(new Object[]{pA, pB}).collect(Collectors.toSet()); | ||
320 | } | ||
321 | |||
322 | /** | ||
323 | * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. | ||
324 | * </p> | ||
325 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
326 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
327 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
328 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
329 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
330 | * @return a stream of matches represented as a Match object. | ||
331 | * | ||
332 | */ | ||
333 | public Stream<NonSymmetricOpposite.Match> streamAllMatches(final EReference pA, final EReference pB) { | ||
334 | return rawStreamAllMatches(new Object[]{pA, pB}); | ||
335 | } | ||
336 | |||
337 | /** | ||
338 | * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
339 | * Neither determinism nor randomness of selection is guaranteed. | ||
340 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
341 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
342 | * @return a match represented as a Match object, or null if no match is found. | ||
343 | * | ||
344 | */ | ||
345 | public Optional<NonSymmetricOpposite.Match> getOneArbitraryMatch(final EReference pA, final EReference pB) { | ||
346 | return rawGetOneArbitraryMatch(new Object[]{pA, pB}); | ||
347 | } | ||
348 | |||
349 | /** | ||
350 | * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, | ||
351 | * under any possible substitution of the unspecified parameters (if any). | ||
352 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
353 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
354 | * @return true if the input is a valid (partial) match of the pattern. | ||
355 | * | ||
356 | */ | ||
357 | public boolean hasMatch(final EReference pA, final EReference pB) { | ||
358 | return rawHasMatch(new Object[]{pA, pB}); | ||
359 | } | ||
360 | |||
361 | /** | ||
362 | * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. | ||
363 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
364 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
365 | * @return the number of pattern matches found. | ||
366 | * | ||
367 | */ | ||
368 | public int countMatches(final EReference pA, final EReference pB) { | ||
369 | return rawCountMatches(new Object[]{pA, pB}); | ||
370 | } | ||
371 | |||
372 | /** | ||
373 | * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
374 | * Neither determinism nor randomness of selection is guaranteed. | ||
375 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
376 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
377 | * @param processor the action that will process the selected match. | ||
378 | * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked | ||
379 | * | ||
380 | */ | ||
381 | public boolean forOneArbitraryMatch(final EReference pA, final EReference pB, final Consumer<? super NonSymmetricOpposite.Match> processor) { | ||
382 | return rawForOneArbitraryMatch(new Object[]{pA, pB}, processor); | ||
383 | } | ||
384 | |||
385 | /** | ||
386 | * Returns a new (partial) match. | ||
387 | * This can be used e.g. to call the matcher with a partial match. | ||
388 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
389 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
390 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
391 | * @return the (partial) match object. | ||
392 | * | ||
393 | */ | ||
394 | public NonSymmetricOpposite.Match newMatch(final EReference pA, final EReference pB) { | ||
395 | return NonSymmetricOpposite.Match.newMatch(pA, pB); | ||
396 | } | ||
397 | |||
398 | /** | ||
399 | * Retrieve the set of values that occur in matches for a. | ||
400 | * @return the Set of all values or empty set if there are no matches | ||
401 | * | ||
402 | */ | ||
403 | protected Stream<EReference> rawStreamAllValuesOfa(final Object[] parameters) { | ||
404 | return rawStreamAllValues(POSITION_A, parameters).map(EReference.class::cast); | ||
405 | } | ||
406 | |||
407 | /** | ||
408 | * Retrieve the set of values that occur in matches for a. | ||
409 | * @return the Set of all values or empty set if there are no matches | ||
410 | * | ||
411 | */ | ||
412 | public Set<EReference> getAllValuesOfa() { | ||
413 | return rawStreamAllValuesOfa(emptyArray()).collect(Collectors.toSet()); | ||
414 | } | ||
415 | |||
416 | /** | ||
417 | * Retrieve the set of values that occur in matches for a. | ||
418 | * @return the Set of all values or empty set if there are no matches | ||
419 | * | ||
420 | */ | ||
421 | public Stream<EReference> streamAllValuesOfa() { | ||
422 | return rawStreamAllValuesOfa(emptyArray()); | ||
423 | } | ||
424 | |||
425 | /** | ||
426 | * Retrieve the set of values that occur in matches for a. | ||
427 | * </p> | ||
428 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
429 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
430 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
431 | * | ||
432 | * @return the Stream of all values or empty set if there are no matches | ||
433 | * | ||
434 | */ | ||
435 | public Stream<EReference> streamAllValuesOfa(final NonSymmetricOpposite.Match partialMatch) { | ||
436 | return rawStreamAllValuesOfa(partialMatch.toArray()); | ||
437 | } | ||
438 | |||
439 | /** | ||
440 | * Retrieve the set of values that occur in matches for a. | ||
441 | * </p> | ||
442 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
443 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
444 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
445 | * | ||
446 | * @return the Stream of all values or empty set if there are no matches | ||
447 | * | ||
448 | */ | ||
449 | public Stream<EReference> streamAllValuesOfa(final EReference pB) { | ||
450 | return rawStreamAllValuesOfa(new Object[]{null, pB}); | ||
451 | } | ||
452 | |||
453 | /** | ||
454 | * Retrieve the set of values that occur in matches for a. | ||
455 | * @return the Set of all values or empty set if there are no matches | ||
456 | * | ||
457 | */ | ||
458 | public Set<EReference> getAllValuesOfa(final NonSymmetricOpposite.Match partialMatch) { | ||
459 | return rawStreamAllValuesOfa(partialMatch.toArray()).collect(Collectors.toSet()); | ||
460 | } | ||
461 | |||
462 | /** | ||
463 | * Retrieve the set of values that occur in matches for a. | ||
464 | * @return the Set of all values or empty set if there are no matches | ||
465 | * | ||
466 | */ | ||
467 | public Set<EReference> getAllValuesOfa(final EReference pB) { | ||
468 | return rawStreamAllValuesOfa(new Object[]{null, pB}).collect(Collectors.toSet()); | ||
469 | } | ||
470 | |||
471 | /** | ||
472 | * Retrieve the set of values that occur in matches for b. | ||
473 | * @return the Set of all values or empty set if there are no matches | ||
474 | * | ||
475 | */ | ||
476 | protected Stream<EReference> rawStreamAllValuesOfb(final Object[] parameters) { | ||
477 | return rawStreamAllValues(POSITION_B, parameters).map(EReference.class::cast); | ||
478 | } | ||
479 | |||
480 | /** | ||
481 | * Retrieve the set of values that occur in matches for b. | ||
482 | * @return the Set of all values or empty set if there are no matches | ||
483 | * | ||
484 | */ | ||
485 | public Set<EReference> getAllValuesOfb() { | ||
486 | return rawStreamAllValuesOfb(emptyArray()).collect(Collectors.toSet()); | ||
487 | } | ||
488 | |||
489 | /** | ||
490 | * Retrieve the set of values that occur in matches for b. | ||
491 | * @return the Set of all values or empty set if there are no matches | ||
492 | * | ||
493 | */ | ||
494 | public Stream<EReference> streamAllValuesOfb() { | ||
495 | return rawStreamAllValuesOfb(emptyArray()); | ||
496 | } | ||
497 | |||
498 | /** | ||
499 | * Retrieve the set of values that occur in matches for b. | ||
500 | * </p> | ||
501 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
502 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
503 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
504 | * | ||
505 | * @return the Stream of all values or empty set if there are no matches | ||
506 | * | ||
507 | */ | ||
508 | public Stream<EReference> streamAllValuesOfb(final NonSymmetricOpposite.Match partialMatch) { | ||
509 | return rawStreamAllValuesOfb(partialMatch.toArray()); | ||
510 | } | ||
511 | |||
512 | /** | ||
513 | * Retrieve the set of values that occur in matches for b. | ||
514 | * </p> | ||
515 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
516 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
517 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
518 | * | ||
519 | * @return the Stream of all values or empty set if there are no matches | ||
520 | * | ||
521 | */ | ||
522 | public Stream<EReference> streamAllValuesOfb(final EReference pA) { | ||
523 | return rawStreamAllValuesOfb(new Object[]{pA, null}); | ||
524 | } | ||
525 | |||
526 | /** | ||
527 | * Retrieve the set of values that occur in matches for b. | ||
528 | * @return the Set of all values or empty set if there are no matches | ||
529 | * | ||
530 | */ | ||
531 | public Set<EReference> getAllValuesOfb(final NonSymmetricOpposite.Match partialMatch) { | ||
532 | return rawStreamAllValuesOfb(partialMatch.toArray()).collect(Collectors.toSet()); | ||
533 | } | ||
534 | |||
535 | /** | ||
536 | * Retrieve the set of values that occur in matches for b. | ||
537 | * @return the Set of all values or empty set if there are no matches | ||
538 | * | ||
539 | */ | ||
540 | public Set<EReference> getAllValuesOfb(final EReference pA) { | ||
541 | return rawStreamAllValuesOfb(new Object[]{pA, null}).collect(Collectors.toSet()); | ||
542 | } | ||
543 | |||
544 | @Override | ||
545 | protected NonSymmetricOpposite.Match tupleToMatch(final Tuple t) { | ||
546 | try { | ||
547 | return NonSymmetricOpposite.Match.newMatch((EReference) t.get(POSITION_A), (EReference) t.get(POSITION_B)); | ||
548 | } catch(ClassCastException e) { | ||
549 | LOGGER.error("Element(s) in tuple not properly typed!",e); | ||
550 | return null; | ||
551 | } | ||
552 | } | ||
553 | |||
554 | @Override | ||
555 | protected NonSymmetricOpposite.Match arrayToMatch(final Object[] match) { | ||
556 | try { | ||
557 | return NonSymmetricOpposite.Match.newMatch((EReference) match[POSITION_A], (EReference) match[POSITION_B]); | ||
558 | } catch(ClassCastException e) { | ||
559 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
560 | return null; | ||
561 | } | ||
562 | } | ||
563 | |||
564 | @Override | ||
565 | protected NonSymmetricOpposite.Match arrayToMatchMutable(final Object[] match) { | ||
566 | try { | ||
567 | return NonSymmetricOpposite.Match.newMutableMatch((EReference) match[POSITION_A], (EReference) match[POSITION_B]); | ||
568 | } catch(ClassCastException e) { | ||
569 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
570 | return null; | ||
571 | } | ||
572 | } | ||
573 | |||
574 | /** | ||
575 | * @return the singleton instance of the query specification of this pattern | ||
576 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
577 | * | ||
578 | */ | ||
579 | public static IQuerySpecification<NonSymmetricOpposite.Matcher> querySpecification() { | ||
580 | return NonSymmetricOpposite.instance(); | ||
581 | } | ||
582 | } | ||
583 | |||
584 | private NonSymmetricOpposite() { | ||
585 | super(GeneratedPQuery.INSTANCE); | ||
586 | } | ||
587 | |||
588 | /** | ||
589 | * @return the singleton instance of the query specification | ||
590 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
591 | * | ||
592 | */ | ||
593 | public static NonSymmetricOpposite instance() { | ||
594 | try{ | ||
595 | return LazyHolder.INSTANCE; | ||
596 | } catch (ExceptionInInitializerError err) { | ||
597 | throw processInitializerError(err); | ||
598 | } | ||
599 | } | ||
600 | |||
601 | @Override | ||
602 | protected NonSymmetricOpposite.Matcher instantiate(final ViatraQueryEngine engine) { | ||
603 | return NonSymmetricOpposite.Matcher.on(engine); | ||
604 | } | ||
605 | |||
606 | @Override | ||
607 | public NonSymmetricOpposite.Matcher instantiate() { | ||
608 | return NonSymmetricOpposite.Matcher.create(); | ||
609 | } | ||
610 | |||
611 | @Override | ||
612 | public NonSymmetricOpposite.Match newEmptyMatch() { | ||
613 | return NonSymmetricOpposite.Match.newEmptyMatch(); | ||
614 | } | ||
615 | |||
616 | @Override | ||
617 | public NonSymmetricOpposite.Match newMatch(final Object... parameters) { | ||
618 | return NonSymmetricOpposite.Match.newMatch((org.eclipse.emf.ecore.EReference) parameters[0], (org.eclipse.emf.ecore.EReference) parameters[1]); | ||
619 | } | ||
620 | |||
621 | /** | ||
622 | * Inner class allowing the singleton instance of {@link JvmGenericType: ecore.NonSymmetricOpposite (visibility: PUBLIC, simpleName: NonSymmetricOpposite, identifier: ecore.NonSymmetricOpposite, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ecore) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created | ||
623 | * <b>not</b> at the class load time of the outer class, | ||
624 | * but rather at the first call to {@link JvmGenericType: ecore.NonSymmetricOpposite (visibility: PUBLIC, simpleName: NonSymmetricOpposite, identifier: ecore.NonSymmetricOpposite, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ecore) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. | ||
625 | * | ||
626 | * <p> This workaround is required e.g. to support recursion. | ||
627 | * | ||
628 | */ | ||
629 | private static class LazyHolder { | ||
630 | private static final NonSymmetricOpposite INSTANCE = new NonSymmetricOpposite(); | ||
631 | |||
632 | /** | ||
633 | * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned. | ||
634 | * This initialization order is required to support indirect recursion. | ||
635 | * | ||
636 | * <p> The static initializer is defined using a helper field to work around limitations of the code generator. | ||
637 | * | ||
638 | */ | ||
639 | private static final Object STATIC_INITIALIZER = ensureInitialized(); | ||
640 | |||
641 | public static Object ensureInitialized() { | ||
642 | INSTANCE.ensureInitializedInternal(); | ||
643 | return null; | ||
644 | } | ||
645 | } | ||
646 | |||
647 | private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { | ||
648 | private static final NonSymmetricOpposite.GeneratedPQuery INSTANCE = new GeneratedPQuery(); | ||
649 | |||
650 | private final PParameter parameter_a = new PParameter("a", "org.eclipse.emf.ecore.EReference", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EReference")), PParameterDirection.INOUT); | ||
651 | |||
652 | private final PParameter parameter_b = new PParameter("b", "org.eclipse.emf.ecore.EReference", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EReference")), PParameterDirection.INOUT); | ||
653 | |||
654 | private final List<PParameter> parameters = Arrays.asList(parameter_a, parameter_b); | ||
655 | |||
656 | private GeneratedPQuery() { | ||
657 | super(PVisibility.PUBLIC); | ||
658 | } | ||
659 | |||
660 | @Override | ||
661 | public String getFullyQualifiedName() { | ||
662 | return "ecore.nonSymmetricOpposite"; | ||
663 | } | ||
664 | |||
665 | @Override | ||
666 | public List<String> getParameterNames() { | ||
667 | return Arrays.asList("a","b"); | ||
668 | } | ||
669 | |||
670 | @Override | ||
671 | public List<PParameter> getParameters() { | ||
672 | return parameters; | ||
673 | } | ||
674 | |||
675 | @Override | ||
676 | public Set<PBody> doGetContainedBodies() { | ||
677 | setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); | ||
678 | Set<PBody> bodies = new LinkedHashSet<>(); | ||
679 | { | ||
680 | PBody body = new PBody(this); | ||
681 | PVariable var_a = body.getOrCreateVariableByName("a"); | ||
682 | PVariable var_b = body.getOrCreateVariableByName("b"); | ||
683 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
684 | new TypeConstraint(body, Tuples.flatTupleOf(var_b), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
685 | body.setSymbolicParameters(Arrays.<ExportedParameter>asList( | ||
686 | new ExportedParameter(body, var_a, parameter_a), | ||
687 | new ExportedParameter(body, var_b, parameter_b) | ||
688 | )); | ||
689 | // find opposite(a,b) | ||
690 | new PositivePatternCall(body, Tuples.flatTupleOf(var_a, var_b), Opposite.instance().getInternalQueryRepresentation()); | ||
691 | // neg find opposite(b,a) | ||
692 | new NegativePatternCall(body, Tuples.flatTupleOf(var_b, var_a), Opposite.instance().getInternalQueryRepresentation()); | ||
693 | bodies.add(body); | ||
694 | } | ||
695 | { | ||
696 | PAnnotation annotation = new PAnnotation("Constraint"); | ||
697 | annotation.addAttribute("key", Arrays.asList(new Object[] { | ||
698 | new ParameterReference("a") | ||
699 | })); | ||
700 | annotation.addAttribute("severity", "error"); | ||
701 | annotation.addAttribute("message", "error"); | ||
702 | addAnnotation(annotation); | ||
703 | } | ||
704 | return bodies; | ||
705 | } | ||
706 | } | ||
707 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/Opposite.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/Opposite.java new file mode 100644 index 00000000..d826f072 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/Opposite.java | |||
@@ -0,0 +1,693 @@ | |||
1 | /** | ||
2 | * Generated from platform:/resource/SocialNetwork_plugin/queries/ecore/Ecore.vql | ||
3 | */ | ||
4 | package ecore; | ||
5 | |||
6 | import java.util.Arrays; | ||
7 | import java.util.Collection; | ||
8 | import java.util.LinkedHashSet; | ||
9 | import java.util.List; | ||
10 | import java.util.Objects; | ||
11 | import java.util.Optional; | ||
12 | import java.util.Set; | ||
13 | import java.util.function.Consumer; | ||
14 | import java.util.stream.Collectors; | ||
15 | import java.util.stream.Stream; | ||
16 | import org.apache.log4j.Logger; | ||
17 | import org.eclipse.emf.ecore.EClass; | ||
18 | import org.eclipse.emf.ecore.EReference; | ||
19 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
20 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
21 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | ||
22 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; | ||
23 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; | ||
24 | import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; | ||
25 | import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; | ||
26 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; | ||
27 | import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; | ||
28 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | ||
29 | import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; | ||
30 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; | ||
31 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; | ||
32 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; | ||
33 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; | ||
34 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; | ||
35 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; | ||
36 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; | ||
37 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; | ||
38 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; | ||
39 | import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; | ||
40 | |||
41 | /** | ||
42 | * A pattern-specific query specification that can instantiate Matcher in a type-safe way. | ||
43 | * | ||
44 | * <p>Original source: | ||
45 | * <code><pre> | ||
46 | * pattern opposite(a:EReference, b: EReference) { | ||
47 | * EReference.eOpposite(a,b); | ||
48 | * } | ||
49 | * </pre></code> | ||
50 | * | ||
51 | * @see Matcher | ||
52 | * @see Match | ||
53 | * | ||
54 | */ | ||
55 | @SuppressWarnings("all") | ||
56 | public final class Opposite extends BaseGeneratedEMFQuerySpecification<Opposite.Matcher> { | ||
57 | /** | ||
58 | * Pattern-specific match representation of the ecore.opposite pattern, | ||
59 | * to be used in conjunction with {@link Matcher}. | ||
60 | * | ||
61 | * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. | ||
62 | * Each instance is a (possibly partial) substitution of pattern parameters, | ||
63 | * usable to represent a match of the pattern in the result of a query, | ||
64 | * or to specify the bound (fixed) input parameters when issuing a query. | ||
65 | * | ||
66 | * @see Matcher | ||
67 | * | ||
68 | */ | ||
69 | public static abstract class Match extends BasePatternMatch { | ||
70 | private EReference fA; | ||
71 | |||
72 | private EReference fB; | ||
73 | |||
74 | private static List<String> parameterNames = makeImmutableList("a", "b"); | ||
75 | |||
76 | private Match(final EReference pA, final EReference pB) { | ||
77 | this.fA = pA; | ||
78 | this.fB = pB; | ||
79 | } | ||
80 | |||
81 | @Override | ||
82 | public Object get(final String parameterName) { | ||
83 | if ("a".equals(parameterName)) return this.fA; | ||
84 | if ("b".equals(parameterName)) return this.fB; | ||
85 | return null; | ||
86 | } | ||
87 | |||
88 | public EReference getA() { | ||
89 | return this.fA; | ||
90 | } | ||
91 | |||
92 | public EReference getB() { | ||
93 | return this.fB; | ||
94 | } | ||
95 | |||
96 | @Override | ||
97 | public boolean set(final String parameterName, final Object newValue) { | ||
98 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
99 | if ("a".equals(parameterName) ) { | ||
100 | this.fA = (EReference) newValue; | ||
101 | return true; | ||
102 | } | ||
103 | if ("b".equals(parameterName) ) { | ||
104 | this.fB = (EReference) newValue; | ||
105 | return true; | ||
106 | } | ||
107 | return false; | ||
108 | } | ||
109 | |||
110 | public void setA(final EReference pA) { | ||
111 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
112 | this.fA = pA; | ||
113 | } | ||
114 | |||
115 | public void setB(final EReference pB) { | ||
116 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
117 | this.fB = pB; | ||
118 | } | ||
119 | |||
120 | @Override | ||
121 | public String patternName() { | ||
122 | return "ecore.opposite"; | ||
123 | } | ||
124 | |||
125 | @Override | ||
126 | public List<String> parameterNames() { | ||
127 | return Opposite.Match.parameterNames; | ||
128 | } | ||
129 | |||
130 | @Override | ||
131 | public Object[] toArray() { | ||
132 | return new Object[]{fA, fB}; | ||
133 | } | ||
134 | |||
135 | @Override | ||
136 | public Opposite.Match toImmutable() { | ||
137 | return isMutable() ? newMatch(fA, fB) : this; | ||
138 | } | ||
139 | |||
140 | @Override | ||
141 | public String prettyPrint() { | ||
142 | StringBuilder result = new StringBuilder(); | ||
143 | result.append("\"a\"=" + prettyPrintValue(fA) + ", "); | ||
144 | result.append("\"b\"=" + prettyPrintValue(fB)); | ||
145 | return result.toString(); | ||
146 | } | ||
147 | |||
148 | @Override | ||
149 | public int hashCode() { | ||
150 | return Objects.hash(fA, fB); | ||
151 | } | ||
152 | |||
153 | @Override | ||
154 | public boolean equals(final Object obj) { | ||
155 | if (this == obj) | ||
156 | return true; | ||
157 | if (obj == null) { | ||
158 | return false; | ||
159 | } | ||
160 | if ((obj instanceof Opposite.Match)) { | ||
161 | Opposite.Match other = (Opposite.Match) obj; | ||
162 | return Objects.equals(fA, other.fA) && Objects.equals(fB, other.fB); | ||
163 | } else { | ||
164 | // this should be infrequent | ||
165 | if (!(obj instanceof IPatternMatch)) { | ||
166 | return false; | ||
167 | } | ||
168 | IPatternMatch otherSig = (IPatternMatch) obj; | ||
169 | return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); | ||
170 | } | ||
171 | } | ||
172 | |||
173 | @Override | ||
174 | public Opposite specification() { | ||
175 | return Opposite.instance(); | ||
176 | } | ||
177 | |||
178 | /** | ||
179 | * Returns an empty, mutable match. | ||
180 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
181 | * | ||
182 | * @return the empty match. | ||
183 | * | ||
184 | */ | ||
185 | public static Opposite.Match newEmptyMatch() { | ||
186 | return new Mutable(null, null); | ||
187 | } | ||
188 | |||
189 | /** | ||
190 | * Returns a mutable (partial) match. | ||
191 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
192 | * | ||
193 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
194 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
195 | * @return the new, mutable (partial) match object. | ||
196 | * | ||
197 | */ | ||
198 | public static Opposite.Match newMutableMatch(final EReference pA, final EReference pB) { | ||
199 | return new Mutable(pA, pB); | ||
200 | } | ||
201 | |||
202 | /** | ||
203 | * Returns a new (partial) match. | ||
204 | * This can be used e.g. to call the matcher with a partial match. | ||
205 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
206 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
207 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
208 | * @return the (partial) match object. | ||
209 | * | ||
210 | */ | ||
211 | public static Opposite.Match newMatch(final EReference pA, final EReference pB) { | ||
212 | return new Immutable(pA, pB); | ||
213 | } | ||
214 | |||
215 | private static final class Mutable extends Opposite.Match { | ||
216 | Mutable(final EReference pA, final EReference pB) { | ||
217 | super(pA, pB); | ||
218 | } | ||
219 | |||
220 | @Override | ||
221 | public boolean isMutable() { | ||
222 | return true; | ||
223 | } | ||
224 | } | ||
225 | |||
226 | private static final class Immutable extends Opposite.Match { | ||
227 | Immutable(final EReference pA, final EReference pB) { | ||
228 | super(pA, pB); | ||
229 | } | ||
230 | |||
231 | @Override | ||
232 | public boolean isMutable() { | ||
233 | return false; | ||
234 | } | ||
235 | } | ||
236 | } | ||
237 | |||
238 | /** | ||
239 | * Generated pattern matcher API of the ecore.opposite pattern, | ||
240 | * providing pattern-specific query methods. | ||
241 | * | ||
242 | * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, | ||
243 | * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. | ||
244 | * | ||
245 | * <p>Matches of the pattern will be represented as {@link Match}. | ||
246 | * | ||
247 | * <p>Original source: | ||
248 | * <code><pre> | ||
249 | * pattern opposite(a:EReference, b: EReference) { | ||
250 | * EReference.eOpposite(a,b); | ||
251 | * } | ||
252 | * </pre></code> | ||
253 | * | ||
254 | * @see Match | ||
255 | * @see Opposite | ||
256 | * | ||
257 | */ | ||
258 | public static class Matcher extends BaseMatcher<Opposite.Match> { | ||
259 | /** | ||
260 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
261 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
262 | * | ||
263 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
264 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
265 | * | ||
266 | */ | ||
267 | public static Opposite.Matcher on(final ViatraQueryEngine engine) { | ||
268 | // check if matcher already exists | ||
269 | Matcher matcher = engine.getExistingMatcher(querySpecification()); | ||
270 | if (matcher == null) { | ||
271 | matcher = (Matcher)engine.getMatcher(querySpecification()); | ||
272 | } | ||
273 | return matcher; | ||
274 | } | ||
275 | |||
276 | /** | ||
277 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
278 | * @return an initialized matcher | ||
279 | * @noreference This method is for internal matcher initialization by the framework, do not call it manually. | ||
280 | * | ||
281 | */ | ||
282 | public static Opposite.Matcher create() { | ||
283 | return new Matcher(); | ||
284 | } | ||
285 | |||
286 | private static final int POSITION_A = 0; | ||
287 | |||
288 | private static final int POSITION_B = 1; | ||
289 | |||
290 | private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(Opposite.Matcher.class); | ||
291 | |||
292 | /** | ||
293 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
294 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
295 | * | ||
296 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
297 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
298 | * | ||
299 | */ | ||
300 | private Matcher() { | ||
301 | super(querySpecification()); | ||
302 | } | ||
303 | |||
304 | /** | ||
305 | * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. | ||
306 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
307 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
308 | * @return matches represented as a Match object. | ||
309 | * | ||
310 | */ | ||
311 | public Collection<Opposite.Match> getAllMatches(final EReference pA, final EReference pB) { | ||
312 | return rawStreamAllMatches(new Object[]{pA, pB}).collect(Collectors.toSet()); | ||
313 | } | ||
314 | |||
315 | /** | ||
316 | * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. | ||
317 | * </p> | ||
318 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
319 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
320 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
321 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
322 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
323 | * @return a stream of matches represented as a Match object. | ||
324 | * | ||
325 | */ | ||
326 | public Stream<Opposite.Match> streamAllMatches(final EReference pA, final EReference pB) { | ||
327 | return rawStreamAllMatches(new Object[]{pA, pB}); | ||
328 | } | ||
329 | |||
330 | /** | ||
331 | * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
332 | * Neither determinism nor randomness of selection is guaranteed. | ||
333 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
334 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
335 | * @return a match represented as a Match object, or null if no match is found. | ||
336 | * | ||
337 | */ | ||
338 | public Optional<Opposite.Match> getOneArbitraryMatch(final EReference pA, final EReference pB) { | ||
339 | return rawGetOneArbitraryMatch(new Object[]{pA, pB}); | ||
340 | } | ||
341 | |||
342 | /** | ||
343 | * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, | ||
344 | * under any possible substitution of the unspecified parameters (if any). | ||
345 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
346 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
347 | * @return true if the input is a valid (partial) match of the pattern. | ||
348 | * | ||
349 | */ | ||
350 | public boolean hasMatch(final EReference pA, final EReference pB) { | ||
351 | return rawHasMatch(new Object[]{pA, pB}); | ||
352 | } | ||
353 | |||
354 | /** | ||
355 | * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. | ||
356 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
357 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
358 | * @return the number of pattern matches found. | ||
359 | * | ||
360 | */ | ||
361 | public int countMatches(final EReference pA, final EReference pB) { | ||
362 | return rawCountMatches(new Object[]{pA, pB}); | ||
363 | } | ||
364 | |||
365 | /** | ||
366 | * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
367 | * Neither determinism nor randomness of selection is guaranteed. | ||
368 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
369 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
370 | * @param processor the action that will process the selected match. | ||
371 | * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked | ||
372 | * | ||
373 | */ | ||
374 | public boolean forOneArbitraryMatch(final EReference pA, final EReference pB, final Consumer<? super Opposite.Match> processor) { | ||
375 | return rawForOneArbitraryMatch(new Object[]{pA, pB}, processor); | ||
376 | } | ||
377 | |||
378 | /** | ||
379 | * Returns a new (partial) match. | ||
380 | * This can be used e.g. to call the matcher with a partial match. | ||
381 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
382 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
383 | * @param pB the fixed value of pattern parameter b, or null if not bound. | ||
384 | * @return the (partial) match object. | ||
385 | * | ||
386 | */ | ||
387 | public Opposite.Match newMatch(final EReference pA, final EReference pB) { | ||
388 | return Opposite.Match.newMatch(pA, pB); | ||
389 | } | ||
390 | |||
391 | /** | ||
392 | * Retrieve the set of values that occur in matches for a. | ||
393 | * @return the Set of all values or empty set if there are no matches | ||
394 | * | ||
395 | */ | ||
396 | protected Stream<EReference> rawStreamAllValuesOfa(final Object[] parameters) { | ||
397 | return rawStreamAllValues(POSITION_A, parameters).map(EReference.class::cast); | ||
398 | } | ||
399 | |||
400 | /** | ||
401 | * Retrieve the set of values that occur in matches for a. | ||
402 | * @return the Set of all values or empty set if there are no matches | ||
403 | * | ||
404 | */ | ||
405 | public Set<EReference> getAllValuesOfa() { | ||
406 | return rawStreamAllValuesOfa(emptyArray()).collect(Collectors.toSet()); | ||
407 | } | ||
408 | |||
409 | /** | ||
410 | * Retrieve the set of values that occur in matches for a. | ||
411 | * @return the Set of all values or empty set if there are no matches | ||
412 | * | ||
413 | */ | ||
414 | public Stream<EReference> streamAllValuesOfa() { | ||
415 | return rawStreamAllValuesOfa(emptyArray()); | ||
416 | } | ||
417 | |||
418 | /** | ||
419 | * Retrieve the set of values that occur in matches for a. | ||
420 | * </p> | ||
421 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
422 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
423 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
424 | * | ||
425 | * @return the Stream of all values or empty set if there are no matches | ||
426 | * | ||
427 | */ | ||
428 | public Stream<EReference> streamAllValuesOfa(final Opposite.Match partialMatch) { | ||
429 | return rawStreamAllValuesOfa(partialMatch.toArray()); | ||
430 | } | ||
431 | |||
432 | /** | ||
433 | * Retrieve the set of values that occur in matches for a. | ||
434 | * </p> | ||
435 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
436 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
437 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
438 | * | ||
439 | * @return the Stream of all values or empty set if there are no matches | ||
440 | * | ||
441 | */ | ||
442 | public Stream<EReference> streamAllValuesOfa(final EReference pB) { | ||
443 | return rawStreamAllValuesOfa(new Object[]{null, pB}); | ||
444 | } | ||
445 | |||
446 | /** | ||
447 | * Retrieve the set of values that occur in matches for a. | ||
448 | * @return the Set of all values or empty set if there are no matches | ||
449 | * | ||
450 | */ | ||
451 | public Set<EReference> getAllValuesOfa(final Opposite.Match partialMatch) { | ||
452 | return rawStreamAllValuesOfa(partialMatch.toArray()).collect(Collectors.toSet()); | ||
453 | } | ||
454 | |||
455 | /** | ||
456 | * Retrieve the set of values that occur in matches for a. | ||
457 | * @return the Set of all values or empty set if there are no matches | ||
458 | * | ||
459 | */ | ||
460 | public Set<EReference> getAllValuesOfa(final EReference pB) { | ||
461 | return rawStreamAllValuesOfa(new Object[]{null, pB}).collect(Collectors.toSet()); | ||
462 | } | ||
463 | |||
464 | /** | ||
465 | * Retrieve the set of values that occur in matches for b. | ||
466 | * @return the Set of all values or empty set if there are no matches | ||
467 | * | ||
468 | */ | ||
469 | protected Stream<EReference> rawStreamAllValuesOfb(final Object[] parameters) { | ||
470 | return rawStreamAllValues(POSITION_B, parameters).map(EReference.class::cast); | ||
471 | } | ||
472 | |||
473 | /** | ||
474 | * Retrieve the set of values that occur in matches for b. | ||
475 | * @return the Set of all values or empty set if there are no matches | ||
476 | * | ||
477 | */ | ||
478 | public Set<EReference> getAllValuesOfb() { | ||
479 | return rawStreamAllValuesOfb(emptyArray()).collect(Collectors.toSet()); | ||
480 | } | ||
481 | |||
482 | /** | ||
483 | * Retrieve the set of values that occur in matches for b. | ||
484 | * @return the Set of all values or empty set if there are no matches | ||
485 | * | ||
486 | */ | ||
487 | public Stream<EReference> streamAllValuesOfb() { | ||
488 | return rawStreamAllValuesOfb(emptyArray()); | ||
489 | } | ||
490 | |||
491 | /** | ||
492 | * Retrieve the set of values that occur in matches for b. | ||
493 | * </p> | ||
494 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
495 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
496 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
497 | * | ||
498 | * @return the Stream of all values or empty set if there are no matches | ||
499 | * | ||
500 | */ | ||
501 | public Stream<EReference> streamAllValuesOfb(final Opposite.Match partialMatch) { | ||
502 | return rawStreamAllValuesOfb(partialMatch.toArray()); | ||
503 | } | ||
504 | |||
505 | /** | ||
506 | * Retrieve the set of values that occur in matches for b. | ||
507 | * </p> | ||
508 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
509 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
510 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
511 | * | ||
512 | * @return the Stream of all values or empty set if there are no matches | ||
513 | * | ||
514 | */ | ||
515 | public Stream<EReference> streamAllValuesOfb(final EReference pA) { | ||
516 | return rawStreamAllValuesOfb(new Object[]{pA, null}); | ||
517 | } | ||
518 | |||
519 | /** | ||
520 | * Retrieve the set of values that occur in matches for b. | ||
521 | * @return the Set of all values or empty set if there are no matches | ||
522 | * | ||
523 | */ | ||
524 | public Set<EReference> getAllValuesOfb(final Opposite.Match partialMatch) { | ||
525 | return rawStreamAllValuesOfb(partialMatch.toArray()).collect(Collectors.toSet()); | ||
526 | } | ||
527 | |||
528 | /** | ||
529 | * Retrieve the set of values that occur in matches for b. | ||
530 | * @return the Set of all values or empty set if there are no matches | ||
531 | * | ||
532 | */ | ||
533 | public Set<EReference> getAllValuesOfb(final EReference pA) { | ||
534 | return rawStreamAllValuesOfb(new Object[]{pA, null}).collect(Collectors.toSet()); | ||
535 | } | ||
536 | |||
537 | @Override | ||
538 | protected Opposite.Match tupleToMatch(final Tuple t) { | ||
539 | try { | ||
540 | return Opposite.Match.newMatch((EReference) t.get(POSITION_A), (EReference) t.get(POSITION_B)); | ||
541 | } catch(ClassCastException e) { | ||
542 | LOGGER.error("Element(s) in tuple not properly typed!",e); | ||
543 | return null; | ||
544 | } | ||
545 | } | ||
546 | |||
547 | @Override | ||
548 | protected Opposite.Match arrayToMatch(final Object[] match) { | ||
549 | try { | ||
550 | return Opposite.Match.newMatch((EReference) match[POSITION_A], (EReference) match[POSITION_B]); | ||
551 | } catch(ClassCastException e) { | ||
552 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
553 | return null; | ||
554 | } | ||
555 | } | ||
556 | |||
557 | @Override | ||
558 | protected Opposite.Match arrayToMatchMutable(final Object[] match) { | ||
559 | try { | ||
560 | return Opposite.Match.newMutableMatch((EReference) match[POSITION_A], (EReference) match[POSITION_B]); | ||
561 | } catch(ClassCastException e) { | ||
562 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
563 | return null; | ||
564 | } | ||
565 | } | ||
566 | |||
567 | /** | ||
568 | * @return the singleton instance of the query specification of this pattern | ||
569 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
570 | * | ||
571 | */ | ||
572 | public static IQuerySpecification<Opposite.Matcher> querySpecification() { | ||
573 | return Opposite.instance(); | ||
574 | } | ||
575 | } | ||
576 | |||
577 | private Opposite() { | ||
578 | super(GeneratedPQuery.INSTANCE); | ||
579 | } | ||
580 | |||
581 | /** | ||
582 | * @return the singleton instance of the query specification | ||
583 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
584 | * | ||
585 | */ | ||
586 | public static Opposite instance() { | ||
587 | try{ | ||
588 | return LazyHolder.INSTANCE; | ||
589 | } catch (ExceptionInInitializerError err) { | ||
590 | throw processInitializerError(err); | ||
591 | } | ||
592 | } | ||
593 | |||
594 | @Override | ||
595 | protected Opposite.Matcher instantiate(final ViatraQueryEngine engine) { | ||
596 | return Opposite.Matcher.on(engine); | ||
597 | } | ||
598 | |||
599 | @Override | ||
600 | public Opposite.Matcher instantiate() { | ||
601 | return Opposite.Matcher.create(); | ||
602 | } | ||
603 | |||
604 | @Override | ||
605 | public Opposite.Match newEmptyMatch() { | ||
606 | return Opposite.Match.newEmptyMatch(); | ||
607 | } | ||
608 | |||
609 | @Override | ||
610 | public Opposite.Match newMatch(final Object... parameters) { | ||
611 | return Opposite.Match.newMatch((org.eclipse.emf.ecore.EReference) parameters[0], (org.eclipse.emf.ecore.EReference) parameters[1]); | ||
612 | } | ||
613 | |||
614 | /** | ||
615 | * Inner class allowing the singleton instance of {@link JvmGenericType: ecore.Opposite (visibility: PUBLIC, simpleName: Opposite, identifier: ecore.Opposite, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ecore) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created | ||
616 | * <b>not</b> at the class load time of the outer class, | ||
617 | * but rather at the first call to {@link JvmGenericType: ecore.Opposite (visibility: PUBLIC, simpleName: Opposite, identifier: ecore.Opposite, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ecore) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. | ||
618 | * | ||
619 | * <p> This workaround is required e.g. to support recursion. | ||
620 | * | ||
621 | */ | ||
622 | private static class LazyHolder { | ||
623 | private static final Opposite INSTANCE = new Opposite(); | ||
624 | |||
625 | /** | ||
626 | * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned. | ||
627 | * This initialization order is required to support indirect recursion. | ||
628 | * | ||
629 | * <p> The static initializer is defined using a helper field to work around limitations of the code generator. | ||
630 | * | ||
631 | */ | ||
632 | private static final Object STATIC_INITIALIZER = ensureInitialized(); | ||
633 | |||
634 | public static Object ensureInitialized() { | ||
635 | INSTANCE.ensureInitializedInternal(); | ||
636 | return null; | ||
637 | } | ||
638 | } | ||
639 | |||
640 | private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { | ||
641 | private static final Opposite.GeneratedPQuery INSTANCE = new GeneratedPQuery(); | ||
642 | |||
643 | private final PParameter parameter_a = new PParameter("a", "org.eclipse.emf.ecore.EReference", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EReference")), PParameterDirection.INOUT); | ||
644 | |||
645 | private final PParameter parameter_b = new PParameter("b", "org.eclipse.emf.ecore.EReference", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EReference")), PParameterDirection.INOUT); | ||
646 | |||
647 | private final List<PParameter> parameters = Arrays.asList(parameter_a, parameter_b); | ||
648 | |||
649 | private GeneratedPQuery() { | ||
650 | super(PVisibility.PUBLIC); | ||
651 | } | ||
652 | |||
653 | @Override | ||
654 | public String getFullyQualifiedName() { | ||
655 | return "ecore.opposite"; | ||
656 | } | ||
657 | |||
658 | @Override | ||
659 | public List<String> getParameterNames() { | ||
660 | return Arrays.asList("a","b"); | ||
661 | } | ||
662 | |||
663 | @Override | ||
664 | public List<PParameter> getParameters() { | ||
665 | return parameters; | ||
666 | } | ||
667 | |||
668 | @Override | ||
669 | public Set<PBody> doGetContainedBodies() { | ||
670 | setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); | ||
671 | Set<PBody> bodies = new LinkedHashSet<>(); | ||
672 | { | ||
673 | PBody body = new PBody(this); | ||
674 | PVariable var_a = body.getOrCreateVariableByName("a"); | ||
675 | PVariable var_b = body.getOrCreateVariableByName("b"); | ||
676 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
677 | new TypeConstraint(body, Tuples.flatTupleOf(var_b), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
678 | body.setSymbolicParameters(Arrays.<ExportedParameter>asList( | ||
679 | new ExportedParameter(body, var_a, parameter_a), | ||
680 | new ExportedParameter(body, var_b, parameter_b) | ||
681 | )); | ||
682 | // EReference.eOpposite(a,b) | ||
683 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
684 | PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); | ||
685 | new TypeConstraint(body, Tuples.flatTupleOf(var_a, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference", "eOpposite"))); | ||
686 | new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
687 | new Equality(body, var__virtual_0_, var_b); | ||
688 | bodies.add(body); | ||
689 | } | ||
690 | return bodies; | ||
691 | } | ||
692 | } | ||
693 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/OppositeDifferentClass.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/OppositeDifferentClass.java new file mode 100644 index 00000000..3a0df648 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/OppositeDifferentClass.java | |||
@@ -0,0 +1,577 @@ | |||
1 | /** | ||
2 | * Generated from platform:/resource/SocialNetwork_plugin/queries/ecore/Ecore.vql | ||
3 | */ | ||
4 | package ecore; | ||
5 | |||
6 | import java.util.Arrays; | ||
7 | import java.util.Collection; | ||
8 | import java.util.LinkedHashSet; | ||
9 | import java.util.List; | ||
10 | import java.util.Objects; | ||
11 | import java.util.Optional; | ||
12 | import java.util.Set; | ||
13 | import java.util.function.Consumer; | ||
14 | import java.util.stream.Collectors; | ||
15 | import java.util.stream.Stream; | ||
16 | import org.apache.log4j.Logger; | ||
17 | import org.eclipse.emf.ecore.EClass; | ||
18 | import org.eclipse.emf.ecore.EReference; | ||
19 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
20 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | ||
21 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | ||
22 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; | ||
23 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; | ||
24 | import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; | ||
25 | import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; | ||
26 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; | ||
27 | import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; | ||
28 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | ||
29 | import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; | ||
30 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; | ||
31 | import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; | ||
32 | import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; | ||
33 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; | ||
34 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; | ||
35 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality; | ||
36 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; | ||
37 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; | ||
38 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; | ||
39 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; | ||
40 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; | ||
41 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; | ||
42 | import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; | ||
43 | |||
44 | /** | ||
45 | * A pattern-specific query specification that can instantiate Matcher in a type-safe way. | ||
46 | * | ||
47 | * <p>Original source: | ||
48 | * <code><pre> | ||
49 | * {@literal @}Constraint(key={a}, severity="error", message="error") | ||
50 | * pattern oppositeDifferentClass(a:EReference) { | ||
51 | * EReference.eOpposite(a,b); | ||
52 | * EReference.eContainingClass(a,aContaining); | ||
53 | * EReference.eType(b,bTarget); | ||
54 | * aContaining != bTarget; | ||
55 | * } | ||
56 | * </pre></code> | ||
57 | * | ||
58 | * @see Matcher | ||
59 | * @see Match | ||
60 | * | ||
61 | */ | ||
62 | @SuppressWarnings("all") | ||
63 | public final class OppositeDifferentClass extends BaseGeneratedEMFQuerySpecification<OppositeDifferentClass.Matcher> { | ||
64 | /** | ||
65 | * Pattern-specific match representation of the ecore.oppositeDifferentClass pattern, | ||
66 | * to be used in conjunction with {@link Matcher}. | ||
67 | * | ||
68 | * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. | ||
69 | * Each instance is a (possibly partial) substitution of pattern parameters, | ||
70 | * usable to represent a match of the pattern in the result of a query, | ||
71 | * or to specify the bound (fixed) input parameters when issuing a query. | ||
72 | * | ||
73 | * @see Matcher | ||
74 | * | ||
75 | */ | ||
76 | public static abstract class Match extends BasePatternMatch { | ||
77 | private EReference fA; | ||
78 | |||
79 | private static List<String> parameterNames = makeImmutableList("a"); | ||
80 | |||
81 | private Match(final EReference pA) { | ||
82 | this.fA = pA; | ||
83 | } | ||
84 | |||
85 | @Override | ||
86 | public Object get(final String parameterName) { | ||
87 | if ("a".equals(parameterName)) return this.fA; | ||
88 | return null; | ||
89 | } | ||
90 | |||
91 | public EReference getA() { | ||
92 | return this.fA; | ||
93 | } | ||
94 | |||
95 | @Override | ||
96 | public boolean set(final String parameterName, final Object newValue) { | ||
97 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
98 | if ("a".equals(parameterName) ) { | ||
99 | this.fA = (EReference) newValue; | ||
100 | return true; | ||
101 | } | ||
102 | return false; | ||
103 | } | ||
104 | |||
105 | public void setA(final EReference pA) { | ||
106 | if (!isMutable()) throw new java.lang.UnsupportedOperationException(); | ||
107 | this.fA = pA; | ||
108 | } | ||
109 | |||
110 | @Override | ||
111 | public String patternName() { | ||
112 | return "ecore.oppositeDifferentClass"; | ||
113 | } | ||
114 | |||
115 | @Override | ||
116 | public List<String> parameterNames() { | ||
117 | return OppositeDifferentClass.Match.parameterNames; | ||
118 | } | ||
119 | |||
120 | @Override | ||
121 | public Object[] toArray() { | ||
122 | return new Object[]{fA}; | ||
123 | } | ||
124 | |||
125 | @Override | ||
126 | public OppositeDifferentClass.Match toImmutable() { | ||
127 | return isMutable() ? newMatch(fA) : this; | ||
128 | } | ||
129 | |||
130 | @Override | ||
131 | public String prettyPrint() { | ||
132 | StringBuilder result = new StringBuilder(); | ||
133 | result.append("\"a\"=" + prettyPrintValue(fA)); | ||
134 | return result.toString(); | ||
135 | } | ||
136 | |||
137 | @Override | ||
138 | public int hashCode() { | ||
139 | return Objects.hash(fA); | ||
140 | } | ||
141 | |||
142 | @Override | ||
143 | public boolean equals(final Object obj) { | ||
144 | if (this == obj) | ||
145 | return true; | ||
146 | if (obj == null) { | ||
147 | return false; | ||
148 | } | ||
149 | if ((obj instanceof OppositeDifferentClass.Match)) { | ||
150 | OppositeDifferentClass.Match other = (OppositeDifferentClass.Match) obj; | ||
151 | return Objects.equals(fA, other.fA); | ||
152 | } else { | ||
153 | // this should be infrequent | ||
154 | if (!(obj instanceof IPatternMatch)) { | ||
155 | return false; | ||
156 | } | ||
157 | IPatternMatch otherSig = (IPatternMatch) obj; | ||
158 | return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); | ||
159 | } | ||
160 | } | ||
161 | |||
162 | @Override | ||
163 | public OppositeDifferentClass specification() { | ||
164 | return OppositeDifferentClass.instance(); | ||
165 | } | ||
166 | |||
167 | /** | ||
168 | * Returns an empty, mutable match. | ||
169 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
170 | * | ||
171 | * @return the empty match. | ||
172 | * | ||
173 | */ | ||
174 | public static OppositeDifferentClass.Match newEmptyMatch() { | ||
175 | return new Mutable(null); | ||
176 | } | ||
177 | |||
178 | /** | ||
179 | * Returns a mutable (partial) match. | ||
180 | * Fields of the mutable match can be filled to create a partial match, usable as matcher input. | ||
181 | * | ||
182 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
183 | * @return the new, mutable (partial) match object. | ||
184 | * | ||
185 | */ | ||
186 | public static OppositeDifferentClass.Match newMutableMatch(final EReference pA) { | ||
187 | return new Mutable(pA); | ||
188 | } | ||
189 | |||
190 | /** | ||
191 | * Returns a new (partial) match. | ||
192 | * This can be used e.g. to call the matcher with a partial match. | ||
193 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
194 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
195 | * @return the (partial) match object. | ||
196 | * | ||
197 | */ | ||
198 | public static OppositeDifferentClass.Match newMatch(final EReference pA) { | ||
199 | return new Immutable(pA); | ||
200 | } | ||
201 | |||
202 | private static final class Mutable extends OppositeDifferentClass.Match { | ||
203 | Mutable(final EReference pA) { | ||
204 | super(pA); | ||
205 | } | ||
206 | |||
207 | @Override | ||
208 | public boolean isMutable() { | ||
209 | return true; | ||
210 | } | ||
211 | } | ||
212 | |||
213 | private static final class Immutable extends OppositeDifferentClass.Match { | ||
214 | Immutable(final EReference pA) { | ||
215 | super(pA); | ||
216 | } | ||
217 | |||
218 | @Override | ||
219 | public boolean isMutable() { | ||
220 | return false; | ||
221 | } | ||
222 | } | ||
223 | } | ||
224 | |||
225 | /** | ||
226 | * Generated pattern matcher API of the ecore.oppositeDifferentClass pattern, | ||
227 | * providing pattern-specific query methods. | ||
228 | * | ||
229 | * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, | ||
230 | * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. | ||
231 | * | ||
232 | * <p>Matches of the pattern will be represented as {@link Match}. | ||
233 | * | ||
234 | * <p>Original source: | ||
235 | * <code><pre> | ||
236 | * {@literal @}Constraint(key={a}, severity="error", message="error") | ||
237 | * pattern oppositeDifferentClass(a:EReference) { | ||
238 | * EReference.eOpposite(a,b); | ||
239 | * EReference.eContainingClass(a,aContaining); | ||
240 | * EReference.eType(b,bTarget); | ||
241 | * aContaining != bTarget; | ||
242 | * } | ||
243 | * </pre></code> | ||
244 | * | ||
245 | * @see Match | ||
246 | * @see OppositeDifferentClass | ||
247 | * | ||
248 | */ | ||
249 | public static class Matcher extends BaseMatcher<OppositeDifferentClass.Match> { | ||
250 | /** | ||
251 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
252 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
253 | * | ||
254 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
255 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
256 | * | ||
257 | */ | ||
258 | public static OppositeDifferentClass.Matcher on(final ViatraQueryEngine engine) { | ||
259 | // check if matcher already exists | ||
260 | Matcher matcher = engine.getExistingMatcher(querySpecification()); | ||
261 | if (matcher == null) { | ||
262 | matcher = (Matcher)engine.getMatcher(querySpecification()); | ||
263 | } | ||
264 | return matcher; | ||
265 | } | ||
266 | |||
267 | /** | ||
268 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
269 | * @return an initialized matcher | ||
270 | * @noreference This method is for internal matcher initialization by the framework, do not call it manually. | ||
271 | * | ||
272 | */ | ||
273 | public static OppositeDifferentClass.Matcher create() { | ||
274 | return new Matcher(); | ||
275 | } | ||
276 | |||
277 | private static final int POSITION_A = 0; | ||
278 | |||
279 | private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(OppositeDifferentClass.Matcher.class); | ||
280 | |||
281 | /** | ||
282 | * Initializes the pattern matcher within an existing VIATRA Query engine. | ||
283 | * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. | ||
284 | * | ||
285 | * @param engine the existing VIATRA Query engine in which this matcher will be created. | ||
286 | * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation | ||
287 | * | ||
288 | */ | ||
289 | private Matcher() { | ||
290 | super(querySpecification()); | ||
291 | } | ||
292 | |||
293 | /** | ||
294 | * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. | ||
295 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
296 | * @return matches represented as a Match object. | ||
297 | * | ||
298 | */ | ||
299 | public Collection<OppositeDifferentClass.Match> getAllMatches(final EReference pA) { | ||
300 | return rawStreamAllMatches(new Object[]{pA}).collect(Collectors.toSet()); | ||
301 | } | ||
302 | |||
303 | /** | ||
304 | * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. | ||
305 | * </p> | ||
306 | * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed. | ||
307 | * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>. | ||
308 | * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. | ||
309 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
310 | * @return a stream of matches represented as a Match object. | ||
311 | * | ||
312 | */ | ||
313 | public Stream<OppositeDifferentClass.Match> streamAllMatches(final EReference pA) { | ||
314 | return rawStreamAllMatches(new Object[]{pA}); | ||
315 | } | ||
316 | |||
317 | /** | ||
318 | * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
319 | * Neither determinism nor randomness of selection is guaranteed. | ||
320 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
321 | * @return a match represented as a Match object, or null if no match is found. | ||
322 | * | ||
323 | */ | ||
324 | public Optional<OppositeDifferentClass.Match> getOneArbitraryMatch(final EReference pA) { | ||
325 | return rawGetOneArbitraryMatch(new Object[]{pA}); | ||
326 | } | ||
327 | |||
328 | /** | ||
329 | * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, | ||
330 | * under any possible substitution of the unspecified parameters (if any). | ||
331 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
332 | * @return true if the input is a valid (partial) match of the pattern. | ||
333 | * | ||
334 | */ | ||
335 | public boolean hasMatch(final EReference pA) { | ||
336 | return rawHasMatch(new Object[]{pA}); | ||
337 | } | ||
338 | |||
339 | /** | ||
340 | * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. | ||
341 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
342 | * @return the number of pattern matches found. | ||
343 | * | ||
344 | */ | ||
345 | public int countMatches(final EReference pA) { | ||
346 | return rawCountMatches(new Object[]{pA}); | ||
347 | } | ||
348 | |||
349 | /** | ||
350 | * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. | ||
351 | * Neither determinism nor randomness of selection is guaranteed. | ||
352 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
353 | * @param processor the action that will process the selected match. | ||
354 | * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked | ||
355 | * | ||
356 | */ | ||
357 | public boolean forOneArbitraryMatch(final EReference pA, final Consumer<? super OppositeDifferentClass.Match> processor) { | ||
358 | return rawForOneArbitraryMatch(new Object[]{pA}, processor); | ||
359 | } | ||
360 | |||
361 | /** | ||
362 | * Returns a new (partial) match. | ||
363 | * This can be used e.g. to call the matcher with a partial match. | ||
364 | * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. | ||
365 | * @param pA the fixed value of pattern parameter a, or null if not bound. | ||
366 | * @return the (partial) match object. | ||
367 | * | ||
368 | */ | ||
369 | public OppositeDifferentClass.Match newMatch(final EReference pA) { | ||
370 | return OppositeDifferentClass.Match.newMatch(pA); | ||
371 | } | ||
372 | |||
373 | /** | ||
374 | * Retrieve the set of values that occur in matches for a. | ||
375 | * @return the Set of all values or empty set if there are no matches | ||
376 | * | ||
377 | */ | ||
378 | protected Stream<EReference> rawStreamAllValuesOfa(final Object[] parameters) { | ||
379 | return rawStreamAllValues(POSITION_A, parameters).map(EReference.class::cast); | ||
380 | } | ||
381 | |||
382 | /** | ||
383 | * Retrieve the set of values that occur in matches for a. | ||
384 | * @return the Set of all values or empty set if there are no matches | ||
385 | * | ||
386 | */ | ||
387 | public Set<EReference> getAllValuesOfa() { | ||
388 | return rawStreamAllValuesOfa(emptyArray()).collect(Collectors.toSet()); | ||
389 | } | ||
390 | |||
391 | /** | ||
392 | * Retrieve the set of values that occur in matches for a. | ||
393 | * @return the Set of all values or empty set if there are no matches | ||
394 | * | ||
395 | */ | ||
396 | public Stream<EReference> streamAllValuesOfa() { | ||
397 | return rawStreamAllValuesOfa(emptyArray()); | ||
398 | } | ||
399 | |||
400 | @Override | ||
401 | protected OppositeDifferentClass.Match tupleToMatch(final Tuple t) { | ||
402 | try { | ||
403 | return OppositeDifferentClass.Match.newMatch((EReference) t.get(POSITION_A)); | ||
404 | } catch(ClassCastException e) { | ||
405 | LOGGER.error("Element(s) in tuple not properly typed!",e); | ||
406 | return null; | ||
407 | } | ||
408 | } | ||
409 | |||
410 | @Override | ||
411 | protected OppositeDifferentClass.Match arrayToMatch(final Object[] match) { | ||
412 | try { | ||
413 | return OppositeDifferentClass.Match.newMatch((EReference) match[POSITION_A]); | ||
414 | } catch(ClassCastException e) { | ||
415 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
416 | return null; | ||
417 | } | ||
418 | } | ||
419 | |||
420 | @Override | ||
421 | protected OppositeDifferentClass.Match arrayToMatchMutable(final Object[] match) { | ||
422 | try { | ||
423 | return OppositeDifferentClass.Match.newMutableMatch((EReference) match[POSITION_A]); | ||
424 | } catch(ClassCastException e) { | ||
425 | LOGGER.error("Element(s) in array not properly typed!",e); | ||
426 | return null; | ||
427 | } | ||
428 | } | ||
429 | |||
430 | /** | ||
431 | * @return the singleton instance of the query specification of this pattern | ||
432 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
433 | * | ||
434 | */ | ||
435 | public static IQuerySpecification<OppositeDifferentClass.Matcher> querySpecification() { | ||
436 | return OppositeDifferentClass.instance(); | ||
437 | } | ||
438 | } | ||
439 | |||
440 | private OppositeDifferentClass() { | ||
441 | super(GeneratedPQuery.INSTANCE); | ||
442 | } | ||
443 | |||
444 | /** | ||
445 | * @return the singleton instance of the query specification | ||
446 | * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded | ||
447 | * | ||
448 | */ | ||
449 | public static OppositeDifferentClass instance() { | ||
450 | try{ | ||
451 | return LazyHolder.INSTANCE; | ||
452 | } catch (ExceptionInInitializerError err) { | ||
453 | throw processInitializerError(err); | ||
454 | } | ||
455 | } | ||
456 | |||
457 | @Override | ||
458 | protected OppositeDifferentClass.Matcher instantiate(final ViatraQueryEngine engine) { | ||
459 | return OppositeDifferentClass.Matcher.on(engine); | ||
460 | } | ||
461 | |||
462 | @Override | ||
463 | public OppositeDifferentClass.Matcher instantiate() { | ||
464 | return OppositeDifferentClass.Matcher.create(); | ||
465 | } | ||
466 | |||
467 | @Override | ||
468 | public OppositeDifferentClass.Match newEmptyMatch() { | ||
469 | return OppositeDifferentClass.Match.newEmptyMatch(); | ||
470 | } | ||
471 | |||
472 | @Override | ||
473 | public OppositeDifferentClass.Match newMatch(final Object... parameters) { | ||
474 | return OppositeDifferentClass.Match.newMatch((org.eclipse.emf.ecore.EReference) parameters[0]); | ||
475 | } | ||
476 | |||
477 | /** | ||
478 | * Inner class allowing the singleton instance of {@link JvmGenericType: ecore.OppositeDifferentClass (visibility: PUBLIC, simpleName: OppositeDifferentClass, identifier: ecore.OppositeDifferentClass, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ecore) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created | ||
479 | * <b>not</b> at the class load time of the outer class, | ||
480 | * but rather at the first call to {@link JvmGenericType: ecore.OppositeDifferentClass (visibility: PUBLIC, simpleName: OppositeDifferentClass, identifier: ecore.OppositeDifferentClass, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ecore) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. | ||
481 | * | ||
482 | * <p> This workaround is required e.g. to support recursion. | ||
483 | * | ||
484 | */ | ||
485 | private static class LazyHolder { | ||
486 | private static final OppositeDifferentClass INSTANCE = new OppositeDifferentClass(); | ||
487 | |||
488 | /** | ||
489 | * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned. | ||
490 | * This initialization order is required to support indirect recursion. | ||
491 | * | ||
492 | * <p> The static initializer is defined using a helper field to work around limitations of the code generator. | ||
493 | * | ||
494 | */ | ||
495 | private static final Object STATIC_INITIALIZER = ensureInitialized(); | ||
496 | |||
497 | public static Object ensureInitialized() { | ||
498 | INSTANCE.ensureInitializedInternal(); | ||
499 | return null; | ||
500 | } | ||
501 | } | ||
502 | |||
503 | private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { | ||
504 | private static final OppositeDifferentClass.GeneratedPQuery INSTANCE = new GeneratedPQuery(); | ||
505 | |||
506 | private final PParameter parameter_a = new PParameter("a", "org.eclipse.emf.ecore.EReference", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EReference")), PParameterDirection.INOUT); | ||
507 | |||
508 | private final List<PParameter> parameters = Arrays.asList(parameter_a); | ||
509 | |||
510 | private GeneratedPQuery() { | ||
511 | super(PVisibility.PUBLIC); | ||
512 | } | ||
513 | |||
514 | @Override | ||
515 | public String getFullyQualifiedName() { | ||
516 | return "ecore.oppositeDifferentClass"; | ||
517 | } | ||
518 | |||
519 | @Override | ||
520 | public List<String> getParameterNames() { | ||
521 | return Arrays.asList("a"); | ||
522 | } | ||
523 | |||
524 | @Override | ||
525 | public List<PParameter> getParameters() { | ||
526 | return parameters; | ||
527 | } | ||
528 | |||
529 | @Override | ||
530 | public Set<PBody> doGetContainedBodies() { | ||
531 | setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); | ||
532 | Set<PBody> bodies = new LinkedHashSet<>(); | ||
533 | { | ||
534 | PBody body = new PBody(this); | ||
535 | PVariable var_a = body.getOrCreateVariableByName("a"); | ||
536 | PVariable var_b = body.getOrCreateVariableByName("b"); | ||
537 | PVariable var_aContaining = body.getOrCreateVariableByName("aContaining"); | ||
538 | PVariable var_bTarget = body.getOrCreateVariableByName("bTarget"); | ||
539 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
540 | body.setSymbolicParameters(Arrays.<ExportedParameter>asList( | ||
541 | new ExportedParameter(body, var_a, parameter_a) | ||
542 | )); | ||
543 | // EReference.eOpposite(a,b) | ||
544 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
545 | PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); | ||
546 | new TypeConstraint(body, Tuples.flatTupleOf(var_a, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference", "eOpposite"))); | ||
547 | new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
548 | new Equality(body, var__virtual_0_, var_b); | ||
549 | // EReference.eContainingClass(a,aContaining) | ||
550 | new TypeConstraint(body, Tuples.flatTupleOf(var_a), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
551 | PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); | ||
552 | new TypeConstraint(body, Tuples.flatTupleOf(var_a, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.eclipse.org/emf/2002/Ecore", "EStructuralFeature", "eContainingClass"))); | ||
553 | new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); | ||
554 | new Equality(body, var__virtual_1_, var_aContaining); | ||
555 | // EReference.eType(b,bTarget) | ||
556 | new TypeConstraint(body, Tuples.flatTupleOf(var_b), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EReference"))); | ||
557 | PVariable var__virtual_2_ = body.getOrCreateVariableByName(".virtual{2}"); | ||
558 | new TypeConstraint(body, Tuples.flatTupleOf(var_b, var__virtual_2_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.eclipse.org/emf/2002/Ecore", "ETypedElement", "eType"))); | ||
559 | new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_2_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClassifier"))); | ||
560 | new Equality(body, var__virtual_2_, var_bTarget); | ||
561 | // aContaining != bTarget | ||
562 | new Inequality(body, var_aContaining, var_bTarget); | ||
563 | bodies.add(body); | ||
564 | } | ||
565 | { | ||
566 | PAnnotation annotation = new PAnnotation("Constraint"); | ||
567 | annotation.addAttribute("key", Arrays.asList(new Object[] { | ||
568 | new ParameterReference("a") | ||
569 | })); | ||
570 | annotation.addAttribute("severity", "error"); | ||
571 | annotation.addAttribute("message", "error"); | ||
572 | addAnnotation(annotation); | ||
573 | } | ||
574 | return bodies; | ||
575 | } | ||
576 | } | ||
577 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/ecore.ecore b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/ecore.ecore new file mode 100644 index 00000000..e7dc2768 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/ecore.ecore | |||
@@ -0,0 +1,1016 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
3 | xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="ecore" nsURI="http://www.eclipse.org/emf/2002/Ecore" nsPrefix="ecore"> | ||
4 | <eClassifiers xsi:type="ecore:EClass" name="EAnnotation" eSuperTypes="#//EModelElement"> | ||
5 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
6 | <details key="name" value="EAnnotation"/> | ||
7 | <details key="kind" value="elementOnly"/> | ||
8 | </eAnnotations> | ||
9 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
10 | <details key="constraints" value="WellFormedSourceURI"/> | ||
11 | </eAnnotations> | ||
12 | <eStructuralFeatures xsi:type="ecore:EReference" name="details" upperBound="-1" | ||
13 | eType="#//EStringToStringMapEntry" containment="true" resolveProxies="false"> | ||
14 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
15 | <details key="kind" value="element"/> | ||
16 | <details key="name" value="details"/> | ||
17 | </eAnnotations> | ||
18 | </eStructuralFeatures> | ||
19 | <eStructuralFeatures xsi:type="ecore:EReference" name="contents" upperBound="-1" | ||
20 | eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject" containment="true" | ||
21 | resolveProxies="false"> | ||
22 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
23 | <details key="kind" value="element"/> | ||
24 | <details key="name" value="contents"/> | ||
25 | </eAnnotations> | ||
26 | </eStructuralFeatures> | ||
27 | <eStructuralFeatures xsi:type="ecore:EReference" name="references" upperBound="-1" | ||
28 | eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"> | ||
29 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
30 | <details key="kind" value="attribute"/> | ||
31 | <details key="name" value="references"/> | ||
32 | </eAnnotations> | ||
33 | </eStructuralFeatures> | ||
34 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="source" eType="#//EString"> | ||
35 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
36 | <details key="kind" value="attribute"/> | ||
37 | <details key="name" value="source"/> | ||
38 | </eAnnotations> | ||
39 | </eStructuralFeatures> | ||
40 | <eStructuralFeatures xsi:type="ecore:EReference" name="eModelElement" eType="#//EModelElement" | ||
41 | transient="true" eOpposite="#//EModelElement/eAnnotations"/> | ||
42 | </eClassifiers> | ||
43 | <eClassifiers xsi:type="ecore:EClass" name="EAttribute" eSuperTypes="#//EStructuralFeature"> | ||
44 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
45 | <details key="name" value="EAttribute"/> | ||
46 | <details key="kind" value="elementOnly"/> | ||
47 | </eAnnotations> | ||
48 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
49 | <details key="constraints" value="ConsistentTransient"/> | ||
50 | </eAnnotations> | ||
51 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAttributeType" lowerBound="1" | ||
52 | eType="#//EDataType" changeable="false" volatile="true" transient="true" derived="true"> | ||
53 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
54 | <details key="kind" value="attribute"/> | ||
55 | <details key="name" value="eAttributeType"/> | ||
56 | </eAnnotations> | ||
57 | </eStructuralFeatures> | ||
58 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="iD" eType="#//EBoolean"> | ||
59 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
60 | <details key="kind" value="attribute"/> | ||
61 | <details key="name" value="iD"/> | ||
62 | </eAnnotations> | ||
63 | </eStructuralFeatures> | ||
64 | </eClassifiers> | ||
65 | <eClassifiers xsi:type="ecore:EDataType" name="EBigDecimal" instanceClassName="java.math.BigDecimal"> | ||
66 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
67 | <details key="name" value="EBigDecimal"/> | ||
68 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#decimal"/> | ||
69 | </eAnnotations> | ||
70 | </eClassifiers> | ||
71 | <eClassifiers xsi:type="ecore:EDataType" name="EBigInteger" instanceClassName="java.math.BigInteger"> | ||
72 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
73 | <details key="name" value="EBigInteger"/> | ||
74 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#integer"/> | ||
75 | </eAnnotations> | ||
76 | </eClassifiers> | ||
77 | <eClassifiers xsi:type="ecore:EDataType" name="EBoolean" instanceClassName="boolean"> | ||
78 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
79 | <details key="name" value="EBoolean"/> | ||
80 | </eAnnotations> | ||
81 | </eClassifiers> | ||
82 | <eClassifiers xsi:type="ecore:EDataType" name="EBooleanObject" instanceClassName="java.lang.Boolean"> | ||
83 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
84 | <details key="name" value="EBoolean:Object"/> | ||
85 | <details key="baseType" value="EBoolean"/> | ||
86 | </eAnnotations> | ||
87 | </eClassifiers> | ||
88 | <eClassifiers xsi:type="ecore:EDataType" name="EByte" instanceClassName="byte"> | ||
89 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
90 | <details key="name" value="EByte"/> | ||
91 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#byte"/> | ||
92 | </eAnnotations> | ||
93 | </eClassifiers> | ||
94 | <eClassifiers xsi:type="ecore:EDataType" name="EByteArray" instanceClassName="byte[]"> | ||
95 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
96 | <details key="name" value="EByteArray"/> | ||
97 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#hexBinary"/> | ||
98 | </eAnnotations> | ||
99 | </eClassifiers> | ||
100 | <eClassifiers xsi:type="ecore:EDataType" name="EByteObject" instanceClassName="java.lang.Byte"> | ||
101 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
102 | <details key="name" value="EByte:Object"/> | ||
103 | <details key="baseType" value="EByte"/> | ||
104 | </eAnnotations> | ||
105 | </eClassifiers> | ||
106 | <eClassifiers xsi:type="ecore:EDataType" name="EChar" instanceClassName="char"> | ||
107 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
108 | <details key="name" value="EChar"/> | ||
109 | </eAnnotations> | ||
110 | </eClassifiers> | ||
111 | <eClassifiers xsi:type="ecore:EDataType" name="ECharacterObject" instanceClassName="java.lang.Character"> | ||
112 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
113 | <details key="name" value="EChar:Object"/> | ||
114 | <details key="baseType" value="EChar"/> | ||
115 | </eAnnotations> | ||
116 | </eClassifiers> | ||
117 | <eClassifiers xsi:type="ecore:EClass" name="EClass" eSuperTypes="#//EClassifier"> | ||
118 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
119 | <details key="name" value="EClass"/> | ||
120 | <details key="kind" value="elementOnly"/> | ||
121 | </eAnnotations> | ||
122 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
123 | <details key="constraints" value="InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures"/> | ||
124 | </eAnnotations> | ||
125 | <eOperations name="isSuperTypeOf" eType="#//EBoolean"> | ||
126 | <eParameters name="someClass" eType="#//EClass"/> | ||
127 | </eOperations> | ||
128 | <eOperations name="getFeatureCount" eType="#//EInt"/> | ||
129 | <eOperations name="getEStructuralFeature" eType="#//EStructuralFeature"> | ||
130 | <eParameters name="featureID" eType="#//EInt"/> | ||
131 | </eOperations> | ||
132 | <eOperations name="getFeatureID" eType="#//EInt"> | ||
133 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
134 | </eOperations> | ||
135 | <eOperations name="getEStructuralFeature" eType="#//EStructuralFeature"> | ||
136 | <eParameters name="featureName" eType="#//EString"/> | ||
137 | </eOperations> | ||
138 | <eOperations name="getOperationCount" eType="#//EInt"/> | ||
139 | <eOperations name="getEOperation" eType="#//EOperation"> | ||
140 | <eParameters name="operationID" eType="#//EInt"/> | ||
141 | </eOperations> | ||
142 | <eOperations name="getOperationID" eType="#//EInt"> | ||
143 | <eParameters name="operation" eType="#//EOperation"/> | ||
144 | </eOperations> | ||
145 | <eOperations name="getOverride" eType="#//EOperation"> | ||
146 | <eParameters name="operation" eType="#//EOperation"/> | ||
147 | </eOperations> | ||
148 | <eStructuralFeatures xsi:type="ecore:EReference" name="eOperations" upperBound="-1" | ||
149 | eType="#//EOperation" containment="true" resolveProxies="false" eOpposite="#//EOperation/eContainingClass"> | ||
150 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
151 | <details key="kind" value="element"/> | ||
152 | <details key="name" value="eOperations"/> | ||
153 | </eAnnotations> | ||
154 | </eStructuralFeatures> | ||
155 | <eStructuralFeatures xsi:type="ecore:EReference" name="eStructuralFeatures" upperBound="-1" | ||
156 | eType="#//EStructuralFeature" containment="true" resolveProxies="false" eOpposite="#//EStructuralFeature/eContainingClass"> | ||
157 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
158 | <details key="kind" value="element"/> | ||
159 | <details key="name" value="eStructuralFeatures"/> | ||
160 | </eAnnotations> | ||
161 | </eStructuralFeatures> | ||
162 | <eStructuralFeatures xsi:type="ecore:EReference" name="eGenericSuperTypes" upperBound="-1" | ||
163 | eType="#//EGenericType" unsettable="true" containment="true" resolveProxies="false"> | ||
164 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
165 | <details key="kind" value="element"/> | ||
166 | <details key="name" value="eGenericSuperTypes"/> | ||
167 | </eAnnotations> | ||
168 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
169 | <details key="suppressedIsSetVisibility" value="true"/> | ||
170 | <details key="suppressedUnsetVisibility" value="true"/> | ||
171 | </eAnnotations> | ||
172 | </eStructuralFeatures> | ||
173 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="abstract" eType="#//EBoolean"> | ||
174 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
175 | <details key="kind" value="attribute"/> | ||
176 | <details key="name" value="abstract"/> | ||
177 | </eAnnotations> | ||
178 | </eStructuralFeatures> | ||
179 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllAttributes" upperBound="-1" | ||
180 | eType="#//EAttribute" changeable="false" volatile="true" transient="true" | ||
181 | derived="true"> | ||
182 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
183 | <details key="kind" value="attribute"/> | ||
184 | <details key="name" value="eAllAttributes"/> | ||
185 | </eAnnotations> | ||
186 | </eStructuralFeatures> | ||
187 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllContainments" upperBound="-1" | ||
188 | eType="#//EReference" changeable="false" volatile="true" transient="true" | ||
189 | derived="true"> | ||
190 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
191 | <details key="kind" value="attribute"/> | ||
192 | <details key="name" value="eAllContainments"/> | ||
193 | </eAnnotations> | ||
194 | </eStructuralFeatures> | ||
195 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllGenericSuperTypes" | ||
196 | upperBound="-1" eType="#//EGenericType" changeable="false" volatile="true" | ||
197 | transient="true" derived="true"> | ||
198 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
199 | <details key="kind" value="attribute"/> | ||
200 | <details key="name" value="eAllGenericSuperTypes"/> | ||
201 | </eAnnotations> | ||
202 | </eStructuralFeatures> | ||
203 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllOperations" upperBound="-1" | ||
204 | eType="#//EOperation" changeable="false" volatile="true" transient="true" | ||
205 | derived="true"> | ||
206 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
207 | <details key="kind" value="attribute"/> | ||
208 | <details key="name" value="eAllOperations"/> | ||
209 | </eAnnotations> | ||
210 | </eStructuralFeatures> | ||
211 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllReferences" upperBound="-1" | ||
212 | eType="#//EReference" changeable="false" volatile="true" transient="true" | ||
213 | derived="true"> | ||
214 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
215 | <details key="kind" value="attribute"/> | ||
216 | <details key="name" value="eAllReferences"/> | ||
217 | </eAnnotations> | ||
218 | </eStructuralFeatures> | ||
219 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllStructuralFeatures" | ||
220 | upperBound="-1" eType="#//EStructuralFeature" changeable="false" volatile="true" | ||
221 | transient="true" derived="true"> | ||
222 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
223 | <details key="kind" value="attribute"/> | ||
224 | <details key="name" value="eAllStructuralFeatures"/> | ||
225 | </eAnnotations> | ||
226 | </eStructuralFeatures> | ||
227 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAllSuperTypes" upperBound="-1" | ||
228 | eType="#//EClass" changeable="false" volatile="true" transient="true" derived="true"> | ||
229 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
230 | <details key="kind" value="attribute"/> | ||
231 | <details key="name" value="eAllSuperTypes"/> | ||
232 | </eAnnotations> | ||
233 | </eStructuralFeatures> | ||
234 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAttributes" upperBound="-1" | ||
235 | eType="#//EAttribute" changeable="false" volatile="true" transient="true" | ||
236 | derived="true"> | ||
237 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
238 | <details key="kind" value="attribute"/> | ||
239 | <details key="name" value="eAttributes"/> | ||
240 | </eAnnotations> | ||
241 | </eStructuralFeatures> | ||
242 | <eStructuralFeatures xsi:type="ecore:EReference" name="eIDAttribute" eType="#//EAttribute" | ||
243 | changeable="false" volatile="true" transient="true" derived="true" resolveProxies="false"> | ||
244 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
245 | <details key="kind" value="attribute"/> | ||
246 | <details key="name" value="eIDAttribute"/> | ||
247 | </eAnnotations> | ||
248 | </eStructuralFeatures> | ||
249 | <eStructuralFeatures xsi:type="ecore:EReference" name="eReferences" upperBound="-1" | ||
250 | eType="#//EReference" changeable="false" volatile="true" transient="true" | ||
251 | derived="true"> | ||
252 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
253 | <details key="kind" value="attribute"/> | ||
254 | <details key="name" value="eReferences"/> | ||
255 | </eAnnotations> | ||
256 | </eStructuralFeatures> | ||
257 | <eStructuralFeatures xsi:type="ecore:EReference" name="eSuperTypes" upperBound="-1" | ||
258 | eType="#//EClass" unsettable="true"> | ||
259 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
260 | <details key="kind" value="attribute"/> | ||
261 | <details key="name" value="eSuperTypes"/> | ||
262 | </eAnnotations> | ||
263 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
264 | <details key="suppressedIsSetVisibility" value="true"/> | ||
265 | <details key="suppressedUnsetVisibility" value="true"/> | ||
266 | </eAnnotations> | ||
267 | </eStructuralFeatures> | ||
268 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="interface" eType="#//EBoolean"> | ||
269 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
270 | <details key="kind" value="attribute"/> | ||
271 | <details key="name" value="interface"/> | ||
272 | </eAnnotations> | ||
273 | </eStructuralFeatures> | ||
274 | </eClassifiers> | ||
275 | <eClassifiers xsi:type="ecore:EClass" name="EClassifier" abstract="true" eSuperTypes="#//ENamedElement"> | ||
276 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
277 | <details key="name" value="EClassifier"/> | ||
278 | <details key="kind" value="elementOnly"/> | ||
279 | </eAnnotations> | ||
280 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
281 | <details key="constraints" value="WellFormedInstanceTypeName UniqueTypeParameterNames"/> | ||
282 | </eAnnotations> | ||
283 | <eOperations name="isInstance" eType="#//EBoolean"> | ||
284 | <eParameters name="object" eType="#//EJavaObject"/> | ||
285 | </eOperations> | ||
286 | <eOperations name="getClassifierID" eType="#//EInt"/> | ||
287 | <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeParameters" upperBound="-1" | ||
288 | eType="#//ETypeParameter" containment="true"> | ||
289 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
290 | <details key="kind" value="element"/> | ||
291 | <details key="name" value="eTypeParameters"/> | ||
292 | </eAnnotations> | ||
293 | </eStructuralFeatures> | ||
294 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValue" eType="#//EJavaObject" | ||
295 | changeable="false" volatile="true" transient="true" derived="true"> | ||
296 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
297 | <details key="kind" value="attribute"/> | ||
298 | <details key="name" value="defaultValue"/> | ||
299 | </eAnnotations> | ||
300 | </eStructuralFeatures> | ||
301 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="instanceClass" changeable="false" | ||
302 | volatile="true" transient="true" derived="true"> | ||
303 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
304 | <details key="kind" value="attribute"/> | ||
305 | <details key="name" value="instanceClass"/> | ||
306 | </eAnnotations> | ||
307 | <eGenericType eClassifier="#//EJavaClass"> | ||
308 | <eTypeArguments/> | ||
309 | </eGenericType> | ||
310 | </eStructuralFeatures> | ||
311 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="instanceClassName" eType="#//EString" | ||
312 | volatile="true" unsettable="true"> | ||
313 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
314 | <details key="kind" value="attribute"/> | ||
315 | <details key="name" value="instanceClassName"/> | ||
316 | </eAnnotations> | ||
317 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
318 | <details key="suppressedIsSetVisibility" value="true"/> | ||
319 | <details key="suppressedUnsetVisibility" value="true"/> | ||
320 | </eAnnotations> | ||
321 | </eStructuralFeatures> | ||
322 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="instanceTypeName" eType="#//EString" | ||
323 | volatile="true" unsettable="true"> | ||
324 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
325 | <details key="kind" value="attribute"/> | ||
326 | <details key="name" value="instanceTypeName"/> | ||
327 | </eAnnotations> | ||
328 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
329 | <details key="suppressedIsSetVisibility" value="true"/> | ||
330 | <details key="suppressedUnsetVisibility" value="true"/> | ||
331 | </eAnnotations> | ||
332 | </eStructuralFeatures> | ||
333 | <eStructuralFeatures xsi:type="ecore:EReference" name="ePackage" eType="#//EPackage" | ||
334 | transient="true" eOpposite="#//EPackage/eClassifiers"/> | ||
335 | </eClassifiers> | ||
336 | <eClassifiers xsi:type="ecore:EClass" name="EDataType" eSuperTypes="#//EClassifier"> | ||
337 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
338 | <details key="name" value="EDataType"/> | ||
339 | <details key="kind" value="elementOnly"/> | ||
340 | </eAnnotations> | ||
341 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="serializable" eType="#//EBoolean" | ||
342 | defaultValueLiteral="true"> | ||
343 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
344 | <details key="kind" value="attribute"/> | ||
345 | <details key="name" value="serializable"/> | ||
346 | </eAnnotations> | ||
347 | </eStructuralFeatures> | ||
348 | </eClassifiers> | ||
349 | <eClassifiers xsi:type="ecore:EDataType" name="EDate" instanceClassName="java.util.Date"> | ||
350 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
351 | <details key="name" value="EDate"/> | ||
352 | </eAnnotations> | ||
353 | </eClassifiers> | ||
354 | <eClassifiers xsi:type="ecore:EDataType" name="EDiagnosticChain" instanceClassName="org.eclipse.emf.common.util.DiagnosticChain" | ||
355 | serializable="false"> | ||
356 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
357 | <details key="name" value="EDiagnosticChain"/> | ||
358 | </eAnnotations> | ||
359 | </eClassifiers> | ||
360 | <eClassifiers xsi:type="ecore:EDataType" name="EDouble" instanceClassName="double"> | ||
361 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
362 | <details key="name" value="EDouble"/> | ||
363 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#double"/> | ||
364 | </eAnnotations> | ||
365 | </eClassifiers> | ||
366 | <eClassifiers xsi:type="ecore:EDataType" name="EDoubleObject" instanceClassName="java.lang.Double"> | ||
367 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
368 | <details key="name" value="EDouble:Object"/> | ||
369 | <details key="baseType" value="EDouble"/> | ||
370 | </eAnnotations> | ||
371 | </eClassifiers> | ||
372 | <eClassifiers xsi:type="ecore:EDataType" name="EEList" instanceClassName="org.eclipse.emf.common.util.EList" | ||
373 | serializable="false"> | ||
374 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
375 | <details key="name" value="EEList"/> | ||
376 | </eAnnotations> | ||
377 | <eTypeParameters name="E"/> | ||
378 | </eClassifiers> | ||
379 | <eClassifiers xsi:type="ecore:EClass" name="EEnum" eSuperTypes="#//EDataType"> | ||
380 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
381 | <details key="name" value="EEnum"/> | ||
382 | <details key="kind" value="elementOnly"/> | ||
383 | </eAnnotations> | ||
384 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
385 | <details key="constraints" value="UniqueEnumeratorNames UniqueEnumeratorLiterals"/> | ||
386 | </eAnnotations> | ||
387 | <eOperations name="getEEnumLiteral" eType="#//EEnumLiteral"> | ||
388 | <eParameters name="name" eType="#//EString"/> | ||
389 | </eOperations> | ||
390 | <eOperations name="getEEnumLiteral" eType="#//EEnumLiteral"> | ||
391 | <eParameters name="value" eType="#//EInt"/> | ||
392 | </eOperations> | ||
393 | <eOperations name="getEEnumLiteralByLiteral" eType="#//EEnumLiteral"> | ||
394 | <eParameters name="literal" eType="#//EString"/> | ||
395 | </eOperations> | ||
396 | <eStructuralFeatures xsi:type="ecore:EReference" name="eLiterals" upperBound="-1" | ||
397 | eType="#//EEnumLiteral" containment="true" resolveProxies="false" eOpposite="#//EEnumLiteral/eEnum"> | ||
398 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
399 | <details key="kind" value="element"/> | ||
400 | <details key="name" value="eLiterals"/> | ||
401 | </eAnnotations> | ||
402 | </eStructuralFeatures> | ||
403 | </eClassifiers> | ||
404 | <eClassifiers xsi:type="ecore:EDataType" name="EEnumerator" instanceClassName="org.eclipse.emf.common.util.Enumerator" | ||
405 | serializable="false"> | ||
406 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
407 | <details key="name" value="EEnumerator"/> | ||
408 | </eAnnotations> | ||
409 | </eClassifiers> | ||
410 | <eClassifiers xsi:type="ecore:EClass" name="EEnumLiteral" eSuperTypes="#//ENamedElement"> | ||
411 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
412 | <details key="name" value="EEnumLiteral"/> | ||
413 | <details key="kind" value="elementOnly"/> | ||
414 | </eAnnotations> | ||
415 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="instance" eType="#//EEnumerator" | ||
416 | transient="true"> | ||
417 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
418 | <details key="kind" value="attribute"/> | ||
419 | <details key="name" value="instance"/> | ||
420 | </eAnnotations> | ||
421 | </eStructuralFeatures> | ||
422 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="literal" eType="#//EString"> | ||
423 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
424 | <details key="kind" value="attribute"/> | ||
425 | <details key="name" value="literal"/> | ||
426 | </eAnnotations> | ||
427 | </eStructuralFeatures> | ||
428 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="#//EInt"> | ||
429 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
430 | <details key="kind" value="attribute"/> | ||
431 | <details key="name" value="value"/> | ||
432 | </eAnnotations> | ||
433 | </eStructuralFeatures> | ||
434 | <eStructuralFeatures xsi:type="ecore:EReference" name="eEnum" eType="#//EEnum" | ||
435 | transient="true" eOpposite="#//EEnum/eLiterals"/> | ||
436 | </eClassifiers> | ||
437 | <eClassifiers xsi:type="ecore:EClass" name="EFactory" eSuperTypes="#//EModelElement"> | ||
438 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
439 | <details key="name" value="EFactory"/> | ||
440 | <details key="kind" value="elementOnly"/> | ||
441 | </eAnnotations> | ||
442 | <eOperations name="create" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"> | ||
443 | <eParameters name="eClass" eType="#//EClass"/> | ||
444 | </eOperations> | ||
445 | <eOperations name="createFromString" eType="#//EJavaObject"> | ||
446 | <eParameters name="eDataType" eType="#//EDataType"/> | ||
447 | <eParameters name="literalValue" eType="#//EString"/> | ||
448 | </eOperations> | ||
449 | <eOperations name="convertToString" eType="#//EString"> | ||
450 | <eParameters name="eDataType" eType="#//EDataType"/> | ||
451 | <eParameters name="instanceValue" eType="#//EJavaObject"/> | ||
452 | </eOperations> | ||
453 | <eStructuralFeatures xsi:type="ecore:EReference" name="ePackage" lowerBound="1" | ||
454 | eType="#//EPackage" transient="true" resolveProxies="false"> | ||
455 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
456 | <details key="kind" value="attribute"/> | ||
457 | <details key="name" value="ePackage"/> | ||
458 | </eAnnotations> | ||
459 | </eStructuralFeatures> | ||
460 | </eClassifiers> | ||
461 | <eClassifiers xsi:type="ecore:EDataType" name="EFeatureMap" instanceClassName="org.eclipse.emf.ecore.util.FeatureMap" | ||
462 | serializable="false"> | ||
463 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
464 | <details key="name" value="EFeatureMap"/> | ||
465 | </eAnnotations> | ||
466 | </eClassifiers> | ||
467 | <eClassifiers xsi:type="ecore:EDataType" name="EFeatureMapEntry" instanceClassName="org.eclipse.emf.ecore.util.FeatureMap$Entry" | ||
468 | serializable="false"> | ||
469 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
470 | <details key="name" value="EFeatureMapEntry"/> | ||
471 | </eAnnotations> | ||
472 | </eClassifiers> | ||
473 | <eClassifiers xsi:type="ecore:EDataType" name="EFloat" instanceClassName="float"> | ||
474 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
475 | <details key="name" value="EFloat"/> | ||
476 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#float"/> | ||
477 | </eAnnotations> | ||
478 | </eClassifiers> | ||
479 | <eClassifiers xsi:type="ecore:EDataType" name="EFloatObject" instanceClassName="java.lang.Float"> | ||
480 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
481 | <details key="name" value="EFloat:Object"/> | ||
482 | <details key="baseType" value="EFloat"/> | ||
483 | </eAnnotations> | ||
484 | </eClassifiers> | ||
485 | <eClassifiers xsi:type="ecore:EClass" name="EGenericType"> | ||
486 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
487 | <details key="name" value="EGenericType"/> | ||
488 | <details key="kind" value="elementOnly"/> | ||
489 | </eAnnotations> | ||
490 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
491 | <details key="constraints" value="ConsistentType ConsistentBounds ConsistentArguments"/> | ||
492 | </eAnnotations> | ||
493 | <eStructuralFeatures xsi:type="ecore:EReference" name="eUpperBound" eType="#//EGenericType" | ||
494 | containment="true" resolveProxies="false"> | ||
495 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
496 | <details key="kind" value="element"/> | ||
497 | <details key="name" value="eUpperBound"/> | ||
498 | </eAnnotations> | ||
499 | </eStructuralFeatures> | ||
500 | <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeArguments" upperBound="-1" | ||
501 | eType="#//EGenericType" containment="true" resolveProxies="false"> | ||
502 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
503 | <details key="kind" value="element"/> | ||
504 | <details key="name" value="eTypeArguments"/> | ||
505 | </eAnnotations> | ||
506 | </eStructuralFeatures> | ||
507 | <eStructuralFeatures xsi:type="ecore:EReference" name="eLowerBound" eType="#//EGenericType" | ||
508 | containment="true" resolveProxies="false"> | ||
509 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
510 | <details key="kind" value="element"/> | ||
511 | <details key="name" value="eLowerBound"/> | ||
512 | </eAnnotations> | ||
513 | </eStructuralFeatures> | ||
514 | <eStructuralFeatures xsi:type="ecore:EReference" name="eClassifier" eType="#//EClassifier"> | ||
515 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
516 | <details key="kind" value="attribute"/> | ||
517 | <details key="name" value="eClassifier"/> | ||
518 | </eAnnotations> | ||
519 | </eStructuralFeatures> | ||
520 | <eStructuralFeatures xsi:type="ecore:EReference" name="eRawType" lowerBound="1" | ||
521 | eType="#//EClassifier" changeable="false" transient="true" derived="true"> | ||
522 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
523 | <details key="kind" value="attribute"/> | ||
524 | <details key="name" value="eRawType"/> | ||
525 | </eAnnotations> | ||
526 | </eStructuralFeatures> | ||
527 | <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeParameter" eType="#//ETypeParameter" | ||
528 | resolveProxies="false"> | ||
529 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
530 | <details key="kind" value="attribute"/> | ||
531 | <details key="name" value="eTypeParameter"/> | ||
532 | </eAnnotations> | ||
533 | </eStructuralFeatures> | ||
534 | </eClassifiers> | ||
535 | <eClassifiers xsi:type="ecore:EDataType" name="EInt" instanceClassName="int"> | ||
536 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
537 | <details key="name" value="EInt"/> | ||
538 | </eAnnotations> | ||
539 | </eClassifiers> | ||
540 | <eClassifiers xsi:type="ecore:EDataType" name="EIntegerObject" instanceClassName="java.lang.Integer"> | ||
541 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
542 | <details key="name" value="EInt:Object"/> | ||
543 | <details key="baseType" value="EInt"/> | ||
544 | </eAnnotations> | ||
545 | </eClassifiers> | ||
546 | <eClassifiers xsi:type="ecore:EDataType" name="EInvocationTargetException" instanceClassName="java.lang.reflect.InvocationTargetException" | ||
547 | serializable="false"> | ||
548 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
549 | <details key="name" value="EInvocationTargetException"/> | ||
550 | </eAnnotations> | ||
551 | </eClassifiers> | ||
552 | <eClassifiers xsi:type="ecore:EDataType" name="EJavaClass" instanceClassName="java.lang.Class"> | ||
553 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
554 | <details key="name" value="EJavaClass"/> | ||
555 | </eAnnotations> | ||
556 | <eTypeParameters name="T"/> | ||
557 | </eClassifiers> | ||
558 | <eClassifiers xsi:type="ecore:EDataType" name="EJavaObject" instanceClassName="java.lang.Object"> | ||
559 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
560 | <details key="name" value="EJavaObject"/> | ||
561 | </eAnnotations> | ||
562 | </eClassifiers> | ||
563 | <eClassifiers xsi:type="ecore:EDataType" name="ELong" instanceClassName="long"> | ||
564 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
565 | <details key="name" value="ELong"/> | ||
566 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#long"/> | ||
567 | </eAnnotations> | ||
568 | </eClassifiers> | ||
569 | <eClassifiers xsi:type="ecore:EDataType" name="ELongObject" instanceClassName="java.lang.Long"> | ||
570 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
571 | <details key="name" value="ELong:Object"/> | ||
572 | <details key="baseType" value="ELong"/> | ||
573 | </eAnnotations> | ||
574 | </eClassifiers> | ||
575 | <eClassifiers xsi:type="ecore:EDataType" name="EMap" instanceClassName="java.util.Map" | ||
576 | serializable="false"> | ||
577 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
578 | <details key="name" value="EMap"/> | ||
579 | </eAnnotations> | ||
580 | <eTypeParameters name="K"/> | ||
581 | <eTypeParameters name="V"/> | ||
582 | </eClassifiers> | ||
583 | <eClassifiers xsi:type="ecore:EClass" name="EModelElement" abstract="true"> | ||
584 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
585 | <details key="name" value="EModelElement"/> | ||
586 | <details key="kind" value="elementOnly"/> | ||
587 | </eAnnotations> | ||
588 | <eOperations name="getEAnnotation" eType="#//EAnnotation"> | ||
589 | <eParameters name="source" eType="#//EString"/> | ||
590 | </eOperations> | ||
591 | <eStructuralFeatures xsi:type="ecore:EReference" name="eAnnotations" upperBound="-1" | ||
592 | eType="#//EAnnotation" containment="true" resolveProxies="false" eOpposite="#//EAnnotation/eModelElement"> | ||
593 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
594 | <details key="kind" value="element"/> | ||
595 | <details key="name" value="eAnnotations"/> | ||
596 | </eAnnotations> | ||
597 | </eStructuralFeatures> | ||
598 | </eClassifiers> | ||
599 | <eClassifiers xsi:type="ecore:EClass" name="ENamedElement" abstract="true" eSuperTypes="#//EModelElement"> | ||
600 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
601 | <details key="name" value="ENamedElement"/> | ||
602 | <details key="kind" value="elementOnly"/> | ||
603 | </eAnnotations> | ||
604 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
605 | <details key="constraints" value="WellFormedName"/> | ||
606 | </eAnnotations> | ||
607 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="#//EString"> | ||
608 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
609 | <details key="kind" value="attribute"/> | ||
610 | <details key="name" value="name"/> | ||
611 | </eAnnotations> | ||
612 | </eStructuralFeatures> | ||
613 | </eClassifiers> | ||
614 | <eClassifiers xsi:type="ecore:EClass" name="EObject"> | ||
615 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
616 | <details key="name" value="EObject"/> | ||
617 | <details key="kind" value="empty"/> | ||
618 | </eAnnotations> | ||
619 | <eOperations name="eClass" eType="#//EClass"/> | ||
620 | <eOperations name="eIsProxy" eType="#//EBoolean"/> | ||
621 | <eOperations name="eResource" eType="#//EResource"/> | ||
622 | <eOperations name="eContainer" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/> | ||
623 | <eOperations name="eContainingFeature" eType="#//EStructuralFeature"/> | ||
624 | <eOperations name="eContainmentFeature" eType="#//EReference"/> | ||
625 | <eOperations name="eContents"> | ||
626 | <eGenericType eClassifier="#//EEList"> | ||
627 | <eTypeArguments eClassifier="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/> | ||
628 | </eGenericType> | ||
629 | </eOperations> | ||
630 | <eOperations name="eAllContents"> | ||
631 | <eGenericType eClassifier="#//ETreeIterator"> | ||
632 | <eTypeArguments eClassifier="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/> | ||
633 | </eGenericType> | ||
634 | </eOperations> | ||
635 | <eOperations name="eCrossReferences"> | ||
636 | <eGenericType eClassifier="#//EEList"> | ||
637 | <eTypeArguments eClassifier="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/> | ||
638 | </eGenericType> | ||
639 | </eOperations> | ||
640 | <eOperations name="eGet" eType="#//EJavaObject"> | ||
641 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
642 | </eOperations> | ||
643 | <eOperations name="eGet" eType="#//EJavaObject"> | ||
644 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
645 | <eParameters name="resolve" eType="#//EBoolean"/> | ||
646 | </eOperations> | ||
647 | <eOperations name="eSet"> | ||
648 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
649 | <eParameters name="newValue" eType="#//EJavaObject"/> | ||
650 | </eOperations> | ||
651 | <eOperations name="eIsSet" eType="#//EBoolean"> | ||
652 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
653 | </eOperations> | ||
654 | <eOperations name="eUnset"> | ||
655 | <eParameters name="feature" eType="#//EStructuralFeature"/> | ||
656 | </eOperations> | ||
657 | <eOperations name="eInvoke" eType="#//EJavaObject" eExceptions="#//EInvocationTargetException"> | ||
658 | <eParameters name="operation" eType="#//EOperation"/> | ||
659 | <eParameters name="arguments"> | ||
660 | <eGenericType eClassifier="#//EEList"> | ||
661 | <eTypeArguments/> | ||
662 | </eGenericType> | ||
663 | </eParameters> | ||
664 | </eOperations> | ||
665 | </eClassifiers> | ||
666 | <eClassifiers xsi:type="ecore:EClass" name="EOperation" eSuperTypes="#//ETypedElement"> | ||
667 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
668 | <details key="name" value="EOperation"/> | ||
669 | <details key="kind" value="elementOnly"/> | ||
670 | </eAnnotations> | ||
671 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
672 | <details key="constraints" value="UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid"/> | ||
673 | </eAnnotations> | ||
674 | <eOperations name="getOperationID" eType="#//EInt"/> | ||
675 | <eOperations name="isOverrideOf" eType="#//EBoolean"> | ||
676 | <eParameters name="someOperation" eType="#//EOperation"/> | ||
677 | </eOperations> | ||
678 | <eStructuralFeatures xsi:type="ecore:EReference" name="eTypeParameters" upperBound="-1" | ||
679 | eType="#//ETypeParameter" containment="true"> | ||
680 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
681 | <details key="kind" value="element"/> | ||
682 | <details key="name" value="eTypeParameters"/> | ||
683 | </eAnnotations> | ||
684 | </eStructuralFeatures> | ||
685 | <eStructuralFeatures xsi:type="ecore:EReference" name="eParameters" upperBound="-1" | ||
686 | eType="#//EParameter" containment="true" resolveProxies="false" eOpposite="#//EParameter/eOperation"> | ||
687 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
688 | <details key="kind" value="element"/> | ||
689 | <details key="name" value="eParameters"/> | ||
690 | </eAnnotations> | ||
691 | </eStructuralFeatures> | ||
692 | <eStructuralFeatures xsi:type="ecore:EReference" name="eGenericExceptions" upperBound="-1" | ||
693 | eType="#//EGenericType" unsettable="true" containment="true" resolveProxies="false"> | ||
694 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
695 | <details key="kind" value="element"/> | ||
696 | <details key="name" value="eGenericExceptions"/> | ||
697 | </eAnnotations> | ||
698 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
699 | <details key="suppressedIsSetVisibility" value="true"/> | ||
700 | <details key="suppressedUnsetVisibility" value="true"/> | ||
701 | </eAnnotations> | ||
702 | </eStructuralFeatures> | ||
703 | <eStructuralFeatures xsi:type="ecore:EReference" name="eExceptions" upperBound="-1" | ||
704 | eType="#//EClassifier" unsettable="true"> | ||
705 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
706 | <details key="kind" value="attribute"/> | ||
707 | <details key="name" value="eExceptions"/> | ||
708 | </eAnnotations> | ||
709 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
710 | <details key="suppressedIsSetVisibility" value="true"/> | ||
711 | <details key="suppressedUnsetVisibility" value="true"/> | ||
712 | </eAnnotations> | ||
713 | </eStructuralFeatures> | ||
714 | <eStructuralFeatures xsi:type="ecore:EReference" name="eContainingClass" eType="#//EClass" | ||
715 | transient="true" eOpposite="#//EClass/eOperations"/> | ||
716 | </eClassifiers> | ||
717 | <eClassifiers xsi:type="ecore:EClass" name="EPackage" eSuperTypes="#//ENamedElement"> | ||
718 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
719 | <details key="name" value="EPackage"/> | ||
720 | <details key="kind" value="elementOnly"/> | ||
721 | </eAnnotations> | ||
722 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
723 | <details key="constraints" value="WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs"/> | ||
724 | </eAnnotations> | ||
725 | <eOperations name="getEClassifier" eType="#//EClassifier"> | ||
726 | <eParameters name="name" eType="#//EString"/> | ||
727 | </eOperations> | ||
728 | <eStructuralFeatures xsi:type="ecore:EReference" name="eClassifiers" upperBound="-1" | ||
729 | eType="#//EClassifier" containment="true" eOpposite="#//EClassifier/ePackage"> | ||
730 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
731 | <details key="kind" value="element"/> | ||
732 | <details key="name" value="eClassifiers"/> | ||
733 | </eAnnotations> | ||
734 | </eStructuralFeatures> | ||
735 | <eStructuralFeatures xsi:type="ecore:EReference" name="eSubpackages" upperBound="-1" | ||
736 | eType="#//EPackage" containment="true" eOpposite="#//EPackage/eSuperPackage"> | ||
737 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
738 | <details key="kind" value="element"/> | ||
739 | <details key="name" value="eSubpackages"/> | ||
740 | </eAnnotations> | ||
741 | </eStructuralFeatures> | ||
742 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="nsPrefix" eType="#//EString"> | ||
743 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
744 | <details key="kind" value="attribute"/> | ||
745 | <details key="name" value="nsPrefix"/> | ||
746 | </eAnnotations> | ||
747 | </eStructuralFeatures> | ||
748 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="nsURI" eType="#//EString"> | ||
749 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
750 | <details key="kind" value="attribute"/> | ||
751 | <details key="name" value="nsURI"/> | ||
752 | </eAnnotations> | ||
753 | </eStructuralFeatures> | ||
754 | <eStructuralFeatures xsi:type="ecore:EReference" name="eSuperPackage" eType="#//EPackage" | ||
755 | transient="true" eOpposite="#//EPackage/eSubpackages"/> | ||
756 | </eClassifiers> | ||
757 | <eClassifiers xsi:type="ecore:EClass" name="EParameter" eSuperTypes="#//ETypedElement"> | ||
758 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
759 | <details key="name" value="EParameter"/> | ||
760 | <details key="kind" value="elementOnly"/> | ||
761 | </eAnnotations> | ||
762 | <eStructuralFeatures xsi:type="ecore:EReference" name="eOperation" eType="#//EOperation" | ||
763 | transient="true" eOpposite="#//EOperation/eParameters"/> | ||
764 | </eClassifiers> | ||
765 | <eClassifiers xsi:type="ecore:EClass" name="EReference" eSuperTypes="#//EStructuralFeature"> | ||
766 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
767 | <details key="name" value="EReference"/> | ||
768 | <details key="kind" value="elementOnly"/> | ||
769 | </eAnnotations> | ||
770 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
771 | <details key="constraints" value="ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer"/> | ||
772 | </eAnnotations> | ||
773 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="container" eType="#//EBoolean" | ||
774 | changeable="false" volatile="true" transient="true" derived="true"> | ||
775 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
776 | <details key="kind" value="attribute"/> | ||
777 | <details key="name" value="container"/> | ||
778 | </eAnnotations> | ||
779 | </eStructuralFeatures> | ||
780 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="containment" eType="#//EBoolean"> | ||
781 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
782 | <details key="kind" value="attribute"/> | ||
783 | <details key="name" value="containment"/> | ||
784 | </eAnnotations> | ||
785 | </eStructuralFeatures> | ||
786 | <eStructuralFeatures xsi:type="ecore:EReference" name="eKeys" upperBound="-1" | ||
787 | eType="#//EAttribute"> | ||
788 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
789 | <details key="kind" value="attribute"/> | ||
790 | <details key="name" value="eKeys"/> | ||
791 | </eAnnotations> | ||
792 | </eStructuralFeatures> | ||
793 | <eStructuralFeatures xsi:type="ecore:EReference" name="eOpposite" eType="#//EReference"> | ||
794 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
795 | <details key="kind" value="attribute"/> | ||
796 | <details key="name" value="eOpposite"/> | ||
797 | </eAnnotations> | ||
798 | </eStructuralFeatures> | ||
799 | <eStructuralFeatures xsi:type="ecore:EReference" name="eReferenceType" lowerBound="1" | ||
800 | eType="#//EClass" changeable="false" volatile="true" transient="true" derived="true"> | ||
801 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
802 | <details key="kind" value="attribute"/> | ||
803 | <details key="name" value="eReferenceType"/> | ||
804 | </eAnnotations> | ||
805 | </eStructuralFeatures> | ||
806 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="resolveProxies" eType="#//EBoolean" | ||
807 | defaultValueLiteral="true"> | ||
808 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
809 | <details key="kind" value="attribute"/> | ||
810 | <details key="name" value="resolveProxies"/> | ||
811 | </eAnnotations> | ||
812 | </eStructuralFeatures> | ||
813 | </eClassifiers> | ||
814 | <eClassifiers xsi:type="ecore:EDataType" name="EResource" instanceClassName="org.eclipse.emf.ecore.resource.Resource" | ||
815 | serializable="false"> | ||
816 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
817 | <details key="name" value="EResource"/> | ||
818 | </eAnnotations> | ||
819 | </eClassifiers> | ||
820 | <eClassifiers xsi:type="ecore:EDataType" name="EResourceSet" instanceClassName="org.eclipse.emf.ecore.resource.ResourceSet" | ||
821 | serializable="false"> | ||
822 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
823 | <details key="name" value="EResourceSet"/> | ||
824 | </eAnnotations> | ||
825 | </eClassifiers> | ||
826 | <eClassifiers xsi:type="ecore:EDataType" name="EShort" instanceClassName="short"> | ||
827 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
828 | <details key="name" value="EShort"/> | ||
829 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#short"/> | ||
830 | </eAnnotations> | ||
831 | </eClassifiers> | ||
832 | <eClassifiers xsi:type="ecore:EDataType" name="EShortObject" instanceClassName="java.lang.Short"> | ||
833 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
834 | <details key="name" value="EShort:Object"/> | ||
835 | <details key="baseType" value="EShort"/> | ||
836 | </eAnnotations> | ||
837 | </eClassifiers> | ||
838 | <eClassifiers xsi:type="ecore:EDataType" name="EString" instanceClassName="java.lang.String"> | ||
839 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
840 | <details key="name" value="EString"/> | ||
841 | <details key="baseType" value="http://www.eclipse.org/emf/2003/XMLType#string"/> | ||
842 | </eAnnotations> | ||
843 | </eClassifiers> | ||
844 | <eClassifiers xsi:type="ecore:EClass" name="EStringToStringMapEntry" instanceClassName="java.util.Map$Entry"> | ||
845 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
846 | <details key="name" value="EStringToStringMapEntry"/> | ||
847 | <details key="kind" value="empty"/> | ||
848 | </eAnnotations> | ||
849 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="key" eType="#//EString"> | ||
850 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
851 | <details key="kind" value="attribute"/> | ||
852 | <details key="name" value="key"/> | ||
853 | </eAnnotations> | ||
854 | </eStructuralFeatures> | ||
855 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="#//EString"> | ||
856 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
857 | <details key="kind" value="attribute"/> | ||
858 | <details key="name" value="value"/> | ||
859 | </eAnnotations> | ||
860 | </eStructuralFeatures> | ||
861 | </eClassifiers> | ||
862 | <eClassifiers xsi:type="ecore:EClass" name="EStructuralFeature" abstract="true" | ||
863 | eSuperTypes="#//ETypedElement"> | ||
864 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
865 | <details key="name" value="EStructuralFeature"/> | ||
866 | <details key="kind" value="elementOnly"/> | ||
867 | </eAnnotations> | ||
868 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
869 | <details key="constraints" value="ValidDefaultValueLiteral"/> | ||
870 | </eAnnotations> | ||
871 | <eOperations name="getFeatureID" eType="#//EInt"/> | ||
872 | <eOperations name="getContainerClass"> | ||
873 | <eGenericType eClassifier="#//EJavaClass"> | ||
874 | <eTypeArguments/> | ||
875 | </eGenericType> | ||
876 | </eOperations> | ||
877 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="changeable" eType="#//EBoolean" | ||
878 | defaultValueLiteral="true"> | ||
879 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
880 | <details key="kind" value="attribute"/> | ||
881 | <details key="name" value="changeable"/> | ||
882 | </eAnnotations> | ||
883 | </eStructuralFeatures> | ||
884 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValue" eType="#//EJavaObject" | ||
885 | changeable="false" volatile="true" transient="true" derived="true"> | ||
886 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
887 | <details key="kind" value="attribute"/> | ||
888 | <details key="name" value="defaultValue"/> | ||
889 | </eAnnotations> | ||
890 | </eStructuralFeatures> | ||
891 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValueLiteral" eType="#//EString"> | ||
892 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
893 | <details key="kind" value="attribute"/> | ||
894 | <details key="name" value="defaultValueLiteral"/> | ||
895 | </eAnnotations> | ||
896 | </eStructuralFeatures> | ||
897 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="derived" eType="#//EBoolean"> | ||
898 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
899 | <details key="kind" value="attribute"/> | ||
900 | <details key="name" value="derived"/> | ||
901 | </eAnnotations> | ||
902 | </eStructuralFeatures> | ||
903 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="transient" eType="#//EBoolean"> | ||
904 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
905 | <details key="kind" value="attribute"/> | ||
906 | <details key="name" value="transient"/> | ||
907 | </eAnnotations> | ||
908 | </eStructuralFeatures> | ||
909 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="unsettable" eType="#//EBoolean"> | ||
910 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
911 | <details key="kind" value="attribute"/> | ||
912 | <details key="name" value="unsettable"/> | ||
913 | </eAnnotations> | ||
914 | </eStructuralFeatures> | ||
915 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="volatile" eType="#//EBoolean"> | ||
916 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
917 | <details key="kind" value="attribute"/> | ||
918 | <details key="name" value="volatile"/> | ||
919 | </eAnnotations> | ||
920 | </eStructuralFeatures> | ||
921 | <eStructuralFeatures xsi:type="ecore:EReference" name="eContainingClass" eType="#//EClass" | ||
922 | transient="true" eOpposite="#//EClass/eStructuralFeatures"/> | ||
923 | </eClassifiers> | ||
924 | <eClassifiers xsi:type="ecore:EDataType" name="ETreeIterator" instanceClassName="org.eclipse.emf.common.util.TreeIterator" | ||
925 | serializable="false"> | ||
926 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
927 | <details key="name" value="ETreeIterator"/> | ||
928 | </eAnnotations> | ||
929 | <eTypeParameters name="E"/> | ||
930 | </eClassifiers> | ||
931 | <eClassifiers xsi:type="ecore:EClass" name="ETypedElement" abstract="true" eSuperTypes="#//ENamedElement"> | ||
932 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
933 | <details key="name" value="ETypedElement"/> | ||
934 | <details key="kind" value="elementOnly"/> | ||
935 | </eAnnotations> | ||
936 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> | ||
937 | <details key="constraints" value="ValidLowerBound ValidUpperBound ConsistentBounds ValidType"/> | ||
938 | </eAnnotations> | ||
939 | <eStructuralFeatures xsi:type="ecore:EReference" name="eGenericType" eType="#//EGenericType" | ||
940 | volatile="true" unsettable="true" containment="true" resolveProxies="false"> | ||
941 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
942 | <details key="kind" value="element"/> | ||
943 | <details key="name" value="eGenericType"/> | ||
944 | </eAnnotations> | ||
945 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
946 | <details key="suppressedIsSetVisibility" value="true"/> | ||
947 | <details key="suppressedUnsetVisibility" value="true"/> | ||
948 | </eAnnotations> | ||
949 | </eStructuralFeatures> | ||
950 | <eStructuralFeatures xsi:type="ecore:EReference" name="eType" eType="#//EClassifier" | ||
951 | volatile="true" unsettable="true"> | ||
952 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
953 | <details key="kind" value="attribute"/> | ||
954 | <details key="name" value="eType"/> | ||
955 | </eAnnotations> | ||
956 | <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> | ||
957 | <details key="suppressedIsSetVisibility" value="true"/> | ||
958 | <details key="suppressedUnsetVisibility" value="true"/> | ||
959 | </eAnnotations> | ||
960 | </eStructuralFeatures> | ||
961 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="lowerBound" eType="#//EInt"> | ||
962 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
963 | <details key="kind" value="attribute"/> | ||
964 | <details key="name" value="lowerBound"/> | ||
965 | </eAnnotations> | ||
966 | </eStructuralFeatures> | ||
967 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="many" eType="#//EBoolean" | ||
968 | changeable="false" volatile="true" transient="true" derived="true"> | ||
969 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
970 | <details key="kind" value="attribute"/> | ||
971 | <details key="name" value="many"/> | ||
972 | </eAnnotations> | ||
973 | </eStructuralFeatures> | ||
974 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="ordered" eType="#//EBoolean" | ||
975 | defaultValueLiteral="true"> | ||
976 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
977 | <details key="kind" value="attribute"/> | ||
978 | <details key="name" value="ordered"/> | ||
979 | </eAnnotations> | ||
980 | </eStructuralFeatures> | ||
981 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="required" eType="#//EBoolean" | ||
982 | changeable="false" volatile="true" transient="true" derived="true"> | ||
983 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
984 | <details key="kind" value="attribute"/> | ||
985 | <details key="name" value="required"/> | ||
986 | </eAnnotations> | ||
987 | </eStructuralFeatures> | ||
988 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="unique" eType="#//EBoolean" | ||
989 | defaultValueLiteral="true"> | ||
990 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
991 | <details key="kind" value="attribute"/> | ||
992 | <details key="name" value="unique"/> | ||
993 | </eAnnotations> | ||
994 | </eStructuralFeatures> | ||
995 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperBound" eType="#//EInt" | ||
996 | defaultValueLiteral="1"> | ||
997 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
998 | <details key="kind" value="attribute"/> | ||
999 | <details key="name" value="upperBound"/> | ||
1000 | </eAnnotations> | ||
1001 | </eStructuralFeatures> | ||
1002 | </eClassifiers> | ||
1003 | <eClassifiers xsi:type="ecore:EClass" name="ETypeParameter" eSuperTypes="#//ENamedElement"> | ||
1004 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
1005 | <details key="name" value="ETypeParameter"/> | ||
1006 | <details key="kind" value="elementOnly"/> | ||
1007 | </eAnnotations> | ||
1008 | <eStructuralFeatures xsi:type="ecore:EReference" name="eBounds" upperBound="-1" | ||
1009 | eType="#//EGenericType" containment="true" resolveProxies="false"> | ||
1010 | <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> | ||
1011 | <details key="kind" value="element"/> | ||
1012 | <details key="name" value="eBounds"/> | ||
1013 | </eAnnotations> | ||
1014 | </eStructuralFeatures> | ||
1015 | </eClassifiers> | ||
1016 | </ecore:EPackage> | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Domain.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Domain.xtend new file mode 100644 index 00000000..c8fd435b --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Domain.xtend | |||
@@ -0,0 +1,7 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app | ||
2 | |||
3 | enum Domain{ | ||
4 | Yakindumm, | ||
5 | Ecore, | ||
6 | Github | ||
7 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend new file mode 100644 index 00000000..dfde6593 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend | |||
@@ -0,0 +1,96 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph | ||
4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter | ||
5 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader | ||
6 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.validation.ViolationCheck | ||
7 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl | ||
8 | import java.io.File | ||
9 | import java.util.ArrayList | ||
10 | import org.eclipse.emf.ecore.EPackage | ||
11 | import org.eclipse.emf.ecore.EcorePackage | ||
12 | import org.eclipse.viatra.query.runtime.rete.matcher.ReteEngine | ||
13 | import org.eclipse.emf.ecore.impl.EcorePackageImpl | ||
14 | import org.eclipse.emf.ecore.EReference | ||
15 | |||
16 | //import yakindumm2.impl.Yakindumm2PackageImpl | ||
17 | |||
18 | class Main { | ||
19 | var static Domain d = Domain.Yakindumm; | ||
20 | val static String suffix = '.xmi' | ||
21 | val static String OUTPUT_FOLDER = "Inputs/measurement2/yakindu/Alloy/"; | ||
22 | val static String INPUT_FOLDER = "outputs/measurement2/yakindu/Alloy/"; | ||
23 | val static int NUM_RUNS = 1; | ||
24 | |||
25 | static class RWInformation{ | ||
26 | public var String inputFolder; | ||
27 | public var String outputFolder; | ||
28 | public var int numRuns; | ||
29 | |||
30 | new(String inputFolder, String outputFolder, int numRuns){ | ||
31 | this.inputFolder = inputFolder; | ||
32 | this.outputFolder = outputFolder; | ||
33 | this.numRuns = numRuns; | ||
34 | } | ||
35 | } | ||
36 | |||
37 | def static void main(String[] args){ | ||
38 | //init model | ||
39 | var EPackage metamodel; | ||
40 | //init viatra engine for the violation checker | ||
41 | ReteEngine.getClass(); | ||
42 | |||
43 | if(d == Domain.Yakindumm){ | ||
44 | YakindummPackageImpl.eINSTANCE.eClass; | ||
45 | metamodel = YakindummPackageImpl.eINSTANCE; | ||
46 | }else if (d == Domain.Ecore){ | ||
47 | EcorePackage.eINSTANCE.eClass; | ||
48 | metamodel = EcorePackageImpl.eINSTANCE; | ||
49 | }else if (d == Domain.Github){ | ||
50 | //TODO: Initialize Github Package | ||
51 | } | ||
52 | |||
53 | |||
54 | println("Start Reading Models..."); | ||
55 | var reader = new GraphReader(metamodel, suffix); | ||
56 | |||
57 | val models = new RWInformation(OUTPUT_FOLDER, INPUT_FOLDER, NUM_RUNS); | ||
58 | calculateAllModels(models.inputFolder, models.outputFolder,models.numRuns, reader); | ||
59 | println("finished"); | ||
60 | } | ||
61 | |||
62 | static def calculateAllModels(String inputFolder, String outputFolder, int numRuns, GraphReader reader){ | ||
63 | (new File(outputFolder)).mkdir(); | ||
64 | for(var i = 1; i <= numRuns; i++){ | ||
65 | val models = new ArrayList<EMFGraph>(); | ||
66 | models.addAll(reader.readModels(inputFolder + "run" + i)); | ||
67 | for(model : models){ | ||
68 | calculateAndOutputMetrics(model, YakindummPackageImpl.eNAME, outputFolder+model.name+"_run_"+i+".csv"); | ||
69 | } | ||
70 | } | ||
71 | println("output results Ended for: " + outputFolder); | ||
72 | |||
73 | |||
74 | } | ||
75 | |||
76 | static def calculateAndOutputMetrics(EMFGraph model, String metaModel, String fileName){ | ||
77 | //println("evaluating for " + model.name); | ||
78 | model.metaModel = metaModel; | ||
79 | |||
80 | //remove eGenericType for Ecore domain | ||
81 | if(d == Domain.Ecore){ | ||
82 | var refsToRemove = EcorePackageImpl.eINSTANCE.eAllContents.filter(EReference).filter[ | ||
83 | it.name.equals('eGenericType') || it.name.equals('eGenericSuperTypes') || it.name.equals('eFactoryInstance')|| | ||
84 | it.name.equals('eGenericExceptions') || it.name.equals('references') || it.name.equals('contents'); | ||
85 | ]; | ||
86 | refsToRemove.forEach[model.removeReference(it)]; | ||
87 | } | ||
88 | |||
89 | var outputs = model.evaluateAllMetrics(); | ||
90 | var violations = ViolationCheck.calculateViolationCounts(model.root, d); | ||
91 | println(violations); | ||
92 | var violationsOutput = newArrayList('violations', violations+''); | ||
93 | outputs.add(violationsOutput); | ||
94 | CsvFileWriter.write(outputs, fileName); | ||
95 | } | ||
96 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.xtend new file mode 100644 index 00000000..5e62b586 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.xtend | |||
@@ -0,0 +1,85 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.JSDistance | ||
4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance | ||
5 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.PartialInterpretationGraph | ||
6 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter | ||
7 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric | ||
8 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric | ||
9 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric | ||
10 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric | ||
11 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation | ||
12 | import java.io.File | ||
13 | import java.io.FileNotFoundException | ||
14 | import java.io.PrintWriter | ||
15 | import java.util.ArrayList | ||
16 | import java.util.List | ||
17 | import org.eclipse.emf.ecore.util.EcoreUtil | ||
18 | import org.eclipse.viatra.dse.api.Solution | ||
19 | |||
20 | class PartialInterpretationMetric { | ||
21 | var static KSDistance ks; | ||
22 | var static JSDistance js; | ||
23 | |||
24 | def static void initPaths(){ | ||
25 | new File("debug/metric/").mkdir(); | ||
26 | new File("debug/metric/trajectories/").mkdir(); | ||
27 | } | ||
28 | |||
29 | // calculate the metrics for a state | ||
30 | def static void calculateMetric(PartialInterpretation partial, String path, String currentStateId, Integer counter){ | ||
31 | val metrics = new ArrayList<Metric>(); | ||
32 | metrics.add(new OutDegreeMetric()); | ||
33 | metrics.add(new NodeActivityMetric()); | ||
34 | metrics.add(new MultiplexParticipationCoefficientMetric()); | ||
35 | |||
36 | //make dir since the folder can be none existing | ||
37 | new File(path).mkdir(); | ||
38 | val filename = path + "/state_"+currentStateId+"-"+counter+".csv"; | ||
39 | val metricCalculator = new PartialInterpretationGraph(partial, metrics, currentStateId); | ||
40 | |||
41 | CsvFileWriter.write(metricCalculator.evaluateAllMetrics(), filename); | ||
42 | } | ||
43 | |||
44 | def static void outputTrajectories(PartialInterpretation empty, List<Solution> solutions){ | ||
45 | for(solution : solutions){ | ||
46 | |||
47 | //need to copy the empty solution because the transition directly worked on the graph | ||
48 | val emptySolutionCopy = EcoreUtil.copy(empty) | ||
49 | val trajectory = solution.shortestTrajectory; | ||
50 | trajectory.model = emptySolutionCopy | ||
51 | |||
52 | // state codes that will record the trajectory | ||
53 | val stateCodes = newArrayList() | ||
54 | var counter = 0 | ||
55 | |||
56 | //transform and record the state codes for each state | ||
57 | while(trajectory.doNextTransformation){ | ||
58 | //println(trajectory.stateCoder.createStateCode) | ||
59 | val stateId = trajectory.stateCoder.createStateCode.toString | ||
60 | val interpretation = trajectory.getModel(); | ||
61 | println(stateId) | ||
62 | //calculate metrics of current state | ||
63 | calculateMetric(interpretation as PartialInterpretation, "debug/metric/output", stateId, counter) | ||
64 | stateCodes.add(stateId) | ||
65 | counter++ | ||
66 | } | ||
67 | |||
68 | |||
69 | //output the trajectory | ||
70 | try{ | ||
71 | new File("debug/metric/trajectories/").mkdir(); | ||
72 | val path = "debug/metric/trajectories/trajectory"+trajectory.stateCoder.createStateCode.toString+".csv" | ||
73 | val PrintWriter writer = new PrintWriter(new File(path)) | ||
74 | val output = new StringBuilder | ||
75 | for(stateCode : stateCodes){ | ||
76 | output.append(stateCode+'\n') | ||
77 | } | ||
78 | writer.write(output.toString()) | ||
79 | writer.close() | ||
80 | }catch(FileNotFoundException e) { | ||
81 | e.printStackTrace() | ||
82 | } | ||
83 | } | ||
84 | } | ||
85 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend new file mode 100644 index 00000000..697b2639 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend | |||
@@ -0,0 +1,216 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.EuclideanDistance | ||
4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.JSDistance | ||
5 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance | ||
6 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.StateData | ||
7 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.PartialInterpretationGraph | ||
8 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.RepMetricsReader | ||
9 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric | ||
10 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup | ||
11 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric | ||
12 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric | ||
13 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric | ||
14 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric | ||
15 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.predictor.LinearModel | ||
16 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation | ||
17 | import java.util.ArrayList | ||
18 | import java.util.HashMap | ||
19 | import java.util.List | ||
20 | import java.util.Map | ||
21 | import org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression | ||
22 | import org.eclipse.xtend.lib.annotations.Accessors | ||
23 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.EdgeTypeMetric | ||
24 | |||
25 | class PartialInterpretationMetricDistance { | ||
26 | |||
27 | var KSDistance ks; | ||
28 | var JSDistance js; | ||
29 | var EuclideanDistance ed; | ||
30 | var Map<Object, StateData> stateAndHistory; | ||
31 | var OLSMultipleLinearRegression regression; | ||
32 | List<StateData> samples; | ||
33 | var MetricSampleGroup g; | ||
34 | @Accessors(PUBLIC_GETTER) | ||
35 | var LinearModel linearModel; | ||
36 | |||
37 | |||
38 | new(Domain d){ | ||
39 | var metrics = RepMetricsReader.read(d); | ||
40 | this.g = metrics; | ||
41 | ks = new KSDistance(g); | ||
42 | js = new JSDistance(g); | ||
43 | ed = new EuclideanDistance(g); | ||
44 | regression = new OLSMultipleLinearRegression(); | ||
45 | regression.noIntercept = false; | ||
46 | stateAndHistory = new HashMap<Object, StateData>(); | ||
47 | samples = new ArrayList<StateData>(); | ||
48 | linearModel = new LinearModel(0.01); | ||
49 | } | ||
50 | |||
51 | def MetricDistanceGroup calculateMetricDistanceKS(PartialInterpretation partial){ | ||
52 | val metrics = new ArrayList<Metric>(); | ||
53 | metrics.add(new OutDegreeMetric()); | ||
54 | metrics.add(new NodeActivityMetric()); | ||
55 | metrics.add(new MultiplexParticipationCoefficientMetric()); | ||
56 | metrics.add(new NodeTypeMetric()); | ||
57 | val metricCalculator = new PartialInterpretationGraph(partial, metrics, null); | ||
58 | var metricSamples = metricCalculator.evaluateAllMetricsToSamples(); | ||
59 | |||
60 | var mpc = ks.mpcDistance(metricSamples.mpcSamples); | ||
61 | var na = ks.naDistance(metricSamples.naSamples); | ||
62 | var outDegree = ks.outDegreeDistance(metricSamples.outDegreeSamples); | ||
63 | var nodeType = ks.nodeTypeDistance(metricSamples.nodeTypeSamples); | ||
64 | //var typedOutDegree = ks.typedOutDegreeDistance(metricSamples.typedOutDegreeSamples); | ||
65 | var distance = new MetricDistanceGroup(mpc, na, outDegree, nodeType); | ||
66 | distance.nodeTypeInfo = metricSamples.nodeTypeSamples; | ||
67 | return distance; | ||
68 | } | ||
69 | |||
70 | def MetricDistanceGroup calculateMetricEuclidean(PartialInterpretation partial){ | ||
71 | val metrics = new ArrayList<Metric>(); | ||
72 | metrics.add(new OutDegreeMetric()); | ||
73 | metrics.add(new NodeActivityMetric()); | ||
74 | metrics.add(new MultiplexParticipationCoefficientMetric()); | ||
75 | |||
76 | val metricCalculator = new PartialInterpretationGraph(partial, metrics, null); | ||
77 | var metricSamples = metricCalculator.evaluateAllMetricsToSamples(); | ||
78 | |||
79 | var mpc = ed.mpcDistance(metricSamples.mpcSamples); | ||
80 | var na = ed.naDistance(metricSamples.naSamples); | ||
81 | var outDegree = ed.outDegreeDistance(metricSamples.outDegreeSamples); | ||
82 | |||
83 | return new MetricDistanceGroup(mpc, na, outDegree); | ||
84 | } | ||
85 | |||
86 | def MetricDistanceGroup calculateMetricDistance(PartialInterpretation partial){ | ||
87 | val metrics = new ArrayList<Metric>(); | ||
88 | metrics.add(new OutDegreeMetric()); | ||
89 | metrics.add(new NodeActivityMetric()); | ||
90 | metrics.add(new MultiplexParticipationCoefficientMetric()); | ||
91 | |||
92 | val metricCalculator = new PartialInterpretationGraph(partial, metrics, null); | ||
93 | var metricSamples = metricCalculator.evaluateAllMetricsToSamples(); | ||
94 | |||
95 | var mpc = js.mpcDistance(metricSamples.mpcSamples); | ||
96 | var na = js.naDistance(metricSamples.naSamples); | ||
97 | var outDegree = js.outDegreeDistance(metricSamples.outDegreeSamples); | ||
98 | |||
99 | return new MetricDistanceGroup(mpc, na, outDegree); | ||
100 | } | ||
101 | |||
102 | def resetRegression(Object state){ | ||
103 | samples.clear(); | ||
104 | |||
105 | if(stateAndHistory.containsKey(state)){ | ||
106 | var data = stateAndHistory.get(state); | ||
107 | |||
108 | var curState = state; | ||
109 | |||
110 | samples.add(data); | ||
111 | |||
112 | while(stateAndHistory.containsKey(data.lastState) && data.lastState != curState){ | ||
113 | curState = data.lastState; | ||
114 | data = stateAndHistory.get(data.lastState); | ||
115 | samples.add(data); | ||
116 | } | ||
117 | |||
118 | if(samples.size == 0){ | ||
119 | println('state: ' + state); | ||
120 | println('last state: ' + data.lastState); | ||
121 | } | ||
122 | } | ||
123 | println("trajectory sample size:" + samples.size) | ||
124 | } | ||
125 | |||
126 | def feedData(Object state, double[] features, double value, Object lastState){ | ||
127 | var data = new StateData(features, value, lastState); | ||
128 | stateAndHistory.put(state, data); | ||
129 | samples.add(data); | ||
130 | } | ||
131 | |||
132 | def getPredictionForNextDataSample(double[] features, double value, double[] featuresToPredict){ | ||
133 | if(samples.size <= 4){ | ||
134 | println('OK'); | ||
135 | } | ||
136 | var data = new StateData(features, value, null); | ||
137 | samples.add(data); | ||
138 | |||
139 | // create training set from current data | ||
140 | var double[][] xSamples = samples.map[it.features]; | ||
141 | var double[] ySamples = samples.map[it.value]; | ||
142 | |||
143 | |||
144 | regression.newSampleData(ySamples, xSamples); | ||
145 | var prediction = predict(featuresToPredict); | ||
146 | |||
147 | //remove the last element just added | ||
148 | samples.remove(samples.size - 1); | ||
149 | return prediction; | ||
150 | } | ||
151 | |||
152 | def private predict(double[] featuresToPredict){ | ||
153 | var parameters = regression.estimateRegressionParameters(); | ||
154 | // the regression will add an initial column for 1's, the first parameter is constant term | ||
155 | var result = parameters.get(0); | ||
156 | for(var i = 0; i < featuresToPredict.length; i++){ | ||
157 | result += parameters.get(i+1) * featuresToPredict.get(i); | ||
158 | } | ||
159 | return result; | ||
160 | } | ||
161 | |||
162 | def double[] calculateFeature(int step, int violations){ | ||
163 | var features = newDoubleArrayOfSize(2); | ||
164 | //constant term | ||
165 | features.set(0, 1); //a | ||
166 | features.set(0, Math.sqrt(step) + 30) // b | ||
167 | features.set(1, 1.0 / (step + 30) );// c | ||
168 | |||
169 | |||
170 | // features.set(2, violations); | ||
171 | // features.set(3, Math.pow(violations, 2)); | ||
172 | |||
173 | return features; | ||
174 | } | ||
175 | } | ||
176 | |||
177 | class MetricDistanceGroup{ | ||
178 | var double mpcDistance; | ||
179 | var double naDistance; | ||
180 | var double outDegreeDistance; | ||
181 | var double nodeTypeDistance; | ||
182 | protected var HashMap<String, Double> nodeTypeInfo; | ||
183 | |||
184 | new(double mpcDistance, double naDistance, double outDegreeDistance, double nodeTypeDistance){ | ||
185 | this.mpcDistance = mpcDistance; | ||
186 | this.naDistance = naDistance; | ||
187 | this.outDegreeDistance = outDegreeDistance; | ||
188 | this.nodeTypeDistance = nodeTypeDistance; | ||
189 | } | ||
190 | |||
191 | new(double mpcDistance, double naDistance, double outDegreeDistance){ | ||
192 | this.mpcDistance = mpcDistance; | ||
193 | this.naDistance = naDistance; | ||
194 | this.outDegreeDistance = outDegreeDistance; | ||
195 | } | ||
196 | |||
197 | def double getNodeTypeDistance(){ | ||
198 | return this.nodeTypeDistance; | ||
199 | } | ||
200 | |||
201 | def double getMPCDistance(){ | ||
202 | return this.mpcDistance | ||
203 | } | ||
204 | |||
205 | def double getNADistance(){ | ||
206 | return this.naDistance | ||
207 | } | ||
208 | |||
209 | def double getOutDegreeDistance(){ | ||
210 | return this.outDegreeDistance | ||
211 | } | ||
212 | |||
213 | def double getNodeTypePercentage(String typeName){ | ||
214 | return nodeTypeInfo.getOrDefault(typeName, 0.0); | ||
215 | } | ||
216 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.xtend new file mode 100644 index 00000000..613f0f43 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.xtend | |||
@@ -0,0 +1,38 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance | ||
2 | |||
3 | import java.text.DecimalFormat | ||
4 | import java.util.HashMap | ||
5 | import java.util.List | ||
6 | import org.eclipse.xtend.lib.annotations.Accessors | ||
7 | |||
8 | abstract class CostDistance { | ||
9 | def abstract double naDistance(List<Double> samples); | ||
10 | def abstract double mpcDistance(List<Double> samples); | ||
11 | def abstract double outDegreeDistance(List<Double> samples); | ||
12 | |||
13 | def protected pmfFromSamples(double[] samples, DecimalFormat formatter){ | ||
14 | var length = samples.length; | ||
15 | var pmfMap = new HashMap<String, Double>(); | ||
16 | |||
17 | for(sample : samples){ | ||
18 | pmfMap.put(formatter.format(sample), pmfMap.getOrDefault(formatter.format(sample), 0.0) + 1.0 / length); | ||
19 | } | ||
20 | |||
21 | return pmfMap; | ||
22 | } | ||
23 | } | ||
24 | |||
25 | class StateData{ | ||
26 | @Accessors(PUBLIC_GETTER) | ||
27 | var double[] features; | ||
28 | @Accessors(PUBLIC_GETTER) | ||
29 | var double value; | ||
30 | @Accessors(PUBLIC_GETTER) | ||
31 | var Object lastState; | ||
32 | |||
33 | new(double[] features, double value, Object lastState){ | ||
34 | this.features = features; | ||
35 | this.value = value | ||
36 | this.lastState = lastState; | ||
37 | } | ||
38 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/EuclideanDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/EuclideanDistance.xtend new file mode 100644 index 00000000..d6adcc9a --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/EuclideanDistance.xtend | |||
@@ -0,0 +1,72 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain | ||
4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.RepMetricsReader | ||
5 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup | ||
6 | import com.google.common.collect.Sets | ||
7 | import java.text.DecimalFormat | ||
8 | import java.util.ArrayList | ||
9 | import java.util.HashMap | ||
10 | import java.util.List | ||
11 | import java.util.Map | ||
12 | import java.util.Set | ||
13 | |||
14 | class EuclideanDistance extends CostDistance{ | ||
15 | var MetricSampleGroup g; | ||
16 | var HashMap<String, Double> mpcPMF; | ||
17 | var HashMap<String, Double> naPMF; | ||
18 | var HashMap<String, Double> outDegreePMF; | ||
19 | var DecimalFormat formatter; | ||
20 | |||
21 | new(MetricSampleGroup g){ | ||
22 | this.g = g; | ||
23 | |||
24 | var mpcSamples = g.mpcSamples; | ||
25 | var naSamples = g.naSamples.stream.mapToDouble([it]).toArray(); | ||
26 | var outDegreeSamples = g.outDegreeSamples.stream.mapToDouble([it]).toArray(); | ||
27 | |||
28 | //needs to format the number to string avoid precision issue | ||
29 | formatter = new DecimalFormat("#0.00000"); | ||
30 | |||
31 | mpcPMF = pmfFromSamples(mpcSamples, formatter); | ||
32 | naPMF = pmfFromSamples(naSamples, formatter); | ||
33 | outDegreePMF = pmfFromSamples(outDegreeSamples, formatter); | ||
34 | } | ||
35 | |||
36 | override naDistance(List<Double> samples) { | ||
37 | var pmfMap = pmfFromSamples(samples, formatter); | ||
38 | return euclideanDistance(pmfMap, naPMF); | ||
39 | } | ||
40 | |||
41 | override mpcDistance(List<Double> samples) { | ||
42 | var pmfMap = pmfFromSamples(samples, formatter); | ||
43 | return euclideanDistance(pmfMap, mpcPMF); | ||
44 | } | ||
45 | |||
46 | override outDegreeDistance(List<Double> samples) { | ||
47 | var pmfMap = pmfFromSamples(samples, formatter); | ||
48 | return euclideanDistance(pmfMap, outDegreePMF); | ||
49 | } | ||
50 | |||
51 | |||
52 | def private euclideanDistance(HashMap<String, Double> pmf1, HashMap<String, Double> pmf2){ | ||
53 | var keys = Sets.union(pmf1.keySet(), pmf2.keySet()); | ||
54 | var pmfList1 = pmfMapToList(pmf1, keys); | ||
55 | var pmfList2 = pmfMapToList(pmf2, keys); | ||
56 | var distance = 0.0; | ||
57 | for(var i = 0; i < pmfList1.size(); i++){ | ||
58 | distance += Math.pow(pmfList1.get(i) + pmfList2.get(i), 2); | ||
59 | } | ||
60 | |||
61 | return Math.sqrt(distance); | ||
62 | } | ||
63 | |||
64 | def private pmfMapToList(Map<String, Double> map, Set<String> keys){ | ||
65 | var list = new ArrayList<Double>(); | ||
66 | for(key : keys){ | ||
67 | var value = map.getOrDefault(key, 0.0); | ||
68 | list.add(value); | ||
69 | } | ||
70 | return list; | ||
71 | } | ||
72 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/JSDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/JSDistance.xtend new file mode 100644 index 00000000..4a0a0dc3 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/JSDistance.xtend | |||
@@ -0,0 +1,88 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup | ||
4 | import com.google.common.collect.Sets | ||
5 | import java.text.DecimalFormat | ||
6 | import java.util.HashMap | ||
7 | import java.util.List | ||
8 | |||
9 | class JSDistance extends CostDistance { | ||
10 | var HashMap<String, Double> mpcPMF; | ||
11 | var HashMap<String, Double> naPMF; | ||
12 | var HashMap<String, Double> outDegreePMF; | ||
13 | var HashMap<String, Double> nodeTypesPMF; | ||
14 | var DecimalFormat formatter; | ||
15 | |||
16 | new(MetricSampleGroup g){ | ||
17 | var mpcSamples = g.mpcSamples; | ||
18 | var naSamples = g.naSamples.stream.mapToDouble([it]).toArray(); | ||
19 | var outDegreeSamples = g.outDegreeSamples.stream.mapToDouble([it]).toArray(); | ||
20 | |||
21 | //needs to format the number to string avoid precision issue | ||
22 | formatter = new DecimalFormat("#0.00000"); | ||
23 | |||
24 | mpcPMF = pmfFromSamples(mpcSamples, formatter); | ||
25 | naPMF = pmfFromSamples(naSamples, formatter); | ||
26 | outDegreePMF = pmfFromSamples(outDegreeSamples, formatter); | ||
27 | nodeTypesPMF = g.nodeTypeSamples; | ||
28 | } | ||
29 | |||
30 | def private combinePMF(HashMap<String, Double> pmf1, HashMap<String, Double> pmf2){ | ||
31 | var pmfMap = new HashMap<String, Double>(); | ||
32 | |||
33 | var union = Sets.union(pmf1.keySet(), pmf2.keySet()); | ||
34 | |||
35 | for(key : union){ | ||
36 | // corresponding to M in JS distance | ||
37 | var value = 1.0/2 * (pmf1.getOrDefault(key, 0.0) + pmf2.getOrDefault(key, 0.0)); | ||
38 | pmfMap.put(key, value); | ||
39 | } | ||
40 | return pmfMap; | ||
41 | } | ||
42 | |||
43 | def private jsDivergence(HashMap<String, Double> p, HashMap<String, Double> q){ | ||
44 | val m = combinePMF(q, p); | ||
45 | var distance = 1.0/2 * klDivergence(p, m) + 1.0/2 * klDivergence(q, m); | ||
46 | return distance; | ||
47 | } | ||
48 | |||
49 | def klDivergence(HashMap<String, Double> p, HashMap<String, Double> q){ | ||
50 | var distance = 0.0; | ||
51 | for(key : q.keySet()){ | ||
52 | //need to convert log e to log 2 | ||
53 | if(p.containsKey(key)){ | ||
54 | distance -= p.get(key) * Math.log(q.get(key) / p.get(key)) / Math.log(2); | ||
55 | } | ||
56 | } | ||
57 | return distance; | ||
58 | } | ||
59 | |||
60 | override double mpcDistance(List<Double> samples){ | ||
61 | // map list to array | ||
62 | var map = pmfFromSamples(samples.stream().mapToDouble([it]).toArray(), formatter); | ||
63 | //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1 | ||
64 | if(map.size < 2) return 1; | ||
65 | return jsDivergence(map, mpcPMF); | ||
66 | } | ||
67 | |||
68 | override double naDistance(List<Double> samples){ | ||
69 | // map list to array | ||
70 | var map = pmfFromSamples(samples.stream().mapToDouble([it]).toArray(), formatter); | ||
71 | |||
72 | //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1 | ||
73 | if(map.size < 2) return 1; | ||
74 | return jsDivergence(map, naPMF); | ||
75 | } | ||
76 | |||
77 | override double outDegreeDistance(List<Double> samples){ | ||
78 | // map list to array | ||
79 | var map = pmfFromSamples(samples.stream().mapToDouble([it]).toArray(), formatter); | ||
80 | //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1 | ||
81 | if(map.size < 2) return 1; | ||
82 | return jsDivergence(map, outDegreePMF); | ||
83 | } | ||
84 | |||
85 | def nodeTypeDistance(HashMap<String, Double> samples){ | ||
86 | return klDivergence(samples, nodeTypesPMF); | ||
87 | } | ||
88 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend new file mode 100644 index 00000000..c486a328 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend | |||
@@ -0,0 +1,102 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup | ||
4 | import java.util.HashMap | ||
5 | import java.util.HashSet | ||
6 | import java.util.List | ||
7 | import org.apache.commons.math3.stat.inference.KolmogorovSmirnovTest | ||
8 | |||
9 | class KSDistance extends CostDistance { | ||
10 | var static ksTester = new KolmogorovSmirnovTest(); | ||
11 | var MetricSampleGroup g; | ||
12 | |||
13 | new(MetricSampleGroup g){ | ||
14 | this.g = g; | ||
15 | } | ||
16 | override double mpcDistance(List<Double> samples){ | ||
17 | //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1 | ||
18 | if(samples.size < 2) return 1; | ||
19 | return ksTester.kolmogorovSmirnovStatistic(g.mpcSamples, samples); | ||
20 | } | ||
21 | |||
22 | override double naDistance(List<Double> samples){ | ||
23 | //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1 | ||
24 | if(samples.size < 2) return 1; | ||
25 | return ksTester.kolmogorovSmirnovStatistic(g.naSamples as double[], samples); | ||
26 | } | ||
27 | |||
28 | override double outDegreeDistance(List<Double> samples){ | ||
29 | //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1 | ||
30 | if(samples.size < 2) return 1; | ||
31 | return ksTester.kolmogorovSmirnovStatistic(g.outDegreeSamples, samples); | ||
32 | } | ||
33 | |||
34 | def double typedOutDegreeDistance(HashMap<String, List<Integer>> map){ | ||
35 | var value = 0.0; | ||
36 | // map list to array | ||
37 | val keySet = new HashSet<String>(map.keySet); | ||
38 | keySet.addAll(g.typedOutDegreeSamples.keySet); | ||
39 | for(key : keySet){ | ||
40 | if(!map.containsKey(key) ){ | ||
41 | value += 1; | ||
42 | }else if(!g.typedOutDegreeSamples.containsKey(key)){ | ||
43 | value += map.get(key).size * 100; | ||
44 | }else{ | ||
45 | var double[] rep = g.typedOutDegreeSamples.get(key).stream().mapToDouble([it|it]).toArray(); | ||
46 | var double[] ins = map.get(key).stream().mapToDouble([it|it]).toArray(); | ||
47 | if((rep.size < 2 || ins.size < 2) ){ | ||
48 | if(rep.size < 2 && rep.containsAll(ins)){ | ||
49 | value += 0; | ||
50 | }else{ | ||
51 | value += 1; | ||
52 | } | ||
53 | }else if(rep.size >= 2 && ins.size >= 2){ | ||
54 | value += ksTester.kolmogorovSmirnovStatistic(rep, ins); | ||
55 | } | ||
56 | } | ||
57 | } | ||
58 | |||
59 | |||
60 | return value; | ||
61 | } | ||
62 | |||
63 | def nodeTypeDistance(HashMap<String, Double> samples){ | ||
64 | var typesDistMap = g.nodeTypeSamples; | ||
65 | var sourceDist = newArrayList(); | ||
66 | var instanceDist = newArrayList(); | ||
67 | |||
68 | for(key : typesDistMap.keySet()){ | ||
69 | sourceDist.add(typesDistMap.get(key)); | ||
70 | instanceDist.add(samples.getOrDefault(key, 0.0)); | ||
71 | } | ||
72 | |||
73 | return ks_distance_two_dist(sourceDist, instanceDist); | ||
74 | } | ||
75 | |||
76 | def edgeTypeDistance(HashMap<String, Double> samples){ | ||
77 | var typesDistMap = g.edgeTypeSamples; | ||
78 | var sourceDist = newArrayList(); | ||
79 | var instanceDist = newArrayList(); | ||
80 | |||
81 | for(key : typesDistMap.keySet()){ | ||
82 | sourceDist.add(typesDistMap.get(key)); | ||
83 | instanceDist.add(samples.getOrDefault(key, 0.0)); | ||
84 | } | ||
85 | |||
86 | return ks_distance_two_dist(sourceDist, instanceDist); | ||
87 | } | ||
88 | |||
89 | def double ks_distance_two_dist(List<Double> dist1, List<Double> dist2){ | ||
90 | // Since we already know the pdf, we compute the ks-test manully | ||
91 | var ksStatistics = 0.0; | ||
92 | var sum1 = 0.0; | ||
93 | var sum2 = 0.0; | ||
94 | for(var i = 0; i < dist1.size(); i++){ | ||
95 | sum1 += dist1.get(i); | ||
96 | sum2 += dist2.get(i); | ||
97 | |||
98 | ksStatistics = Math.max(ksStatistics, Math.abs(sum1 - sum2)); | ||
99 | } | ||
100 | return ksStatistics; | ||
101 | } | ||
102 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend new file mode 100644 index 00000000..8fa29fe6 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend | |||
@@ -0,0 +1,124 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric | ||
4 | import java.util.ArrayList | ||
5 | import java.util.HashSet | ||
6 | import java.util.List | ||
7 | import org.eclipse.emf.common.util.EList | ||
8 | import org.eclipse.emf.ecore.EObject | ||
9 | import org.eclipse.emf.ecore.EReference | ||
10 | import org.eclipse.xtend.lib.annotations.Accessors | ||
11 | |||
12 | class EMFGraph extends Graph{ | ||
13 | @Accessors(PUBLIC_GETTER) | ||
14 | var EObject root; | ||
15 | |||
16 | def void init (EObject root, List<Metric> metrics, String name, List<EReference> referenceTypes){ | ||
17 | val otherContents = root.eAllContents.toList(); | ||
18 | this.root = root; | ||
19 | otherContents.add(root); | ||
20 | init(otherContents, metrics, name, referenceTypes); | ||
21 | } | ||
22 | |||
23 | /** | ||
24 | * init the graph with all nodes and reference types in the meta model | ||
25 | * @param objects: objects in the instance model (exclude root) | ||
26 | * @param metrics: metrics to be evaluated | ||
27 | * @param name: name of the instance model | ||
28 | * @param ReferenceTypes: reference types defined in the meta model | ||
29 | */ | ||
30 | def void init(List<EObject> objects, List<Metric> metrics, String name, List<EReference> referenceTypes){ | ||
31 | objects.forEach[it| | ||
32 | // TODO: Maybe want to consider all the super types as well | ||
33 | var types = new HashSet(); | ||
34 | types.add(it.eClass.name); | ||
35 | statistic.addNodeWithAllTypes(it, types); | ||
36 | ] | ||
37 | |||
38 | referenceTypes.forEach[it| | ||
39 | // Only consider the edges that are not derived to preserve the statistical property | ||
40 | if(!it.derived){ | ||
41 | statistic.addEdgeType(it.name); | ||
42 | } | ||
43 | ]; | ||
44 | |||
45 | objects.forEach[source| | ||
46 | source.eClass.EAllReferences.forEach[r| | ||
47 | //many references | ||
48 | if(r.isMany){ | ||
49 | source.getNeighbours(r).forEach[target| | ||
50 | addEdge(source, target, r); | ||
51 | ] | ||
52 | }else{ | ||
53 | //single references | ||
54 | val target = source.eGet(r) as EObject; | ||
55 | addEdge(source, target, r); | ||
56 | } | ||
57 | ] | ||
58 | ] | ||
59 | |||
60 | this.metrics = metrics; | ||
61 | this.name = name; | ||
62 | } | ||
63 | |||
64 | def void removeReference(EReference r){ | ||
65 | if (statistic.containsEdgeType(r.name)){ | ||
66 | statistic.removeReference(r.name, r.containment); | ||
67 | } | ||
68 | } | ||
69 | |||
70 | /** | ||
71 | * Set basic information for the output | ||
72 | */ | ||
73 | override setBasicInformation(ArrayList<ArrayList<String>> output){ | ||
74 | val metaInfo = new ArrayList<String>(); | ||
75 | metaInfo.add(META_MODEL_HEADER); | ||
76 | metaInfo.add(this.metaModel); | ||
77 | |||
78 | val edgeInfo = new ArrayList<String>(); | ||
79 | edgeInfo.add(NUM_EDGE_TYPE_HEADER); | ||
80 | edgeInfo.add(this.statistic.allTypes.size()+""); | ||
81 | |||
82 | val nodeInfo = new ArrayList<String>(); | ||
83 | nodeInfo.add(NUM_NODE_HEADER); | ||
84 | nodeInfo.add(this.statistic.allNodes.size()+""); | ||
85 | |||
86 | val stateInfo = new ArrayList<String>(); | ||
87 | stateInfo.add(STATE_ID_HEADER); | ||
88 | stateInfo.add(this.name); | ||
89 | |||
90 | |||
91 | output.add(metaInfo); | ||
92 | output.add(edgeInfo); | ||
93 | output.add(nodeInfo); | ||
94 | output.add(stateInfo); | ||
95 | } | ||
96 | |||
97 | def EList<EObject> getNeighbours(EObject o, EReference r){ | ||
98 | return (o.eGet(r, true) as EList<EObject>); | ||
99 | } | ||
100 | |||
101 | def addEdge(EObject source, EObject target, EReference r){ | ||
102 | //Only add the edge if the reference is not derived to preserve the statistical property | ||
103 | if(target !== null && r !== null && !r.derived){ | ||
104 | statistic.addEdge(source, target, r.name); | ||
105 | } | ||
106 | } | ||
107 | |||
108 | override GraphStatistic getStatistic(){ | ||
109 | return this.statistic; | ||
110 | } | ||
111 | |||
112 | override String getName(){ | ||
113 | return this.name; | ||
114 | } | ||
115 | |||
116 | def void setMetaModel(String model){ | ||
117 | this.metaModel = model; | ||
118 | } | ||
119 | |||
120 | def String getMetaModel(){ | ||
121 | return this.metaModel; | ||
122 | } | ||
123 | |||
124 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.xtend new file mode 100644 index 00000000..6b400b0d --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.xtend | |||
@@ -0,0 +1,71 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric | ||
4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup | ||
5 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric | ||
6 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric | ||
7 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric | ||
8 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedOutDegree | ||
9 | import java.util.ArrayList | ||
10 | import java.util.HashMap | ||
11 | import java.util.List | ||
12 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric | ||
13 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.EdgeTypeMetric | ||
14 | |||
15 | abstract class Graph { | ||
16 | |||
17 | protected static val String META_MODEL_HEADER = "Meta Mode" | ||
18 | protected static val String NUM_NODE_HEADER = "Number Of Nodes"; | ||
19 | protected static val String NUM_EDGE_TYPE_HEADER = "Number of Edge types"; | ||
20 | protected static val String STATE_ID_HEADER = "State Id"; | ||
21 | |||
22 | protected val statistic = new GraphStatistic(); | ||
23 | protected var List<Metric> metrics; | ||
24 | protected var String name = ""; | ||
25 | protected var String metaModel = ""; | ||
26 | |||
27 | /** | ||
28 | * evaluate all metrics for this model | ||
29 | * return the result as a two dimentional list | ||
30 | */ | ||
31 | def ArrayList<ArrayList<String>> evaluateAllMetrics(){ | ||
32 | val result = new ArrayList<ArrayList<String>>(); | ||
33 | setBasicInformation(result); | ||
34 | |||
35 | for(metric : this.metrics){ | ||
36 | val datas = metric.evaluate(this.statistic); | ||
37 | for(row : datas){ | ||
38 | result.add(new ArrayList<String>(row)); | ||
39 | } | ||
40 | } | ||
41 | return result; | ||
42 | } | ||
43 | |||
44 | def MetricSampleGroup evaluateAllMetricsToSamples(){ | ||
45 | var sample = new MetricSampleGroup(); | ||
46 | |||
47 | for(metric : this.metrics){ | ||
48 | if(metric instanceof MultiplexParticipationCoefficientMetric){ | ||
49 | sample.mpcSamples = metric.evaluateSamples(this.statistic) as ArrayList<Double>; | ||
50 | }else if(metric instanceof NodeActivityMetric){ | ||
51 | sample.naSamples = metric.evaluateSamples(this.statistic) as ArrayList<Double>; | ||
52 | }else if(metric instanceof OutDegreeMetric){ | ||
53 | sample.outDegreeSamples = metric.evaluateSamples(this.statistic) as ArrayList<Double>; | ||
54 | }else if(metric instanceof TypedOutDegree){ | ||
55 | sample.typedOutDegreeSamples = metric.evaluateSamples(this.statistic) as HashMap<String, List<Integer>>; | ||
56 | }else if(metric instanceof NodeTypeMetric){ | ||
57 | sample.nodeTypeSamples = metric.evaluateSamples(this.statistic) as HashMap<String, Double>; | ||
58 | }else if (metric instanceof EdgeTypeMetric){ | ||
59 | sample.edgeTypeSamples = metric.evaluateSamples(this.statistic) as HashMap<String, Double>; | ||
60 | } | ||
61 | } | ||
62 | |||
63 | return sample; | ||
64 | } | ||
65 | |||
66 | def void setBasicInformation(ArrayList<ArrayList<String>> result); | ||
67 | |||
68 | def GraphStatistic getStatistic(); | ||
69 | |||
70 | def String getName(); | ||
71 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend new file mode 100644 index 00000000..31788bb2 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend | |||
@@ -0,0 +1,194 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph | ||
2 | |||
3 | import com.google.common.collect.ArrayListMultimap | ||
4 | import com.google.common.collect.Multimap | ||
5 | import java.util.HashMap | ||
6 | import java.util.HashSet | ||
7 | import java.util.List | ||
8 | import java.util.Map | ||
9 | import java.util.Set | ||
10 | import org.eclipse.emf.ecore.EObject | ||
11 | import org.eclipse.emf.ecore.EReference | ||
12 | |||
13 | class GraphStatistic { | ||
14 | val incomingEdges = new HashMap<String, Multimap<EObject, EObject>>; | ||
15 | val outgoingEdges = new HashMap<String, Multimap<EObject, EObject>>; | ||
16 | |||
17 | val edgeTypes = new HashSet<String>(); | ||
18 | val nodeToType = new HashMap<EObject, Set<String>>(); | ||
19 | |||
20 | /** | ||
21 | * Add an edge type to to the graph | ||
22 | * @param type: type to add | ||
23 | */ | ||
24 | def void addEdgeType(String type){ | ||
25 | if(edgeTypes.contains(type)){ | ||
26 | return; | ||
27 | } | ||
28 | |||
29 | edgeTypes.add(type); | ||
30 | incomingEdges.put(type, ArrayListMultimap.create()); | ||
31 | outgoingEdges.put(type, ArrayListMultimap.create()); | ||
32 | } | ||
33 | |||
34 | /** | ||
35 | * Add a node to the graph with one type in its type hierarchy | ||
36 | * @param node: node to add | ||
37 | */ | ||
38 | def void addNodeWithType(EObject n, String Type){ | ||
39 | var types = nodeToType.getOrDefault(n, new HashSet<String>()); | ||
40 | types.add(Type); | ||
41 | nodeToType.put(n, types); | ||
42 | } | ||
43 | |||
44 | def boolean containsNode(EObject o){ | ||
45 | return nodeToType.containsKey(o); | ||
46 | } | ||
47 | |||
48 | def Set<String> getTypesForNode(EObject o){ | ||
49 | return nodeToType.getOrDefault(o, new HashSet<String>()); | ||
50 | } | ||
51 | |||
52 | def void overwriteCurrentType(EObject o, String type){ | ||
53 | var typeSet = nodeToType.getOrDefault(o, new HashSet<String>()); | ||
54 | |||
55 | // clear current types | ||
56 | typeSet.clear(); | ||
57 | typeSet.add(type); | ||
58 | nodeToType.put(o, typeSet); | ||
59 | } | ||
60 | |||
61 | /** | ||
62 | * Add a node to the graph with all types in its type hierarchy | ||
63 | */ | ||
64 | def void addNodeWithAllTypes(EObject n, Set<String> types){ | ||
65 | nodeToType.put(n, types); | ||
66 | } | ||
67 | |||
68 | /** | ||
69 | * Add an edge to the graph | ||
70 | * @param source: source node | ||
71 | * @param target: target node | ||
72 | * @param type: type of the reference | ||
73 | */ | ||
74 | def void addEdge(EObject source, EObject target, String type){ | ||
75 | outgoingEdges.get(type).put(source, target); | ||
76 | incomingEdges.get(type).put(target, source); | ||
77 | } | ||
78 | |||
79 | /** | ||
80 | * check if this graph contains a specific edge type | ||
81 | */ | ||
82 | def boolean containsEdgeType(String typeName){ | ||
83 | if(outgoingEdges.containsKey(typeName) && incomingEdges.containsKey(typeName)){ | ||
84 | return true; | ||
85 | } | ||
86 | return false; | ||
87 | } | ||
88 | |||
89 | /** | ||
90 | * remove references from the statistics, potentially remove the nodes associated with it | ||
91 | * @Param name: name of the reference | ||
92 | * @Param isContainment: if true then the corresponding nodes on the incoming side will also be removed | ||
93 | */ | ||
94 | def removeReference(String name, boolean isContainment){ | ||
95 | if(!edgeTypes.contains(name)){ | ||
96 | return; | ||
97 | } | ||
98 | |||
99 | edgeTypes.remove(name); | ||
100 | var incomingSet = incomingEdges.remove(name); | ||
101 | outgoingEdges.remove(name); | ||
102 | |||
103 | // if the reference is not a containment, then removing the reference is enough | ||
104 | if(!isContainment){ | ||
105 | return; | ||
106 | } | ||
107 | |||
108 | // else remove all corresponding nodes | ||
109 | val nodesToRemove = incomingSet.keySet(); | ||
110 | |||
111 | //remove nodes from node sets | ||
112 | nodesToRemove.forEach[nodeToType.remove(it)]; | ||
113 | |||
114 | val removeForMultimap = [Multimap<EObject, EObject> refMap| | ||
115 | nodesToRemove.forEach[refMap.removeAll(it)]; | ||
116 | var values = refMap.values() | ||
117 | //remove the values from the list is equavalent to remove it in the multimap | ||
118 | values.removeAll(nodesToRemove); | ||
119 | return; | ||
120 | ]; | ||
121 | |||
122 | //remove nodes from all other references on incomingEdges | ||
123 | incomingEdges.values.forEach(removeForMultimap); | ||
124 | outgoingEdges.values.forEach(removeForMultimap); | ||
125 | } | ||
126 | |||
127 | /** | ||
128 | * calculate the out degree for an object | ||
129 | */ | ||
130 | def int outDegree(EObject o){ | ||
131 | var count = 0; | ||
132 | |||
133 | for (String type : edgeTypes){ | ||
134 | count += outgoingEdges.get(type).get(o).size(); | ||
135 | } | ||
136 | return count; | ||
137 | } | ||
138 | |||
139 | /** | ||
140 | * calculate the in degree of an object | ||
141 | */ | ||
142 | def int inDegree(EObject o){ | ||
143 | var count = 0; | ||
144 | |||
145 | for (String type : edgeTypes){ | ||
146 | count += incomingEdges.get(type).get(o).size(); | ||
147 | } | ||
148 | return count; | ||
149 | } | ||
150 | |||
151 | /** | ||
152 | * calculate the dimentional degree of a node | ||
153 | */ | ||
154 | def int dimentionalDegree(EObject o, String type){ | ||
155 | return incomingEdges.get(type).get(o).size() + outgoingEdges.get(type).get(o).size(); | ||
156 | } | ||
157 | |||
158 | /** | ||
159 | * calculate the number of edge types for a given node. | ||
160 | */ | ||
161 | def int numOfEdgeTypes(EObject o){ | ||
162 | var count = 0; | ||
163 | |||
164 | for(String type : edgeTypes){ | ||
165 | if(dimentionalDegree(o, type) > 0){ | ||
166 | count++; | ||
167 | } | ||
168 | } | ||
169 | |||
170 | return count; | ||
171 | } | ||
172 | |||
173 | def List<String> getAllTypes(){ | ||
174 | return edgeTypes.toList(); | ||
175 | } | ||
176 | |||
177 | def Map<EObject, Set<String>> getNodeToTypesMap(){ | ||
178 | return nodeToType; | ||
179 | } | ||
180 | |||
181 | def List<EObject> getAllNodes(){ | ||
182 | return nodeToType.keySet().toList(); | ||
183 | } | ||
184 | |||
185 | def HashMap<String, Multimap<EObject, EObject>> getOutgoingEdges(){ | ||
186 | return outgoingEdges; | ||
187 | } | ||
188 | |||
189 | def HashMap<String, Multimap<EObject, EObject>> incomingEdges(){ | ||
190 | return incomingEdges; | ||
191 | } | ||
192 | |||
193 | } | ||
194 | |||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend new file mode 100644 index 00000000..a2934eb9 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend | |||
@@ -0,0 +1,134 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric | ||
4 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration | ||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type | ||
6 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition | ||
7 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink | ||
8 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation | ||
9 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.impl.PartialComplexTypeInterpretationImpl | ||
10 | import java.util.ArrayList | ||
11 | import java.util.List | ||
12 | |||
13 | class PartialInterpretationGraph extends Graph{ | ||
14 | val typeToExclude = "undefinedpart"; | ||
15 | val classSuffix = " class"; | ||
16 | |||
17 | /** | ||
18 | * Define a new PartialInterpretationGraph by parse every element from a PartialInterpretation | ||
19 | */ | ||
20 | new(PartialInterpretation partial, List<Metric> metrics, String name){ | ||
21 | //the edge types are defined in terms of RelationDeclaration | ||
22 | partial.problem.relations.filter(RelationDeclaration).forEach[ | ||
23 | //only need the name of the reference type (remove everything with and after "reference") | ||
24 | var n = it.name.split(" ").get(0); | ||
25 | this.statistic.addEdgeType(n); | ||
26 | ] | ||
27 | // add all elements | ||
28 | val typeInterpretations = getTypes(partial); | ||
29 | for(type : typeInterpretations){ | ||
30 | //Only consider the most concrete class | ||
31 | if(isConcreteType(type.interpretationOf)){ | ||
32 | var typeName = type.interpretationOf.name.replace(classSuffix, ''); | ||
33 | for(node : type.elements){ | ||
34 | if(!this.statistic.containsNode(node)){ | ||
35 | this.statistic.addNodeWithType(node, typeName); | ||
36 | }else{ | ||
37 | // if the current type of the node is a super type of the type to check, | ||
38 | // substitute the current type with the new type | ||
39 | var currentType = statistic.getTypesForNode(node).get(0); | ||
40 | if(isSuperType(currentType, type.interpretationOf)){ | ||
41 | statistic.overwriteCurrentType(node, typeName); | ||
42 | } | ||
43 | } | ||
44 | } | ||
45 | } | ||
46 | } | ||
47 | |||
48 | for(relationInterpretation : partial.partialrelationinterpretation) { | ||
49 | //only need the name of the reference type (remove everything with and after "reference") | ||
50 | val type = relationInterpretation.interpretationOf.name.split(" ").get(0); | ||
51 | for(edge : relationInterpretation.relationlinks.filter(BinaryElementRelationLink)){ | ||
52 | statistic.addEdge(edge.param1, edge.param2, type); | ||
53 | } | ||
54 | } | ||
55 | |||
56 | this.name = name; | ||
57 | this.metrics = metrics; | ||
58 | } | ||
59 | |||
60 | /** | ||
61 | * recursively check if a type is the super type of another | ||
62 | */ | ||
63 | def boolean isSuperType(String typeName, Type subtypeToCheck){ | ||
64 | var superTypes = subtypeToCheck.supertypes; | ||
65 | if(superTypes.size == 0){ | ||
66 | return false; | ||
67 | }else if(subtypeToCheck.supertypes.map[it.name.replace(classSuffix, '')].contains(typeName)){ | ||
68 | return true; | ||
69 | }else{ | ||
70 | for(superType : superTypes){ | ||
71 | if(isSuperType(typeName, superType)){ | ||
72 | return true; | ||
73 | } | ||
74 | } | ||
75 | return false; | ||
76 | } | ||
77 | } | ||
78 | |||
79 | /** | ||
80 | * Check if a Type object is the class that we want to consider | ||
81 | * A type object is to be considered if it satisfy one of the following: | ||
82 | * 1. if it is not abstract | ||
83 | * 2. if it is abstract but has a subclass of type TypeDefinition (This means the generation is | ||
84 | * started with nodes in this type) | ||
85 | */ | ||
86 | def boolean isConcreteType(Type t){ | ||
87 | if(!t.isAbstract || t.subtypes.findFirst[it instanceof TypeDefinition] !== null){ | ||
88 | return true; | ||
89 | } | ||
90 | return false; | ||
91 | } | ||
92 | |||
93 | /** | ||
94 | * Set basic information for the output | ||
95 | */ | ||
96 | override setBasicInformation(ArrayList<ArrayList<String>> output){ | ||
97 | val metaInfo = new ArrayList<String>(); | ||
98 | metaInfo.add(META_MODEL_HEADER); | ||
99 | metaInfo.add(this.metaModel); | ||
100 | |||
101 | val edgeInfo = new ArrayList<String>(); | ||
102 | edgeInfo.add(NUM_EDGE_TYPE_HEADER); | ||
103 | edgeInfo.add(this.statistic.allTypes.size()+""); | ||
104 | |||
105 | val nodeInfo = new ArrayList<String>(); | ||
106 | nodeInfo.add(NUM_NODE_HEADER); | ||
107 | nodeInfo.add(this.statistic.allNodes.size()+""); | ||
108 | |||
109 | val stateInfo = new ArrayList<String>(); | ||
110 | stateInfo.add(STATE_ID_HEADER); | ||
111 | stateInfo.add(this.name); | ||
112 | |||
113 | output.add(metaInfo); | ||
114 | output.add(edgeInfo); | ||
115 | output.add(nodeInfo); | ||
116 | output.add(stateInfo); | ||
117 | } | ||
118 | |||
119 | private def getTypes(PartialInterpretation partial){ | ||
120 | //only the complex type interpretations are the ones defined in meta model | ||
121 | //do not care about undefined types as it will be included in the class type | ||
122 | return partial.partialtypeinterpratation.filter(PartialComplexTypeInterpretationImpl) | ||
123 | .filter[!it.interpretationOf.name.toLowerCase.contains(typeToExclude)]; | ||
124 | } | ||
125 | |||
126 | override getStatistic() { | ||
127 | throw new UnsupportedOperationException("TODO: auto-generated method stub") | ||
128 | } | ||
129 | |||
130 | override getName() { | ||
131 | return name; | ||
132 | } | ||
133 | |||
134 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/CsvFileWriter.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/CsvFileWriter.xtend new file mode 100644 index 00000000..00b38d90 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/CsvFileWriter.xtend | |||
@@ -0,0 +1,52 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io; | ||
2 | |||
3 | import java.io.File | ||
4 | import java.io.FileNotFoundException | ||
5 | import java.io.FileOutputStream | ||
6 | import java.io.PrintWriter | ||
7 | import java.util.ArrayList | ||
8 | import java.util.List | ||
9 | |||
10 | class CsvFileWriter { | ||
11 | |||
12 | def static void write(ArrayList<ArrayList<String>> datas, String uri) { | ||
13 | if(datas.size() <= 0) { | ||
14 | return; | ||
15 | } | ||
16 | val PrintWriter writer = new PrintWriter(new File(uri)); | ||
17 | output(writer, datas, uri); | ||
18 | } | ||
19 | |||
20 | def static void append(ArrayList<ArrayList<String>> datas, String uri) { | ||
21 | if(datas.size() <= 0) { | ||
22 | return; | ||
23 | } | ||
24 | val PrintWriter writer = new PrintWriter(new FileOutputStream(new File(uri), true)); | ||
25 | output(writer, datas, uri); | ||
26 | } | ||
27 | |||
28 | |||
29 | def private static void output(PrintWriter writer, ArrayList<ArrayList<String>> datas, String uri) { | ||
30 | //println("Output csv for " + uri); | ||
31 | try { | ||
32 | |||
33 | val output = new StringBuilder; | ||
34 | for(List<String> datarow : datas){ | ||
35 | for(var i = 0; i < datarow.size() - 1; i++){ | ||
36 | output.append(datarow.get(i) + ','); | ||
37 | } | ||
38 | |||
39 | if(datarow.size >= 1){ | ||
40 | output.append(datarow.get(datarow.size() - 1)); | ||
41 | output.append('\n'); | ||
42 | } | ||
43 | } | ||
44 | |||
45 | writer.write(output.toString()); | ||
46 | writer.close(); | ||
47 | //println("Output csv finished"); | ||
48 | }catch(FileNotFoundException e) { | ||
49 | e.printStackTrace(); | ||
50 | } | ||
51 | } | ||
52 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend new file mode 100644 index 00000000..053e0da3 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend | |||
@@ -0,0 +1,112 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io; | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph | ||
4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.EdgeTypeMetric | ||
5 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric | ||
6 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric | ||
7 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric | ||
8 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric | ||
9 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric | ||
10 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedOutDegree | ||
11 | import java.io.File | ||
12 | import java.io.FileNotFoundException | ||
13 | import java.util.ArrayList | ||
14 | import java.util.List | ||
15 | import org.eclipse.emf.common.util.URI | ||
16 | import org.eclipse.emf.ecore.EObject | ||
17 | import org.eclipse.emf.ecore.EPackage | ||
18 | import org.eclipse.emf.ecore.EReference | ||
19 | import org.eclipse.emf.ecore.resource.Resource | ||
20 | import org.eclipse.emf.ecore.resource.ResourceSet | ||
21 | import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl | ||
22 | import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl | ||
23 | import org.eclipse.emf.ecore.EGenericType | ||
24 | import org.eclipse.emf.ecore.EStructuralFeature | ||
25 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedClusteringCoefficientMetric | ||
26 | |||
27 | class GraphReader{ | ||
28 | val ResourceSet resSet = new ResourceSetImpl(); | ||
29 | val referenceTypes = new ArrayList<EReference>(); | ||
30 | var String suffix; | ||
31 | |||
32 | new(EPackage metaModel, String suffix) { | ||
33 | Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("*",new XMIResourceFactoryImpl) | ||
34 | this.suffix = suffix; | ||
35 | |||
36 | //find all reference types in the meta model | ||
37 | metaModel.eAllContents.forEach[ | ||
38 | if(it instanceof EReference){ | ||
39 | referenceTypes.add(it); | ||
40 | } | ||
41 | ] | ||
42 | } | ||
43 | |||
44 | def List<EMFGraph> readModels(String path){ | ||
45 | val dir = new File(path); | ||
46 | if(!dir.isDirectory){ | ||
47 | throw new Exception("expecting a directory"); | ||
48 | } | ||
49 | |||
50 | val graphs = new ArrayList<EMFGraph>(); | ||
51 | |||
52 | val metrics = new ArrayList<Metric>(); | ||
53 | metrics.add(new OutDegreeMetric()); | ||
54 | metrics.add(new NodeActivityMetric()); | ||
55 | metrics.add(new MultiplexParticipationCoefficientMetric()); | ||
56 | metrics.add(new TypedOutDegree()); | ||
57 | metrics.add(new NodeTypeMetric()); | ||
58 | metrics.add(new EdgeTypeMetric()); | ||
59 | var count = 1 | ||
60 | //check all files in the directory with suffix | ||
61 | for(String name : dir.list.filter[it| it.endsWith(suffix)]){ | ||
62 | val file = new File(name); | ||
63 | val roots = readModel(EObject, path, file.name); | ||
64 | //add a list of metrics | ||
65 | val g = new EMFGraph(); | ||
66 | for(root : roots){ | ||
67 | g.init(root, metrics, name.replaceFirst(suffix, ""), referenceTypes); | ||
68 | } | ||
69 | |||
70 | count ++; | ||
71 | graphs.add(g); | ||
72 | } | ||
73 | |||
74 | return graphs; | ||
75 | } | ||
76 | |||
77 | def EMFGraph readModel(String path, String filename){ | ||
78 | val metrics = new ArrayList<Metric>(); | ||
79 | metrics.add(new OutDegreeMetric()); | ||
80 | metrics.add(new NodeActivityMetric()); | ||
81 | metrics.add(new MultiplexParticipationCoefficientMetric()); | ||
82 | metrics.add(new TypedOutDegree()); | ||
83 | metrics.add(new NodeTypeMetric()); | ||
84 | metrics.add(new EdgeTypeMetric()); | ||
85 | |||
86 | val file = new File(filename); | ||
87 | val roots = readModel(EObject, path, file.name); | ||
88 | //add a list of metrics | ||
89 | val g = new EMFGraph(); | ||
90 | for(root : roots){ | ||
91 | g.init(root, metrics, filename.replaceFirst(suffix, ""), referenceTypes); | ||
92 | } | ||
93 | return g | ||
94 | } | ||
95 | |||
96 | def <RootType extends EObject> List<RootType> readModel(Class<RootType> type, String path, String name) { | ||
97 | try { | ||
98 | val resource = resSet.getResource(getURI(path, name),true); | ||
99 | if(resource === null) throw new FileNotFoundException(getURI(path, name).toString) | ||
100 | else { | ||
101 | return resource.contents as List<RootType> | ||
102 | } | ||
103 | } catch(Exception e) { | ||
104 | e.printStackTrace(); | ||
105 | throw new Exception(getURI(path, name).toString()); | ||
106 | } | ||
107 | } | ||
108 | |||
109 | def static getURI(String path, String name) { | ||
110 | URI.createFileURI(path + "/" + name) | ||
111 | } | ||
112 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend new file mode 100644 index 00000000..2e7be586 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend | |||
@@ -0,0 +1,100 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain | ||
4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup | ||
5 | import github.impl.GithubPackageImpl | ||
6 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl | ||
7 | import java.util.HashMap | ||
8 | import org.eclipse.emf.ecore.EReference | ||
9 | import org.eclipse.emf.ecore.impl.EcorePackageImpl | ||
10 | |||
11 | /** | ||
12 | * Read the sample of the distribution of a metric provided the csv file of the metric | ||
13 | */ | ||
14 | class RepMetricsReader { | ||
15 | static var Domain domain; | ||
16 | static def read(Domain d){ | ||
17 | var GraphReader reader; | ||
18 | if(d == Domain.Yakindumm){ | ||
19 | reader = new GraphReader(YakindummPackageImpl.eINSTANCE, '.xmi'); | ||
20 | }else if (d == Domain.Ecore){ | ||
21 | reader = new GraphReader(EcorePackageImpl.eINSTANCE, '.ecore'); | ||
22 | }else if (d == Domain.Github){ | ||
23 | reader = new GraphReader(GithubPackageImpl.eINSTANCE, '.githubmodel') | ||
24 | } | ||
25 | |||
26 | domain = d; | ||
27 | |||
28 | var domainRepPath = DataName.REP_PATH + d.name + '/'; | ||
29 | var rep = new MetricSampleGroup() | ||
30 | var out_d = readMetrics(reader, domainRepPath + DataName.OUT_D_REP); | ||
31 | var mpc = readMetrics(reader, domainRepPath + DataName.MPC_REP); | ||
32 | rep.mpcSamples = mpc.mpcSamples; | ||
33 | rep.outDegreeSamples = out_d.outDegreeSamples; | ||
34 | rep.naSamples = readMetrics(reader, domainRepPath + DataName.NA_REP).naSamples; | ||
35 | rep.typedOutDegreeSamples = out_d.typedOutDegreeSamples; | ||
36 | rep.edgeTypeSamples = mpc.edgeTypeSamples; | ||
37 | |||
38 | //TODO: Parameterize the prior node distribution | ||
39 | var nodeTypeSamples = new HashMap<String, Double>(); | ||
40 | if(d == Domain.Yakindumm){ | ||
41 | nodeTypeSamples.put('Entry', 0.04257802080554814); | ||
42 | nodeTypeSamples.put('Choice', 0.1267671379034409); | ||
43 | nodeTypeSamples.put('State', 0.1596092291277674); | ||
44 | nodeTypeSamples.put('Transition', 0.6138636969858629); | ||
45 | nodeTypeSamples.put('Statechart', 0.010136036276340358); | ||
46 | nodeTypeSamples.put('Region', 0.04467858095492131); | ||
47 | nodeTypeSamples.put('Exit', 0.0018338223526273673); | ||
48 | nodeTypeSamples.put('FinalState', 0.0005334755934915977); | ||
49 | }else if(d ==Domain.Ecore){ | ||
50 | nodeTypeSamples.put('EAttribute', 0.23539778449144008); | ||
51 | nodeTypeSamples.put('EClass', 0.33081570996978854); | ||
52 | nodeTypeSamples.put('EReference', 0.30996978851963747); | ||
53 | nodeTypeSamples.put('EPackage', 0.012789526686807653); | ||
54 | nodeTypeSamples.put('EAnnotation', 0.002517623363544813); | ||
55 | nodeTypeSamples.put('EEnumLiteral', 0.07275931520644502); | ||
56 | nodeTypeSamples.put('EEnum', 0.013645518630412891); | ||
57 | nodeTypeSamples.put('EDataType', 0.004028197381671702); | ||
58 | nodeTypeSamples.put('EParameter', 0.005941591137965764); | ||
59 | nodeTypeSamples.put('EGenericType', 0.002014098690835851); | ||
60 | nodeTypeSamples.put('EOperation', 0.009415911379657605); | ||
61 | nodeTypeSamples.put('ETypeParameter', 0.0007049345417925478); | ||
62 | }else if (d == Domain.Github){ | ||
63 | nodeTypeSamples.put('Project', 0.012636538873420432); | ||
64 | nodeTypeSamples.put('Commit', 0.5525808524309276); | ||
65 | nodeTypeSamples.put('User', 0.05847076461769116); | ||
66 | nodeTypeSamples.put('Issue', 0.12743628185907047); | ||
67 | nodeTypeSamples.put('PullRequest', 0.07560505461554937); | ||
68 | nodeTypeSamples.put('IssueEvent', 0.17327050760334123); | ||
69 | } | ||
70 | |||
71 | |||
72 | |||
73 | rep.nodeTypeSamples = nodeTypeSamples; | ||
74 | return rep; | ||
75 | } | ||
76 | |||
77 | /** | ||
78 | * Read representative model | ||
79 | */ | ||
80 | private static def readMetrics(GraphReader r, String path){ | ||
81 | val model = r.readModels(path).head; | ||
82 | if(domain == Domain.Ecore){ | ||
83 | var refsToRemove = EcorePackageImpl.eINSTANCE.eAllContents.filter(EReference).filter[ | ||
84 | it.name.equals('eGenericType') || it.name.equals('eGenericSuperTypes') || it.name.equals('eFactoryInstance') || | ||
85 | it.name.equals('eGenericExceptions') || it.name.equals('references') || it.name.equals('contents'); | ||
86 | ]; | ||
87 | refsToRemove.forEach[model.removeReference(it)]; | ||
88 | } | ||
89 | return model.evaluateAllMetricsToSamples(); | ||
90 | } | ||
91 | |||
92 | } | ||
93 | |||
94 | class DataName{ | ||
95 | public static val REP_PATH = 'data/'; | ||
96 | public static val MPC_REP = 'mpc_rep'; | ||
97 | public static val NA_REP = 'na_rep'; | ||
98 | public static val OUT_D_REP = 'out_d_rep'; | ||
99 | } | ||
100 | |||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/EdgeTypeMetric.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/EdgeTypeMetric.xtend new file mode 100644 index 00000000..0c0fe3b8 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/EdgeTypeMetric.xtend | |||
@@ -0,0 +1,41 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic | ||
4 | import java.util.ArrayList | ||
5 | import java.util.HashMap | ||
6 | |||
7 | class EdgeTypeMetric extends Metric { | ||
8 | |||
9 | override evaluate(GraphStatistic g) { | ||
10 | var map = evaluateSamples(g) as HashMap<String, Double>; | ||
11 | var output = new ArrayList<String[]>(); | ||
12 | output.add(newArrayList('Edge Type')); | ||
13 | |||
14 | var keys = map.keySet; | ||
15 | var values = newArrayList(); | ||
16 | for(key : keys){ | ||
17 | values.add(map.get(key)+''); | ||
18 | } | ||
19 | |||
20 | output.add(keys); | ||
21 | output.add(values); | ||
22 | |||
23 | return output; | ||
24 | } | ||
25 | |||
26 | override evaluateSamples(GraphStatistic g) { | ||
27 | val map = new HashMap<String, Double>(); | ||
28 | var outgoingEdges = g.outgoingEdges; | ||
29 | |||
30 | //get the total number of edges | ||
31 | val edgeCount = outgoingEdges.values.fold(0, [r, t| r + t.asMap.values.fold(0, [r1, t1| r1 + t1.size])]) as double; | ||
32 | outgoingEdges.forEach[k, v| | ||
33 | var value = v.asMap.values.fold(0, [r, t| r + t.size]) / edgeCount; | ||
34 | map.put(k, value); | ||
35 | ] | ||
36 | |||
37 | |||
38 | return map; | ||
39 | } | ||
40 | |||
41 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/Metric.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/Metric.xtend new file mode 100644 index 00000000..cb242a5b --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/Metric.xtend | |||
@@ -0,0 +1,8 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic | ||
4 | |||
5 | abstract class Metric { | ||
6 | abstract def String[][] evaluate(GraphStatistic g); | ||
7 | abstract def Object evaluateSamples(GraphStatistic g); | ||
8 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MetricSampleGroup.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MetricSampleGroup.xtend new file mode 100644 index 00000000..4e25bb86 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MetricSampleGroup.xtend | |||
@@ -0,0 +1,13 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics | ||
2 | |||
3 | import java.util.HashMap | ||
4 | import java.util.List | ||
5 | |||
6 | class MetricSampleGroup{ | ||
7 | public var List<Double> mpcSamples; | ||
8 | public var List<Double> naSamples; | ||
9 | public var List<Double> outDegreeSamples; | ||
10 | public var HashMap<String, List<Integer>> typedOutDegreeSamples; | ||
11 | public var HashMap<String, Double> nodeTypeSamples; | ||
12 | public var HashMap<String, Double> edgeTypeSamples; | ||
13 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MultiplexParticipationCoefficientMetric.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MultiplexParticipationCoefficientMetric.xtend new file mode 100644 index 00000000..eafa49b2 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MultiplexParticipationCoefficientMetric.xtend | |||
@@ -0,0 +1,80 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic | ||
4 | import java.text.DecimalFormat | ||
5 | import java.util.ArrayList | ||
6 | import java.util.HashMap | ||
7 | import org.eclipse.emf.ecore.EObject | ||
8 | |||
9 | class MultiplexParticipationCoefficientMetric extends Metric { | ||
10 | public static val countName = "MPCCount"; | ||
11 | public static val valueName = "MPCValue"; | ||
12 | val formatter = new DecimalFormat("#0.00000"); | ||
13 | |||
14 | override evaluate(GraphStatistic g) { | ||
15 | //because the precision issue of double, we translate double values into String to be the key | ||
16 | |||
17 | |||
18 | //get number of different types | ||
19 | val typeCounts = g.allTypes.size; | ||
20 | val map = new HashMap<String, Integer>(); | ||
21 | //calculate the metric distribution | ||
22 | g.allNodes.forEach[n| | ||
23 | var coef = calculateMPC(n, g, typeCounts); | ||
24 | |||
25 | //format number to String | ||
26 | val value = formatter.format(coef); | ||
27 | if(!map.containsKey(value)){ | ||
28 | map.put(value, 1); | ||
29 | }else{ | ||
30 | map.put(value, map.get(value) + 1); | ||
31 | } | ||
32 | |||
33 | ] | ||
34 | |||
35 | //convert it into a 2 dimentional array | ||
36 | val String[][] datas = newArrayOfSize(2, map.size+1); | ||
37 | datas.get(0).set(0, valueName); | ||
38 | datas.get(1).set(0, countName) | ||
39 | var count = 1; | ||
40 | for(entry : map.entrySet.sortBy[it.key]){ | ||
41 | datas.get(0).set(count, entry.key+""); | ||
42 | datas.get(1).set(count, entry.value+""); | ||
43 | count++; | ||
44 | } | ||
45 | |||
46 | return datas; | ||
47 | } | ||
48 | |||
49 | override evaluateSamples(GraphStatistic g){ | ||
50 | val samples = new ArrayList<Double>(); | ||
51 | val typeCounts = g.allTypes.size; | ||
52 | //calculate the metric distribution | ||
53 | g.allNodes.forEach[ | ||
54 | samples.add(calculateMPC(it, g, typeCounts)); | ||
55 | ] | ||
56 | |||
57 | return samples; | ||
58 | } | ||
59 | |||
60 | def double calculateMPC(EObject n, GraphStatistic g, int typeCounts){ | ||
61 | val edgeCounts = g.outDegree(n) + g.inDegree(n); | ||
62 | |||
63 | var coef = 0.0; | ||
64 | |||
65 | for(type : g.allTypes){ | ||
66 | val degree = g.dimentionalDegree(n, type) as double; | ||
67 | coef += Math.pow(degree / edgeCounts, 2); | ||
68 | } | ||
69 | coef = 1 - coef; | ||
70 | coef = coef * typeCounts / (typeCounts-1); | ||
71 | |||
72 | //Consider the case that either typeCounts-1 or the edgeCounts could be 0 in some situation | ||
73 | //in this case the metric should be evaluated to 0 | ||
74 | if(Double.isNaN(coef)){ | ||
75 | coef = 0; | ||
76 | } | ||
77 | |||
78 | return Double.parseDouble(formatter.format(coef)); | ||
79 | } | ||
80 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeActivityMetric.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeActivityMetric.xtend new file mode 100644 index 00000000..fbf06c47 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeActivityMetric.xtend | |||
@@ -0,0 +1,49 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic | ||
4 | import java.util.ArrayList | ||
5 | import java.util.HashMap | ||
6 | |||
7 | class NodeActivityMetric extends Metric { | ||
8 | public static val countName = "NACount"; | ||
9 | public static val valueName = "NAValue"; | ||
10 | |||
11 | override evaluate(GraphStatistic g) { | ||
12 | val map = new HashMap<Integer, Integer>(); | ||
13 | |||
14 | //calculate the metric distribution | ||
15 | g.allNodes.forEach[ | ||
16 | val value = g.numOfEdgeTypes(it); | ||
17 | if(!map.containsKey(value)){ | ||
18 | map.put(value, 1); | ||
19 | }else{ | ||
20 | map.put(value, map.get(value) + 1); | ||
21 | } | ||
22 | ] | ||
23 | |||
24 | //convert it into a 2 dimentional array | ||
25 | val String[][] datas = newArrayOfSize(2, map.size+1); | ||
26 | datas.get(0).set(0, valueName); | ||
27 | datas.get(1).set(0, countName) | ||
28 | |||
29 | var count = 1; | ||
30 | for(entry : map.entrySet.sortBy[it.key]){ | ||
31 | datas.get(0).set(count, entry.key+""); | ||
32 | datas.get(1).set(count, entry.value+""); | ||
33 | count++; | ||
34 | } | ||
35 | |||
36 | return datas; | ||
37 | } | ||
38 | |||
39 | override evaluateSamples(GraphStatistic g){ | ||
40 | val samples = new ArrayList<Double>(); | ||
41 | |||
42 | //calculate the metric distribution | ||
43 | g.allNodes.forEach[ | ||
44 | samples.add(g.numOfEdgeTypes(it) as double); | ||
45 | ] | ||
46 | |||
47 | return samples; | ||
48 | } | ||
49 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeTypeMetric.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeTypeMetric.xtend new file mode 100644 index 00000000..7cec2513 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeTypeMetric.xtend | |||
@@ -0,0 +1,42 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic | ||
4 | import java.util.ArrayList | ||
5 | import java.util.HashMap | ||
6 | |||
7 | class NodeTypeMetric extends Metric { | ||
8 | |||
9 | |||
10 | override evaluate(GraphStatistic g) { | ||
11 | var map = evaluateSamples(g) as HashMap<String, Double>; | ||
12 | var output = new ArrayList<String[]>(); | ||
13 | output.add(newArrayList('Node Type')); | ||
14 | var keys = map.keySet; | ||
15 | var values = newArrayList(); | ||
16 | |||
17 | for(key : keys){ | ||
18 | values.add(map.get(key)+''); | ||
19 | } | ||
20 | |||
21 | output.add(keys); | ||
22 | output.add(values); | ||
23 | |||
24 | return output; | ||
25 | } | ||
26 | |||
27 | override evaluateSamples(GraphStatistic g) { | ||
28 | var map = new HashMap<String, Double>(); | ||
29 | var nodes = g.allNodes; | ||
30 | var single = 1.0 / nodes.size(); | ||
31 | var nodeToType = g.nodeToTypesMap; | ||
32 | for(node : nodes){ | ||
33 | for(cl : nodeToType.get(node)){ | ||
34 | var value = map.getOrDefault(cl, 0.0); | ||
35 | map.put(cl, value + single); | ||
36 | } | ||
37 | } | ||
38 | |||
39 | return map; | ||
40 | } | ||
41 | |||
42 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/OutDegreeMetric.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/OutDegreeMetric.xtend new file mode 100644 index 00000000..55046b14 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/OutDegreeMetric.xtend | |||
@@ -0,0 +1,49 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic | ||
4 | import java.util.ArrayList | ||
5 | import java.util.HashMap | ||
6 | |||
7 | class OutDegreeMetric extends Metric { | ||
8 | public static val countName = "OutDegreeCount"; | ||
9 | public static val valueName = "OutDegreeValue"; | ||
10 | |||
11 | override evaluate(GraphStatistic g) { | ||
12 | val map = new HashMap<Integer, Integer>(); | ||
13 | |||
14 | //calculate the metric distribution | ||
15 | g.allNodes.forEach[ | ||
16 | val value = g.outDegree(it); | ||
17 | if(!map.containsKey(value)){ | ||
18 | map.put(value, 1); | ||
19 | }else{ | ||
20 | map.put(value, map.get(value) + 1); | ||
21 | } | ||
22 | ] | ||
23 | |||
24 | //convert it into a 2 dimentional array | ||
25 | val String[][] datas = newArrayOfSize(2, map.size+1); | ||
26 | datas.get(0).set(0, valueName); | ||
27 | datas.get(1).set(0, countName) | ||
28 | var count = 1; | ||
29 | for(entry : map.entrySet.sortBy[it.key]){ | ||
30 | datas.get(0).set(count, entry.key+""); | ||
31 | datas.get(1).set(count, entry.value+""); | ||
32 | count++; | ||
33 | } | ||
34 | |||
35 | return datas; | ||
36 | } | ||
37 | |||
38 | override evaluateSamples(GraphStatistic g){ | ||
39 | val samples = new ArrayList<Double>(); | ||
40 | |||
41 | //calculate the metric distribution | ||
42 | g.allNodes.forEach[ | ||
43 | samples.add(g.outDegree(it) as double); | ||
44 | ] | ||
45 | |||
46 | return samples; | ||
47 | } | ||
48 | |||
49 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedClusteringCoefficientMetric.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedClusteringCoefficientMetric.xtend new file mode 100644 index 00000000..0b6d61c6 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedClusteringCoefficientMetric.xtend | |||
@@ -0,0 +1,99 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic | ||
4 | import java.text.DecimalFormat | ||
5 | import java.util.ArrayList | ||
6 | import java.util.HashMap | ||
7 | import java.util.HashSet | ||
8 | import org.eclipse.emf.ecore.EObject | ||
9 | |||
10 | class TypedClusteringCoefficientMetric extends Metric { | ||
11 | public static val countName = "TCCCount"; | ||
12 | public static val valueName = "TCCValue"; | ||
13 | val formatter = new DecimalFormat("#0.00000"); | ||
14 | |||
15 | override evaluate(GraphStatistic g) { | ||
16 | //because the precision issue of double, we translate double values into String to be the key | ||
17 | |||
18 | val map = new HashMap<String, Integer>(); | ||
19 | //calculate the metric distribution | ||
20 | g.allNodes.forEach[n| | ||
21 | var coef = calculateTCC1(n, g); | ||
22 | if(coef > 0){ | ||
23 | println(n); | ||
24 | } | ||
25 | //format number to String | ||
26 | val value = formatter.format(coef); | ||
27 | if(!map.containsKey(value)){ | ||
28 | map.put(value, 1); | ||
29 | }else{ | ||
30 | map.put(value, map.get(value) + 1); | ||
31 | } | ||
32 | |||
33 | ] | ||
34 | |||
35 | //convert it into a 2 dimentional array | ||
36 | val String[][] datas = newArrayOfSize(2, map.size+1); | ||
37 | datas.get(0).set(0, valueName); | ||
38 | datas.get(1).set(0, countName) | ||
39 | var count = 1; | ||
40 | for(entry : map.entrySet.sortBy[it.key]){ | ||
41 | datas.get(0).set(count, entry.key+""); | ||
42 | datas.get(1).set(count, entry.value+""); | ||
43 | count++; | ||
44 | } | ||
45 | |||
46 | return datas; | ||
47 | } | ||
48 | |||
49 | override evaluateSamples(GraphStatistic g){ | ||
50 | val samples = new ArrayList<Double>(); | ||
51 | //calculate the metric distribution | ||
52 | g.allNodes.forEach[ | ||
53 | samples.add(calculateTCC1(it, g)); | ||
54 | ] | ||
55 | |||
56 | return samples; | ||
57 | } | ||
58 | |||
59 | /** | ||
60 | * Compute TCC1 metric for node n | ||
61 | */ | ||
62 | def double calculateTCC1(EObject n, GraphStatistic g){ | ||
63 | var wedges = 0; | ||
64 | var triangles = 0; | ||
65 | |||
66 | for(type1 : g.allTypes){ | ||
67 | val typed1RelatedOfN = new HashSet<EObject>(g.outgoingEdges.get(type1).get(n)); | ||
68 | val type1EdgeSourceNodesOfN = new HashSet<EObject>(g.incomingEdges.get(type1).get(n)); | ||
69 | |||
70 | typed1RelatedOfN.addAll(type1EdgeSourceNodesOfN); | ||
71 | |||
72 | |||
73 | |||
74 | // number of wedges | ||
75 | val d = typed1RelatedOfN.size | ||
76 | wedges += d * (d-1) // we will also count each closed triangle twice | ||
77 | |||
78 | // pairs of neighbors | ||
79 | for (n1: typed1RelatedOfN) { | ||
80 | for (n2: typed1RelatedOfN) { | ||
81 | for(type2 : g.allTypes){ | ||
82 | if ((type1 != type2) && | ||
83 | (g.outgoingEdges.get(type2).containsEntry(n1, n2) || | ||
84 | g.outgoingEdges.get(type2).containsEntry(n2, n1) | ||
85 | )) { | ||
86 | triangles++ | ||
87 | } | ||
88 | } | ||
89 | } | ||
90 | } | ||
91 | } | ||
92 | |||
93 | if (wedges == 0.0) { | ||
94 | return 0.0 | ||
95 | } else { | ||
96 | return (triangles as double)/wedges | ||
97 | } | ||
98 | } | ||
99 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedOutDegree.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedOutDegree.xtend new file mode 100644 index 00000000..3b5dbcc5 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedOutDegree.xtend | |||
@@ -0,0 +1,60 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic | ||
4 | import java.util.ArrayList | ||
5 | import java.util.HashMap | ||
6 | import java.util.List | ||
7 | |||
8 | class TypedOutDegree extends Metric{ | ||
9 | |||
10 | def private calculateMetric(GraphStatistic g){ | ||
11 | var outgoingEdges = g.outgoingEdges; | ||
12 | //record metric as a list of samples for each node type / edge type pair | ||
13 | var metric = new HashMap<String, List<Integer>>(); | ||
14 | var nodeToTypes = g.nodeToTypesMap; | ||
15 | |||
16 | for(edgeType : outgoingEdges.keySet){ | ||
17 | for(node : outgoingEdges.get(edgeType).keySet){ | ||
18 | //find all classes the node belongs to | ||
19 | var classes = nodeToTypes.get(node); | ||
20 | for(cl : classes){ | ||
21 | // get or create entry for node type / edge type pair | ||
22 | var key = cl + ' ' + edgeType; | ||
23 | var typeCount = metric.get(key); | ||
24 | if(typeCount === null){ | ||
25 | typeCount = new ArrayList<Integer>(); | ||
26 | metric.put(key, typeCount); | ||
27 | } | ||
28 | |||
29 | // get or create sample list | ||
30 | typeCount.add(outgoingEdges.get(edgeType).get(node).size); | ||
31 | } | ||
32 | } | ||
33 | } | ||
34 | |||
35 | return metric; | ||
36 | } | ||
37 | |||
38 | override evaluate(GraphStatistic g) { | ||
39 | var metric = calculateMetric(g); | ||
40 | var output = new ArrayList<String[]>(); | ||
41 | |||
42 | output.add(newArrayList('Typed Out Degree')); | ||
43 | for(key : metric.keySet){ | ||
44 | var samples = metric.get(key); | ||
45 | var String[] outputForOnePair = newArrayOfSize(samples.size+1); | ||
46 | outputForOnePair.set(0, key); | ||
47 | for(var i = 0; i < samples.size; i++){ | ||
48 | outputForOnePair.set(i+1, samples.get(i)+''); | ||
49 | } | ||
50 | output.add(outputForOnePair); | ||
51 | } | ||
52 | |||
53 | return output; | ||
54 | } | ||
55 | |||
56 | override evaluateSamples(GraphStatistic g) { | ||
57 | return calculateMetric(g); | ||
58 | } | ||
59 | |||
60 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/LinearModel.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/LinearModel.xtend new file mode 100644 index 00000000..f0ded347 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/LinearModel.xtend | |||
@@ -0,0 +1,91 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.predictor | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.StateData | ||
4 | import java.util.ArrayList | ||
5 | import java.util.HashMap | ||
6 | import java.util.List | ||
7 | import java.util.Map | ||
8 | import weka.core.matrix.LinearRegression | ||
9 | import weka.core.matrix.Matrix | ||
10 | |||
11 | class LinearModel { | ||
12 | var double ridge; | ||
13 | var Map<Object, StateData> stateAndHistory; | ||
14 | List<StateData> samples; | ||
15 | |||
16 | new(double ridge){ | ||
17 | this.ridge = ridge; | ||
18 | stateAndHistory = new HashMap<Object, StateData>(); | ||
19 | samples = new ArrayList<StateData>(); | ||
20 | } | ||
21 | |||
22 | /** | ||
23 | * reset the current train data for regression to a new trajectory | ||
24 | * @param state: the last state of the trajectory | ||
25 | */ | ||
26 | def resetRegression(Object state){ | ||
27 | samples.clear(); | ||
28 | |||
29 | if(stateAndHistory.containsKey(state)){ | ||
30 | var data = stateAndHistory.get(state); | ||
31 | var curState = state; | ||
32 | |||
33 | samples.add(data); | ||
34 | |||
35 | //loop through data until the oldest state in the record | ||
36 | while(stateAndHistory.containsKey(data.lastState) && data.lastState != curState){ | ||
37 | curState = data.lastState; | ||
38 | data = stateAndHistory.get(data.lastState); | ||
39 | samples.add(data); | ||
40 | } | ||
41 | } | ||
42 | } | ||
43 | |||
44 | /** | ||
45 | * Add a new data point to the current training set | ||
46 | * @param state: the state on which the new data point is calculated | ||
47 | * @param features: the set of feature value(x) | ||
48 | * @param value: the value of the state (y) | ||
49 | * @param lastState: the state which transformed to current state, used to record the trajectory | ||
50 | */ | ||
51 | def feedData(Object state, double[] features, double value, Object lastState){ | ||
52 | var data = new StateData(features, value, lastState); | ||
53 | stateAndHistory.put(state, data); | ||
54 | samples.add(data); | ||
55 | } | ||
56 | |||
57 | /** | ||
58 | * get prediction for next state, without storing the data point into the training set | ||
59 | * @param features: the feature values of current state | ||
60 | * @param value: the value of the current state | ||
61 | * @param: featuresToPredict: the features of the state wanted to be predected | ||
62 | * @return the value of the state to be predicted | ||
63 | */ | ||
64 | def double getPredictionForNextDataSample(double[] features, double value, double[] featuresToPredict){ | ||
65 | var data = new StateData(features, value, null); | ||
66 | samples.add(data); | ||
67 | |||
68 | // create training set from current data | ||
69 | val double[][] xSamples = samples.map[it.features]; | ||
70 | val double[] ySamples = samples.map[it.value]; | ||
71 | |||
72 | val x = new Matrix(xSamples); | ||
73 | val y = new Matrix(ySamples, ySamples.size()); | ||
74 | |||
75 | val regression = new LinearRegression(x, y, ridge); | ||
76 | var prediction = predict(regression.coefficients, featuresToPredict); | ||
77 | |||
78 | //remove the last element just added | ||
79 | samples.remove(samples.size - 1); | ||
80 | return prediction; | ||
81 | } | ||
82 | |||
83 | def private predict(double[] parameters, double[] featuresToPredict){ | ||
84 | // the regression will add an initial column for 1's, the first parameter is constant term | ||
85 | var result = parameters.get(0); | ||
86 | for(var i = 0; i < featuresToPredict.length; i++){ | ||
87 | result += parameters.get(i) * featuresToPredict.get(i); | ||
88 | } | ||
89 | return result; | ||
90 | } | ||
91 | } \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ConstraintCollection.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ConstraintCollection.xtend new file mode 100644 index 00000000..685c5836 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ConstraintCollection.xtend | |||
@@ -0,0 +1,80 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.validation | ||
2 | |||
3 | import java.util.ArrayList | ||
4 | import java.util.HashMap | ||
5 | import java.util.List | ||
6 | import java.util.Map | ||
7 | import org.eclipse.emf.common.notify.Notifier | ||
8 | import org.eclipse.emf.common.util.URI | ||
9 | import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl | ||
10 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification | ||
11 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine | ||
12 | import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedPatternGroup | ||
13 | import org.eclipse.viatra.query.runtime.emf.EMFScope | ||
14 | |||
15 | class ConstraintCollection{ | ||
16 | val constraints = new ArrayList<IConstraintSpecification>(); | ||
17 | var BaseGeneratedPatternGroup patterns; | ||
18 | var List<Notifier> resources = new ArrayList<Notifier>(); | ||
19 | |||
20 | |||
21 | new(List<IConstraintSpecification> constraints, List<String> uris, BaseGeneratedPatternGroup patterns){ | ||
22 | this.constraints.addAll(constraints); | ||
23 | this.patterns = patterns; | ||
24 | setURIs(uris); | ||
25 | } | ||
26 | |||
27 | new(List<IConstraintSpecification> constraints, BaseGeneratedPatternGroup patterns){ | ||
28 | this.constraints.addAll(constraints); | ||
29 | this.patterns = patterns; | ||
30 | } | ||
31 | |||
32 | def addModel(Notifier n ){ | ||
33 | resources.add(n); | ||
34 | } | ||
35 | |||
36 | def setURIs(List<String> uris){ | ||
37 | val resSet = new ResourceSetImpl(); | ||
38 | |||
39 | for(uri : uris){ | ||
40 | var resource = resSet.getResource(URI.createURI(uri), true); | ||
41 | resources.add(resource); | ||
42 | } | ||
43 | |||
44 | println('reading model finished') | ||
45 | } | ||
46 | |||
47 | def List<Integer> calculateViolations(){ | ||
48 | var results = new ArrayList<Integer>(); | ||
49 | |||
50 | for(resource : resources){ | ||
51 | val engine = initEngine(resource); | ||
52 | var matches = constraints.stream.mapToInt([ele| ele.querySpecification.getMatcher(engine).countMatches]).sum(); | ||
53 | results.add(matches); | ||
54 | } | ||
55 | |||
56 | return results; | ||
57 | } | ||
58 | |||
59 | def ArrayList<Map<String, Integer>> calculateViolationMaps(){ | ||
60 | val result = new ArrayList<Map<String, Integer>>() | ||
61 | |||
62 | for(resource : resources){ | ||
63 | val map = new HashMap<String, Integer>(); | ||
64 | val engine = initEngine(resource); | ||
65 | constraints.forEach[ | ||
66 | var count = it.querySpecification.getMatcher(engine).countMatches; | ||
67 | map.put(it.querySpecification.simpleName, count); | ||
68 | ]; | ||
69 | result.add(map); | ||
70 | } | ||
71 | return result; | ||
72 | } | ||
73 | |||
74 | private def initEngine(Notifier r){ | ||
75 | var engine = ViatraQueryEngine.on(new EMFScope(r)); | ||
76 | //init patterns with the new engine | ||
77 | patterns.prepare(engine); | ||
78 | return engine; | ||
79 | } | ||
80 | } | ||
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend new file mode 100644 index 00000000..4db5f940 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend | |||
@@ -0,0 +1,66 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.validation | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain | ||
4 | import com.google.common.reflect.ClassPath | ||
5 | import ecore.Ecore | ||
6 | import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.Patterns | ||
7 | import java.util.ArrayList | ||
8 | import org.eclipse.emf.ecore.EObject | ||
9 | import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification | ||
10 | |||
11 | class ViolationCheck { | ||
12 | /** | ||
13 | * Return the total number of violations | ||
14 | */ | ||
15 | def static int calculateViolationCounts(EObject root, Domain d){ | ||
16 | var packageName = ''; | ||
17 | if(d == Domain.Yakindumm){ | ||
18 | packageName = 'constraints.yakindumm'; | ||
19 | }else if (d == Domain.Ecore){ | ||
20 | packageName = 'constraints.ecore'; | ||
21 | }else if (d == Domain.Github){ | ||
22 | return -1; | ||
23 | } | ||
24 | |||
25 | var constriants = loadConstraints(packageName); | ||
26 | var collections = new ConstraintCollection(constriants, Ecore.instance); | ||
27 | collections.addModel(root); | ||
28 | var results = collections.calculateViolations(); | ||
29 | if(results.size > 0){ | ||
30 | return results.get(0); | ||
31 | }else{ | ||
32 | throw new IllegalArgumentException("Calculate Violation Failed"); | ||
33 | } | ||
34 | } | ||
35 | |||
36 | /** | ||
37 | * return a map contain the count for each type of violation | ||
38 | */ | ||
39 | def static violationMaps(EObject root){ | ||
40 | var constriants = loadConstraints('hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu'); | ||
41 | var collections = new ConstraintCollection(constriants, Patterns.instance); | ||
42 | collections.addModel(root); | ||
43 | var results = collections.calculateViolationMaps(); | ||
44 | if(results.size > 0){ | ||
45 | return results.get(0); | ||
46 | }else{ | ||
47 | throw new IllegalArgumentException("Calculate Violation Failed"); | ||
48 | } | ||
49 | } | ||
50 | |||
51 | def static loadConstraints(String packageName){ | ||
52 | val constraints = new ArrayList<IConstraintSpecification>(); | ||
53 | |||
54 | val classPath = ClassPath.from(ClassLoader.systemClassLoader); | ||
55 | val classInfos = classPath.getTopLevelClasses(packageName); | ||
56 | for(info : classInfos){ | ||
57 | if(info.load.interfaces.contains(IConstraintSpecification)){ | ||
58 | //IConstraintSpecification only has one constructor with empty argument list | ||
59 | var constructor = info.load.constructors.get(0); | ||
60 | var instance = constructor.newInstance(); | ||
61 | constraints.add(instance as IConstraintSpecification); | ||
62 | } | ||
63 | } | ||
64 | return constraints | ||
65 | } | ||
66 | } | ||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/.gitignore b/Metrics/Metrics-Calculation/metrics_plot/.gitignore new file mode 100644 index 00000000..dc53b109 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/.gitignore | |||
@@ -0,0 +1,10 @@ | |||
1 | # virtual enviroment | ||
2 | venv/ | ||
3 | |||
4 | # python cache | ||
5 | *.pyc | ||
6 | .ipynb_checkpoints/ | ||
7 | .idea/ | ||
8 | |||
9 | # keep folders | ||
10 | !.gitignore \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/input/.gitignore b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/input/.gitignore new file mode 100644 index 00000000..b3934b01 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/input/.gitignore | |||
@@ -0,0 +1,3 @@ | |||
1 | # ignore everything in this folder | ||
2 | * | ||
3 | !.gitignore \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/MPC.png new file mode 100644 index 00000000..a8772bdd --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Node_Activity.png new file mode 100644 index 00000000..9defdaff --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Node_Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Node_Type.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Node_Type.png new file mode 100644 index 00000000..e98559bb --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Node_Type.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Out_Degree.png new file mode 100644 index 00000000..eec3f95e --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Out_Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/MPC.png new file mode 100644 index 00000000..20df6086 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Node_Activity.png new file mode 100644 index 00000000..c7c18186 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Node_Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Node_Type.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Node_Type.png new file mode 100644 index 00000000..6d7230db --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Node_Type.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Out_Degree.png new file mode 100644 index 00000000..eb157b8e --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Out_Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/MPC.png new file mode 100644 index 00000000..b8930a7b --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Node_Activity.png new file mode 100644 index 00000000..d55a000c --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Node_Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Node_Type.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Node_Type.png new file mode 100644 index 00000000..554923f5 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Node_Type.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Out_Degree.png new file mode 100644 index 00000000..1a605f9a --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Out_Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Violations.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Violations.png new file mode 100644 index 00000000..719249d4 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Violations.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/MPC.png new file mode 100644 index 00000000..8f59786d --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Node_Activity.png new file mode 100644 index 00000000..a3775f23 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Node_Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Node_Type.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Node_Type.png new file mode 100644 index 00000000..5d3f81e1 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Node_Type.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Out_Degree.png new file mode 100644 index 00000000..a89eb552 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Out_Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Violations.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Violations.png new file mode 100644 index 00000000..50a4cba0 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Violations.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/MPC.png new file mode 100644 index 00000000..fcff0dfe --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Node_Activity.png new file mode 100644 index 00000000..ad44025f --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Node_Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Node_Type.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Node_Type.png new file mode 100644 index 00000000..a61d6e5a --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Node_Type.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Out_Degree.png new file mode 100644 index 00000000..4749db22 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Out_Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Violations.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Violations.png new file mode 100644 index 00000000..ac09e580 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Violations.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/BoxPlot.ipynb b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/BoxPlot.ipynb new file mode 100644 index 00000000..5db66bb3 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/BoxPlot.ipynb | |||
@@ -0,0 +1,362 @@ | |||
1 | { | ||
2 | "cells": [ | ||
3 | { | ||
4 | "cell_type": "code", | ||
5 | "execution_count": 173, | ||
6 | "metadata": {}, | ||
7 | "outputs": [], | ||
8 | "source": [ | ||
9 | "import matplotlib.pyplot as plt\n", | ||
10 | "import statistics\n", | ||
11 | "import os\n", | ||
12 | "import sys\n", | ||
13 | "lib_path = os.path.abspath(os.path.join('..','..', '..', 'utils'))\n", | ||
14 | "sys.path.append(lib_path)\n", | ||
15 | "from GraphType import GraphStat\n", | ||
16 | "import readCSV as reader\n", | ||
17 | "import constants\n", | ||
18 | "import DistributionMetrics as metrics" | ||
19 | ] | ||
20 | }, | ||
21 | { | ||
22 | "cell_type": "code", | ||
23 | "execution_count": 174, | ||
24 | "metadata": {}, | ||
25 | "outputs": [], | ||
26 | "source": [ | ||
27 | "def getModels(folderName, numberOfModels):\n", | ||
28 | " filenames = reader.readmultiplefiles(folderName, numberOfModels, False)\n", | ||
29 | " graphStats = [GraphStat(filename) for filename in filenames]\n", | ||
30 | " return graphStats" | ||
31 | ] | ||
32 | }, | ||
33 | { | ||
34 | "cell_type": "markdown", | ||
35 | "metadata": {}, | ||
36 | "source": [ | ||
37 | "## Import" | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | "cell_type": "code", | ||
42 | "execution_count": 175, | ||
43 | "metadata": {}, | ||
44 | "outputs": [], | ||
45 | "source": [ | ||
46 | "domain = 'github'\n", | ||
47 | "mpc_guide = getModels('../input/{}/MPC/'.format(domain), 100)\n", | ||
48 | "na_guide = getModels('../input/{}/NodeActivity/'.format(domain), 100)\n", | ||
49 | "od_guide = getModels('../input/{}/OutDegree/'.format(domain), 100)\n", | ||
50 | "nt_guide = getModels('../input/{}/NodeType/'.format(domain), 100)\n", | ||
51 | "composite_guide = getModels('../input/{}/Composite/'.format(domain), 100)\n", | ||
52 | "composite_no_violations_guide = getModels('../input/{}/Composite_Without_Violations/'.format(domain), 100)\n", | ||
53 | "violations_guide = getModels('../input/{}/Violations/'.format(domain), 100)\n", | ||
54 | "human = getModels('../input/{}/Human/'.format(domain), 304)\n", | ||
55 | "model_types = [human, composite_guide, composite_no_violations_guide, mpc_guide, na_guide, od_guide, nt_guide, violations_guide]" | ||
56 | ] | ||
57 | }, | ||
58 | { | ||
59 | "cell_type": "code", | ||
60 | "execution_count": 176, | ||
61 | "metadata": {}, | ||
62 | "outputs": [], | ||
63 | "source": [ | ||
64 | "if domain == 'yakindumm':\n", | ||
65 | " type_map = {'Entry': 0.04257802080554814, 'Choice': 0.1267671379034409, 'State': 0.1596092291277674, 'Transition': 0.6138636969858629, 'Statechart': 0.010136036276340358, 'Region': 0.04467858095492131, 'Exit': 0.0018338223526273673, 'FinalState': 0.0005334755934915977}\n", | ||
66 | "elif domain == 'ecore':\n", | ||
67 | " type_map = {'EAttribute': 0.23539778449144008, 'EClass': 0.30996978851963747, 'EReference': 0.33081570996978854, 'EPackage': 0.012789526686807653, 'EAnnotation': 0.002517623363544813, 'EEnumLiteral': 0.07275931520644502, 'EEnum': 0.013645518630412891, 'EDataType': 0.004028197381671702, 'EParameter': 0.005941591137965764, 'EGenericType': 0.002014098690835851, 'EOperation': 0.009415911379657605, 'ETypeParameter': 0.0007049345417925478}\n", | ||
68 | "elif domain == 'github':\n", | ||
69 | " type_map = {'Project': 0.012636538873420432, 'Commit': 0.5525808524309276, 'User': 0.05847076461769116, 'Issue': 0.12743628185907047, 'PullRequest': 0.07560505461554937, 'IssueEvent': 0.17327050760334123}" | ||
70 | ] | ||
71 | }, | ||
72 | { | ||
73 | "cell_type": "code", | ||
74 | "execution_count": 177, | ||
75 | "metadata": {}, | ||
76 | "outputs": [], | ||
77 | "source": [ | ||
78 | "# import rep\n", | ||
79 | "mpc_rep = getModels('../input/{}/MPC_REP/'.format(domain), 1)\n", | ||
80 | "na_rep = getModels('../input/{}/NA_REP/'.format(domain), 1)\n", | ||
81 | "od_rep = getModels('../input/{}/OUT_DEGREE_REP/'.format(domain), 1)\n", | ||
82 | "rep = mpc_rep[0]\n", | ||
83 | "rep.na = na_rep[0].na\n", | ||
84 | "rep.out_d = od_rep[0].out_d\n", | ||
85 | "rep.nodeTypeStat = type_map" | ||
86 | ] | ||
87 | }, | ||
88 | { | ||
89 | "cell_type": "markdown", | ||
90 | "metadata": {}, | ||
91 | "source": [ | ||
92 | "### Helper Functions" | ||
93 | ] | ||
94 | }, | ||
95 | { | ||
96 | "cell_type": "code", | ||
97 | "execution_count": 178, | ||
98 | "metadata": {}, | ||
99 | "outputs": [], | ||
100 | "source": [ | ||
101 | "def calculate_ks(dist1, dist2):\n", | ||
102 | " value, p= metrics.ks_distance(dist1, dist2)\n", | ||
103 | " return value" | ||
104 | ] | ||
105 | }, | ||
106 | { | ||
107 | "cell_type": "code", | ||
108 | "execution_count": 179, | ||
109 | "metadata": {}, | ||
110 | "outputs": [], | ||
111 | "source": [ | ||
112 | "def mkdir(path):\n", | ||
113 | " if not os.path.exists(path):\n", | ||
114 | " os.makedirs(path)" | ||
115 | ] | ||
116 | }, | ||
117 | { | ||
118 | "cell_type": "markdown", | ||
119 | "metadata": {}, | ||
120 | "source": [ | ||
121 | "### Plot Config" | ||
122 | ] | ||
123 | }, | ||
124 | { | ||
125 | "cell_type": "code", | ||
126 | "execution_count": 180, | ||
127 | "metadata": {}, | ||
128 | "outputs": [], | ||
129 | "source": [ | ||
130 | "output_path = '../output/{}/'.format(domain)\n", | ||
131 | "mkdir(output_path)" | ||
132 | ] | ||
133 | }, | ||
134 | { | ||
135 | "cell_type": "markdown", | ||
136 | "metadata": {}, | ||
137 | "source": [ | ||
138 | "### Draw diagrams" | ||
139 | ] | ||
140 | }, | ||
141 | { | ||
142 | "cell_type": "code", | ||
143 | "execution_count": 181, | ||
144 | "metadata": {}, | ||
145 | "outputs": [], | ||
146 | "source": [ | ||
147 | "def drawBoxDiagram(title, target, types, distance_func, label_position):\n", | ||
148 | " distances = []\n", | ||
149 | " for distributions in types:\n", | ||
150 | " distances.append([distance_func(target, distribution) for distribution in distributions])\n", | ||
151 | " fig, ax1 = plt.subplots()\n", | ||
152 | " fig.set_size_inches(5, 2)\n", | ||
153 | " result = plt.boxplot(distances)\n", | ||
154 | " ax1.xaxis.set_ticks_position(label_position) \n", | ||
155 | " texts = ax1.set_xticklabels(labels, rotation=90, fontsize=12)\n", | ||
156 | " plt.savefig('{}/{}.png'.format(output_path, title), dpi=500, bbox_inches=\"tight\")" | ||
157 | ] | ||
158 | }, | ||
159 | { | ||
160 | "cell_type": "code", | ||
161 | "execution_count": 182, | ||
162 | "metadata": {}, | ||
163 | "outputs": [ | ||
164 | { | ||
165 | "data": { | ||
166 | "image/png": "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\n", | ||
167 | "text/plain": [ | ||
168 | "<Figure size 360x144 with 1 Axes>" | ||
169 | ] | ||
170 | }, | ||
171 | "metadata": { | ||
172 | "needs_background": "light" | ||
173 | }, | ||
174 | "output_type": "display_data" | ||
175 | } | ||
176 | ], | ||
177 | "source": [ | ||
178 | "# draw mpc\n", | ||
179 | "mpc_types = []\n", | ||
180 | "labels = ['Hum', 'Comb+V', 'Comb-V', 'MPC', 'NA', 'OD', 'NTD', 'VIO']\n", | ||
181 | "for models in model_types:\n", | ||
182 | " mpc_types.append([model.mpc for model in models])\n", | ||
183 | "drawBoxDiagram('MPC', rep.mpc, mpc_types, calculate_ks, 'top')" | ||
184 | ] | ||
185 | }, | ||
186 | { | ||
187 | "cell_type": "code", | ||
188 | "execution_count": 183, | ||
189 | "metadata": {}, | ||
190 | "outputs": [ | ||
191 | { | ||
192 | "data": { | ||
193 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAATwAAAB/CAYAAAByvn5wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAJoElEQVR4nO3dT2hdaRnH8d8zmcRuxiGxwUX/TIJWSIjiQKguCmNwFq2LNosRmiIIDXQ114VuChfqWLkLZzNC0oWFFERIqswiBKkMaOIiixmaIkinoRCKdWIFIw0VKjFpeVw0ySS3J8lJzrn3vPe+3w9cuOfck3Of3pv8et7zvuc95u4CgBi8UnQBAFAvBB6AaBB4AKJB4AGIBoEHIBoEHoBoNHzgmdmlomuQwqlDopadUEuymGpp+MCTFMqXFUodErXshFqSRVNLMwQeAKRiRV1pcfjwYe/q6sq8n6WlJXV2dmYvqEnqkKhlJ9SSrNlquXPnzr/dPXEnr2bacwZdXV2am5sr6u0BNCkze7jTazRpAUSDwAMQDQIPQDQKO4d3EGaWajumvAKQpKECLynIzIyAA5AKTVoA0SDwAESDwAMQDQIPQDQIPADRIPAARIPAAxANAg9ANAg8ANEg8ABEg8ADEI1UgWdmp83svpktmNnlXbZ7x8zczPrzKxEA8rFn4JlZi6Rrks5I6pU0ZGa9Cdu9JulHkj7Ju0gAyEOaI7yTkhbc/YG7r0q6KelcwnY/l/S+pJUc6wOA3KQJvCOSPtuyvLi+bpOZvSnpmLv/frcdmdklM5szs7mlpaV9FwsAWaQJvKRZNzcnoDOzVyR9IOkne+3I3a+7e7+794dylyQA8UgTeIuSjm1ZPirp0Zbl1yT1Sfqzmf1N0rclTdFxASA0aQLvtqQTZtZtZm2Szkua2njR3Z+4+2F373L3LkkfSzrr7tyDEUBQ9gw8d38m6V1JH0mal/Q7d//UzK6a2dlaFwgAeUl1Twt3vyXpVtW6Kzts+53sZQFA/rjSAkA0CDwA0SDwAESDwAMQjYa6ETfQqMySxu9vxw3la4/AA+qgOszMjIArAE1aANEg8ABEg8ADEA0CDzUxMTGhvr4+tbS0qK+vTxMTE0WXhMCYWapHnui0QO4mJiZULpc1NjamU6dOaXZ2VsPDw5KkoaGhgqtDKJI6bWrdmcMRHnJXqVQ0NjamgYEBtba2amBgQGNjY6pUKkWXhshZUV3j/f39Pje3+wxSHR0dWl5ezvQ+7e3tevz4caZ9YH9aWlq0srKi1tbWzXVra2s6dOiQnj9/Xrc6Qh77xrCUZHl8LmZ2x90T5+MM+ghveXlZ7p7pkTUwsX89PT2anZ3dtm52dlY9PT11raP6d2GndYhH0IGHxlQulzU8PKyZmRmtra1pZmZGw8PDKpfLRZeGyNFpgdxtdEyUSiXNz8+rp6dHlUqFDgsULuhzeDm152m6QFJYvwsh1RKSqM/hAUCeCDwA0SDwAESDwAMQDQIPQDQIvIy4SH67el8MDuwH4/Ay4CL5lzGzL0LGEV4GXCQPpNfR0ZHq6H+31zs6OjLVwMDjDEK5SD5kIR3hUUux6vX3zMDjGgnlInkA6RB4GXCRPNBYaNJm2G8asTVbqtWr6ZbH3IlS/eZPpElbu33s1qSll/aA6I0My8bciVnlMWwmbfju9V5MXps/Ag/IWUjhGxL/6Rel917Pvo8MCDwAdWE/+08+Tdr3Dv7zqTotzOy0md03swUzu5zw+o/N7J6Z/dXM/mRmbxy8JACojT0Dz8xaJF2TdEZSr6QhM+ut2uwvkvrd/RuSPpT0ft6FAkBWaY7wTkpacPcH7r4q6aakc1s3cPcZd//v+uLHko7mWyYAZJfmHN4RSZ9tWV6U9K1dth+W9IekF8zskqRLknT8+PGUJSJUIfVG5nFCfHM/aFppAi/ptzXxzKOZ/UBSv6S3kl539+uSrksvxuGlrBGBCqk3Mo8T4hu1ZDkpjrClCbxFSce2LB+V9Kh6IzN7W1JZ0lvu/r98ygOA/KQJvNuSTphZt6R/SDov6cLWDczsTUm/knTa3f+VV3EhjNvZkKb5xkBSSDSvd5P1aL69vT3b+6dpBpjZ9yT9UlKLpBvuXjGzq5Lm3H3KzP4o6euS/rn+I39397O77bPRLi0LqZZQNONn22y1NJogbtPo7rfc/Wvu/hV3r6yvu+LuU+vP33b3L7v7N9cfu4YdgOLFOFs3V1oAEYp1tm6mhwIiFOts3UwPlVYOJ6Ff7OdJPvsJQV6fiZT5c8nrQvs8OpYa4RxeqLN11/ocHk3alEK48Dk0IY19S9n5Fl0nwE42ZuseGBjYXBfDbN00aYEIxTpbN0d4+1D0GKKdMPtyePJoYtfq90X6vGOiVCppfn5ePT09qlQqTd1hIXEOLzchNZca7d/caPXmIaRaQsI5PAQt9CMZbBd7ayD4wAu1GQk6ChpR0ncR03cUdODxBwUgT0EHHpIxkQFSSzFWMtVkB00yfpTAa0B5zEPXbHfEQjLGj27HODwA0eAIrwGFNE8gwhdqx99OdVWvz/McPYHXgGimIK2QO/6KeE8C74CS/ndKWlerLzXU/7VDkuY7qtcfXSi1FHFUFRLO4R2Qu6d6FPHeabaJoYe2qO8n5Fo23mt8fFzd3d2anp7W6uqqpqen1d3drfHx8aYNOynwS8vSYBzey0L6TEKqBZ/r6+vT4OCgJicnN6+l3Vi+e/du0eVlwqVlALa5d++enj59qhs3bmzOeHzx4kU9fPiw6NJqiiYtEKG2tjaVSqVtMx6XSiW1tbUVXVpNEXhNwMy2PZLW1WugcZpaULzV1VWNjo5umw9vdHRUq6urRZdWUzRpm0BI58hCqgU76+3t1eDg4Lb58C5cuKDJycmiS6spjvCACJXLZY2Pj2tkZEQrKysaGRnR+Pg4Mx4DaD7MeFxnDEsBUAu7DUuhSQsgGgQegGgQeACiQeABiAaBByAaBB6AaBB4AKKRKvDM7LSZ3TezBTO7nPD6F8zst+uvf2JmXXkXCgBZ7Rl4ZtYi6ZqkM5J6JQ2ZWW/VZsOSlt39q5I+kPSLvAsFgKzSHOGdlLTg7g/cfVXSTUnnqrY5J+nX688/lPRdY1oMAIFJE3hHJH22ZXlxfV3iNu7+TNITSV/Ko0AAyEuawEs6Uqu+eDXNNjKzS2Y2Z2ZzS0tLaeqr/nnmWwNwYGkCb1HSsS3LRyU92mkbM3tV0uuSXrpLjLtfd/d+d+/v7Ozcd7FF3jgHQONLE3i3JZ0ws24za5N0XtJU1TZTkn64/vwdSdNO8gAIzJ7z4bn7MzN7V9JHklok3XD3T83sqqQ5d5+SNCbpN2a2oBdHdudrWTQAHESqCUDd/ZakW1Xrrmx5viLp+/mWBgD5KmwCUDNbktTc94QDUIQ33D2xk6CwwAOAeuNaWgDRIPAARIPAAxANAg9ANAg8ANEg8ABE4//8Jjci23haRwAAAABJRU5ErkJggg==\n", | ||
194 | "text/plain": [ | ||
195 | "<Figure size 360x144 with 1 Axes>" | ||
196 | ] | ||
197 | }, | ||
198 | "metadata": { | ||
199 | "needs_background": "light" | ||
200 | }, | ||
201 | "output_type": "display_data" | ||
202 | } | ||
203 | ], | ||
204 | "source": [ | ||
205 | "# draw node activity\n", | ||
206 | "na_types = []\n", | ||
207 | "labels = []\n", | ||
208 | "for models in model_types:\n", | ||
209 | " na_types.append([model.na for model in models])\n", | ||
210 | "drawBoxDiagram('Node_Activity', rep.na, na_types, calculate_ks, 'top')" | ||
211 | ] | ||
212 | }, | ||
213 | { | ||
214 | "cell_type": "code", | ||
215 | "execution_count": 184, | ||
216 | "metadata": {}, | ||
217 | "outputs": [ | ||
218 | { | ||
219 | "data": { | ||
220 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAATwAAAB/CAYAAAByvn5wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAJbElEQVR4nO3dTWhb2RnG8eeN4qkXnQ5241U+xobOQpE2Q0zaRWAaZgqZTbKZ0rgMdCEIFOIuOpuAIJ2meNHpYhYhm0AKpWCl01mZ4pJFpS60mCEOLSUZk9aEDnGzcYmZLoobxbxdxDGKfGXdWFfWkc7/Bxesc09030jJ43O/zjV3FwDE4EC/CwCA/ULgAYgGgQcgGgQegGgQeACiQeABiMbAB56ZXeh3DVI4dUjU0g61JIuploEPPEmhfFmh1CFRSzvUkiyaWoYh8AAgFevXnRaHDh3yycnJrt9nbW1NExMT3Rc0JHVI1NIOtSQbtlru3Lnzb3dPfJODXb1zFyYnJ7W0tNSvzQMYUmb2Zbt17NICiAaBByAaBB6AaPTtGN5emFmqfkx5BSDJQAVeUpCZGQEHIBV2aQFEg8ADEA0CD0A0CDwA0SDwAESDwAMQDQIPQDQIPADRIPAARIPAAxANAg9ANAg8ANEg8ABEg8ADEA0CD0A0CDwA0SDwAESDwAMQDQIPQDQIPADRSBV4ZnbGzO6b2YqZXdql33tm5mY2nV2JAJCNjoFnZjlJ1yS9K+m4pBkzO57Q71VJP5H0edZFAkAW0ozwTkpacfcH7v5E0k1J5xL6/ULSR5I2MqwPADKTJvAOS3rY9Hp1q22bmb0p6ai7/yHD2gAgU2kCzxLatp98bWYHJH0s6YOOb2R2wcyWzGxpbW0tfZUAkIE0gbcq6WjT6yOSHjW9flVSUdKfzeyfkr4jaSHpxIW7X3f3aXefnpiY2HvVALAHaQLvtqQ3zGzKzF6RdF7SwvOV7v6Vux9y90l3n5T0maSz7r7Uk4oBYI86Bp67P5V0UdItScuSPnH3e2Z2xczO9rpAAMjKwTSd3H1R0mJL2+U2fb/bfVnhM0s6tLmTu3fu1KWQagFClirwsFNreJhZ3wIlpFqAkHFrGYBoEHgAokHgAYgGgQcgGgQegGgQeACiQeABiAaBByAaBB6AaBB4AKIRdOCNj4/LzHZdJO26fnx8fF9q6VRHlrUA2Jug76VdX1/v+p7QtDfWD1ItAPYm6MADhkWaX3ZM+NB7Qe/SItkg7F5XKhUVi0XlcjkVi0VVKpWebi907v7C0q4NvcUILyX/2TekD1/r/j0yEPrudaVSUblc1o0bN3Tq1CnV63WVSiVJ0szMTM+224pRVdj6MY+j9esLn56e9qWl3WeBz2Jet6zmhqOW9IrFoq5evarTp09vt9VqNc3Ozuru3bs92WYaIc0TGFItIcno3/Ydd9/xTB2JwNvX9xnGWpLkcjltbGxoZGRku63RaGh0dFSbm5s92WYaIYVMv2oJfXbsXgcex/CQuXw+r3q9/kJbvV5XPp/vU0V4rvW4YWzHEwk8ZK5cLqtUKqlWq6nRaKhWq6lUKqlcLve7NESOkxYvodsD/WNjY5nUEdIJlCTPT0zMzs5qeXlZ+Xxec3Nz+3rCAkjCMbyM7OcxmUH6XEIS0t+ZWpL1+hgeIzxkiktBEDICD5nikZEIGSctMBSymGiCCR56K4TJQBjhYShkcfeJNHwTPIyPj2t9fb1jv93+3mNjY3r8+HHXtYRwhxCBBwyxEEImJOzSDqhOuwadlqwukcFO7F6HK1XgmdkZM7tvZitmdilh/U/N7Asz+5uZ/cnMXs++VDyXdLV8pyvnW5csdlGQ7Pmoqtslza4oXk7HXVozy0m6Jul7klYl3TazBXf/oqnbXyRNu/t/zezHkj6S9INeFAwkyeJi7O33QU+EcMF8mmN4JyWtuPsDSTKzm5LOSdoOPHevNfX/TNL7XVUFvCT7+X+ym5jhw+7rwU5ZfEfdfj9pAu+wpIdNr1clfXuX/iVJf0xaYWYXJF2QpGPHjqUsEaHK4gyglN1ZwFCENNoMYVQVkjSBl/SvNTGmzex9SdOS3kpa7+7XJV2Xnt1alrJGBIpLQZKFNNoMYVQVkjSBtyrpaNPrI5IetXYys3cklSW95e7/y6K4kH87Jf0nTWob5rsMQhrJoL1QJr2Q+l9Lx8kDzOygpL9LelvSvyTdlvRDd7/X1OdNSZ9KOuPu/0iz4WGbPCAkgzZhQkjf87DVEtJ20uj7BKDu/lTSRUm3JC1L+sTd75nZFTM7u9XtV5K+Lun3ZvZXM1voqmIA6IFUd1q4+6KkxZa2y00/v5NxXcBLy+JYIBdkDzduLcNQSLMbFNKuG/qDwENXGFUl43MJE4GHPWNUlYzPJVwEHhCRdiPP1vZhDWMCD4jIsAZZWkwPBSAajPCGAHd9JEvzucT2mYSkH7vXjPC6VKlUVCwWlcvlVCwWValU9r2G5/Onzc/Pq1Ao6MCBAyoUCpqfn4/iafLtpJlzDv2Tdl7Avmw06+XEiRPeybPyupPFe7QzPz/vU1NTXq1W/cmTJ16tVn1qasrn5+d7ts3Qa9GziSV2XWLE57J/JC15u/Bst6LXyzAEXqFQ8Gq1+kJbtVr1QqHQs20OQi1AP+0WeB0nD+iVYZg8IJfLaWNjQyMjI9ttjUZDo6Oj2tzc7Mk2B6EWoJ+6mjyg30J+WE0+n1e9Xn+hrV6vK5/P92ybg1ALEKqgA6/dsLR56dSvlzPplstllUol1Wo1NRoN1Wo1lUollcvlnm1zEGoBQsVlKV2YmZmRJM3Ozmp5eVn5fF5zc3Pb7bHWAoQq6GN4aXBPIoBmA30MDwCyQuABiAaBByAaBB6AaBB4AKJB4AGIBoEHIBoEHoBoEHgAokHgAYgGgQcgGgQegGikCjwzO2Nm981sxcwuJaz/mpn9bmv952Y2mXWhANCtjoFnZjlJ1yS9K+m4pBkzO97SrSRp3d2/JeljSb/MulAA6FaaEd5JSSvu/sDdn0i6KelcS59zkn6z9fOnkt62ds9gA4A+SRN4hyU9bHq9utWW2Mfdn0r6StI3sygQALKSJvCSRmqtM26m6SMzu2BmS2a2tLa2lqa+1j+/Y0lqB4AkaQJvVdLRptdHJD1q18fMDkp6TdKOh0m4+3V3n3b36YmJiZcuNs0zLpj9GEA7aQLvtqQ3zGzKzF6RdF7SQkufBUk/2vr5PUlVJ3kABKbjQ3zc/amZXZR0S1JO0q/d/Z6ZXdGzB94uSLoh6bdmtqJnI7vzvSwaAPYi1VPL3H1R0mJL2+WmnzckfT/b0gAgW317apmZrUn6si8bBzDMXnf3xJMEfQs8ANhv3EsLIBoEHoBoEHgAokHgAYgGgQcgGgQegGj8H6rxrSKGgZAbAAAAAElFTkSuQmCC\n", | ||
221 | "text/plain": [ | ||
222 | "<Figure size 360x144 with 1 Axes>" | ||
223 | ] | ||
224 | }, | ||
225 | "metadata": { | ||
226 | "needs_background": "light" | ||
227 | }, | ||
228 | "output_type": "display_data" | ||
229 | } | ||
230 | ], | ||
231 | "source": [ | ||
232 | "# draw out degree\n", | ||
233 | "out_d_types = []\n", | ||
234 | "labels = []\n", | ||
235 | "for models in model_types:\n", | ||
236 | " out_d_types.append([model.out_d for model in models])\n", | ||
237 | "drawBoxDiagram('Out_Degree', rep.out_d, out_d_types, calculate_ks, 'top')" | ||
238 | ] | ||
239 | }, | ||
240 | { | ||
241 | "cell_type": "code", | ||
242 | "execution_count": 185, | ||
243 | "metadata": {}, | ||
244 | "outputs": [], | ||
245 | "source": [ | ||
246 | "def manual_ks(pdf1, pdf2):\n", | ||
247 | " result = 0\n", | ||
248 | " sum1 = 0\n", | ||
249 | " sum2 = 0\n", | ||
250 | " for(a, b) in zip(pdf1, pdf2):\n", | ||
251 | " sum1 += a\n", | ||
252 | " sum2 += b\n", | ||
253 | " result = max(result, abs(sum1-sum2))\n", | ||
254 | " return result\n" | ||
255 | ] | ||
256 | }, | ||
257 | { | ||
258 | "cell_type": "code", | ||
259 | "execution_count": 186, | ||
260 | "metadata": {}, | ||
261 | "outputs": [ | ||
262 | { | ||
263 | "name": "stdout", | ||
264 | "output_type": "stream", | ||
265 | "text": [ | ||
266 | "['Commit', 'Issue', 'IssueEvent', 'Project', 'PullRequest', 'User']\n" | ||
267 | ] | ||
268 | }, | ||
269 | { | ||
270 | "data": { | ||
271 | "image/png": "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\n", | ||
272 | "text/plain": [ | ||
273 | "<Figure size 360x144 with 1 Axes>" | ||
274 | ] | ||
275 | }, | ||
276 | "metadata": { | ||
277 | "needs_background": "light" | ||
278 | }, | ||
279 | "output_type": "display_data" | ||
280 | } | ||
281 | ], | ||
282 | "source": [ | ||
283 | "# draw node type\n", | ||
284 | "labels = []\n", | ||
285 | "types = sorted(rep.nodeTypeStat.keys())\n", | ||
286 | "rep_type_dist = [float(rep.nodeTypeStat[key]) for key in types]\n", | ||
287 | "print(types)\n", | ||
288 | "node_type_types = []\n", | ||
289 | "for models in model_types:\n", | ||
290 | " type_dists = []\n", | ||
291 | " for model in models:\n", | ||
292 | " type_dists.append([float(model.nodeTypeStat.get(key, 0)) for key in types])\n", | ||
293 | " node_type_types.append(type_dists)\n", | ||
294 | "\n", | ||
295 | "#since we already know the pdf, we can compute the ks distance manually\n", | ||
296 | "drawBoxDiagram('Node_Type', rep_type_dist, node_type_types, manual_ks, 'top')" | ||
297 | ] | ||
298 | }, | ||
299 | { | ||
300 | "cell_type": "code", | ||
301 | "execution_count": 187, | ||
302 | "metadata": {}, | ||
303 | "outputs": [ | ||
304 | { | ||
305 | "data": { | ||
306 | "image/png": "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\n", | ||
307 | "text/plain": [ | ||
308 | "<Figure size 360x144 with 1 Axes>" | ||
309 | ] | ||
310 | }, | ||
311 | "metadata": { | ||
312 | "needs_background": "light" | ||
313 | }, | ||
314 | "output_type": "display_data" | ||
315 | } | ||
316 | ], | ||
317 | "source": [ | ||
318 | "# draw violations\n", | ||
319 | "violation_types = []\n", | ||
320 | "labels = ['Hum', 'Comb+V', 'Comb-V', 'MPC', 'NA', 'OD', 'NTD', 'VIO']\n", | ||
321 | "for models in model_types:\n", | ||
322 | " violation_types.append([model.violations for model in models])\n", | ||
323 | "drawBoxDiagram('Violations', None, violation_types, lambda a, b:b, 'bottom')" | ||
324 | ] | ||
325 | }, | ||
326 | { | ||
327 | "cell_type": "code", | ||
328 | "execution_count": null, | ||
329 | "metadata": {}, | ||
330 | "outputs": [], | ||
331 | "source": [] | ||
332 | }, | ||
333 | { | ||
334 | "cell_type": "code", | ||
335 | "execution_count": null, | ||
336 | "metadata": {}, | ||
337 | "outputs": [], | ||
338 | "source": [] | ||
339 | } | ||
340 | ], | ||
341 | "metadata": { | ||
342 | "kernelspec": { | ||
343 | "display_name": "Python 3", | ||
344 | "language": "python", | ||
345 | "name": "python3" | ||
346 | }, | ||
347 | "language_info": { | ||
348 | "codemirror_mode": { | ||
349 | "name": "ipython", | ||
350 | "version": 3 | ||
351 | }, | ||
352 | "file_extension": ".py", | ||
353 | "mimetype": "text/x-python", | ||
354 | "name": "python", | ||
355 | "nbconvert_exporter": "python", | ||
356 | "pygments_lexer": "ipython3", | ||
357 | "version": "3.7.3" | ||
358 | } | ||
359 | }, | ||
360 | "nbformat": 4, | ||
361 | "nbformat_minor": 2 | ||
362 | } | ||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/DistancePlot.ipynb b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/DistancePlot.ipynb new file mode 100644 index 00000000..44842cf4 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/DistancePlot.ipynb | |||
@@ -0,0 +1,199 @@ | |||
1 | { | ||
2 | "cells": [ | ||
3 | { | ||
4 | "cell_type": "code", | ||
5 | "execution_count": 6, | ||
6 | "metadata": {}, | ||
7 | "outputs": [], | ||
8 | "source": [ | ||
9 | "import os, sys\n", | ||
10 | "lib_path = os.path.abspath(os.path.join('..','..', '..', 'utils'))\n", | ||
11 | "sys.path.append(lib_path)\n", | ||
12 | "import glob\n", | ||
13 | "import matplotlib.pyplot as plt\n", | ||
14 | "from GraphType import GraphCollection\n", | ||
15 | "import DistributionMetrics as metrics\n", | ||
16 | "from GraphType import GraphStat\n", | ||
17 | "import readCSV as reader\n" | ||
18 | ] | ||
19 | }, | ||
20 | { | ||
21 | "cell_type": "code", | ||
22 | "execution_count": 7, | ||
23 | "metadata": {}, | ||
24 | "outputs": [], | ||
25 | "source": [ | ||
26 | "def getModels(folderName, numberOfModels):\n", | ||
27 | " filenames = reader.readmultiplefiles(folderName, numberOfModels, False)\n", | ||
28 | " graphStats = [GraphStat(filename) for filename in filenames]\n", | ||
29 | " return graphStats" | ||
30 | ] | ||
31 | }, | ||
32 | { | ||
33 | "cell_type": "code", | ||
34 | "execution_count": 109, | ||
35 | "metadata": {}, | ||
36 | "outputs": [], | ||
37 | "source": [ | ||
38 | "# read models\n", | ||
39 | "domain = 'ecore'\n", | ||
40 | "rep = getModels('../input/{}/MPC_REP/'.format(domain), 1)[0]\n", | ||
41 | "na_rep = getModels('../input/{}/NA_REP/'.format(domain), 1)[0]\n", | ||
42 | "od_rep = getModels('../input/{}/OUT_DEGREE_REP/'.format(domain), 1)[0]\n", | ||
43 | "rep.na = na_rep.na\n", | ||
44 | "rep.out_d = od_rep.out_d\n", | ||
45 | "\n", | ||
46 | "human_models = getModels('../input/{}/Human/'.format(domain), 304)\n", | ||
47 | "folder = '../output/distances/{}/'.format(domain)\n", | ||
48 | "mkdir(folder)" | ||
49 | ] | ||
50 | }, | ||
51 | { | ||
52 | "cell_type": "code", | ||
53 | "execution_count": 111, | ||
54 | "metadata": {}, | ||
55 | "outputs": [], | ||
56 | "source": [ | ||
57 | "if domain == 'yakindumm':\n", | ||
58 | " rep.nodeTypeStat = {'Entry': 0.04257802080554814, 'Choice': 0.1267671379034409, 'State': 0.1596092291277674, 'Transition': 0.6138636969858629, 'Statechart': 0.010136036276340358, 'Region': 0.04467858095492131, 'Exit': 0.0018338223526273673, 'FinalState': 0.0005334755934915977}\n", | ||
59 | "elif domain == 'ecpre':\n", | ||
60 | " rep.nodeTypeStat = {'EAttribute': 0.23539778449144008, 'EClass': 0.30996978851963747, 'EReference': 0.33081570996978854, 'EPackage': 0.012789526686807653, 'EAnnotation': 0.002517623363544813, 'EEnumLiteral': 0.07275931520644502, 'EEnum': 0.013645518630412891, 'EDataType': 0.004028197381671702, 'EParameter': 0.005941591137965764, 'EGenericType': 0.002014098690835851, 'EOperation': 0.009415911379657605, 'ETypeParameter': 0.0007049345417925478}\n", | ||
61 | "node_types = sorted(rep.nodeTypeStat.keys())" | ||
62 | ] | ||
63 | }, | ||
64 | { | ||
65 | "cell_type": "code", | ||
66 | "execution_count": 112, | ||
67 | "metadata": {}, | ||
68 | "outputs": [], | ||
69 | "source": [ | ||
70 | "def plot_diagram(name, models, rep, metric, distance_metric):\n", | ||
71 | " model_metrics = list(map(metric, models))\n", | ||
72 | " rep = metric(rep)\n", | ||
73 | " distances= list(map(lambda m: distance_metric(m,rep), model_metrics))\n", | ||
74 | " plt.figure()\n", | ||
75 | " plt.title('{} for {}'.format(name, domain))\n", | ||
76 | " plt.hist(distances)\n", | ||
77 | " plt.savefig('{}/{}.png'.format(folder, name), dpi = 500)" | ||
78 | ] | ||
79 | }, | ||
80 | { | ||
81 | "cell_type": "code", | ||
82 | "execution_count": 113, | ||
83 | "metadata": {}, | ||
84 | "outputs": [], | ||
85 | "source": [ | ||
86 | "def mpc(model):\n", | ||
87 | " return model.mpc\n", | ||
88 | "def na(model):\n", | ||
89 | " return model.na\n", | ||
90 | "def od(model):\n", | ||
91 | " return model.out_d\n", | ||
92 | "\n", | ||
93 | "def nt(model):\n", | ||
94 | " nd_dict = model.nodeTypeStat\n", | ||
95 | " dist = []\n", | ||
96 | " for key in node_types:\n", | ||
97 | " dist.append(nd_dict.get(key, 0))\n", | ||
98 | " return dist\n", | ||
99 | "\n", | ||
100 | "def mkdir(path):\n", | ||
101 | " if not os.path.exists(path):\n", | ||
102 | " os.makedirs(path)\n", | ||
103 | "\n", | ||
104 | "def ks_distance(s1, s2):\n", | ||
105 | " value, p = metrics.ks_distance(s1, s2)\n", | ||
106 | " return value" | ||
107 | ] | ||
108 | }, | ||
109 | { | ||
110 | "cell_type": "code", | ||
111 | "execution_count": 114, | ||
112 | "metadata": {}, | ||
113 | "outputs": [ | ||
114 | { | ||
115 | "data": { | ||
116 | "image/png": "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\n", | ||
117 | "text/plain": [ | ||
118 | "<Figure size 432x288 with 1 Axes>" | ||
119 | ] | ||
120 | }, | ||
121 | "metadata": { | ||
122 | "needs_background": "light" | ||
123 | }, | ||
124 | "output_type": "display_data" | ||
125 | }, | ||
126 | { | ||
127 | "data": { | ||
128 | "image/png": "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\n", | ||
129 | "text/plain": [ | ||
130 | "<Figure size 432x288 with 1 Axes>" | ||
131 | ] | ||
132 | }, | ||
133 | "metadata": { | ||
134 | "needs_background": "light" | ||
135 | }, | ||
136 | "output_type": "display_data" | ||
137 | }, | ||
138 | { | ||
139 | "data": { | ||
140 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEICAYAAACktLTqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAASQUlEQVR4nO3deZDkZX3H8fcHFgRE5NgBYTkGzWIkJEZrVdSqaAQTBAMkBQbjsRjiWsQzoIBHReORgFGJpoy6EcPGMgTEAwqNQjiisYS4KIiAFAjIrqywICCgUZFv/ugfZmqc2emZnpmeefb9qurq3/18+5mZT//m6e5fp6qQJLVli2EXIEmafYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdpliU5PskdSR5Issuw69HmyXBXX5Icm+SaJD9J8sMkH0my4zT2vzXJwX1sN5qkumB8oAvJC5I8f7BHMD+SbAV8APiDqtq+qu4edk3aPBnumlKSE4HTgDcBjwUOBPYBLkqy9Rw1u2NVbQ88GbgI+FySY2e7kSRLZvmQuwHbANfOoJYkmfe/yWG1qzlWVd68TXoDdgAeAF40bvn2wJ3An3fzZwLvHrP+ucD6bvqTwMPAT7tjnbSJ9kaBApaMW/5G4A5gi25+D+AzwEbgFuB1Y7bdFlgD3ANcD5z0SC3d+luBk4FvAz8DlkxxvC2AU4DvAXcD5wA7T1D7fsCDXf0PAJd0y58FfAO4r7t/1ph9LgPeA3yt65/fmOC4m6ptS+AtXW33A1cCe82kXXpP3GcAG4AfAO8Gthz276C3md2GXoC3hX0DDgEeGh+23bo1wFnd9KTh3s3fChzcR3uThfvju+VP6sL2SuCvga27dTcDf9hteyrwX8BOwJ5diI+v5Spgr+6JYKrjvQG4vDvWo4CPPfK4p6of2Jnek8zL6D2JvLib36VbfxlwG/Bb3fqtxh1vqtreBFwDPBEIvf90dplJu8Dnu8f2aGBX4H+AVw37d9DbzG7+K6apLAXuqqqHJli3oVs/H27v7ncGngaMVNU7q+rnVXUz8M/AMd02LwL+tqruqar1wIcmON6HqmpdVf20j+O9CnhrVa2vqp8B7wCO6nNI5zDgxqr6ZFU9VFVnAd8F/mjMNmdW1bXd+l+M23+q2v4CeFtV3VA9V1dvnH9a7Xb9+gLgDVX1YFXdCZw+ph0tMrM93qj23AUsTbJkgoDfvVs/H5Z19z8CfhvYI8m9Y9ZvCXy1m94DWDdm3djpiZbtM8Xx9qE35v/wmPW/pDe+/oMp6t4D+P64Zd/n/x/PZPX1W9te9IZkBm13H3pn7xuSPLJsiylq0wJmuGsqX6c3Lv0n9MaaAUjyaHpnem/pFj0IbDdmv8eNO86glx/9Y3pj/DcAOwK3VNXySbbdQG8I5bpufq8Jthlbz7opjreO3msLX5t21b3/OPYZt2xv4EuT1DJR21PV9gTgOwO2u47ez3npJP+laZFxWEabVFX3AX8D/GOSQ5JslWQU+DSwnt6LpdAbwz40yc5JHkdvnHqsO+iNF09Lkt2SvAZ4O/DmqnqY3ljwj5OcnGTbJFsmOSDJ07rdzgHenGSnJMuA10zRzFTH+yjwniT7dDWNJDmiz4fwRWC/JH+WZEmSPwX2By7oc/+pavs48K4ky7t3vfxO9976abVbVRuAC4H3J9khyRZJnpDkOX3WqQXGcNeUquq99M7Q3wf8GLiC3pneQd0YNPRC/mp6L1ZeCJw97jB/B7wtyb1J3thHs/cmeZDei4WHAkdX1Se6en5Jb+z4d+m9e+QueiH32G7fd9J74rkF+E/gXHpnpZM9vqmO90HgfODCJPfTe3H1GX08Brrx7xcCJ9J7p81JwAurqq/hrD5q+wC9J7ML6f1szgC2nWG7L6f3ou119F58PZfe0JsWoVT5ZR1qW5LjgWOqyrNQbTY8c1dzkuye5Nnd0MIT6Z29fm7YdUnzyXDXvEvykjGXFxh7m/anOiexNb33a98PXAKcB/zTLB1bWhQclpGkBnnmLkkNWhDvc1+6dGmNjo4OuwxJWlSuvPLKu6pqZKJ1CyLcR0dHWbt27bDLkKRFJcn4TyH/isMyktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUoAXxCdVBjJ7yhaG1feuphw2tbUnaFM/cJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBk0Z7kk+keTOJN8Zs2znJBclubG736lbniQfSnJTkm8neepcFi9Jmlg/Z+5nAoeMW3YKcHFVLQcu7uYBXgAs726rgI/MTpmSpOmYMtyr6ivAj8YtPgJY002vAY4cs/xfq+dyYMcku89WsZKk/sx0zH23qtoA0N3v2i1fBqwbs936btmvSbIqydokazdu3DjDMiRJE5ntF1QzwbKaaMOqWl1VK6pqxcjIyCyXIUmbt5mG+x2PDLd093d2y9cDe43Zbk/g9pmXJ0maiZmG+/nAym56JXDemOUv7941cyBw3yPDN5Kk+TPl1+wlOQt4LrA0yXrg7cCpwDlJjgNuA47uNv8icChwE/AT4BVzULMkaQpThntVvXiSVQdNsG0Brx60KEnSYPyEqiQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwYK9yR/leTaJN9JclaSbZLsm+SKJDcmOTvJ1rNVrCSpPzMO9yTLgNcBK6rqAGBL4BjgNOD0qloO3AMcNxuFSpL6N+iwzBJg2yRLgO2ADcDzgHO79WuAIwdsQ5I0TTMO96r6AfA+4DZ6oX4fcCVwb1U91G22Hlg20f5JViVZm2Ttxo0bZ1qGJGkCgwzL7AQcAewL7AE8GnjBBJvWRPtX1eqqWlFVK0ZGRmZahiRpAoMMyxwM3FJVG6vqF8BngWcBO3bDNAB7ArcPWKMkaZoGCffbgAOTbJckwEHAdcClwFHdNiuB8wYrUZI0XYOMuV9B74XTbwLXdMdaDZwMnJDkJmAX4IxZqFOSNA1Lpt5kclX1duDt4xbfDDx9kONKkgbjJ1QlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwYK9yQ7Jjk3yXeTXJ/kmUl2TnJRkhu7+51mq1hJUn8GPXP/IPClqvpN4MnA9cApwMVVtRy4uJuXJM2jGYd7kh2A3wPOAKiqn1fVvcARwJpuszXAkYMWKUmaniUD7Pt4YCPwL0meDFwJvB7Yrao2AFTVhiS7TrRzklXAKoC99957gDKGZ/SULwyl3VtPPWwo7UpaPAYZllkCPBX4SFU9BXiQaQzBVNXqqlpRVStGRkYGKEOSNN4g4b4eWF9VV3Tz59IL+zuS7A7Q3d85WImSpOmacbhX1Q+BdUme2C06CLgOOB9Y2S1bCZw3UIWSpGkbZMwd4LXAp5JsDdwMvILeE8Y5SY4DbgOOHrANSdI0DRTuVXUVsGKCVQcNclxJ0mD8hKokNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMGDvckWyb5VpILuvl9k1yR5MYkZyfZevAyJUnTMRtn7q8Hrh8zfxpwelUtB+4BjpuFNiRJ0zBQuCfZEzgM+Hg3H+B5wLndJmuAIwdpQ5I0fYOeuf8DcBLwcDe/C3BvVT3Uza8Hlk20Y5JVSdYmWbtx48YBy5AkjTXjcE/yQuDOqrpy7OIJNq2J9q+q1VW1oqpWjIyMzLQMSdIElgyw77OBw5McCmwD7EDvTH7HJEu6s/c9gdsHL1OSNB0zPnOvqjdX1Z5VNQocA1xSVS8BLgWO6jZbCZw3cJWSpGmZi/e5nwyckOQmemPwZ8xBG5KkTRhkWOZXquoy4LJu+mbg6bNxXEnSzPgJVUlqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBs043JPsleTSJNcnuTbJ67vlOye5KMmN3f1Os1euJKkfg5y5PwScWFVPAg4EXp1kf+AU4OKqWg5c3M1LkubRjMO9qjZU1Te76fuB64FlwBHAmm6zNcCRgxYpSZqeWRlzTzIKPAW4AtitqjZA7wkA2HWSfVYlWZtk7caNG2ejDElSZ+BwT7I98BngDVX14373q6rVVbWiqlaMjIwMWoYkaYyBwj3JVvSC/VNV9dlu8R1Jdu/W7w7cOViJkqTpGuTdMgHOAK6vqg+MWXU+sLKbXgmcN/PyJEkzsWSAfZ8NvAy4JslV3bK3AKcC5yQ5DrgNOHqwEiVJ0zXjcK+q/wYyyeqDZnpcSdLg/ISqJDXIcJekBg0y5q4hGT3lC0Nr+9ZTDxta25L655m7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBflmHpmVYXxTil4RI0+OZuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDfJ97loUfH+9ND2euUtSgwx3SWrQnIR7kkOS3JDkpiSnzEUbkqTJzfqYe5ItgQ8DzwfWA99Icn5VXTfbbUlzbVhj/ZurYb3GMcyf81w95rk4c386cFNV3VxVPwf+HThiDtqRJE1iLt4tswxYN2Z+PfCM8RslWQWs6mYfSHLDDNtbCtw1w303B/bP5OybTZv3/slp89naQGatbwZ8zPtMtmIuwj0TLKtfW1C1Glg9cGPJ2qpaMehxWmX/TM6+2TT7Z3KLoW/mYlhmPbDXmPk9gdvnoB1J0iTmIty/ASxPsm+SrYFjgPPnoB1J0iRmfVimqh5K8hrgy8CWwCeq6trZbmeMgYd2Gmf/TM6+2TT7Z3ILvm9S9WvD4ZKkRc5PqEpSgwx3SWrQogn3qS5pkORRSc7u1l+RZHT+qxyOPvrmhCTXJfl2kouTTPre2Bb1ezmMJEclqSQL+i1us62f/knyou536Nok/zbfNQ5LH39beye5NMm3ur+vQ4dR54SqasHf6L0w+z3g8cDWwNXA/uO2+Uvgo930McDZw657AfXN7wPbddPHby5902//dNs9BvgKcDmwYth1L6T+AZYD3wJ26uZ3HXbdC6hvVgPHd9P7A7cOu+5HbovlzL2fSxocAazpps8FDkoy0QeqWjNl31TVpVX1k272cnqfPdhc9Hs5jHcB7wX+dz6LWwD66Z9XAh+uqnsAqurOea5xWPrpmwJ26KYfywL6TM9iCfeJLmmwbLJtquoh4D5gl3mpbrj66ZuxjgP+Y04rWlim7J8kTwH2qqoL5rOwBaKf35/9gP2SfC3J5UkOmbfqhqufvnkH8NIk64EvAq+dn9Kmtli+iamfSxr0ddmDBvX9uJO8FFgBPGdOK1pYNtk/SbYATgeOna+CFph+fn+W0BuaeS69//q+muSAqrp3jmsbtn765sXAmVX1/iTPBD7Z9c3Dc1/epi2WM/d+Lmnwq22SLKH3L9KP5qW64errcg9JDgbeChxeVT+bp9oWgqn65zHAAcBlSW4FDgTO34xeVO33b+u8qvpFVd0C3EAv7FvXT98cB5wDUFVfB7ahd1GxoVss4d7PJQ3OB1Z200cBl1T3KkfjpuybbtjhY/SCfXMZL33EJvunqu6rqqVVNVpVo/Rekzi8qtYOp9x518/f1ufpvShPkqX0hmluntcqh6OfvrkNOAggyZPohfvGea1yEosi3Lsx9EcuaXA9cE5VXZvknUkO7zY7A9glyU3ACcBm8Q1QffbN3wPbA59OclWSzeZaP332z2arz/75MnB3kuuAS4E3VdXdw6l4/vTZNycCr0xyNXAWcOxCOan08gOS1KBFceYuSZoew12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ16P8AtZaSS8ry4ocAAAAASUVORK5CYII=\n", | ||
141 | "text/plain": [ | ||
142 | "<Figure size 432x288 with 1 Axes>" | ||
143 | ] | ||
144 | }, | ||
145 | "metadata": { | ||
146 | "needs_background": "light" | ||
147 | }, | ||
148 | "output_type": "display_data" | ||
149 | }, | ||
150 | { | ||
151 | "data": { | ||
152 | "image/png": "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\n", | ||
153 | "text/plain": [ | ||
154 | "<Figure size 432x288 with 1 Axes>" | ||
155 | ] | ||
156 | }, | ||
157 | "metadata": { | ||
158 | "needs_background": "light" | ||
159 | }, | ||
160 | "output_type": "display_data" | ||
161 | } | ||
162 | ], | ||
163 | "source": [ | ||
164 | "plot_diagram('MPC', human_models, rep, mpc, ks_distance)\n", | ||
165 | "plot_diagram('Node_Activity', human_models, rep, na, ks_distance)\n", | ||
166 | "plot_diagram('Out_Degree', human_models, rep, od, ks_distance)\n", | ||
167 | "plot_diagram('Node_Type', human_models, rep, nt, metrics.manual_ks)\n" | ||
168 | ] | ||
169 | }, | ||
170 | { | ||
171 | "cell_type": "code", | ||
172 | "execution_count": null, | ||
173 | "metadata": {}, | ||
174 | "outputs": [], | ||
175 | "source": [] | ||
176 | } | ||
177 | ], | ||
178 | "metadata": { | ||
179 | "kernelspec": { | ||
180 | "display_name": "Python 3", | ||
181 | "language": "python", | ||
182 | "name": "python3" | ||
183 | }, | ||
184 | "language_info": { | ||
185 | "codemirror_mode": { | ||
186 | "name": "ipython", | ||
187 | "version": 3 | ||
188 | }, | ||
189 | "file_extension": ".py", | ||
190 | "mimetype": "text/x-python", | ||
191 | "name": "python", | ||
192 | "nbconvert_exporter": "python", | ||
193 | "pygments_lexer": "ipython3", | ||
194 | "version": "3.7.3" | ||
195 | } | ||
196 | }, | ||
197 | "nbformat": 4, | ||
198 | "nbformat_minor": 2 | ||
199 | } | ||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/input/.gitignore b/Metrics/Metrics-Calculation/metrics_plot/model comparison/input/.gitignore new file mode 100644 index 00000000..b3934b01 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/input/.gitignore | |||
@@ -0,0 +1,3 @@ | |||
1 | # ignore everything in this folder | ||
2 | * | ||
3 | !.gitignore \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/MPC.png new file mode 100644 index 00000000..ae4f5900 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/MPC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/MPC_lengend.png new file mode 100644 index 00000000..c94b8c2c --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/MPC_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node Types.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node Types.png new file mode 100644 index 00000000..70abdd5b --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node Types.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node Types_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node Types_lengend.png new file mode 100644 index 00000000..fe138084 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node Types_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node_Activity.png new file mode 100644 index 00000000..a8a655f8 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node_Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node_Activity_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node_Activity_lengend.png new file mode 100644 index 00000000..bc83145d --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node_Activity_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Out_Degree.png new file mode 100644 index 00000000..ee97529b --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Out_Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Out_Degree_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Out_Degree_lengend.png new file mode 100644 index 00000000..0f6e8538 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Out_Degree_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png new file mode 100644 index 00000000..d7ed3bbb --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png new file mode 100644 index 00000000..8a20963d --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png new file mode 100644 index 00000000..4354656c --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/MPC.png new file mode 100644 index 00000000..b52aa827 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/MPC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/MPC_lengend.png new file mode 100644 index 00000000..6adb45e2 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/MPC_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node Types.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node Types.png new file mode 100644 index 00000000..e257f381 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node Types.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node Types_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node Types_lengend.png new file mode 100644 index 00000000..2672ee2c --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node Types_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Activity.png new file mode 100644 index 00000000..33adbfe9 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Activity_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Activity_lengend.png new file mode 100644 index 00000000..d64df78b --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Activity_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Types.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Types.png new file mode 100644 index 00000000..eb245365 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Types.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Out_Degree.png new file mode 100644 index 00000000..2c8f53f6 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Out_Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Out_Degree_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Out_Degree_lengend.png new file mode 100644 index 00000000..86b7c3a0 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Out_Degree_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Node Types.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Node Types.png new file mode 100644 index 00000000..81085eab --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Node Types.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Node Types_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Node Types_lengend.png new file mode 100644 index 00000000..e92f1b26 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Node Types_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Out_Degree.png new file mode 100644 index 00000000..25b35ee7 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Out_Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Out_Degree_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Out_Degree_lengend.png new file mode 100644 index 00000000..d2c660c0 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Out_Degree_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png new file mode 100644 index 00000000..df162a5a --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..703f9c56 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..873a40c1 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png new file mode 100644 index 00000000..826b797f --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..babf7266 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..31f74863 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png new file mode 100644 index 00000000..a4717b87 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..946f2aa1 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..668423cc --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png new file mode 100644 index 00000000..f4301083 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png new file mode 100644 index 00000000..fd27fdd4 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png new file mode 100644 index 00000000..39fc0cf9 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png new file mode 100644 index 00000000..545aab79 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..6e92f726 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..a57f399b --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.png new file mode 100644 index 00000000..30d74805 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..2e34fead --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..bc9d6016 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/MPC.png new file mode 100644 index 00000000..39e1c4ec --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..16ac54dd --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..99ebd383 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/MPC.png new file mode 100644 index 00000000..08983af2 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..704ac0f4 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..93ba4a66 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png new file mode 100644 index 00000000..e0d5b199 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..ddcc2451 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..e0ea1c75 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png new file mode 100644 index 00000000..430e7279 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..fc15d7f5 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..20499e22 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/MPC.png new file mode 100644 index 00000000..ab519eaa --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..7726b292 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..5416c350 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/MPC.png new file mode 100644 index 00000000..601fc7f1 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..76773aa4 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..2e459f1a --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/MPC.png new file mode 100644 index 00000000..9d12c2d8 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..56745bc0 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..24f29731 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/MPC.png new file mode 100644 index 00000000..dcd1eaa2 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..ac912936 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..4c9abbcb --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png new file mode 100644 index 00000000..4f8e97e2 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..7c2b5752 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..3cf659b2 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png new file mode 100644 index 00000000..50b882da --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png new file mode 100644 index 00000000..4e9a68d5 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png new file mode 100644 index 00000000..bfa4b537 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png new file mode 100644 index 00000000..33176821 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png new file mode 100644 index 00000000..53c46e6f --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png new file mode 100644 index 00000000..abf45ff1 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png new file mode 100644 index 00000000..07c97401 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..f2fb5229 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..d2677e99 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/MPC.png new file mode 100644 index 00000000..a375c676 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png new file mode 100644 index 00000000..d69cd298 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png new file mode 100644 index 00000000..0584ac99 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png new file mode 100644 index 00000000..016cc2a3 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png new file mode 100644 index 00000000..55d32444 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png new file mode 100644 index 00000000..99cbbae4 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png new file mode 100644 index 00000000..b8480ae0 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..82268167 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..41bcd510 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/MPC.png new file mode 100644 index 00000000..b19bb958 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png new file mode 100644 index 00000000..cccabc4e --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png new file mode 100644 index 00000000..947ebdd2 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png new file mode 100644 index 00000000..0ff4ee89 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png new file mode 100644 index 00000000..1f9e2e18 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png new file mode 100644 index 00000000..2c63cc3a --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png new file mode 100644 index 00000000..8d76fed9 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png new file mode 100644 index 00000000..daa7929a --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png new file mode 100644 index 00000000..e56b1b6e --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png new file mode 100644 index 00000000..8705cee2 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..bdab3741 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..e4269f6e --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png new file mode 100644 index 00000000..e4b6b527 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..e067ad66 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..9b89e4f9 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png new file mode 100644 index 00000000..820df5c7 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png new file mode 100644 index 00000000..b6aa957a --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png new file mode 100644 index 00000000..161041d9 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/MPC.png new file mode 100644 index 00000000..4f189578 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Node Activity.png new file mode 100644 index 00000000..add3c0f8 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Node Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Out Degree.png new file mode 100644 index 00000000..f4717a1a --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Out Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/MPC.png new file mode 100644 index 00000000..d184e5bf --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png new file mode 100644 index 00000000..0dea77f2 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Activity.png new file mode 100644 index 00000000..192fe6f0 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png new file mode 100644 index 00000000..4db337ef --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Types.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Types.png new file mode 100644 index 00000000..2f24cda9 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Types.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png new file mode 100644 index 00000000..14dcc501 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Out_Degree.png new file mode 100644 index 00000000..6f40ea4d --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Out_Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png new file mode 100644 index 00000000..f2e3230b --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/MPC.png new file mode 100644 index 00000000..834a91aa --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png new file mode 100644 index 00000000..b3783c77 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Activity.png new file mode 100644 index 00000000..2828f1fd --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png new file mode 100644 index 00000000..4a50e619 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Types.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Types.png new file mode 100644 index 00000000..991ff1ff --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Types.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png new file mode 100644 index 00000000..d13686c8 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Out_Degree.png new file mode 100644 index 00000000..12b4ce33 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Out_Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png new file mode 100644 index 00000000..03fe9740 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-/TCC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-/TCC.png new file mode 100644 index 00000000..31a83155 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-/TCC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-/TCC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-/TCC_lengend.png new file mode 100644 index 00000000..e29f59cb --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-/TCC_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Rand-GS-Real-/TCC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Rand-GS-Real-/TCC.png new file mode 100644 index 00000000..a3d56a23 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Rand-GS-Real-/TCC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Rand-GS-Real-/TCC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Rand-GS-Real-/TCC_lengend.png new file mode 100644 index 00000000..58cefaff --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Rand-GS-Real-/TCC_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Real-/TCC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Real-/TCC.png new file mode 100644 index 00000000..e9614b89 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Real-/TCC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Real-/TCC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Real-/TCC_lengend.png new file mode 100644 index 00000000..f0cee20a --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Real-/TCC_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/MPC.png new file mode 100644 index 00000000..a53bda79 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/MPC.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png new file mode 100644 index 00000000..7a49fb91 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Activity.png new file mode 100644 index 00000000..bf6ca9ba --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Activity.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png new file mode 100644 index 00000000..d82a124e --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Types.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Types.png new file mode 100644 index 00000000..0e7b1e46 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Types.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png new file mode 100644 index 00000000..7f9e560e --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Out_Degree.png new file mode 100644 index 00000000..928a0704 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Out_Degree.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png new file mode 100644 index 00000000..0059a925 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/src/plot_ks_stats.py b/Metrics/Metrics-Calculation/metrics_plot/model comparison/src/plot_ks_stats.py new file mode 100644 index 00000000..75fe78eb --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/src/plot_ks_stats.py | |||
@@ -0,0 +1,158 @@ | |||
1 | import os, sys | ||
2 | lib_path = os.path.abspath(os.path.join('..', '..', 'utils')) | ||
3 | sys.path.append(lib_path) | ||
4 | import glob | ||
5 | import random | ||
6 | from sklearn.manifold import MDS | ||
7 | import matplotlib.pyplot as plt | ||
8 | from scipy import stats | ||
9 | import numpy as np | ||
10 | from GraphType import GraphCollection | ||
11 | import DistributionMetrics as metrics | ||
12 | |||
13 | def main(): | ||
14 | domain = 'github' | ||
15 | # read models | ||
16 | alloy = GraphCollection('../input/measurement2/{}/Alloy/'.format(domain), 100, 'All') | ||
17 | human = GraphCollection('../input/measurement2/{}/Human/'.format(domain), 304, 'Hum') | ||
18 | base = GraphCollection('../input/measurement2/{}/BaseViatra/'.format(domain), 100, 'GS') | ||
19 | real = GraphCollection('../input/measurement2/{}/RealViatra/'.format(domain), 100, 'Real') | ||
20 | random = GraphCollection('../input/measurement2/{}/Random/'.format(domain), 100, 'Rand') | ||
21 | na_rep = GraphCollection('../input/measurement2/{}/Human/na_rep/'.format(domain), 1, 'Med') | ||
22 | mpc_rep = GraphCollection('../input/measurement2/{}/Human/mpc_rep/'.format(domain), 1, 'Med') | ||
23 | od_rep = GraphCollection('../input/measurement2/{}/Human/od_rep/'.format(domain), 1, 'Med') | ||
24 | |||
25 | # a hack to make the node type as the same as an exiting model | ||
26 | type_rep = GraphCollection('../input/measurement2/{}/Human/od_rep/'.format(domain), 1, 'Med') | ||
27 | if(domain == 'yakindu'): | ||
28 | type_rep.nts = [{'Entry': 0.04257802080554814, 'Choice': 0.1267671379034409, 'State': 0.1596092291277674, 'Transition': 0.6138636969858629, 'Statechart': 0.010136036276340358, 'Region': 0.04467858095492131, 'Exit': 0.0018338223526273673, 'FinalState': 0.0005334755934915977}] | ||
29 | elif (domain == 'ecore'): | ||
30 | type_rep.nts = [{'EAttribute': 0.23539778449144008, 'EClass': 0.30996978851963747, 'EReference': 0.33081570996978854, 'EPackage': 0.012789526686807653, 'EAnnotation': 0.002517623363544813, 'EEnumLiteral': 0.07275931520644502, 'EEnum': 0.013645518630412891, 'EDataType': 0.004028197381671702, 'EParameter': 0.005941591137965764, 'EGenericType': 0.002014098690835851, 'EOperation': 0.009415911379657605, 'ETypeParameter': 0.0007049345417925478}] | ||
31 | elif (domain == 'github'): | ||
32 | type_rep.nts = [{'Project': 0.012636538873420432, 'Commit': 0.5525808524309276, 'User': 0.05847076461769116, 'Issue': 0.12743628185907047, 'PullRequest': 0.07560505461554937, 'IssueEvent': 0.17327050760334123}] | ||
33 | |||
34 | types = sorted(type_rep.nts[0].keys()) | ||
35 | |||
36 | model_collections = [human, alloy, random, base, real] | ||
37 | for model_collection in model_collections: | ||
38 | print(model_collection.name) | ||
39 | length = len(model_collection.violations) | ||
40 | percentage = sum(map(lambda v: int(v==0), model_collection.violations)) / length | ||
41 | print(percentage) | ||
42 | |||
43 | |||
44 | models_to_compare_na = [human, alloy, random, base, real, na_rep] | ||
45 | models_to_compare_mpc = [human, alloy, random, base, real, mpc_rep] | ||
46 | models_to_compare_od = [human, alloy, random, base, real, od_rep] | ||
47 | models_to_compare_nt = [human, alloy, random, base, real, type_rep] | ||
48 | for modelCollection in models_to_compare_nt: | ||
49 | type_dists = [] | ||
50 | for nt in modelCollection.nts: | ||
51 | type_dist = [] | ||
52 | for key in types: | ||
53 | type_dist.append(nt.get(key, 0.0)) | ||
54 | type_dists.append(type_dist) | ||
55 | modelCollection.nts = type_dists | ||
56 | |||
57 | |||
58 | # define output folder | ||
59 | outputFolder = '../output/{}/'.format(domain) | ||
60 | |||
61 | #calculate metrics | ||
62 | metricStat(models_to_compare_na, 'Node_Activity', nodeActivity, 0, outputFolder, calculateKSMatrix) | ||
63 | metricStat(models_to_compare_od, 'Out_Degree', outDegree, 1, outputFolder, calculateKSMatrix) | ||
64 | metricStat(models_to_compare_mpc, 'MPC', mpc, 2, outputFolder, calculateKSMatrix) | ||
65 | metricStat(models_to_compare_nt, 'Node_Types', nodeType, 3, outputFolder, calculateManualKSMatrix) | ||
66 | |||
67 | def calculateKSMatrix(dists): | ||
68 | dist = [] | ||
69 | |||
70 | for i in range(len(dists)): | ||
71 | dist = dist + dists[i] | ||
72 | matrix = np.empty((len(dist),len(dist))) | ||
73 | |||
74 | for i in range(len(dist)): | ||
75 | matrix[i,i] = 0 | ||
76 | for j in range(i+1, len(dist)): | ||
77 | value, p= metrics.ks_distance(dist[i], dist[j]) | ||
78 | matrix[i, j] = value | ||
79 | matrix[j, i] = value | ||
80 | return matrix | ||
81 | |||
82 | def calculateManualKSMatrix(dists): | ||
83 | dist = [] | ||
84 | |||
85 | for i in range(len(dists)): | ||
86 | dist = dist + dists[i] | ||
87 | matrix = np.empty((len(dist),len(dist))) | ||
88 | |||
89 | for i in range(len(dist)): | ||
90 | matrix[i,i] = 0 | ||
91 | for j in range(i+1, len(dist)): | ||
92 | value = metrics.manual_ks(dist[i], dist[j]) | ||
93 | matrix[i, j] = value | ||
94 | matrix[j, i] = value | ||
95 | return matrix | ||
96 | |||
97 | |||
98 | def calculateMDS(dissimilarities): | ||
99 | embedding = MDS(n_components=2, dissimilarity='precomputed') | ||
100 | trans = embedding.fit_transform(X=dissimilarities) | ||
101 | return trans | ||
102 | |||
103 | def plot(graphTypes, coords, title='',index = 0, savePath = ''): | ||
104 | color = ['#377eb8' , '#e41a1c', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33'] | ||
105 | markers = ['o', '+', 'x', '^', 'v', '*'] | ||
106 | fill_styles = ['full', 'full', 'full', 'none', 'none', 'full'] | ||
107 | plt.figure(index, figsize=(5, 2)) | ||
108 | # plt.title(title) | ||
109 | index = 0 | ||
110 | for i in range(len(graphTypes)): | ||
111 | x = (coords[index:index+graphTypes[i].size, 0].tolist()) | ||
112 | y = (coords[index:index+graphTypes[i].size, 1].tolist()) | ||
113 | index += graphTypes[i].size | ||
114 | plt.plot(x, y, color=color[i], marker=markers[i], label = graphTypes[i].name, linestyle='', alpha=0.7, fillstyle = fill_styles[i]) | ||
115 | plt.savefig(fname = savePath+'.png', dpi=500) | ||
116 | plt.legend(loc='upper right') | ||
117 | plt.savefig(fname = savePath+'_lengend.png', dpi=500) | ||
118 | |||
119 | def mkdir_p(mypath): | ||
120 | '''Creates a directory. equivalent to using mkdir -p on the command line''' | ||
121 | |||
122 | from errno import EEXIST | ||
123 | from os import makedirs,path | ||
124 | |||
125 | try: | ||
126 | makedirs(mypath) | ||
127 | except OSError as exc: # Python >2.5 | ||
128 | if exc.errno == EEXIST and path.isdir(mypath): | ||
129 | pass | ||
130 | else: raise | ||
131 | |||
132 | def metricStat(graphTypes, metricName, metric, graphIndex, outputFolder, matrix_calculator): | ||
133 | metrics = [] | ||
134 | for graph in graphTypes: | ||
135 | metrics.append(metric(graph)) | ||
136 | outputFolder = outputFolder + graph.name + '-' | ||
137 | print('calculate' + metricName +' for ' + outputFolder) | ||
138 | mkdir_p(outputFolder) | ||
139 | out_d_coords = calculateMDS(matrix_calculator(metrics)) | ||
140 | plot(graphTypes, out_d_coords, metricName, graphIndex,outputFolder + '/'+ metricName) | ||
141 | |||
142 | def nodeActivity(graphType): | ||
143 | return graphType.nas | ||
144 | |||
145 | def outDegree(graphType): | ||
146 | return graphType.out_ds | ||
147 | |||
148 | def mpc(graphType): | ||
149 | return graphType.mpcs | ||
150 | |||
151 | def nodeType(graphType): | ||
152 | return graphType.nts | ||
153 | |||
154 | def tcc(graphType): | ||
155 | return graphType.tccs | ||
156 | |||
157 | if __name__ == '__main__': | ||
158 | main() \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/input/.gitignore b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/input/.gitignore new file mode 100644 index 00000000..b3934b01 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/input/.gitignore | |||
@@ -0,0 +1,3 @@ | |||
1 | # ignore everything in this folder | ||
2 | * | ||
3 | !.gitignore \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/Node Activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/Node Activity.jpg new file mode 100644 index 00000000..6b987b3e --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/Node Activity.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/mpc.jpg new file mode 100644 index 00000000..ee8d5755 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/mpc.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/out_degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/out_degree.jpg new file mode 100644 index 00000000..25e850fe --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/out_degree.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/Node Activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/Node Activity.jpg new file mode 100644 index 00000000..8b3421b1 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/Node Activity.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/mpc.jpg new file mode 100644 index 00000000..d459f5c8 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/mpc.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/out_degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/out_degree.jpg new file mode 100644 index 00000000..fdaa28e6 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/out_degree.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/Node Activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/Node Activity.jpg new file mode 100644 index 00000000..08445457 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/Node Activity.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/mpc.jpg new file mode 100644 index 00000000..74ab2449 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/mpc.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/out_degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/out_degree.jpg new file mode 100644 index 00000000..61c4489e --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/out_degree.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/Node Activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/Node Activity.jpg new file mode 100644 index 00000000..ccbca653 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/Node Activity.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/mpc.jpg new file mode 100644 index 00000000..31965557 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/mpc.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/out_degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/out_degree.jpg new file mode 100644 index 00000000..d4de5301 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/out_degree.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/mpc.jpg new file mode 100644 index 00000000..ee1d84dc --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/mpc.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/node activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/node activity.jpg new file mode 100644 index 00000000..1a7e8bed --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/node activity.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/out degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/out degree.jpg new file mode 100644 index 00000000..81d9b709 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/out degree.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/Node Activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/Node Activity.jpg new file mode 100644 index 00000000..e26d6cf6 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/Node Activity.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/mpc.jpg new file mode 100644 index 00000000..e1b9a1cf --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/mpc.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/out_degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/out_degree.jpg new file mode 100644 index 00000000..713ed4f4 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/out_degree.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/mpc.jpg new file mode 100644 index 00000000..9c26be81 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/mpc.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/node activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/node activity.jpg new file mode 100644 index 00000000..3cb75479 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/node activity.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/out degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/out degree.jpg new file mode 100644 index 00000000..0a869df6 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/out degree.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/MPC.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/MPC.jpg new file mode 100644 index 00000000..b6e86773 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/MPC.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/node activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/node activity.jpg new file mode 100644 index 00000000..486577a6 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/node activity.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/out degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/out degree.jpg new file mode 100644 index 00000000..4f338049 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/out degree.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/Node Activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/Node Activity.jpg new file mode 100644 index 00000000..c1dba220 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/Node Activity.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/mpc.jpg new file mode 100644 index 00000000..f51449d0 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/mpc.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/out_degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/out_degree.jpg new file mode 100644 index 00000000..dff91312 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/out_degree.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/MPC.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/MPC.jpg new file mode 100644 index 00000000..2dc66b35 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/MPC.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/node activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/node activity.jpg new file mode 100644 index 00000000..847bad62 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/node activity.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/out degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/out degree.jpg new file mode 100644 index 00000000..90ff8006 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/out degree.jpg | |||
Binary files differ | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/metrics_distance.ipynb b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/metrics_distance.ipynb new file mode 100644 index 00000000..550e3978 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/metrics_distance.ipynb | |||
@@ -0,0 +1,481 @@ | |||
1 | { | ||
2 | "cells": [ | ||
3 | { | ||
4 | "cell_type": "markdown", | ||
5 | "metadata": {}, | ||
6 | "source": [ | ||
7 | "# Compare Metrics Distances to The Human Models" | ||
8 | ] | ||
9 | }, | ||
10 | { | ||
11 | "cell_type": "markdown", | ||
12 | "metadata": {}, | ||
13 | "source": [ | ||
14 | "### Imports" | ||
15 | ] | ||
16 | }, | ||
17 | { | ||
18 | "cell_type": "code", | ||
19 | "execution_count": 48, | ||
20 | "metadata": {}, | ||
21 | "outputs": [], | ||
22 | "source": [ | ||
23 | "from GraphType import GraphStat\n", | ||
24 | "from GraphType import GraphCollection\n", | ||
25 | "from scipy import stats\n", | ||
26 | "from ipywidgets import interact, fixed, interactive\n", | ||
27 | "import readCSV as reader\n", | ||
28 | "import ipywidgets as widgets\n", | ||
29 | "import matplotlib.pyplot as plt\n", | ||
30 | "import random\n", | ||
31 | "import numpy as np\n", | ||
32 | "import constants\n" | ||
33 | ] | ||
34 | }, | ||
35 | { | ||
36 | "cell_type": "markdown", | ||
37 | "metadata": {}, | ||
38 | "source": [ | ||
39 | "### Classes" | ||
40 | ] | ||
41 | }, | ||
42 | { | ||
43 | "cell_type": "markdown", | ||
44 | "metadata": {}, | ||
45 | "source": [ | ||
46 | "* Record the average distances of different metrics for a model to the human models " | ||
47 | ] | ||
48 | }, | ||
49 | { | ||
50 | "cell_type": "code", | ||
51 | "execution_count": 49, | ||
52 | "metadata": {}, | ||
53 | "outputs": [], | ||
54 | "source": [ | ||
55 | "class GraphDistance:\n", | ||
56 | " #init with a graph stat and a collection of graph stats\n", | ||
57 | " def __init__(self, graphStat, collection):\n", | ||
58 | " self.graph = graphStat\n", | ||
59 | " self.collection = collection\n", | ||
60 | " self.out_d_distance = average_ks_distance(collection.out_ds, graphStat.out_d)\n", | ||
61 | " self.na_distance = average_ks_distance(collection.nas, graphStat.na)\n", | ||
62 | " self.mpc_distance = average_ks_distance(collection.mpcs, graphStat.mpc)" | ||
63 | ] | ||
64 | }, | ||
65 | { | ||
66 | "cell_type": "markdown", | ||
67 | "metadata": {}, | ||
68 | "source": [ | ||
69 | "### Methods" | ||
70 | ] | ||
71 | }, | ||
72 | { | ||
73 | "cell_type": "markdown", | ||
74 | "metadata": {}, | ||
75 | "source": [ | ||
76 | "* Calculate the average ks distance" | ||
77 | ] | ||
78 | }, | ||
79 | { | ||
80 | "cell_type": "code", | ||
81 | "execution_count": 50, | ||
82 | "metadata": {}, | ||
83 | "outputs": [], | ||
84 | "source": [ | ||
85 | "def average_ks_distance(targets, sample):\n", | ||
86 | " distance = 0.0\n", | ||
87 | " for target in targets:\n", | ||
88 | " value, p = stats.ks_2samp(target, sample)\n", | ||
89 | " distance += value\n", | ||
90 | " distance = distance / len(targets)\n", | ||
91 | " return distance\n" | ||
92 | ] | ||
93 | }, | ||
94 | { | ||
95 | "cell_type": "markdown", | ||
96 | "metadata": { | ||
97 | "pycharm": { | ||
98 | "name": "#%% md\n" | ||
99 | } | ||
100 | }, | ||
101 | "source": [ | ||
102 | "* Find the median ks distance of the same number of nodes" | ||
103 | ] | ||
104 | }, | ||
105 | { | ||
106 | "cell_type": "code", | ||
107 | "execution_count": 51, | ||
108 | "metadata": { | ||
109 | "pycharm": { | ||
110 | "name": "#%%\n" | ||
111 | } | ||
112 | }, | ||
113 | "outputs": [], | ||
114 | "source": [ | ||
115 | "def find_median(x, metric_distances):\n", | ||
116 | " distance_dic = {}\n", | ||
117 | " for index, num_of_nodes in enumerate(x):\n", | ||
118 | " if num_of_nodes[0] not in distance_dic:\n", | ||
119 | " distance_dic[num_of_nodes[0]] = []\n", | ||
120 | " distance_dic[num_of_nodes[0]].append(metric_distances[index])\n", | ||
121 | " median_x = []\n", | ||
122 | " y = []\n", | ||
123 | " for num_of_nodes, distances in distance_dic.items():\n", | ||
124 | " median_x.append(num_of_nodes)\n", | ||
125 | " y.append(np.median(distances))\n", | ||
126 | " order = np.argsort(median_x)\n", | ||
127 | " median_x = np.array(median_x)[order]\n", | ||
128 | " median_y = np.array(y)[order]\n", | ||
129 | " return median_x, median_y\n" | ||
130 | ] | ||
131 | }, | ||
132 | { | ||
133 | "cell_type": "markdown", | ||
134 | "metadata": {}, | ||
135 | "source": [ | ||
136 | "* Plot Diagram" | ||
137 | ] | ||
138 | }, | ||
139 | { | ||
140 | "cell_type": "code", | ||
141 | "execution_count": 52, | ||
142 | "metadata": {}, | ||
143 | "outputs": [], | ||
144 | "source": [ | ||
145 | "# metric_selector: GraphDistance -> float\n", | ||
146 | "def plot(infos, lines, id, metric_selector,colors, title):\n", | ||
147 | " metric_distances = retrive_info_from_list(metric_selector, list(infos.values()))\n", | ||
148 | " x = retrive_info_from_list(lambda a : a.graph.num_nodes, list(infos.values()))\n", | ||
149 | " graph = plt.figure(id,figsize=(18, 10))\n", | ||
150 | " plt.title(title)\n", | ||
151 | " plt.plot(x, metric_distances, color='red', linestyle='', marker='o',alpha=0.7)\n", | ||
152 | " #plot ks distance median\n", | ||
153 | " median_x, median_y = find_median(x, metric_distances)\n", | ||
154 | " plt.plot(median_x, median_y, color='black',marker='o')\n", | ||
155 | " for i in range(0, len(lines)):\n", | ||
156 | " line_infos = retrive_info_from_list(lambda a: infos[a], lines[i])\n", | ||
157 | " line_y = retrive_info_from_list(metric_selector, line_infos)\n", | ||
158 | " line_x = retrive_info_from_list(lambda a : a.graph.num_nodes, line_infos)\n", | ||
159 | " plt.plot(line_x, line_y, marker='o', color=colors[i])\n", | ||
160 | " #graph.show()" | ||
161 | ] | ||
162 | }, | ||
163 | { | ||
164 | "cell_type": "markdown", | ||
165 | "metadata": {}, | ||
166 | "source": [ | ||
167 | "* Retrieve information from a list " | ||
168 | ] | ||
169 | }, | ||
170 | { | ||
171 | "cell_type": "code", | ||
172 | "execution_count": 53, | ||
173 | "metadata": {}, | ||
174 | "outputs": [], | ||
175 | "source": [ | ||
176 | "def retrive_info_from_list(selector, distances):\n", | ||
177 | " return list(map(selector, distances))" | ||
178 | ] | ||
179 | }, | ||
180 | { | ||
181 | "cell_type": "markdown", | ||
182 | "metadata": {}, | ||
183 | "source": [ | ||
184 | "### Read Models" | ||
185 | ] | ||
186 | }, | ||
187 | { | ||
188 | "cell_type": "code", | ||
189 | "execution_count": 54, | ||
190 | "metadata": {}, | ||
191 | "outputs": [], | ||
192 | "source": [ | ||
193 | "human = GraphCollection('../statistics/humanOutput/', 300, 'Human', True)\n", | ||
194 | "file_names = reader.readmultiplefiles('../statistics/viatraEvolve/', 1000, False)" | ||
195 | ] | ||
196 | }, | ||
197 | { | ||
198 | "cell_type": "markdown", | ||
199 | "metadata": {}, | ||
200 | "source": [ | ||
201 | "### Calculate Distances" | ||
202 | ] | ||
203 | }, | ||
204 | { | ||
205 | "cell_type": "code", | ||
206 | "execution_count": 55, | ||
207 | "metadata": {}, | ||
208 | "outputs": [], | ||
209 | "source": [ | ||
210 | "# Progress Widge\n", | ||
211 | "w2 = widgets.FloatProgress(\n", | ||
212 | " value=0,\n", | ||
213 | " min=0,\n", | ||
214 | " max=1.0,\n", | ||
215 | " step=0.1,\n", | ||
216 | " description='Loading Files...:',\n", | ||
217 | " bar_style='info',\n", | ||
218 | " orientation='horizontal'\n", | ||
219 | ")" | ||
220 | ] | ||
221 | }, | ||
222 | { | ||
223 | "cell_type": "code", | ||
224 | "execution_count": 56, | ||
225 | "metadata": {}, | ||
226 | "outputs": [ | ||
227 | { | ||
228 | "data": { | ||
229 | "application/vnd.jupyter.widget-view+json": { | ||
230 | "model_id": "ca7932bce2a741afaff6b919042c42b0", | ||
231 | "version_major": 2, | ||
232 | "version_minor": 0 | ||
233 | }, | ||
234 | "text/plain": [ | ||
235 | "FloatProgress(value=0.0, bar_style='info', description='Loading Files...:', max=1.0)" | ||
236 | ] | ||
237 | }, | ||
238 | "metadata": {}, | ||
239 | "output_type": "display_data" | ||
240 | } | ||
241 | ], | ||
242 | "source": [ | ||
243 | "infos = []\n", | ||
244 | "# read all files\n", | ||
245 | "counter = 0.0\n", | ||
246 | "size = len(file_names)\n", | ||
247 | "#display progress bar\n", | ||
248 | "display(w2)\n", | ||
249 | "for name in file_names:\n", | ||
250 | " infos.append(GraphStat(name))\n", | ||
251 | "\n", | ||
252 | "info_dic = {}\n", | ||
253 | "for info in infos:\n", | ||
254 | " w2.value = (counter/size)\n", | ||
255 | " counter+=1\n", | ||
256 | " info = GraphDistance(info, human)\n", | ||
257 | " info_dic[info.graph.id] = info" | ||
258 | ] | ||
259 | }, | ||
260 | { | ||
261 | "cell_type": "markdown", | ||
262 | "metadata": {}, | ||
263 | "source": [ | ||
264 | "#### Plot Graphs" | ||
265 | ] | ||
266 | }, | ||
267 | { | ||
268 | "cell_type": "markdown", | ||
269 | "metadata": {}, | ||
270 | "source": [ | ||
271 | "* widget for select trajectory" | ||
272 | ] | ||
273 | }, | ||
274 | { | ||
275 | "cell_type": "code", | ||
276 | "execution_count": 57, | ||
277 | "metadata": {}, | ||
278 | "outputs": [], | ||
279 | "source": [ | ||
280 | "filenames = reader.readmultiplefiles('../statistics/trajectories/', 10, False)\n", | ||
281 | "trajectories = {}\n", | ||
282 | "for name in filenames:\n", | ||
283 | " trajectories[name] = reader.readTrajectory(name)\n", | ||
284 | "\n", | ||
285 | "w = widgets.SelectMultiple(\n", | ||
286 | " options = trajectories,\n", | ||
287 | " value = [trajectories[filenames[0]]],\n", | ||
288 | " description='Trajectory:',\n", | ||
289 | " disabled=False,\n", | ||
290 | ")\n", | ||
291 | "\n", | ||
292 | "#generate random color for each line\n", | ||
293 | "colors = []\n", | ||
294 | "\n", | ||
295 | "for i in range(0, len(trajectories)):\n", | ||
296 | " color = \"#%06x\" % random.randint(0, 0xFFFFFF)\n", | ||
297 | " colors.append(color)" | ||
298 | ] | ||
299 | }, | ||
300 | { | ||
301 | "cell_type": "markdown", | ||
302 | "metadata": {}, | ||
303 | "source": [ | ||
304 | "#### Out Degree" | ||
305 | ] | ||
306 | }, | ||
307 | { | ||
308 | "cell_type": "code", | ||
309 | "execution_count": 63, | ||
310 | "metadata": {}, | ||
311 | "outputs": [ | ||
312 | { | ||
313 | "data": { | ||
314 | "application/vnd.jupyter.widget-view+json": { | ||
315 | "model_id": "08da62cb0c3f4e6e9591c7dc811d27cc", | ||
316 | "version_major": 2, | ||
317 | "version_minor": 0 | ||
318 | }, | ||
319 | "text/plain": [ | ||
320 | "interactive(children=(SelectMultiple(description='Trajectory:', index=(1,), options={'../statistics/trajectori…" | ||
321 | ] | ||
322 | }, | ||
323 | "metadata": {}, | ||
324 | "output_type": "display_data" | ||
325 | }, | ||
326 | { | ||
327 | "data": { | ||
328 | "text/plain": [ | ||
329 | "<function __main__.plot_out_degree(lines)>" | ||
330 | ] | ||
331 | }, | ||
332 | "execution_count": 63, | ||
333 | "metadata": {}, | ||
334 | "output_type": "execute_result" | ||
335 | } | ||
336 | ], | ||
337 | "source": [ | ||
338 | "def plot_out_degree(lines):\n", | ||
339 | " plot(info_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out degree')\n", | ||
340 | "interact(plot_out_degree, lines=w)" | ||
341 | ] | ||
342 | }, | ||
343 | { | ||
344 | "cell_type": "markdown", | ||
345 | "metadata": {}, | ||
346 | "source": [ | ||
347 | "#### Node Activity" | ||
348 | ] | ||
349 | }, | ||
350 | { | ||
351 | "cell_type": "code", | ||
352 | "execution_count": 64, | ||
353 | "metadata": { | ||
354 | "scrolled": true | ||
355 | }, | ||
356 | "outputs": [ | ||
357 | { | ||
358 | "data": { | ||
359 | "application/vnd.jupyter.widget-view+json": { | ||
360 | "model_id": "a708f43645a24bd2b15b53ea12c7d88f", | ||
361 | "version_major": 2, | ||
362 | "version_minor": 0 | ||
363 | }, | ||
364 | "text/plain": [ | ||
365 | "interactive(children=(SelectMultiple(description='Trajectory:', index=(1,), options={'../statistics/trajectori…" | ||
366 | ] | ||
367 | }, | ||
368 | "metadata": {}, | ||
369 | "output_type": "display_data" | ||
370 | }, | ||
371 | { | ||
372 | "data": { | ||
373 | "text/plain": [ | ||
374 | "<function __main__.plot_na(lines)>" | ||
375 | ] | ||
376 | }, | ||
377 | "execution_count": 64, | ||
378 | "metadata": {}, | ||
379 | "output_type": "execute_result" | ||
380 | } | ||
381 | ], | ||
382 | "source": [ | ||
383 | "def plot_na(lines):\n", | ||
384 | " plot(info_dic, lines, 0, lambda a: a.na_distance, colors, 'node activity')\n", | ||
385 | "interact(plot_na, lines=w)" | ||
386 | ] | ||
387 | }, | ||
388 | { | ||
389 | "cell_type": "markdown", | ||
390 | "metadata": {}, | ||
391 | "source": [ | ||
392 | "#### MPC" | ||
393 | ] | ||
394 | }, | ||
395 | { | ||
396 | "cell_type": "code", | ||
397 | "execution_count": null, | ||
398 | "metadata": {}, | ||
399 | "outputs": [], | ||
400 | "source": [] | ||
401 | }, | ||
402 | { | ||
403 | "cell_type": "code", | ||
404 | "execution_count": 65, | ||
405 | "metadata": {}, | ||
406 | "outputs": [ | ||
407 | { | ||
408 | "data": { | ||
409 | "application/vnd.jupyter.widget-view+json": { | ||
410 | "model_id": "124a0cb0ebfb4225bf4ced24c09032f7", | ||
411 | "version_major": 2, | ||
412 | "version_minor": 0 | ||
413 | }, | ||
414 | "text/plain": [ | ||
415 | "interactive(children=(SelectMultiple(description='Trajectory:', index=(1,), options={'../statistics/trajectori…" | ||
416 | ] | ||
417 | }, | ||
418 | "metadata": {}, | ||
419 | "output_type": "display_data" | ||
420 | }, | ||
421 | { | ||
422 | "data": { | ||
423 | "text/plain": [ | ||
424 | "<function __main__.plot_out_degree(lines)>" | ||
425 | ] | ||
426 | }, | ||
427 | "execution_count": 65, | ||
428 | "metadata": {}, | ||
429 | "output_type": "execute_result" | ||
430 | } | ||
431 | ], | ||
432 | "source": [ | ||
433 | "def plot_out_degree(lines):\n", | ||
434 | " plot(info_dic, lines, 0, lambda a: a.mpc_distance, colors, 'MPC')\n", | ||
435 | "interact(plot_out_degree, lines=w)" | ||
436 | ] | ||
437 | }, | ||
438 | { | ||
439 | "cell_type": "code", | ||
440 | "execution_count": 19, | ||
441 | "metadata": {}, | ||
442 | "outputs": [], | ||
443 | "source": [ | ||
444 | "for name in file_names:\n", | ||
445 | " contents = reader.readcsvfile(name)\n", | ||
446 | " if(contents['State Id'][0] == 1032396643):\n", | ||
447 | " print(name)" | ||
448 | ] | ||
449 | } | ||
450 | ], | ||
451 | "metadata": { | ||
452 | "kernelspec": { | ||
453 | "display_name": "Python 3", | ||
454 | "language": "python", | ||
455 | "name": "python3" | ||
456 | }, | ||
457 | "language_info": { | ||
458 | "codemirror_mode": { | ||
459 | "name": "ipython", | ||
460 | "version": 3 | ||
461 | }, | ||
462 | "file_extension": ".py", | ||
463 | "mimetype": "text/x-python", | ||
464 | "name": "python", | ||
465 | "nbconvert_exporter": "python", | ||
466 | "pygments_lexer": "ipython3", | ||
467 | "version": "3.7.3" | ||
468 | }, | ||
469 | "pycharm": { | ||
470 | "stem_cell": { | ||
471 | "cell_type": "raw", | ||
472 | "metadata": { | ||
473 | "collapsed": false | ||
474 | }, | ||
475 | "source": [] | ||
476 | } | ||
477 | } | ||
478 | }, | ||
479 | "nbformat": 4, | ||
480 | "nbformat_minor": 2 | ||
481 | } | ||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/metrics_distance_with_selector.ipynb b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/metrics_distance_with_selector.ipynb new file mode 100644 index 00000000..000822bf --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/metrics_distance_with_selector.ipynb | |||
@@ -0,0 +1,1600 @@ | |||
1 | { | ||
2 | "cells": [ | ||
3 | { | ||
4 | "cell_type": "markdown", | ||
5 | "metadata": {}, | ||
6 | "source": [ | ||
7 | "# Measuremments with Representative" | ||
8 | ] | ||
9 | }, | ||
10 | { | ||
11 | "cell_type": "markdown", | ||
12 | "metadata": {}, | ||
13 | "source": [ | ||
14 | "### Imports" | ||
15 | ] | ||
16 | }, | ||
17 | { | ||
18 | "cell_type": "code", | ||
19 | "execution_count": 1, | ||
20 | "metadata": {}, | ||
21 | "outputs": [], | ||
22 | "source": [ | ||
23 | "import os, sys\n", | ||
24 | "lib_path = os.path.abspath(os.path.join('..', '..', 'utils'))\n", | ||
25 | "sys.path.append(lib_path)\n", | ||
26 | "from GraphType import GraphStat\n", | ||
27 | "from GraphType import GraphCollection\n", | ||
28 | "from scipy import stats\n", | ||
29 | "from ipywidgets import interact, fixed, interactive\n", | ||
30 | "import readCSV as reader\n", | ||
31 | "import ipywidgets as widgets\n", | ||
32 | "import matplotlib.pyplot as plt\n", | ||
33 | "import random\n", | ||
34 | "import numpy as np\n", | ||
35 | "import constants\n" | ||
36 | ] | ||
37 | }, | ||
38 | { | ||
39 | "cell_type": "markdown", | ||
40 | "metadata": {}, | ||
41 | "source": [ | ||
42 | "### Classes" | ||
43 | ] | ||
44 | }, | ||
45 | { | ||
46 | "cell_type": "markdown", | ||
47 | "metadata": {}, | ||
48 | "source": [ | ||
49 | "* Record the distances of different metrics using a representative" | ||
50 | ] | ||
51 | }, | ||
52 | { | ||
53 | "cell_type": "code", | ||
54 | "execution_count": 2, | ||
55 | "metadata": {}, | ||
56 | "outputs": [], | ||
57 | "source": [ | ||
58 | "class GraphDistanceWithRep:\n", | ||
59 | " #init with a graph stat and a collection of graph stats\n", | ||
60 | " def __init__(self, graphStat, rep):\n", | ||
61 | " self.graph = graphStat\n", | ||
62 | " self.rep = rep\n", | ||
63 | " self.out_d_distance, _ = stats.ks_2samp(graphStat.out_d, rep.out_d)\n", | ||
64 | " self.na_distance,_ = stats.ks_2samp(graphStat.na, rep.na)\n", | ||
65 | " self.mpc_distance,_ = stats.ks_2samp(graphStat.mpc, rep.mpc)\n" | ||
66 | ] | ||
67 | }, | ||
68 | { | ||
69 | "cell_type": "markdown", | ||
70 | "metadata": {}, | ||
71 | "source": [ | ||
72 | "### Methods\n" | ||
73 | ] | ||
74 | }, | ||
75 | { | ||
76 | "cell_type": "markdown", | ||
77 | "metadata": {}, | ||
78 | "source": [ | ||
79 | "* Find the median ks distance of the same number of nodes" | ||
80 | ] | ||
81 | }, | ||
82 | { | ||
83 | "cell_type": "code", | ||
84 | "execution_count": 3, | ||
85 | "metadata": {}, | ||
86 | "outputs": [], | ||
87 | "source": [ | ||
88 | "def find_median(x, metric_distances):\n", | ||
89 | " distance_dic = {}\n", | ||
90 | " for index, num_of_nodes in enumerate(x):\n", | ||
91 | " if num_of_nodes[0] not in distance_dic:\n", | ||
92 | " distance_dic[num_of_nodes[0]] = []\n", | ||
93 | " distance_dic[num_of_nodes[0]].append(metric_distances[index])\n", | ||
94 | " median_x = []\n", | ||
95 | " y = []\n", | ||
96 | " for num_of_nodes, distances in distance_dic.items():\n", | ||
97 | " median_x.append(num_of_nodes)\n", | ||
98 | " y.append(np.median(distances))\n", | ||
99 | " order = np.argsort(median_x)\n", | ||
100 | " median_x = np.array(median_x)[order]\n", | ||
101 | " median_y = np.array(y)[order]\n", | ||
102 | " return median_x, median_y\n" | ||
103 | ] | ||
104 | }, | ||
105 | { | ||
106 | "cell_type": "markdown", | ||
107 | "metadata": {}, | ||
108 | "source": [ | ||
109 | "* Plot Diagram" | ||
110 | ] | ||
111 | }, | ||
112 | { | ||
113 | "cell_type": "code", | ||
114 | "execution_count": 4, | ||
115 | "metadata": {}, | ||
116 | "outputs": [], | ||
117 | "source": [ | ||
118 | "# metric_selector: GraphDistance -> float\n", | ||
119 | "def plot(infos, lines, id, metric_selector,colors, title, foldername):\n", | ||
120 | " metric_distances = retrive_info_from_list(metric_selector, list(infos.values()))\n", | ||
121 | " x = retrive_info_from_list(lambda a : a.graph.num_nodes, list(infos.values()))\n", | ||
122 | " graph = plt.figure(id,figsize=(18, 10))\n", | ||
123 | " plt.title(title)\n", | ||
124 | " plt.plot(x, metric_distances, color='red', linestyle='', marker='o',alpha=0.7)\n", | ||
125 | " #plot ks distance median\n", | ||
126 | " median_x, median_y = find_median(x, metric_distances)\n", | ||
127 | " plt.plot(median_x, median_y, color='black',marker='o')\n", | ||
128 | " for i in range(0, len(lines)):\n", | ||
129 | " line_infos = retrive_info_from_list(lambda a: infos[a], lines[i])\n", | ||
130 | " line_y = retrive_info_from_list(metric_selector, line_infos)\n", | ||
131 | " line_x = retrive_info_from_list(lambda a : a.graph.num_nodes, line_infos)\n", | ||
132 | " plt.plot(line_x, line_y, marker='o', color=colors[i])\n", | ||
133 | " mkdir_p(foldername)\n", | ||
134 | " plt.savefig(fname = foldername+title+'.jpg', dpi=150)\n", | ||
135 | " #graph.show()" | ||
136 | ] | ||
137 | }, | ||
138 | { | ||
139 | "cell_type": "markdown", | ||
140 | "metadata": {}, | ||
141 | "source": [ | ||
142 | "* Retrieve information from a list " | ||
143 | ] | ||
144 | }, | ||
145 | { | ||
146 | "cell_type": "code", | ||
147 | "execution_count": 5, | ||
148 | "metadata": {}, | ||
149 | "outputs": [], | ||
150 | "source": [ | ||
151 | "def retrive_info_from_list(selector, distances):\n", | ||
152 | " return list(map(selector, distances))" | ||
153 | ] | ||
154 | }, | ||
155 | { | ||
156 | "cell_type": "code", | ||
157 | "execution_count": 6, | ||
158 | "metadata": {}, | ||
159 | "outputs": [], | ||
160 | "source": [ | ||
161 | "def readStats(path, numModels):\n", | ||
162 | " names = reader.readmultiplefiles(path, numModels, False)\n", | ||
163 | " stats = []\n", | ||
164 | " for name in names:\n", | ||
165 | " stats.append(GraphStat(name))\n", | ||
166 | " return stats" | ||
167 | ] | ||
168 | }, | ||
169 | { | ||
170 | "cell_type": "code", | ||
171 | "execution_count": 7, | ||
172 | "metadata": {}, | ||
173 | "outputs": [], | ||
174 | "source": [ | ||
175 | "def calDistanceDic(stats, rep):\n", | ||
176 | " dic = {}\n", | ||
177 | " for info in stats:\n", | ||
178 | " info = GraphDistanceWithRep(info, rep)\n", | ||
179 | " dic[info.graph.id] = info\n", | ||
180 | " return dic" | ||
181 | ] | ||
182 | }, | ||
183 | { | ||
184 | "cell_type": "code", | ||
185 | "execution_count": 8, | ||
186 | "metadata": {}, | ||
187 | "outputs": [], | ||
188 | "source": [ | ||
189 | "def createRandomColors(size):\n", | ||
190 | " #generate random color for each line\n", | ||
191 | " colors = []\n", | ||
192 | "\n", | ||
193 | " for i in range(0, size):\n", | ||
194 | " color = \"#%06x\" % random.randint(0, 0xFFFFFF)\n", | ||
195 | " colors.append(color)\n", | ||
196 | " return colors" | ||
197 | ] | ||
198 | }, | ||
199 | { | ||
200 | "cell_type": "code", | ||
201 | "execution_count": 9, | ||
202 | "metadata": {}, | ||
203 | "outputs": [], | ||
204 | "source": [ | ||
205 | "def createSelectionWidge(options):\n", | ||
206 | " w = widgets.SelectMultiple(\n", | ||
207 | " options = options,\n", | ||
208 | " value = [],\n", | ||
209 | " description='Trajectory:',\n", | ||
210 | " disabled=False,\n", | ||
211 | " )\n", | ||
212 | " return w" | ||
213 | ] | ||
214 | }, | ||
215 | { | ||
216 | "cell_type": "code", | ||
217 | "execution_count": 10, | ||
218 | "metadata": {}, | ||
219 | "outputs": [], | ||
220 | "source": [ | ||
221 | "def mkdir_p(mypath):\n", | ||
222 | " '''Creates a directory. equivalent to using mkdir -p on the command line'''\n", | ||
223 | "\n", | ||
224 | " from errno import EEXIST\n", | ||
225 | " from os import makedirs,path\n", | ||
226 | "\n", | ||
227 | " try:\n", | ||
228 | " makedirs(mypath)\n", | ||
229 | " except OSError as exc: # Python >2.5\n", | ||
230 | " if exc.errno == EEXIST and path.isdir(mypath):\n", | ||
231 | " pass\n", | ||
232 | " else: raise" | ||
233 | ] | ||
234 | }, | ||
235 | { | ||
236 | "cell_type": "markdown", | ||
237 | "metadata": {}, | ||
238 | "source": [ | ||
239 | "## Metrics During GenerationPlots" | ||
240 | ] | ||
241 | }, | ||
242 | { | ||
243 | "cell_type": "markdown", | ||
244 | "metadata": {}, | ||
245 | "source": [ | ||
246 | "### Read Human Representatives" | ||
247 | ] | ||
248 | }, | ||
249 | { | ||
250 | "cell_type": "code", | ||
251 | "execution_count": 11, | ||
252 | "metadata": {}, | ||
253 | "outputs": [], | ||
254 | "source": [ | ||
255 | "### Read Models\n", | ||
256 | "#read representative\n", | ||
257 | "human_rep = GraphStat(constants.HUMAN_OUT_D_REP)\n", | ||
258 | "human_na = GraphStat(constants.HUMAN_NA_REP)\n", | ||
259 | "human_mpc = GraphStat(constants.HUMAN_MPC_REP)\n", | ||
260 | "\n", | ||
261 | "# assign rep distributions to human_rep\n", | ||
262 | "human_rep.na = human_na.na\n", | ||
263 | "human_rep.mpc = human_mpc.mpc" | ||
264 | ] | ||
265 | }, | ||
266 | { | ||
267 | "cell_type": "markdown", | ||
268 | "metadata": {}, | ||
269 | "source": [ | ||
270 | "## Viatra No Constraint" | ||
271 | ] | ||
272 | }, | ||
273 | { | ||
274 | "cell_type": "code", | ||
275 | "execution_count": 12, | ||
276 | "metadata": {}, | ||
277 | "outputs": [], | ||
278 | "source": [ | ||
279 | "# Read generated models\n", | ||
280 | "viatra_no_con_stats = readStats('../input/viatra_nocon_output/', 5000)\n", | ||
281 | "viatra_no_con_dic = calDistanceDic(viatra_no_con_stats, human_rep)" | ||
282 | ] | ||
283 | }, | ||
284 | { | ||
285 | "cell_type": "code", | ||
286 | "execution_count": 13, | ||
287 | "metadata": {}, | ||
288 | "outputs": [], | ||
289 | "source": [ | ||
290 | "filenames = reader.readmultiplefiles('../input/viatra_nocon_output/trajectories/', 15, False)\n", | ||
291 | "trajectories = {}\n", | ||
292 | "for name in filenames:\n", | ||
293 | " trajectories[name] = reader.readTrajectory(name)\n", | ||
294 | "w = createSelectionWidge(trajectories)\n", | ||
295 | "colors = createRandomColors(len(trajectories))" | ||
296 | ] | ||
297 | }, | ||
298 | { | ||
299 | "cell_type": "code", | ||
300 | "execution_count": 14, | ||
301 | "metadata": {}, | ||
302 | "outputs": [ | ||
303 | { | ||
304 | "data": { | ||
305 | "application/vnd.jupyter.widget-view+json": { | ||
306 | "model_id": "a8471e4dd66a47ecb6abb2371be43321", | ||
307 | "version_major": 2, | ||
308 | "version_minor": 0 | ||
309 | }, | ||
310 | "text/plain": [ | ||
311 | "interactive(children=(SelectMultiple(description='Trajectory:', options={'../input/viatra_nocon_output/traject…" | ||
312 | ] | ||
313 | }, | ||
314 | "metadata": {}, | ||
315 | "output_type": "display_data" | ||
316 | }, | ||
317 | { | ||
318 | "data": { | ||
319 | "text/plain": [ | ||
320 | "<function __main__.plot_out_degree(lines)>" | ||
321 | ] | ||
322 | }, | ||
323 | "execution_count": 14, | ||
324 | "metadata": {}, | ||
325 | "output_type": "execute_result" | ||
326 | } | ||
327 | ], | ||
328 | "source": [ | ||
329 | "def plot_out_degree(lines):\n", | ||
330 | " plot(viatra_no_con_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out degree', '../output/viatra_no_constraints/')\n", | ||
331 | "interact(plot_out_degree, lines=w)" | ||
332 | ] | ||
333 | }, | ||
334 | { | ||
335 | "cell_type": "code", | ||
336 | "execution_count": 15, | ||
337 | "metadata": {}, | ||
338 | "outputs": [ | ||
339 | { | ||
340 | "data": { | ||
341 | "application/vnd.jupyter.widget-view+json": { | ||
342 | "model_id": "ad6e466cc3fe44d393d2c82d48244d83", | ||
343 | "version_major": 2, | ||
344 | "version_minor": 0 | ||
345 | }, | ||
346 | "text/plain": [ | ||
347 | "interactive(children=(SelectMultiple(description='Trajectory:', options={'../input/viatra_nocon_output/traject…" | ||
348 | ] | ||
349 | }, | ||
350 | "metadata": {}, | ||
351 | "output_type": "display_data" | ||
352 | }, | ||
353 | { | ||
354 | "data": { | ||
355 | "text/plain": [ | ||
356 | "<function __main__.plot_out_na(lines)>" | ||
357 | ] | ||
358 | }, | ||
359 | "execution_count": 15, | ||
360 | "metadata": {}, | ||
361 | "output_type": "execute_result" | ||
362 | } | ||
363 | ], | ||
364 | "source": [ | ||
365 | "def plot_out_na(lines):\n", | ||
366 | " plot(viatra_no_con_dic, lines, 0, lambda a: a.na_distance, colors, 'node activity', '../output/viatra_no_constraints/')\n", | ||
367 | "interact(plot_out_na, lines=w)" | ||
368 | ] | ||
369 | }, | ||
370 | { | ||
371 | "cell_type": "code", | ||
372 | "execution_count": 16, | ||
373 | "metadata": {}, | ||
374 | "outputs": [ | ||
375 | { | ||
376 | "data": { | ||
377 | "application/vnd.jupyter.widget-view+json": { | ||
378 | "model_id": "d88ebc8e4062473a96ac35fe800028ef", | ||
379 | "version_major": 2, | ||
380 | "version_minor": 0 | ||
381 | }, | ||
382 | "text/plain": [ | ||
383 | "interactive(children=(SelectMultiple(description='Trajectory:', options={'../input/viatra_nocon_output/traject…" | ||
384 | ] | ||
385 | }, | ||
386 | "metadata": {}, | ||
387 | "output_type": "display_data" | ||
388 | }, | ||
389 | { | ||
390 | "data": { | ||
391 | "text/plain": [ | ||
392 | "<function __main__.plot_out_mpc(lines)>" | ||
393 | ] | ||
394 | }, | ||
395 | "execution_count": 16, | ||
396 | "metadata": {}, | ||
397 | "output_type": "execute_result" | ||
398 | } | ||
399 | ], | ||
400 | "source": [ | ||
401 | "def plot_out_mpc(lines):\n", | ||
402 | " plot(viatra_no_con_dic, lines, 0, lambda a: a.mpc_distance, colors, 'MPC', '../output/viatra_no_constraints/')\n", | ||
403 | "interact(plot_out_mpc, lines=w)" | ||
404 | ] | ||
405 | }, | ||
406 | { | ||
407 | "cell_type": "markdown", | ||
408 | "metadata": {}, | ||
409 | "source": [ | ||
410 | "## Viatra with constraints" | ||
411 | ] | ||
412 | }, | ||
413 | { | ||
414 | "cell_type": "code", | ||
415 | "execution_count": 17, | ||
416 | "metadata": {}, | ||
417 | "outputs": [], | ||
418 | "source": [ | ||
419 | "viatra_con_stats = readStats('../input/viatra_con_output/',5000)\n", | ||
420 | "viatra_con_dic = calDistanceDic(viatra_con_stats, human_rep)\n", | ||
421 | "\n", | ||
422 | "# trajectories and colors\n", | ||
423 | "trajectories = {}\n", | ||
424 | "w = createSelectionWidge(trajectories)\n", | ||
425 | "colors = createRandomColors(len(trajectories))" | ||
426 | ] | ||
427 | }, | ||
428 | { | ||
429 | "cell_type": "code", | ||
430 | "execution_count": 18, | ||
431 | "metadata": {}, | ||
432 | "outputs": [ | ||
433 | { | ||
434 | "data": { | ||
435 | "application/vnd.jupyter.widget-view+json": { | ||
436 | "model_id": "1eb2ba5848a048389bca8d804fc8340a", | ||
437 | "version_major": 2, | ||
438 | "version_minor": 0 | ||
439 | }, | ||
440 | "text/plain": [ | ||
441 | "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…" | ||
442 | ] | ||
443 | }, | ||
444 | "metadata": {}, | ||
445 | "output_type": "display_data" | ||
446 | }, | ||
447 | { | ||
448 | "data": { | ||
449 | "text/plain": [ | ||
450 | "<function __main__.plot_out_degree(lines)>" | ||
451 | ] | ||
452 | }, | ||
453 | "execution_count": 18, | ||
454 | "metadata": {}, | ||
455 | "output_type": "execute_result" | ||
456 | } | ||
457 | ], | ||
458 | "source": [ | ||
459 | "def plot_out_degree(lines):\n", | ||
460 | " plot(viatra_con_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out degree', '../output/viatra_constraints/')\n", | ||
461 | "interact(plot_out_degree, lines=[[]])" | ||
462 | ] | ||
463 | }, | ||
464 | { | ||
465 | "cell_type": "code", | ||
466 | "execution_count": 19, | ||
467 | "metadata": {}, | ||
468 | "outputs": [ | ||
469 | { | ||
470 | "data": { | ||
471 | "application/vnd.jupyter.widget-view+json": { | ||
472 | "model_id": "6e5840f7a5ad4515bce9080088b644f2", | ||
473 | "version_major": 2, | ||
474 | "version_minor": 0 | ||
475 | }, | ||
476 | "text/plain": [ | ||
477 | "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…" | ||
478 | ] | ||
479 | }, | ||
480 | "metadata": {}, | ||
481 | "output_type": "display_data" | ||
482 | }, | ||
483 | { | ||
484 | "data": { | ||
485 | "text/plain": [ | ||
486 | "<function __main__.plot_na(lines)>" | ||
487 | ] | ||
488 | }, | ||
489 | "execution_count": 19, | ||
490 | "metadata": {}, | ||
491 | "output_type": "execute_result" | ||
492 | } | ||
493 | ], | ||
494 | "source": [ | ||
495 | "def plot_na(lines):\n", | ||
496 | " plot(viatra_con_dic, lines, 0, lambda a: a.na_distance, colors, 'node activity', '../output/viatra_constraints/')\n", | ||
497 | "interact(plot_na, lines=[[]])" | ||
498 | ] | ||
499 | }, | ||
500 | { | ||
501 | "cell_type": "code", | ||
502 | "execution_count": 20, | ||
503 | "metadata": {}, | ||
504 | "outputs": [ | ||
505 | { | ||
506 | "data": { | ||
507 | "application/vnd.jupyter.widget-view+json": { | ||
508 | "model_id": "9e30f267b092491ba1ffe8f83c5f68ce", | ||
509 | "version_major": 2, | ||
510 | "version_minor": 0 | ||
511 | }, | ||
512 | "text/plain": [ | ||
513 | "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…" | ||
514 | ] | ||
515 | }, | ||
516 | "metadata": {}, | ||
517 | "output_type": "display_data" | ||
518 | }, | ||
519 | { | ||
520 | "data": { | ||
521 | "text/plain": [ | ||
522 | "<function __main__.plot_mpc(lines)>" | ||
523 | ] | ||
524 | }, | ||
525 | "execution_count": 20, | ||
526 | "metadata": {}, | ||
527 | "output_type": "execute_result" | ||
528 | } | ||
529 | ], | ||
530 | "source": [ | ||
531 | "def plot_mpc(lines):\n", | ||
532 | " plot(viatra_con_dic, lines, 0, lambda a: a.mpc_distance, colors, 'MPC', '../output/viatra_constraints/')\n", | ||
533 | "interact(plot_mpc, lines=[[]])" | ||
534 | ] | ||
535 | }, | ||
536 | { | ||
537 | "cell_type": "markdown", | ||
538 | "metadata": {}, | ||
539 | "source": [ | ||
540 | "## Controlled RandomEMF" | ||
541 | ] | ||
542 | }, | ||
543 | { | ||
544 | "cell_type": "code", | ||
545 | "execution_count": 21, | ||
546 | "metadata": {}, | ||
547 | "outputs": [], | ||
548 | "source": [ | ||
549 | "random_emf_stats = readStats('../input/random_emf_output/',5000)\n", | ||
550 | "random_emf_dic = calDistanceDic(random_emf_stats, human_rep)\n", | ||
551 | "\n", | ||
552 | "# trajectories and colors\n", | ||
553 | "trajectories = {}\n", | ||
554 | "w = createSelectionWidge(trajectories)\n", | ||
555 | "colors = createRandomColors(len(trajectories))" | ||
556 | ] | ||
557 | }, | ||
558 | { | ||
559 | "cell_type": "code", | ||
560 | "execution_count": 22, | ||
561 | "metadata": {}, | ||
562 | "outputs": [ | ||
563 | { | ||
564 | "data": { | ||
565 | "application/vnd.jupyter.widget-view+json": { | ||
566 | "model_id": "cc1f64c92e814c32a81cd5ec5d4e50dc", | ||
567 | "version_major": 2, | ||
568 | "version_minor": 0 | ||
569 | }, | ||
570 | "text/plain": [ | ||
571 | "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…" | ||
572 | ] | ||
573 | }, | ||
574 | "metadata": {}, | ||
575 | "output_type": "display_data" | ||
576 | }, | ||
577 | { | ||
578 | "data": { | ||
579 | "text/plain": [ | ||
580 | "<function __main__.plot_out_degree(lines)>" | ||
581 | ] | ||
582 | }, | ||
583 | "execution_count": 22, | ||
584 | "metadata": {}, | ||
585 | "output_type": "execute_result" | ||
586 | } | ||
587 | ], | ||
588 | "source": [ | ||
589 | "def plot_out_degree(lines):\n", | ||
590 | " plot(random_emf_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out degree', '../output/random_emf/')\n", | ||
591 | "interact(plot_out_degree, lines=[[]])" | ||
592 | ] | ||
593 | }, | ||
594 | { | ||
595 | "cell_type": "code", | ||
596 | "execution_count": 23, | ||
597 | "metadata": {}, | ||
598 | "outputs": [ | ||
599 | { | ||
600 | "data": { | ||
601 | "application/vnd.jupyter.widget-view+json": { | ||
602 | "model_id": "75021f4f68db4a809ce7c86c0d25ef1b", | ||
603 | "version_major": 2, | ||
604 | "version_minor": 0 | ||
605 | }, | ||
606 | "text/plain": [ | ||
607 | "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…" | ||
608 | ] | ||
609 | }, | ||
610 | "metadata": {}, | ||
611 | "output_type": "display_data" | ||
612 | }, | ||
613 | { | ||
614 | "data": { | ||
615 | "text/plain": [ | ||
616 | "<function __main__.plot_node_activity(lines)>" | ||
617 | ] | ||
618 | }, | ||
619 | "execution_count": 23, | ||
620 | "metadata": {}, | ||
621 | "output_type": "execute_result" | ||
622 | } | ||
623 | ], | ||
624 | "source": [ | ||
625 | "def plot_node_activity(lines):\n", | ||
626 | " plot(random_emf_dic, lines, 0, lambda a: a.na_distance, colors, 'node activity', '../output/random_emf/')\n", | ||
627 | "interact(plot_node_activity, lines=[[]])" | ||
628 | ] | ||
629 | }, | ||
630 | { | ||
631 | "cell_type": "code", | ||
632 | "execution_count": 24, | ||
633 | "metadata": {}, | ||
634 | "outputs": [ | ||
635 | { | ||
636 | "data": { | ||
637 | "application/vnd.jupyter.widget-view+json": { | ||
638 | "model_id": "86f5c376905a4759a7b44ad52804424d", | ||
639 | "version_major": 2, | ||
640 | "version_minor": 0 | ||
641 | }, | ||
642 | "text/plain": [ | ||
643 | "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…" | ||
644 | ] | ||
645 | }, | ||
646 | "metadata": {}, | ||
647 | "output_type": "display_data" | ||
648 | }, | ||
649 | { | ||
650 | "data": { | ||
651 | "text/plain": [ | ||
652 | "<function __main__.plot_mpc(lines)>" | ||
653 | ] | ||
654 | }, | ||
655 | "execution_count": 24, | ||
656 | "metadata": {}, | ||
657 | "output_type": "execute_result" | ||
658 | } | ||
659 | ], | ||
660 | "source": [ | ||
661 | "def plot_mpc(lines):\n", | ||
662 | " plot(random_emf_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/random_emf/')\n", | ||
663 | "interact(plot_mpc, lines=[[]])" | ||
664 | ] | ||
665 | }, | ||
666 | { | ||
667 | "cell_type": "markdown", | ||
668 | "metadata": {}, | ||
669 | "source": [ | ||
670 | "## Controlled Viatra with MPC" | ||
671 | ] | ||
672 | }, | ||
673 | { | ||
674 | "cell_type": "code", | ||
675 | "execution_count": 25, | ||
676 | "metadata": {}, | ||
677 | "outputs": [], | ||
678 | "source": [ | ||
679 | "con_viatra_stats = readStats('../input/controled_viatra_mpc/',5000)\n", | ||
680 | "con_viatra_dic = calDistanceDic(con_viatra_stats, human_rep)\n", | ||
681 | "\n", | ||
682 | "# trajectories and colors\n", | ||
683 | "trajectories = {}\n", | ||
684 | "w = createSelectionWidge(trajectories)\n", | ||
685 | "colors = createRandomColors(len(trajectories))" | ||
686 | ] | ||
687 | }, | ||
688 | { | ||
689 | "cell_type": "code", | ||
690 | "execution_count": 26, | ||
691 | "metadata": {}, | ||
692 | "outputs": [ | ||
693 | { | ||
694 | "data": { | ||
695 | "application/vnd.jupyter.widget-view+json": { | ||
696 | "model_id": "57ba4d8443c145ad845fb862e3ef7519", | ||
697 | "version_major": 2, | ||
698 | "version_minor": 0 | ||
699 | }, | ||
700 | "text/plain": [ | ||
701 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
702 | ] | ||
703 | }, | ||
704 | "metadata": {}, | ||
705 | "output_type": "display_data" | ||
706 | }, | ||
707 | { | ||
708 | "data": { | ||
709 | "text/plain": [ | ||
710 | "<function __main__.plot_out_degree(lines)>" | ||
711 | ] | ||
712 | }, | ||
713 | "execution_count": 26, | ||
714 | "metadata": {}, | ||
715 | "output_type": "execute_result" | ||
716 | } | ||
717 | ], | ||
718 | "source": [ | ||
719 | "def plot_out_degree(lines):\n", | ||
720 | " plot(con_viatra_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out_degree', '../output/controled_viatra_with_mpc/')\n", | ||
721 | "interact(plot_out_degree, lines=w)" | ||
722 | ] | ||
723 | }, | ||
724 | { | ||
725 | "cell_type": "code", | ||
726 | "execution_count": 27, | ||
727 | "metadata": {}, | ||
728 | "outputs": [ | ||
729 | { | ||
730 | "data": { | ||
731 | "application/vnd.jupyter.widget-view+json": { | ||
732 | "model_id": "c020ecb466c14f3ca1bfc0fd2fe03b7b", | ||
733 | "version_major": 2, | ||
734 | "version_minor": 0 | ||
735 | }, | ||
736 | "text/plain": [ | ||
737 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
738 | ] | ||
739 | }, | ||
740 | "metadata": {}, | ||
741 | "output_type": "display_data" | ||
742 | }, | ||
743 | { | ||
744 | "data": { | ||
745 | "text/plain": [ | ||
746 | "<function __main__.plot_na(lines)>" | ||
747 | ] | ||
748 | }, | ||
749 | "execution_count": 27, | ||
750 | "metadata": {}, | ||
751 | "output_type": "execute_result" | ||
752 | } | ||
753 | ], | ||
754 | "source": [ | ||
755 | "def plot_na(lines):\n", | ||
756 | " plot(con_viatra_dic, lines, 0, lambda a: a.na_distance, colors, 'Node Activity', '../output/controled_viatra_with_mpc/')\n", | ||
757 | "interact(plot_na, lines=w)" | ||
758 | ] | ||
759 | }, | ||
760 | { | ||
761 | "cell_type": "code", | ||
762 | "execution_count": 28, | ||
763 | "metadata": {}, | ||
764 | "outputs": [ | ||
765 | { | ||
766 | "data": { | ||
767 | "application/vnd.jupyter.widget-view+json": { | ||
768 | "model_id": "2165668057fd47ad92459e749ec68bad", | ||
769 | "version_major": 2, | ||
770 | "version_minor": 0 | ||
771 | }, | ||
772 | "text/plain": [ | ||
773 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
774 | ] | ||
775 | }, | ||
776 | "metadata": {}, | ||
777 | "output_type": "display_data" | ||
778 | }, | ||
779 | { | ||
780 | "data": { | ||
781 | "text/plain": [ | ||
782 | "<function __main__.plot_mpc(lines)>" | ||
783 | ] | ||
784 | }, | ||
785 | "execution_count": 28, | ||
786 | "metadata": {}, | ||
787 | "output_type": "execute_result" | ||
788 | } | ||
789 | ], | ||
790 | "source": [ | ||
791 | "def plot_mpc(lines):\n", | ||
792 | " plot(con_viatra_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/controled_viatra_with_mpc/')\n", | ||
793 | "interact(plot_mpc, lines=w)" | ||
794 | ] | ||
795 | }, | ||
796 | { | ||
797 | "cell_type": "markdown", | ||
798 | "metadata": {}, | ||
799 | "source": [ | ||
800 | "## (Pseudo) Random EMF instantiator" | ||
801 | ] | ||
802 | }, | ||
803 | { | ||
804 | "cell_type": "code", | ||
805 | "execution_count": 29, | ||
806 | "metadata": {}, | ||
807 | "outputs": [], | ||
808 | "source": [ | ||
809 | "random_emf_stats = readStats('../input/real_random_output/',5000)\n", | ||
810 | "random_emf_dic = calDistanceDic(random_emf_stats, human_rep)\n", | ||
811 | "\n", | ||
812 | "# trajectories and colors\n", | ||
813 | "trajectories = {}\n", | ||
814 | "w = createSelectionWidge(trajectories)\n", | ||
815 | "colors = createRandomColors(len(trajectories))" | ||
816 | ] | ||
817 | }, | ||
818 | { | ||
819 | "cell_type": "code", | ||
820 | "execution_count": 30, | ||
821 | "metadata": {}, | ||
822 | "outputs": [ | ||
823 | { | ||
824 | "data": { | ||
825 | "application/vnd.jupyter.widget-view+json": { | ||
826 | "model_id": "907d7824033b4dfe980c391db0da63eb", | ||
827 | "version_major": 2, | ||
828 | "version_minor": 0 | ||
829 | }, | ||
830 | "text/plain": [ | ||
831 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
832 | ] | ||
833 | }, | ||
834 | "metadata": {}, | ||
835 | "output_type": "display_data" | ||
836 | }, | ||
837 | { | ||
838 | "data": { | ||
839 | "text/plain": [ | ||
840 | "<function __main__.plot_out_degree(lines)>" | ||
841 | ] | ||
842 | }, | ||
843 | "execution_count": 30, | ||
844 | "metadata": {}, | ||
845 | "output_type": "execute_result" | ||
846 | } | ||
847 | ], | ||
848 | "source": [ | ||
849 | "def plot_out_degree(lines):\n", | ||
850 | " plot(random_emf_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out_degree', '../output/random_emf_instantiator/')\n", | ||
851 | "interact(plot_out_degree, lines=w)" | ||
852 | ] | ||
853 | }, | ||
854 | { | ||
855 | "cell_type": "code", | ||
856 | "execution_count": 31, | ||
857 | "metadata": {}, | ||
858 | "outputs": [ | ||
859 | { | ||
860 | "data": { | ||
861 | "application/vnd.jupyter.widget-view+json": { | ||
862 | "model_id": "08a32c21d0b64217a556715caa8db7b5", | ||
863 | "version_major": 2, | ||
864 | "version_minor": 0 | ||
865 | }, | ||
866 | "text/plain": [ | ||
867 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
868 | ] | ||
869 | }, | ||
870 | "metadata": {}, | ||
871 | "output_type": "display_data" | ||
872 | }, | ||
873 | { | ||
874 | "data": { | ||
875 | "text/plain": [ | ||
876 | "<function __main__.plot_na(lines)>" | ||
877 | ] | ||
878 | }, | ||
879 | "execution_count": 31, | ||
880 | "metadata": {}, | ||
881 | "output_type": "execute_result" | ||
882 | } | ||
883 | ], | ||
884 | "source": [ | ||
885 | "def plot_na(lines):\n", | ||
886 | " plot(random_emf_dic, lines, 0, lambda a: a.na_distance, colors, 'Node Activity', '../output/random_emf_instantiator/')\n", | ||
887 | "interact(plot_na, lines=w)" | ||
888 | ] | ||
889 | }, | ||
890 | { | ||
891 | "cell_type": "code", | ||
892 | "execution_count": 32, | ||
893 | "metadata": {}, | ||
894 | "outputs": [ | ||
895 | { | ||
896 | "data": { | ||
897 | "application/vnd.jupyter.widget-view+json": { | ||
898 | "model_id": "9dad041ff05d46ce969cfacb07c2ba98", | ||
899 | "version_major": 2, | ||
900 | "version_minor": 0 | ||
901 | }, | ||
902 | "text/plain": [ | ||
903 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
904 | ] | ||
905 | }, | ||
906 | "metadata": {}, | ||
907 | "output_type": "display_data" | ||
908 | }, | ||
909 | { | ||
910 | "data": { | ||
911 | "text/plain": [ | ||
912 | "<function __main__.plot_mpc(lines)>" | ||
913 | ] | ||
914 | }, | ||
915 | "execution_count": 32, | ||
916 | "metadata": {}, | ||
917 | "output_type": "execute_result" | ||
918 | } | ||
919 | ], | ||
920 | "source": [ | ||
921 | "def plot_mpc(lines):\n", | ||
922 | " plot(random_emf_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/random_emf_instantiator/')\n", | ||
923 | "interact(plot_mpc, lines=w)" | ||
924 | ] | ||
925 | }, | ||
926 | { | ||
927 | "cell_type": "markdown", | ||
928 | "metadata": {}, | ||
929 | "source": [ | ||
930 | "## Controlled Viatra with Out Degree" | ||
931 | ] | ||
932 | }, | ||
933 | { | ||
934 | "cell_type": "code", | ||
935 | "execution_count": 33, | ||
936 | "metadata": {}, | ||
937 | "outputs": [], | ||
938 | "source": [ | ||
939 | "con_viatra_stats = readStats('../input/controlled_viatra_out_degree/',10000)\n", | ||
940 | "con_viatra_dic = calDistanceDic(con_viatra_stats, human_rep)\n", | ||
941 | "\n", | ||
942 | "# trajectories and colors\n", | ||
943 | "trajectories = {}\n", | ||
944 | "w = createSelectionWidge(trajectories)\n", | ||
945 | "colors = createRandomColors(len(trajectories))" | ||
946 | ] | ||
947 | }, | ||
948 | { | ||
949 | "cell_type": "code", | ||
950 | "execution_count": 34, | ||
951 | "metadata": {}, | ||
952 | "outputs": [ | ||
953 | { | ||
954 | "data": { | ||
955 | "application/vnd.jupyter.widget-view+json": { | ||
956 | "model_id": "cd77560284d9419daec57192a64b75ec", | ||
957 | "version_major": 2, | ||
958 | "version_minor": 0 | ||
959 | }, | ||
960 | "text/plain": [ | ||
961 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
962 | ] | ||
963 | }, | ||
964 | "metadata": {}, | ||
965 | "output_type": "display_data" | ||
966 | }, | ||
967 | { | ||
968 | "data": { | ||
969 | "text/plain": [ | ||
970 | "<function __main__.plot_out_degree(lines)>" | ||
971 | ] | ||
972 | }, | ||
973 | "execution_count": 34, | ||
974 | "metadata": {}, | ||
975 | "output_type": "execute_result" | ||
976 | } | ||
977 | ], | ||
978 | "source": [ | ||
979 | "def plot_out_degree(lines):\n", | ||
980 | " plot(con_viatra_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out_degree', '../output/controled_viatra_with_out_degree/')\n", | ||
981 | "interact(plot_out_degree, lines=w)" | ||
982 | ] | ||
983 | }, | ||
984 | { | ||
985 | "cell_type": "code", | ||
986 | "execution_count": 35, | ||
987 | "metadata": {}, | ||
988 | "outputs": [ | ||
989 | { | ||
990 | "data": { | ||
991 | "application/vnd.jupyter.widget-view+json": { | ||
992 | "model_id": "ab11afebf7674cebae8d7318c661cf3c", | ||
993 | "version_major": 2, | ||
994 | "version_minor": 0 | ||
995 | }, | ||
996 | "text/plain": [ | ||
997 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
998 | ] | ||
999 | }, | ||
1000 | "metadata": {}, | ||
1001 | "output_type": "display_data" | ||
1002 | }, | ||
1003 | { | ||
1004 | "data": { | ||
1005 | "text/plain": [ | ||
1006 | "<function __main__.plot_na(lines)>" | ||
1007 | ] | ||
1008 | }, | ||
1009 | "execution_count": 35, | ||
1010 | "metadata": {}, | ||
1011 | "output_type": "execute_result" | ||
1012 | } | ||
1013 | ], | ||
1014 | "source": [ | ||
1015 | "def plot_na(lines):\n", | ||
1016 | " plot(con_viatra_dic, lines, 0, lambda a: a.na_distance, colors, 'Node Activity', '../output/controled_viatra_with_out_degree/')\n", | ||
1017 | "interact(plot_na, lines=w)" | ||
1018 | ] | ||
1019 | }, | ||
1020 | { | ||
1021 | "cell_type": "code", | ||
1022 | "execution_count": 36, | ||
1023 | "metadata": { | ||
1024 | "scrolled": false | ||
1025 | }, | ||
1026 | "outputs": [ | ||
1027 | { | ||
1028 | "data": { | ||
1029 | "application/vnd.jupyter.widget-view+json": { | ||
1030 | "model_id": "c20b42abcba646c18d7caa6eeb54c403", | ||
1031 | "version_major": 2, | ||
1032 | "version_minor": 0 | ||
1033 | }, | ||
1034 | "text/plain": [ | ||
1035 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
1036 | ] | ||
1037 | }, | ||
1038 | "metadata": {}, | ||
1039 | "output_type": "display_data" | ||
1040 | }, | ||
1041 | { | ||
1042 | "data": { | ||
1043 | "text/plain": [ | ||
1044 | "<function __main__.plot_mpc(lines)>" | ||
1045 | ] | ||
1046 | }, | ||
1047 | "execution_count": 36, | ||
1048 | "metadata": {}, | ||
1049 | "output_type": "execute_result" | ||
1050 | } | ||
1051 | ], | ||
1052 | "source": [ | ||
1053 | "def plot_mpc(lines):\n", | ||
1054 | " plot(con_viatra_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/controled_viatra_with_out_degree/')\n", | ||
1055 | "interact(plot_mpc, lines=w)" | ||
1056 | ] | ||
1057 | }, | ||
1058 | { | ||
1059 | "cell_type": "markdown", | ||
1060 | "metadata": {}, | ||
1061 | "source": [ | ||
1062 | "## Controlled Viatra with Node Activity" | ||
1063 | ] | ||
1064 | }, | ||
1065 | { | ||
1066 | "cell_type": "code", | ||
1067 | "execution_count": 37, | ||
1068 | "metadata": {}, | ||
1069 | "outputs": [], | ||
1070 | "source": [ | ||
1071 | "con_viatra_stats = readStats('../input/controlled_viatra_out_degree_node_activity/',20000)\n", | ||
1072 | "con_viatra_dic = calDistanceDic(con_viatra_stats, human_rep)\n", | ||
1073 | "\n", | ||
1074 | "# trajectories and colors\n", | ||
1075 | "trajectories = {}\n", | ||
1076 | "w = createSelectionWidge(trajectories)\n", | ||
1077 | "colors = createRandomColors(len(trajectories))" | ||
1078 | ] | ||
1079 | }, | ||
1080 | { | ||
1081 | "cell_type": "code", | ||
1082 | "execution_count": 38, | ||
1083 | "metadata": {}, | ||
1084 | "outputs": [ | ||
1085 | { | ||
1086 | "data": { | ||
1087 | "application/vnd.jupyter.widget-view+json": { | ||
1088 | "model_id": "902b580a11fa4c8db9d03508ad629067", | ||
1089 | "version_major": 2, | ||
1090 | "version_minor": 0 | ||
1091 | }, | ||
1092 | "text/plain": [ | ||
1093 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
1094 | ] | ||
1095 | }, | ||
1096 | "metadata": {}, | ||
1097 | "output_type": "display_data" | ||
1098 | }, | ||
1099 | { | ||
1100 | "data": { | ||
1101 | "text/plain": [ | ||
1102 | "<function __main__.plot_out_degree(lines)>" | ||
1103 | ] | ||
1104 | }, | ||
1105 | "execution_count": 38, | ||
1106 | "metadata": {}, | ||
1107 | "output_type": "execute_result" | ||
1108 | } | ||
1109 | ], | ||
1110 | "source": [ | ||
1111 | "def plot_out_degree(lines):\n", | ||
1112 | " plot(con_viatra_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out_degree', '../output/controled_viatra_with_node_activity/')\n", | ||
1113 | "interact(plot_out_degree, lines=w)" | ||
1114 | ] | ||
1115 | }, | ||
1116 | { | ||
1117 | "cell_type": "code", | ||
1118 | "execution_count": 39, | ||
1119 | "metadata": {}, | ||
1120 | "outputs": [ | ||
1121 | { | ||
1122 | "data": { | ||
1123 | "application/vnd.jupyter.widget-view+json": { | ||
1124 | "model_id": "851b567e745940288b577d9bd27e6f08", | ||
1125 | "version_major": 2, | ||
1126 | "version_minor": 0 | ||
1127 | }, | ||
1128 | "text/plain": [ | ||
1129 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
1130 | ] | ||
1131 | }, | ||
1132 | "metadata": {}, | ||
1133 | "output_type": "display_data" | ||
1134 | }, | ||
1135 | { | ||
1136 | "data": { | ||
1137 | "text/plain": [ | ||
1138 | "<function __main__.plot_na(lines)>" | ||
1139 | ] | ||
1140 | }, | ||
1141 | "execution_count": 39, | ||
1142 | "metadata": {}, | ||
1143 | "output_type": "execute_result" | ||
1144 | } | ||
1145 | ], | ||
1146 | "source": [ | ||
1147 | "def plot_na(lines):\n", | ||
1148 | " plot(con_viatra_dic, lines, 0, lambda a: a.na_distance, colors, 'Node Activity', '../output/controled_viatra_with_node_activity/')\n", | ||
1149 | "interact(plot_na, lines=w)" | ||
1150 | ] | ||
1151 | }, | ||
1152 | { | ||
1153 | "cell_type": "code", | ||
1154 | "execution_count": 40, | ||
1155 | "metadata": {}, | ||
1156 | "outputs": [ | ||
1157 | { | ||
1158 | "data": { | ||
1159 | "application/vnd.jupyter.widget-view+json": { | ||
1160 | "model_id": "7de173291f394b10b5113e3312b7b2e1", | ||
1161 | "version_major": 2, | ||
1162 | "version_minor": 0 | ||
1163 | }, | ||
1164 | "text/plain": [ | ||
1165 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
1166 | ] | ||
1167 | }, | ||
1168 | "metadata": {}, | ||
1169 | "output_type": "display_data" | ||
1170 | }, | ||
1171 | { | ||
1172 | "data": { | ||
1173 | "text/plain": [ | ||
1174 | "<function __main__.plot_mpc(lines)>" | ||
1175 | ] | ||
1176 | }, | ||
1177 | "execution_count": 40, | ||
1178 | "metadata": {}, | ||
1179 | "output_type": "execute_result" | ||
1180 | } | ||
1181 | ], | ||
1182 | "source": [ | ||
1183 | "def plot_mpc(lines):\n", | ||
1184 | " plot(con_viatra_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/controled_viatra_with_node_activity/')\n", | ||
1185 | "interact(plot_mpc, lines=w)" | ||
1186 | ] | ||
1187 | }, | ||
1188 | { | ||
1189 | "cell_type": "markdown", | ||
1190 | "metadata": {}, | ||
1191 | "source": [ | ||
1192 | "# Random EMF With Normal(2,1)" | ||
1193 | ] | ||
1194 | }, | ||
1195 | { | ||
1196 | "cell_type": "code", | ||
1197 | "execution_count": 41, | ||
1198 | "metadata": {}, | ||
1199 | "outputs": [], | ||
1200 | "source": [ | ||
1201 | "random_emf_stats = readStats('../input/random_emf_normal/',6000)\n", | ||
1202 | "random_emf_dic = calDistanceDic(random_emf_stats, human_rep)\n", | ||
1203 | "\n", | ||
1204 | "# trajectories and colors\n", | ||
1205 | "trajectories = {}\n", | ||
1206 | "w = createSelectionWidge(trajectories)\n", | ||
1207 | "colors = createRandomColors(len(trajectories))" | ||
1208 | ] | ||
1209 | }, | ||
1210 | { | ||
1211 | "cell_type": "code", | ||
1212 | "execution_count": 42, | ||
1213 | "metadata": {}, | ||
1214 | "outputs": [ | ||
1215 | { | ||
1216 | "data": { | ||
1217 | "application/vnd.jupyter.widget-view+json": { | ||
1218 | "model_id": "6b9ee873d9ca41649cf05f3b713d9142", | ||
1219 | "version_major": 2, | ||
1220 | "version_minor": 0 | ||
1221 | }, | ||
1222 | "text/plain": [ | ||
1223 | "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…" | ||
1224 | ] | ||
1225 | }, | ||
1226 | "metadata": {}, | ||
1227 | "output_type": "display_data" | ||
1228 | }, | ||
1229 | { | ||
1230 | "data": { | ||
1231 | "text/plain": [ | ||
1232 | "<function __main__.plot_out_degree(lines)>" | ||
1233 | ] | ||
1234 | }, | ||
1235 | "execution_count": 42, | ||
1236 | "metadata": {}, | ||
1237 | "output_type": "execute_result" | ||
1238 | } | ||
1239 | ], | ||
1240 | "source": [ | ||
1241 | "def plot_out_degree(lines):\n", | ||
1242 | " plot(random_emf_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out degree', '../output/random_emf_normal/')\n", | ||
1243 | "interact(plot_out_degree, lines=[[]])" | ||
1244 | ] | ||
1245 | }, | ||
1246 | { | ||
1247 | "cell_type": "code", | ||
1248 | "execution_count": 43, | ||
1249 | "metadata": {}, | ||
1250 | "outputs": [ | ||
1251 | { | ||
1252 | "data": { | ||
1253 | "application/vnd.jupyter.widget-view+json": { | ||
1254 | "model_id": "88f258a0b0ac4417aba320beca7508cf", | ||
1255 | "version_major": 2, | ||
1256 | "version_minor": 0 | ||
1257 | }, | ||
1258 | "text/plain": [ | ||
1259 | "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…" | ||
1260 | ] | ||
1261 | }, | ||
1262 | "metadata": {}, | ||
1263 | "output_type": "display_data" | ||
1264 | }, | ||
1265 | { | ||
1266 | "data": { | ||
1267 | "text/plain": [ | ||
1268 | "<function __main__.plot_node_activity(lines)>" | ||
1269 | ] | ||
1270 | }, | ||
1271 | "execution_count": 43, | ||
1272 | "metadata": {}, | ||
1273 | "output_type": "execute_result" | ||
1274 | } | ||
1275 | ], | ||
1276 | "source": [ | ||
1277 | "def plot_node_activity(lines):\n", | ||
1278 | " plot(random_emf_dic, lines, 0, lambda a: a.na_distance, colors, 'node activity', '../output/random_emf_normal/')\n", | ||
1279 | "interact(plot_node_activity, lines=[[]])" | ||
1280 | ] | ||
1281 | }, | ||
1282 | { | ||
1283 | "cell_type": "code", | ||
1284 | "execution_count": 44, | ||
1285 | "metadata": {}, | ||
1286 | "outputs": [ | ||
1287 | { | ||
1288 | "data": { | ||
1289 | "application/vnd.jupyter.widget-view+json": { | ||
1290 | "model_id": "d71cf26018184ee6953c50b74908f52d", | ||
1291 | "version_major": 2, | ||
1292 | "version_minor": 0 | ||
1293 | }, | ||
1294 | "text/plain": [ | ||
1295 | "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…" | ||
1296 | ] | ||
1297 | }, | ||
1298 | "metadata": {}, | ||
1299 | "output_type": "display_data" | ||
1300 | }, | ||
1301 | { | ||
1302 | "data": { | ||
1303 | "text/plain": [ | ||
1304 | "<function __main__.plot_mpc(lines)>" | ||
1305 | ] | ||
1306 | }, | ||
1307 | "execution_count": 44, | ||
1308 | "metadata": {}, | ||
1309 | "output_type": "execute_result" | ||
1310 | } | ||
1311 | ], | ||
1312 | "source": [ | ||
1313 | "def plot_mpc(lines):\n", | ||
1314 | " plot(random_emf_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/random_emf_normal/')\n", | ||
1315 | "interact(plot_mpc, lines=[[]])" | ||
1316 | ] | ||
1317 | }, | ||
1318 | { | ||
1319 | "cell_type": "code", | ||
1320 | "execution_count": 45, | ||
1321 | "metadata": {}, | ||
1322 | "outputs": [], | ||
1323 | "source": [ | ||
1324 | "con_viatra_stats = readStats('../input/controlled_viatra_all/',20000)\n", | ||
1325 | "con_viatra_dic = calDistanceDic(con_viatra_stats, human_rep)\n", | ||
1326 | "\n", | ||
1327 | "# trajectories and colors\n", | ||
1328 | "trajectories = {}\n", | ||
1329 | "w = createSelectionWidge(trajectories)\n", | ||
1330 | "colors = createRandomColors(len(trajectories))" | ||
1331 | ] | ||
1332 | }, | ||
1333 | { | ||
1334 | "cell_type": "code", | ||
1335 | "execution_count": 46, | ||
1336 | "metadata": {}, | ||
1337 | "outputs": [ | ||
1338 | { | ||
1339 | "data": { | ||
1340 | "application/vnd.jupyter.widget-view+json": { | ||
1341 | "model_id": "db15ac26aad84683b9da99fc54749850", | ||
1342 | "version_major": 2, | ||
1343 | "version_minor": 0 | ||
1344 | }, | ||
1345 | "text/plain": [ | ||
1346 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
1347 | ] | ||
1348 | }, | ||
1349 | "metadata": {}, | ||
1350 | "output_type": "display_data" | ||
1351 | }, | ||
1352 | { | ||
1353 | "data": { | ||
1354 | "text/plain": [ | ||
1355 | "<function __main__.plot_out_degree(lines)>" | ||
1356 | ] | ||
1357 | }, | ||
1358 | "execution_count": 46, | ||
1359 | "metadata": {}, | ||
1360 | "output_type": "execute_result" | ||
1361 | } | ||
1362 | ], | ||
1363 | "source": [ | ||
1364 | "def plot_out_degree(lines):\n", | ||
1365 | " plot(con_viatra_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out_degree', '../output/controled_viatra_all/')\n", | ||
1366 | "interact(plot_out_degree, lines=w)" | ||
1367 | ] | ||
1368 | }, | ||
1369 | { | ||
1370 | "cell_type": "code", | ||
1371 | "execution_count": 47, | ||
1372 | "metadata": {}, | ||
1373 | "outputs": [ | ||
1374 | { | ||
1375 | "data": { | ||
1376 | "application/vnd.jupyter.widget-view+json": { | ||
1377 | "model_id": "30bfaf8dd45d4b21b0b43afe5e9fdb8a", | ||
1378 | "version_major": 2, | ||
1379 | "version_minor": 0 | ||
1380 | }, | ||
1381 | "text/plain": [ | ||
1382 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
1383 | ] | ||
1384 | }, | ||
1385 | "metadata": {}, | ||
1386 | "output_type": "display_data" | ||
1387 | }, | ||
1388 | { | ||
1389 | "data": { | ||
1390 | "text/plain": [ | ||
1391 | "<function __main__.plot_na(lines)>" | ||
1392 | ] | ||
1393 | }, | ||
1394 | "execution_count": 47, | ||
1395 | "metadata": {}, | ||
1396 | "output_type": "execute_result" | ||
1397 | } | ||
1398 | ], | ||
1399 | "source": [ | ||
1400 | "def plot_na(lines):\n", | ||
1401 | " plot(con_viatra_dic, lines, 0, lambda a: a.na_distance, colors, 'Node Activity', '../output/controled_viatra_all/')\n", | ||
1402 | "interact(plot_na, lines=w)" | ||
1403 | ] | ||
1404 | }, | ||
1405 | { | ||
1406 | "cell_type": "code", | ||
1407 | "execution_count": 48, | ||
1408 | "metadata": {}, | ||
1409 | "outputs": [ | ||
1410 | { | ||
1411 | "data": { | ||
1412 | "application/vnd.jupyter.widget-view+json": { | ||
1413 | "model_id": "5636d37b4416474db5441fe47e7a8a30", | ||
1414 | "version_major": 2, | ||
1415 | "version_minor": 0 | ||
1416 | }, | ||
1417 | "text/plain": [ | ||
1418 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
1419 | ] | ||
1420 | }, | ||
1421 | "metadata": {}, | ||
1422 | "output_type": "display_data" | ||
1423 | }, | ||
1424 | { | ||
1425 | "data": { | ||
1426 | "text/plain": [ | ||
1427 | "<function __main__.plot_mpc(lines)>" | ||
1428 | ] | ||
1429 | }, | ||
1430 | "execution_count": 48, | ||
1431 | "metadata": {}, | ||
1432 | "output_type": "execute_result" | ||
1433 | } | ||
1434 | ], | ||
1435 | "source": [ | ||
1436 | "def plot_mpc(lines):\n", | ||
1437 | " plot(con_viatra_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/controled_viatra_all/')\n", | ||
1438 | "interact(plot_mpc, lines=w)" | ||
1439 | ] | ||
1440 | }, | ||
1441 | { | ||
1442 | "cell_type": "markdown", | ||
1443 | "metadata": {}, | ||
1444 | "source": [ | ||
1445 | "### Viatra With Both metric and consistency" | ||
1446 | ] | ||
1447 | }, | ||
1448 | { | ||
1449 | "cell_type": "code", | ||
1450 | "execution_count": 53, | ||
1451 | "metadata": {}, | ||
1452 | "outputs": [], | ||
1453 | "source": [ | ||
1454 | "con_viatra_stats = readStats('../input/viatra_control_all_with_consistency_1/',20000)\n", | ||
1455 | "con_viatra_dic = calDistanceDic(con_viatra_stats, human_rep)\n", | ||
1456 | "\n", | ||
1457 | "# trajectories and colors\n", | ||
1458 | "trajectories = {}\n", | ||
1459 | "w = createSelectionWidge(trajectories)\n", | ||
1460 | "colors = createRandomColors(len(trajectories))" | ||
1461 | ] | ||
1462 | }, | ||
1463 | { | ||
1464 | "cell_type": "code", | ||
1465 | "execution_count": 54, | ||
1466 | "metadata": {}, | ||
1467 | "outputs": [ | ||
1468 | { | ||
1469 | "data": { | ||
1470 | "application/vnd.jupyter.widget-view+json": { | ||
1471 | "model_id": "e5c7231686544d959527cff36c1f1a5e", | ||
1472 | "version_major": 2, | ||
1473 | "version_minor": 0 | ||
1474 | }, | ||
1475 | "text/plain": [ | ||
1476 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
1477 | ] | ||
1478 | }, | ||
1479 | "metadata": {}, | ||
1480 | "output_type": "display_data" | ||
1481 | }, | ||
1482 | { | ||
1483 | "data": { | ||
1484 | "text/plain": [ | ||
1485 | "<function __main__.plot_out_degree(lines)>" | ||
1486 | ] | ||
1487 | }, | ||
1488 | "execution_count": 54, | ||
1489 | "metadata": {}, | ||
1490 | "output_type": "execute_result" | ||
1491 | } | ||
1492 | ], | ||
1493 | "source": [ | ||
1494 | "def plot_out_degree(lines):\n", | ||
1495 | " plot(con_viatra_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out_degree', '../output/viatra_control_all_with_consistency_1/')\n", | ||
1496 | "interact(plot_out_degree, lines=w)" | ||
1497 | ] | ||
1498 | }, | ||
1499 | { | ||
1500 | "cell_type": "code", | ||
1501 | "execution_count": 55, | ||
1502 | "metadata": {}, | ||
1503 | "outputs": [ | ||
1504 | { | ||
1505 | "data": { | ||
1506 | "application/vnd.jupyter.widget-view+json": { | ||
1507 | "model_id": "e043705333bb474e89582ea9358c57c3", | ||
1508 | "version_major": 2, | ||
1509 | "version_minor": 0 | ||
1510 | }, | ||
1511 | "text/plain": [ | ||
1512 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
1513 | ] | ||
1514 | }, | ||
1515 | "metadata": {}, | ||
1516 | "output_type": "display_data" | ||
1517 | }, | ||
1518 | { | ||
1519 | "data": { | ||
1520 | "text/plain": [ | ||
1521 | "<function __main__.plot_na(lines)>" | ||
1522 | ] | ||
1523 | }, | ||
1524 | "execution_count": 55, | ||
1525 | "metadata": {}, | ||
1526 | "output_type": "execute_result" | ||
1527 | } | ||
1528 | ], | ||
1529 | "source": [ | ||
1530 | "def plot_na(lines):\n", | ||
1531 | " plot(con_viatra_dic, lines, 0, lambda a: a.na_distance, colors, 'Node Activity', '../output/viatra_control_all_with_consistency_1/')\n", | ||
1532 | "interact(plot_na, lines=w)" | ||
1533 | ] | ||
1534 | }, | ||
1535 | { | ||
1536 | "cell_type": "code", | ||
1537 | "execution_count": 56, | ||
1538 | "metadata": {}, | ||
1539 | "outputs": [ | ||
1540 | { | ||
1541 | "data": { | ||
1542 | "application/vnd.jupyter.widget-view+json": { | ||
1543 | "model_id": "ee4723b62293402e87e6a3f798019b36", | ||
1544 | "version_major": 2, | ||
1545 | "version_minor": 0 | ||
1546 | }, | ||
1547 | "text/plain": [ | ||
1548 | "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…" | ||
1549 | ] | ||
1550 | }, | ||
1551 | "metadata": {}, | ||
1552 | "output_type": "display_data" | ||
1553 | }, | ||
1554 | { | ||
1555 | "data": { | ||
1556 | "text/plain": [ | ||
1557 | "<function __main__.plot_mpc(lines)>" | ||
1558 | ] | ||
1559 | }, | ||
1560 | "execution_count": 56, | ||
1561 | "metadata": {}, | ||
1562 | "output_type": "execute_result" | ||
1563 | } | ||
1564 | ], | ||
1565 | "source": [ | ||
1566 | "def plot_mpc(lines):\n", | ||
1567 | " plot(con_viatra_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/viatra_control_all_with_consistency_1/')\n", | ||
1568 | "interact(plot_mpc, lines=w)" | ||
1569 | ] | ||
1570 | }, | ||
1571 | { | ||
1572 | "cell_type": "code", | ||
1573 | "execution_count": null, | ||
1574 | "metadata": {}, | ||
1575 | "outputs": [], | ||
1576 | "source": [] | ||
1577 | } | ||
1578 | ], | ||
1579 | "metadata": { | ||
1580 | "kernelspec": { | ||
1581 | "display_name": "Python 3", | ||
1582 | "language": "python", | ||
1583 | "name": "python3" | ||
1584 | }, | ||
1585 | "language_info": { | ||
1586 | "codemirror_mode": { | ||
1587 | "name": "ipython", | ||
1588 | "version": 3 | ||
1589 | }, | ||
1590 | "file_extension": ".py", | ||
1591 | "mimetype": "text/x-python", | ||
1592 | "name": "python", | ||
1593 | "nbconvert_exporter": "python", | ||
1594 | "pygments_lexer": "ipython3", | ||
1595 | "version": "3.7.3" | ||
1596 | } | ||
1597 | }, | ||
1598 | "nbformat": 4, | ||
1599 | "nbformat_minor": 2 | ||
1600 | } | ||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/representative_selector .ipynb b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/representative_selector .ipynb new file mode 100644 index 00000000..32edb00c --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/representative_selector .ipynb | |||
@@ -0,0 +1,392 @@ | |||
1 | { | ||
2 | "cells": [ | ||
3 | { | ||
4 | "cell_type": "markdown", | ||
5 | "metadata": {}, | ||
6 | "source": [ | ||
7 | "## Use K-medoid algorithm to find the suitable human model representitives" | ||
8 | ] | ||
9 | }, | ||
10 | { | ||
11 | "cell_type": "markdown", | ||
12 | "metadata": {}, | ||
13 | "source": [ | ||
14 | "### Imports" | ||
15 | ] | ||
16 | }, | ||
17 | { | ||
18 | "cell_type": "code", | ||
19 | "execution_count": 2, | ||
20 | "metadata": {}, | ||
21 | "outputs": [], | ||
22 | "source": [ | ||
23 | "import os, sys\n", | ||
24 | "lib_path = os.path.abspath(os.path.join('..', '..', 'utils'))\n", | ||
25 | "sys.path.append(lib_path)\n", | ||
26 | "from GraphType import GraphStat\n", | ||
27 | "import readCSV as reader\n", | ||
28 | "from scipy import stats\n", | ||
29 | "from ipywidgets import interact, fixed, interactive\n", | ||
30 | "import ipywidgets as widgets\n", | ||
31 | "from pyclustering.cluster.kmedoids import kmedoids\n", | ||
32 | "from pyclustering.utils.metric import distance_metric, type_metric\n", | ||
33 | "import random\n", | ||
34 | "import numpy as np" | ||
35 | ] | ||
36 | }, | ||
37 | { | ||
38 | "cell_type": "markdown", | ||
39 | "metadata": {}, | ||
40 | "source": [ | ||
41 | "### Define a new distance metric" | ||
42 | ] | ||
43 | }, | ||
44 | { | ||
45 | "cell_type": "code", | ||
46 | "execution_count": 3, | ||
47 | "metadata": {}, | ||
48 | "outputs": [], | ||
49 | "source": [ | ||
50 | "def ks_value(dest1, dest2):\n", | ||
51 | " value, p = stats.ks_2samp(dest1, dest2)\n", | ||
52 | " return value\n", | ||
53 | "\n", | ||
54 | "\n", | ||
55 | "ks_metric = distance_metric(type_metric.USER_DEFINED, func=ks_value)" | ||
56 | ] | ||
57 | }, | ||
58 | { | ||
59 | "cell_type": "markdown", | ||
60 | "metadata": {}, | ||
61 | "source": [ | ||
62 | "### Read Human Models" | ||
63 | ] | ||
64 | }, | ||
65 | { | ||
66 | "cell_type": "code", | ||
67 | "execution_count": 4, | ||
68 | "metadata": {}, | ||
69 | "outputs": [ | ||
70 | { | ||
71 | "data": { | ||
72 | "text/plain": [ | ||
73 | "304" | ||
74 | ] | ||
75 | }, | ||
76 | "execution_count": 4, | ||
77 | "metadata": {}, | ||
78 | "output_type": "execute_result" | ||
79 | } | ||
80 | ], | ||
81 | "source": [ | ||
82 | "# Progress Widge\n", | ||
83 | "w = widgets.FloatProgress(\n", | ||
84 | " value=0,\n", | ||
85 | " min=0,\n", | ||
86 | " max=1.0,\n", | ||
87 | " step=0.1,\n", | ||
88 | " description='Loading Files...:',\n", | ||
89 | " bar_style='info',\n", | ||
90 | " orientation='horizontal'\n", | ||
91 | ")\n", | ||
92 | "\n", | ||
93 | "humanFiles = reader.readmultiplefiles('../input/Human/', 1300, False)\n", | ||
94 | "modelToFileName = {}\n", | ||
95 | "for name in humanFiles:\n", | ||
96 | " modelToFileName[GraphStat(name)] = name\n", | ||
97 | "\n", | ||
98 | "models = list(modelToFileName.keys())\n", | ||
99 | "len(humanFiles)" | ||
100 | ] | ||
101 | }, | ||
102 | { | ||
103 | "cell_type": "markdown", | ||
104 | "metadata": {}, | ||
105 | "source": [ | ||
106 | "### Find Representative by K-medroid for different dists on GraphStat" | ||
107 | ] | ||
108 | }, | ||
109 | { | ||
110 | "cell_type": "markdown", | ||
111 | "metadata": {}, | ||
112 | "source": [ | ||
113 | "* Returns the index of the representative" | ||
114 | ] | ||
115 | }, | ||
116 | { | ||
117 | "cell_type": "code", | ||
118 | "execution_count": 5, | ||
119 | "metadata": {}, | ||
120 | "outputs": [], | ||
121 | "source": [ | ||
122 | "def findRep(graphStats, func):\n", | ||
123 | " out_ds = list(map(func, models))\n", | ||
124 | "\n", | ||
125 | " #choose a random starting point\n", | ||
126 | " start_index = random.randint(0, len(out_ds))\n", | ||
127 | "\n", | ||
128 | " # start with one initial metrid [start_index]\n", | ||
129 | " outdegree_kmedoid = kmedoids(out_ds, [start_index], metric=ks_metric)\n", | ||
130 | "\n", | ||
131 | " outdegree_kmedoid.process()\n", | ||
132 | " centoids = outdegree_kmedoid.get_medoids()\n", | ||
133 | " return centoids[0]" | ||
134 | ] | ||
135 | }, | ||
136 | { | ||
137 | "cell_type": "markdown", | ||
138 | "metadata": {}, | ||
139 | "source": [ | ||
140 | "## Find representative for out degree" | ||
141 | ] | ||
142 | }, | ||
143 | { | ||
144 | "cell_type": "markdown", | ||
145 | "metadata": {}, | ||
146 | "source": [ | ||
147 | "### For Yakindumm\n", | ||
148 | "#### For all human models\n", | ||
149 | "* the rep found is ../input/humanOutput\\R_20158_run_1.csv\n", | ||
150 | "* the average distance between it and others is 0.05515988287586802\n", | ||
151 | "\n", | ||
152 | "#### For human models with $100 \\pm 10$ nodes\n", | ||
153 | "* the rep found is ../input/human_output_100\\R_2015225_run_1.csv\n", | ||
154 | "* the average distance between it and others is $0.046150929558524685$\n", | ||
155 | "\n", | ||
156 | "#### for human model with $100 \\pm 10$ nodes and new metric\n", | ||
157 | "* the rep found is ../input/human_output_100\\R_2015248_run_1.csv\n", | ||
158 | "* average distance: 0.052753778714861366\n", | ||
159 | "* median: 0.0468131868131868\n", | ||
160 | "* std: 0.0246917800149673\n", | ||
161 | "* max: 0.15993907083015996\n", | ||
162 | "* min: 0.0" | ||
163 | ] | ||
164 | }, | ||
165 | { | ||
166 | "cell_type": "code", | ||
167 | "execution_count": 6, | ||
168 | "metadata": {}, | ||
169 | "outputs": [ | ||
170 | { | ||
171 | "name": "stdout", | ||
172 | "output_type": "stream", | ||
173 | "text": [ | ||
174 | "../input/Human\\33_run_1.csv\n", | ||
175 | "../input/Human\\33_run_1.csv\n" | ||
176 | ] | ||
177 | } | ||
178 | ], | ||
179 | "source": [ | ||
180 | "od_rep_index = findRep(models, lambda m: m.out_d)\n", | ||
181 | "print(list(modelToFileName.values())[od_rep_index])\n", | ||
182 | "od_rep_model = models[od_rep_index]\n", | ||
183 | "print(modelToFileName[od_rep_model])\n" | ||
184 | ] | ||
185 | }, | ||
186 | { | ||
187 | "cell_type": "code", | ||
188 | "execution_count": 7, | ||
189 | "metadata": {}, | ||
190 | "outputs": [ | ||
191 | { | ||
192 | "name": "stdout", | ||
193 | "output_type": "stream", | ||
194 | "text": [ | ||
195 | "average distance: 0.04615092955852465\n", | ||
196 | "median: 0.04402137483980782\n", | ||
197 | "std: 0.017305709419913242\n", | ||
198 | "max: 0.1411706837186424\n", | ||
199 | "min: 0.0\n" | ||
200 | ] | ||
201 | } | ||
202 | ], | ||
203 | "source": [ | ||
204 | "distances = []\n", | ||
205 | "for model in models:\n", | ||
206 | " distances.append(ks_value(od_rep_model.out_d, model.out_d))\n", | ||
207 | "print('average distance: ', np.mean(distances))\n", | ||
208 | "print('median: ', np.median(distances))\n", | ||
209 | "print('std: ', np.std(distances))\n", | ||
210 | "print('max:', max(distances))\n", | ||
211 | "print('min:', min(distances))" | ||
212 | ] | ||
213 | }, | ||
214 | { | ||
215 | "cell_type": "markdown", | ||
216 | "metadata": {}, | ||
217 | "source": [ | ||
218 | "## Find Representative for node activities" | ||
219 | ] | ||
220 | }, | ||
221 | { | ||
222 | "cell_type": "markdown", | ||
223 | "metadata": {}, | ||
224 | "source": [ | ||
225 | "### For Yakindumm\n", | ||
226 | "#### For all human models\n", | ||
227 | "* the rep found is ../input/humanOutput\\R_2016176_run_1.csv\n", | ||
228 | "* the average distance between it and others is 0.05275267434589047\n", | ||
229 | "\n", | ||
230 | "#### For human models with $100 \\pm 10$ nodes\n", | ||
231 | "* the rep found is ../input/human_output_100\\R_2017419_run_1.csv\n", | ||
232 | "* the average distance between it and others is $0.04679429311806747$\n", | ||
233 | "\n", | ||
234 | "#### for human model with $100 \\pm 10$ nodes and new metric\n", | ||
235 | "* the rep found is ../input/human_output_100\\R_2017131_run_1.csv\n", | ||
236 | "* average distance: 0.024629205820449567\n", | ||
237 | "* median: 0.023787888564682946\n", | ||
238 | "* std: 0.013845547883198073\n", | ||
239 | "* max: 0.09044674910251294\n", | ||
240 | "* min: 0.0" | ||
241 | ] | ||
242 | }, | ||
243 | { | ||
244 | "cell_type": "code", | ||
245 | "execution_count": 8, | ||
246 | "metadata": {}, | ||
247 | "outputs": [ | ||
248 | { | ||
249 | "name": "stdout", | ||
250 | "output_type": "stream", | ||
251 | "text": [ | ||
252 | "../input/Human\\288_run_1.csv\n", | ||
253 | "../input/Human\\288_run_1.csv\n" | ||
254 | ] | ||
255 | } | ||
256 | ], | ||
257 | "source": [ | ||
258 | "na_rep_index = findRep(models, lambda m: m.na)\n", | ||
259 | "print(list(modelToFileName.values())[na_rep_index])\n", | ||
260 | "na_rep_model = models[na_rep_index]\n", | ||
261 | "print(modelToFileName[na_rep_model])\n" | ||
262 | ] | ||
263 | }, | ||
264 | { | ||
265 | "cell_type": "code", | ||
266 | "execution_count": 9, | ||
267 | "metadata": {}, | ||
268 | "outputs": [ | ||
269 | { | ||
270 | "name": "stdout", | ||
271 | "output_type": "stream", | ||
272 | "text": [ | ||
273 | "average distance: 0.046794293118067494\n", | ||
274 | "median: 0.03898868458274401\n", | ||
275 | "std: 0.02880119213919405\n", | ||
276 | "max: 0.18702970297029703\n", | ||
277 | "min: 0.0\n" | ||
278 | ] | ||
279 | } | ||
280 | ], | ||
281 | "source": [ | ||
282 | "distances = []\n", | ||
283 | "for model in models:\n", | ||
284 | " distances.append(ks_value(na_rep_model.na, model.na))\n", | ||
285 | "print('average distance: ', np.mean(distances))\n", | ||
286 | "print('median: ', np.median(distances))\n", | ||
287 | "print('std: ', np.std(distances))\n", | ||
288 | "print('max:', max(distances))\n", | ||
289 | "print('min:', min(distances))" | ||
290 | ] | ||
291 | }, | ||
292 | { | ||
293 | "cell_type": "markdown", | ||
294 | "metadata": {}, | ||
295 | "source": [ | ||
296 | "## Find Representative for MPC" | ||
297 | ] | ||
298 | }, | ||
299 | { | ||
300 | "cell_type": "markdown", | ||
301 | "metadata": {}, | ||
302 | "source": [ | ||
303 | "### For Yakindumm\n", | ||
304 | "\n", | ||
305 | "#### For all human models\n", | ||
306 | "* the rep found is ../input/humanOutput\\R_2015246_run_1.csv\n", | ||
307 | "* the average distance between it and others is 0.08556632702185384\n", | ||
308 | "\n", | ||
309 | "#### For human models with $100 \\pm 10$ nodes\n", | ||
310 | "* the rep found is ../input/human_output_100\\R_2016324_run_1.csv\n", | ||
311 | "* the average distance between it and others is $0.07028909225833631$\n", | ||
312 | "\n", | ||
313 | "#### for human model with $100 \\pm 10$ nodes and new metric\n", | ||
314 | "* average distance: 0.054782550772603904\n", | ||
315 | "* median: 0.048330503678551184\n", | ||
316 | "* std: 0.028208257424907526\n", | ||
317 | "* max: 0.21181525241675614\n", | ||
318 | "* min: 0.0" | ||
319 | ] | ||
320 | }, | ||
321 | { | ||
322 | "cell_type": "code", | ||
323 | "execution_count": 10, | ||
324 | "metadata": {}, | ||
325 | "outputs": [ | ||
326 | { | ||
327 | "name": "stdout", | ||
328 | "output_type": "stream", | ||
329 | "text": [ | ||
330 | "../input/Human\\151_run_1.csv\n", | ||
331 | "../input/Human\\151_run_1.csv\n" | ||
332 | ] | ||
333 | } | ||
334 | ], | ||
335 | "source": [ | ||
336 | "mpc_rep_index = findRep(models, lambda m: m.mpc)\n", | ||
337 | "print(list(modelToFileName.values())[mpc_rep_index])\n", | ||
338 | "mpc_rep_model = models[mpc_rep_index]\n", | ||
339 | "print(modelToFileName[mpc_rep_model])" | ||
340 | ] | ||
341 | }, | ||
342 | { | ||
343 | "cell_type": "code", | ||
344 | "execution_count": 11, | ||
345 | "metadata": {}, | ||
346 | "outputs": [ | ||
347 | { | ||
348 | "name": "stdout", | ||
349 | "output_type": "stream", | ||
350 | "text": [ | ||
351 | "average distance: 0.07028909225833632\n", | ||
352 | "median: 0.06254480286738351\n", | ||
353 | "std: 0.037281890512224164\n", | ||
354 | "max: 0.21961550993809065\n", | ||
355 | "min: 0.0\n" | ||
356 | ] | ||
357 | } | ||
358 | ], | ||
359 | "source": [ | ||
360 | "distances = []\n", | ||
361 | "for model in models:\n", | ||
362 | " distances.append(ks_value(mpc_rep_model.mpc, model.mpc))\n", | ||
363 | "print('average distance: ', np.mean(distances))\n", | ||
364 | "print('median: ', np.median(distances))\n", | ||
365 | "print('std: ', np.std(distances))\n", | ||
366 | "print('max:', max(distances))\n", | ||
367 | "print('min:', min(distances))" | ||
368 | ] | ||
369 | } | ||
370 | ], | ||
371 | "metadata": { | ||
372 | "kernelspec": { | ||
373 | "display_name": "Python 3", | ||
374 | "language": "python", | ||
375 | "name": "python3" | ||
376 | }, | ||
377 | "language_info": { | ||
378 | "codemirror_mode": { | ||
379 | "name": "ipython", | ||
380 | "version": 3 | ||
381 | }, | ||
382 | "file_extension": ".py", | ||
383 | "mimetype": "text/x-python", | ||
384 | "name": "python", | ||
385 | "nbconvert_exporter": "python", | ||
386 | "pygments_lexer": "ipython3", | ||
387 | "version": "3.7.3" | ||
388 | } | ||
389 | }, | ||
390 | "nbformat": 4, | ||
391 | "nbformat_minor": 2 | ||
392 | } | ||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/type_analysis/input/.gitignore b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/input/.gitignore new file mode 100644 index 00000000..b3934b01 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/input/.gitignore | |||
@@ -0,0 +1,3 @@ | |||
1 | # ignore everything in this folder | ||
2 | * | ||
3 | !.gitignore \ No newline at end of file | ||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/Node Type Analysis.ipynb b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/Node Type Analysis.ipynb new file mode 100644 index 00000000..b4e3432a --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/Node Type Analysis.ipynb | |||
@@ -0,0 +1,435 @@ | |||
1 | { | ||
2 | "cells": [ | ||
3 | { | ||
4 | "cell_type": "code", | ||
5 | "execution_count": 2, | ||
6 | "metadata": {}, | ||
7 | "outputs": [], | ||
8 | "source": [ | ||
9 | "import os, sys\n", | ||
10 | "import glob\n", | ||
11 | "lib_path = os.path.abspath(os.path.join('..', '..', 'utils'))\n", | ||
12 | "sys.path.append(lib_path)\n", | ||
13 | "import matplotlib.pyplot as plt\n", | ||
14 | "from GraphType import GraphStat\n", | ||
15 | "import readCSV as reader\n", | ||
16 | "import constants" | ||
17 | ] | ||
18 | }, | ||
19 | { | ||
20 | "cell_type": "code", | ||
21 | "execution_count": 3, | ||
22 | "metadata": {}, | ||
23 | "outputs": [], | ||
24 | "source": [ | ||
25 | "def getModels(folderName, numberOfModels):\n", | ||
26 | " filenames = reader.readmultiplefiles(folderName, numberOfModels, False)\n", | ||
27 | " graphStats = [GraphStat(filename) for filename in filenames]\n", | ||
28 | " return graphStats" | ||
29 | ] | ||
30 | }, | ||
31 | { | ||
32 | "cell_type": "code", | ||
33 | "execution_count": 4, | ||
34 | "metadata": {}, | ||
35 | "outputs": [], | ||
36 | "source": [ | ||
37 | "def drawTypeDistributions(folderName, numberOfModels):\n", | ||
38 | " graphStats = getModels(folderName, numberOfModels)\n", | ||
39 | " typeMap = {}\n", | ||
40 | " keys = set()\n", | ||
41 | " for g in graphStats:\n", | ||
42 | " keys = keys.union(set(g.nodeTypeStat.keys()))\n", | ||
43 | " for key in keys:\n", | ||
44 | " typeMap[key] = [float(g.nodeTypeStat.get(key,0)) for g in graphStats]\n", | ||
45 | " print(list(typeMap.keys()))\n", | ||
46 | " for i, key in enumerate(typeMap.keys()):\n", | ||
47 | " plt.figure(i)\n", | ||
48 | " plt.hist(typeMap[key], range = (0,1), bins=50)\n", | ||
49 | " plt.title(key)\n", | ||
50 | " plt.plot()" | ||
51 | ] | ||
52 | }, | ||
53 | { | ||
54 | "cell_type": "code", | ||
55 | "execution_count": 4, | ||
56 | "metadata": { | ||
57 | "scrolled": true | ||
58 | }, | ||
59 | "outputs": [ | ||
60 | { | ||
61 | "name": "stdout", | ||
62 | "output_type": "stream", | ||
63 | "text": [ | ||
64 | "['EPackage', 'EAttribute', 'EEnumLiteral', 'EGenericType', 'EAnnotation', 'EOperation', 'EEnum', 'ETypeParameter', 'EParameter', 'EReference', 'EClass', 'EStringToStringMapEntry', 'EDataType']\n" | ||
65 | ] | ||
66 | }, | ||
67 | { | ||
68 | "data": { | ||
69 | "image/png": "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\n", | ||
70 | "text/plain": [ | ||
71 | "<Figure size 432x288 with 1 Axes>" | ||
72 | ] | ||
73 | }, | ||
74 | "metadata": { | ||
75 | "needs_background": "light" | ||
76 | }, | ||
77 | "output_type": "display_data" | ||
78 | }, | ||
79 | { | ||
80 | "data": { | ||
81 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAEICAYAAABGaK+TAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAATH0lEQVR4nO3df5BlZ13n8feHDDEmhs2vTswmGSaUY5YUJYHtwiC1LDBgBYLMlIZsosKwNTIbV1wVqzSrZSmrVoWtXaNbpoCRIL1bECZEcEbwFw6JKAujExJ+JIFNiCHMZjLTSAYFFAh89497hvT2dM893X3v7X5m3q+qW/f8uvd8n749n37mOfeck6pCktSeJ612AZKk5THAJalRBrgkNcoAl6RGGeCS1CgDXJIaZYBLQJI3J/mVbvoFSfavdk3SMAa41pwkDyX5pyRfnvP43TnrX5CkkvzCvNdt6Javm7PsNUn+etg+q+q6qvr1EdVfSb5nFO8lHYsBrrXqh6rqu+Y8Xjdn3Vbgi93ziiU5aRTvI02aAa6mJDkVuAr4KWBjkuk5qz/UPR/ueu3PBd4MPLebP9y9x9uTvCnJHyf5CvDCbtlvzNvXLyX5Qvc/gh+bs/yOJD8xZ/7bvfwkR2r4eLfPf9ctf3mSu5McTvK/k3zfSH8wOiEZ4GrNjwBfBt4N/Bnw6jnrnt89n9H12j8CXAd8pJs/Y862Pwr8JnA6sNAQy3cD5wAXMOjp70hyybDiqupIDc/s9rkzybOBtwH/ATgbeAuwO8l39GqxtAgDXGvVH3a91SOP13bLtwI7q+qbwDuBa5M8eRnvv6uqPlxV36qqf15km1+pqq9V1V8C7weuXsZ+AF4LvKWq9lbVN6tqBvgacPky308CDHCtXVuq6ow5j99LchHwQuAd3Ta7gFOAK5fx/p8fsv6xqvrKnPnPAf9yGfsBeCrw83P/IAEXreD9JMAAV1texeB39o+SPAo8yCDAjwyjLHRpzcUutznsMpxnJjltzvx64JFu+ivAqXPWffeQ9/o88Jvz/iCdWlW3DHmddEwGuFryauANwGVzHj8CXJnkbGAW+BbwtDmvOQhcmOTkZezvDUlOTvJvgJczGHcHuBv44SSndl8X3DbvdQfn1fB7wHVJvj8DpyW5Msnpy6hJ+jYDXGvVH837HvjtwAbgpqp6dM5jN/AAcG1VfZXBgckPd0MVlwMfBO4BHk3yhSXs/1HgMQa97ncA11XVp7t1NwJfZxDUMzwxpHPErwEzXQ1XV9U+BuPgv9u95wPAa5b005AWEG/oIEltsgcuSY0ywCWpUQa4JDXKAJekRq0bvsnonHPOObVhw4ZJ7lKSmnfnnXd+oaqm5i+faIBv2LCBffv2TXKXktS8JJ9baLlDKJLUKANckhplgEtSowxwSWqUAS5JjTLAJalRvQI8yc8luSfJp5LckuSUJBcn2Zvk/iQ7l3m5TknSMg0N8CQXAP8JmK6qZwAnAdcAbwRurKqNDC6ROf+ayJKkMeo7hLIO+M4k6xjcieQA8CLgtm79DLBl9OVJkhYz9EzMqvq/Sf4b8DDwT8CfA3cCh6vq8W6z/Qzu3n2UJNuB7QDr169fdqEbrn//gssfumE5t0OUpPb1GUI5E9gMXMzgJqynAS9dYNMF7wxRVTuqarqqpqemjjqVX5K0TH2GUF4M/F1VzVbVN4D3AD8AnNENqQBcyBM3fJUkTUCfAH8YuLy7gWuATcC9wO3AVd02W4Fd4ylRkrSQoQFeVXsZHKz8GPDJ7jU7gF8EXp/kAeBs4OYx1ilJmqfX5WSr6leBX523+EHgOSOvSJLUi2diSlKjDHBJapQBLkmNMsAlqVEGuCQ1ygCXpEYZ4JLUKANckhplgEtSowxwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIa1eemxpckuXvO4x+S/GySs5J8IMn93fOZkyhYkjTQ55Zqn6mqy6rqMuBfA18F3gtcD+ypqo3Anm5ekjQhSx1C2QR8tqo+B2wGZrrlM8CWURYmSTq2pQb4NcAt3fR5VXUAoHs+d5SFSZKOrXeAJzkZeAXw7qXsIMn2JPuS7JudnV1qfZKkRSylB/5S4GNVdbCbP5jkfIDu+dBCL6qqHVU1XVXTU1NTK6tWkvRtSwnwa3li+ARgN7C1m94K7BpVUZKk4XoFeJJTgZcA75mz+AbgJUnu79bdMPryJEmLWddno6r6KnD2vGV/z+BbKZKkVeCZmJLUKANckhplgEtSowxwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIaZYBLUqMMcElqlAEuSY0ywCWpUQa4JDXKAJekRhngktSovrdUOyPJbUk+neS+JM9NclaSDyS5v3s+c9zFSpKe0LcH/jvAn1bVvwKeCdwHXA/sqaqNwJ5uXpI0IUMDPMlTgOcDNwNU1der6jCwGZjpNpsBtoyrSEnS0fr0wJ8GzAK/n+SuJG9NchpwXlUdAOiez13oxUm2J9mXZN/s7OzICpekE12fAF8HPBt4U1U9C/gKSxguqaodVTVdVdNTU1PLLFOSNF+fAN8P7K+qvd38bQwC/WCS8wG650PjKVGStJChAV5VjwKfT3JJt2gTcC+wG9jaLdsK7BpLhZKkBa3rud1PA+9IcjLwIPDvGYT/rUm2AQ8DrxxPiZKkhfQK8Kq6G5heYNWm0ZYjSerLMzElqVEGuCQ1ygCXpEYZ4JLUKANckhplgEtSowxwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIaZYBLUqMMcElqlAEuSY0ywCWpUb3uyJPkIeAfgW8Cj1fVdJKzgJ3ABuAh4Oqqemw8ZUqS5ltKD/yFVXVZVR25tdr1wJ6q2gjs6eYlSROykiGUzcBMNz0DbFl5OZKkvvoGeAF/nuTOJNu7ZedV1QGA7vnchV6YZHuSfUn2zc7OrrxiSRLQcwwceF5VPZLkXOADST7ddwdVtQPYATA9PV3LqFGStIBePfCqeqR7PgS8F3gOcDDJ+QDd86FxFSlJOtrQAE9yWpLTj0wDPwh8CtgNbO022wrsGleRkqSj9RlCOQ94b5Ij27+zqv40yd8CtybZBjwMvHJ8ZUqS5hsa4FX1IPDMBZb/PbBpHEVJkobzTExJapQBLkmNMsAlqVEGuCQ1ygCXpEYZ4JLUKANckhplgEtSowxwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIa1feemFqCDde/f8HlD91w5YQrkXQ8swcuSY3qHeBJTkpyV5L3dfMXJ9mb5P4kO5OcPL4yJUnzLWUI5WeA+4CndPNvBG6sqncleTOwDXjTiOsbubU4vLEWa5K09vXqgSe5ELgSeGs3H+BFwG3dJjPAlnEUKElaWN8hlN8GfgH4Vjd/NnC4qh7v5vcDFyz0wiTbk+xLsm92dnZFxUqSnjA0wJO8HDhUVXfOXbzAprXQ66tqR1VNV9X01NTUMsuUJM3XZwz8ecArkrwMOIXBGPhvA2ckWdf1wi8EHhlfmZKk+Yb2wKvqP1fVhVW1AbgG+GBV/RhwO3BVt9lWYNfYqpQkHWUl3wP/ReD1SR5gMCZ+82hKkiT1saQzMavqDuCObvpB4DmjL0mS1IdnYkpSowxwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1Kjj9o48i12idZTv4+VeJa0me+CS1CgDXJIaddwOoSzVqIZcJGlS7IFLUqMMcElqlAEuSY0ywCWpUQa4JDXKAJekRvW5K/0pSf4myceT3JPkDd3yi5PsTXJ/kp1JTh5/uZKkI/r0wL8GvKiqnglcBlyR5HLgjcCNVbUReAzYNr4yJUnz9bkrfVXVl7vZJ3ePAl4E3NYtnwG2jKVCSdKCep2JmeQk4E7ge4CbgM8Ch6vq8W6T/cAFi7x2O7AdYP369Sutt2me7SlplHodxKyqb1bVZcCFDO5E//SFNlvktTuqarqqpqemppZfqSTp/7Okb6FU1WHgDuBy4IwkR3rwFwKPjLY0SdKxDB1CSTIFfKOqDif5TuDFDA5g3g5cBbwL2ArsGmehGm6xIRqvWy4dn/qMgZ8PzHTj4E8Cbq2q9yW5F3hXkt8A7gJuHmOdkqR5hgZ4VX0CeNYCyx9kMB6uCfNgqCTwTExJapYBLkmNMsAlqVEGuCQ1yntiroAHEyWtJnvgktQoA1ySGuUQyho2qiGaUZ2heax6PNtTmjx74JLUKANckhplgEtSowxwSWpU8wcx/S62pBOVPXBJapQBLkmNan4IRaPnsJTUBnvgktSooQGe5KIktye5L8k9SX6mW35Wkg8kub97PnP85UqSjujTA38c+PmqejqDu9H/VJJLgeuBPVW1EdjTzUuSJmRogFfVgar6WDf9j8B9wAXAZmCm22wG2DKuIiVJR1vSQcwkGxjc4HgvcF5VHYBByCc5d5HXbAe2A6xfv34ltapBo7qQlqSj9T6ImeS7gD8Afraq/qHv66pqR1VNV9X01NTUcmqUJC2gV4AneTKD8H5HVb2nW3wwyfnd+vOBQ+MpUZK0kD7fQglwM3BfVf3WnFW7ga3d9FZg1+jLkyQtps8Y+POAVwGfTHJ3t+yXgBuAW5NsAx4GXjmeEiVJCxka4FX110AWWb1ptOVokjzjUmqbZ2JKUqMMcElqlBez0kg4HCNNnj1wSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIa5ffAtSq8Tri0cvbAJalR9sDVBHvs0tHsgUtSowxwSWqUQyhaU7woltSfPXBJatTQHniStwEvBw5V1TO6ZWcBO4ENwEPA1VX12PjKlJbGg546EfTpgb8duGLesuuBPVW1EdjTzUuSJmhogFfVh4Avzlu8GZjppmeALSOuS5I0xHLHwM+rqgMA3fO5i22YZHuSfUn2zc7OLnN3kqT5xn4Qs6p2VNV0VU1PTU2Ne3eSdMJYboAfTHI+QPd8aHQlSZL6WG6A7wa2dtNbgV2jKUeS1NfQAE9yC/AR4JIk+5NsA24AXpLkfuAl3bwkaYKGfg+8qq5dZNWmEdciLZlnbupE5pmYktQoA1ySGuXFrHRC8RR7HU/sgUtSo+yBS9gzV5vsgUtSowxwSWqUAS5JjTLAJalRHsSUlmGUBz09gKrlsgcuSY0ywCWpUQ6hSMeJpQ7FOHTTPnvgktQoA1ySGuUQinQMo7zeuNcu16jZA5ekRq2oB57kCuB3gJOAt1aVt1aTRmS1euxr8eDmUn8WJ8qB2GX3wJOcBNwEvBS4FLg2yaWjKkySdGwrGUJ5DvBAVT1YVV8H3gVsHk1ZkqRhUlXLe2FyFXBFVf1EN/8q4Pur6nXzttsObO9mLwE+s8xazwG+sMzXtso2nxhs8/Fvpe19alVNzV+4kjHwLLDsqL8GVbUD2LGC/Qx2luyrqumVvk9LbPOJwTYf/8bV3pUMoewHLpozfyHwyMrKkST1tZIA/1tgY5KLk5wMXAPsHk1ZkqRhlj2EUlWPJ3kd8GcMvkb4tqq6Z2SVHW3FwzANss0nBtt8/BtLe5d9EFOStLo8E1OSGmWAS1Kj1lyAJ7kiyWeSPJDk+gXWf0eSnd36vUk2TL7K0erR5tcnuTfJJ5LsSfLU1ahzlIa1ec52VyWpJE1/5axPe5Nc3X3O9yR556RrHLUev9frk9ye5K7ud/tlq1HnKCV5W5JDST61yPok+R/dz+QTSZ69oh1W1Zp5MDgY+lngacDJwMeBS+dt8x+BN3fT1wA7V7vuCbT5hcCp3fRPnght7rY7HfgQ8FFgerXrHvNnvBG4Czizmz93teueQJt3AD/ZTV8KPLTadY+g3c8Hng18apH1LwP+hMF5NJcDe1eyv7XWA+9zev5mYKabvg3YlGShk4paMbTNVXV7VX21m/0og+/ct6zvZRh+HfivwD9Psrgx6NPe1wI3VdVjAFV1aMI1jlqfNhfwlG76X3AcnEdSVR8CvniMTTYD/7MGPgqckeT85e5vrQX4BcDn58zv75YtuE1VPQ58CTh7ItWNR582z7WNwV/wlg1tc5JnARdV1fsmWdiY9PmMvxf43iQfTvLR7kqfLevT5l8DfjzJfuCPgZ+eTGmraqn/3o9prd3Qoc/p+b1O4W9I7/Yk+XFgGvi3Y61o/I7Z5iRPAm4EXjOpgsasz2e8jsEwygsY/A/rr5I8o6oOj7m2cenT5muBt1fVf0/yXOB/dW3+1vjLWzUjza+11gPvc3r+t7dJso7Bf72O9V+Wta7XJQmSvBj4ZeAVVfW1CdU2LsPafDrwDOCOJA8xGCvc3fCBzL6/17uq6htV9XcMLvq2cUL1jUOfNm8DbgWoqo8ApzC46NPxbKSXIFlrAd7n9PzdwNZu+irgg9UdHWjU0DZ3wwlvYRDerY+NwpA2V9WXquqcqtpQVRsYjPu/oqr2rU65K9bn9/oPGRysJsk5DIZUHpxolaPVp80PA5sAkjydQYDPTrTKydsNvLr7NsrlwJeq6sCy3221j9oucpT2/zA4gv3L3bL/wuAfMAw+5HcDDwB/AzxttWueQJv/AjgI3N09dq92zeNu87xt76Dhb6H0/IwD/BZwL/BJ4JrVrnkCbb4U+DCDb6jcDfzgatc8gjbfAhwAvsGgt70NuA64bs7nfFP3M/nkSn+vPZVekhq11oZQJEk9GeCS1CgDXJIaZYBLUqMMcElqlAEuSY0ywCWpUf8PL6yPJS1j+0kAAAAASUVORK5CYII=\n", | ||
82 | "text/plain": [ | ||
83 | "<Figure size 432x288 with 1 Axes>" | ||
84 | ] | ||
85 | }, | ||
86 | "metadata": { | ||
87 | "needs_background": "light" | ||
88 | }, | ||
89 | "output_type": "display_data" | ||
90 | }, | ||
91 | { | ||
92 | "data": { | ||
93 | "image/png": "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\n", | ||
94 | "text/plain": [ | ||
95 | "<Figure size 432x288 with 1 Axes>" | ||
96 | ] | ||
97 | }, | ||
98 | "metadata": { | ||
99 | "needs_background": "light" | ||
100 | }, | ||
101 | "output_type": "display_data" | ||
102 | }, | ||
103 | { | ||
104 | "data": { | ||
105 | "image/png": "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\n", | ||
106 | "text/plain": [ | ||
107 | "<Figure size 432x288 with 1 Axes>" | ||
108 | ] | ||
109 | }, | ||
110 | "metadata": { | ||
111 | "needs_background": "light" | ||
112 | }, | ||
113 | "output_type": "display_data" | ||
114 | }, | ||
115 | { | ||
116 | "data": { | ||
117 | "image/png": "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\n", | ||
118 | "text/plain": [ | ||
119 | "<Figure size 432x288 with 1 Axes>" | ||
120 | ] | ||
121 | }, | ||
122 | "metadata": { | ||
123 | "needs_background": "light" | ||
124 | }, | ||
125 | "output_type": "display_data" | ||
126 | }, | ||
127 | { | ||
128 | "data": { | ||
129 | "image/png": "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\n", | ||
130 | "text/plain": [ | ||
131 | "<Figure size 432x288 with 1 Axes>" | ||
132 | ] | ||
133 | }, | ||
134 | "metadata": { | ||
135 | "needs_background": "light" | ||
136 | }, | ||
137 | "output_type": "display_data" | ||
138 | }, | ||
139 | { | ||
140 | "data": { | ||
141 | "image/png": "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\n", | ||
142 | "text/plain": [ | ||
143 | "<Figure size 432x288 with 1 Axes>" | ||
144 | ] | ||
145 | }, | ||
146 | "metadata": { | ||
147 | "needs_background": "light" | ||
148 | }, | ||
149 | "output_type": "display_data" | ||
150 | }, | ||
151 | { | ||
152 | "data": { | ||
153 | "image/png": "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\n", | ||
154 | "text/plain": [ | ||
155 | "<Figure size 432x288 with 1 Axes>" | ||
156 | ] | ||
157 | }, | ||
158 | "metadata": { | ||
159 | "needs_background": "light" | ||
160 | }, | ||
161 | "output_type": "display_data" | ||
162 | }, | ||
163 | { | ||
164 | "data": { | ||
165 | "image/png": "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\n", | ||
166 | "text/plain": [ | ||
167 | "<Figure size 432x288 with 1 Axes>" | ||
168 | ] | ||
169 | }, | ||
170 | "metadata": { | ||
171 | "needs_background": "light" | ||
172 | }, | ||
173 | "output_type": "display_data" | ||
174 | }, | ||
175 | { | ||
176 | "data": { | ||
177 | "image/png": "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\n", | ||
178 | "text/plain": [ | ||
179 | "<Figure size 432x288 with 1 Axes>" | ||
180 | ] | ||
181 | }, | ||
182 | "metadata": { | ||
183 | "needs_background": "light" | ||
184 | }, | ||
185 | "output_type": "display_data" | ||
186 | }, | ||
187 | { | ||
188 | "data": { | ||
189 | "image/png": "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\n", | ||
190 | "text/plain": [ | ||
191 | "<Figure size 432x288 with 1 Axes>" | ||
192 | ] | ||
193 | }, | ||
194 | "metadata": { | ||
195 | "needs_background": "light" | ||
196 | }, | ||
197 | "output_type": "display_data" | ||
198 | }, | ||
199 | { | ||
200 | "data": { | ||
201 | "image/png": "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\n", | ||
202 | "text/plain": [ | ||
203 | "<Figure size 432x288 with 1 Axes>" | ||
204 | ] | ||
205 | }, | ||
206 | "metadata": { | ||
207 | "needs_background": "light" | ||
208 | }, | ||
209 | "output_type": "display_data" | ||
210 | }, | ||
211 | { | ||
212 | "data": { | ||
213 | "image/png": "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\n", | ||
214 | "text/plain": [ | ||
215 | "<Figure size 432x288 with 1 Axes>" | ||
216 | ] | ||
217 | }, | ||
218 | "metadata": { | ||
219 | "needs_background": "light" | ||
220 | }, | ||
221 | "output_type": "display_data" | ||
222 | } | ||
223 | ], | ||
224 | "source": [ | ||
225 | "drawTypeDistributions('../input/human/', 1500)" | ||
226 | ] | ||
227 | }, | ||
228 | { | ||
229 | "cell_type": "code", | ||
230 | "execution_count": 5, | ||
231 | "metadata": { | ||
232 | "scrolled": true | ||
233 | }, | ||
234 | "outputs": [ | ||
235 | { | ||
236 | "name": "stdout", | ||
237 | "output_type": "stream", | ||
238 | "text": [ | ||
239 | "[]\n" | ||
240 | ] | ||
241 | } | ||
242 | ], | ||
243 | "source": [ | ||
244 | "drawTypeDistributions('../input/viatra_75/', 50)" | ||
245 | ] | ||
246 | }, | ||
247 | { | ||
248 | "cell_type": "markdown", | ||
249 | "metadata": {}, | ||
250 | "source": [ | ||
251 | "## Extract Human Models with size [90, 101]" | ||
252 | ] | ||
253 | }, | ||
254 | { | ||
255 | "cell_type": "code", | ||
256 | "execution_count": 6, | ||
257 | "metadata": {}, | ||
258 | "outputs": [], | ||
259 | "source": [ | ||
260 | "def extractModel():\n", | ||
261 | " from shutil import copy\n", | ||
262 | " list_of_files = reader.readmultiplefiles('../input/humanOutput/', 5000)\n", | ||
263 | " num_nodes_list =[]\n", | ||
264 | " human_size_dic = {}\n", | ||
265 | " for file in list_of_files:\n", | ||
266 | " contents = reader.readcsvfile(file)\n", | ||
267 | " num_of_node = contents[constants.NUMBER_NODES]\n", | ||
268 | " # human_size_dic[file] = int(num_of_node[0])\n", | ||
269 | " # num_nodes_list.append(int(num_of_node[0]))\n", | ||
270 | " if 90 <= num_of_node[0] <= 110:\n", | ||
271 | " copy(file, '../input/human_output_100/')" | ||
272 | ] | ||
273 | }, | ||
274 | { | ||
275 | "cell_type": "markdown", | ||
276 | "metadata": {}, | ||
277 | "source": [ | ||
278 | "## Multinomial Distribution Analysis" | ||
279 | ] | ||
280 | }, | ||
281 | { | ||
282 | "cell_type": "code", | ||
283 | "execution_count": 7, | ||
284 | "metadata": {}, | ||
285 | "outputs": [ | ||
286 | { | ||
287 | "name": "stdout", | ||
288 | "output_type": "stream", | ||
289 | "text": [ | ||
290 | "0.9999999999999998\n", | ||
291 | "{'EAttribute': 0.23539778449144008, 'EClass': 0.30996978851963747, 'EReference': 0.33081570996978854, 'EPackage': 0.012789526686807653, 'EAnnotation': 0.002517623363544813, 'EEnumLiteral': 0.07275931520644502, 'EEnum': 0.013645518630412891, 'EDataType': 0.004028197381671702, 'EParameter': 0.005941591137965764, 'EGenericType': 0.002014098690835851, 'EOperation': 0.009415911379657605, 'ETypeParameter': 0.0007049345417925478}\n" | ||
292 | ] | ||
293 | } | ||
294 | ], | ||
295 | "source": [ | ||
296 | "import numpy as np\n", | ||
297 | "import scipy.stats as stats\n", | ||
298 | "graphStats = getModels('../input/human_30_500_no_xml/', 1500)\n", | ||
299 | "totalNodes = 0\n", | ||
300 | "typeMap = {}\n", | ||
301 | "for g in graphStats:\n", | ||
302 | " gKeys = g.nodeTypeStat.keys()\n", | ||
303 | " size = g.numNodes[0]\n", | ||
304 | " totalNodes += size\n", | ||
305 | " for key in gKeys:\n", | ||
306 | " curNum = typeMap.get(key, 0)\n", | ||
307 | " typeMap[key] = curNum + float(g.nodeTypeStat[key]) * size\n", | ||
308 | " \n", | ||
309 | "for key in typeMap.keys():\n", | ||
310 | " typeMap[key] /= totalNodes\n", | ||
311 | "print(sum(typeMap.values()))\n", | ||
312 | "print(typeMap)" | ||
313 | ] | ||
314 | }, | ||
315 | { | ||
316 | "cell_type": "code", | ||
317 | "execution_count": 8, | ||
318 | "metadata": {}, | ||
319 | "outputs": [], | ||
320 | "source": [ | ||
321 | "def chiSquareMultinomialTest(freq, prob):\n", | ||
322 | " freq = np.array(freq)\n", | ||
323 | " prob = np.array(prob)\n", | ||
324 | " size = sum(freq)\n", | ||
325 | " e = prob * size\n", | ||
326 | " return stats.chisquare(freq, e)" | ||
327 | ] | ||
328 | }, | ||
329 | { | ||
330 | "cell_type": "code", | ||
331 | "execution_count": 9, | ||
332 | "metadata": {}, | ||
333 | "outputs": [], | ||
334 | "source": [ | ||
335 | "def typeDistributionTest(g):\n", | ||
336 | " size = g.numNodes[0]\n", | ||
337 | " freq = []\n", | ||
338 | " prob = []\n", | ||
339 | " for key in typeMap.keys():\n", | ||
340 | " value = float(g.nodeTypeStat.get(key, 0))\n", | ||
341 | " freq.append(np.round(value * size))\n", | ||
342 | " prob.append(typeMap[key])\n", | ||
343 | " test = chiSquareMultinomialTest(freq, prob)\n", | ||
344 | " return test" | ||
345 | ] | ||
346 | }, | ||
347 | { | ||
348 | "cell_type": "code", | ||
349 | "execution_count": 32, | ||
350 | "metadata": {}, | ||
351 | "outputs": [ | ||
352 | { | ||
353 | "name": "stdout", | ||
354 | "output_type": "stream", | ||
355 | "text": [ | ||
356 | "[7.26359261e+01 6.82490355e-02]\n", | ||
357 | "[3.31848655e+01 1.59841378e-03]\n" | ||
358 | ] | ||
359 | } | ||
360 | ], | ||
361 | "source": [ | ||
362 | "test = [typeDistributionTest(graphStats[i]) for i in range(len(graphStats))]\n", | ||
363 | "print(np.mean(test, 0))\n", | ||
364 | "print(np.median(test, 0))" | ||
365 | ] | ||
366 | }, | ||
367 | { | ||
368 | "cell_type": "markdown", | ||
369 | "metadata": {}, | ||
370 | "source": [ | ||
371 | "## Node Counts Distribution" | ||
372 | ] | ||
373 | }, | ||
374 | { | ||
375 | "cell_type": "code", | ||
376 | "execution_count": 5, | ||
377 | "metadata": {}, | ||
378 | "outputs": [], | ||
379 | "source": [ | ||
380 | "import matplotlib.pyplot as plt\n", | ||
381 | "from shutil import copyfile\n", | ||
382 | "import statistics \n", | ||
383 | "\n", | ||
384 | "graphStats = getModels('../input/human/', 1500)\n", | ||
385 | "sizes = []\n", | ||
386 | "filenames = reader.readmultiplefiles('../input/human/', 1500, False)\n", | ||
387 | "count = 1\n", | ||
388 | "for filename in filenames:\n", | ||
389 | " graphStat = GraphStat(filename)\n", | ||
390 | " size = graphStat.numNodes[0]\n", | ||
391 | " if size >= 30 and size <= 500 and not ('EAnnotation' in graphStat.nodeTypeStat.keys() and 'EStringToStringMapEntry' in graphStat.nodeTypeStat.keys()):\n", | ||
392 | " copyfile(filename, filename.replace('human', 'human_30_500_no_xml'))\n", | ||
393 | " \n", | ||
394 | " \n", | ||
395 | "# for g in graphStats:\n", | ||
396 | "# size = g.numNodes[0]\n", | ||
397 | "# if size >= 30 and size <= 500 and not ('EAnnotation' in g.nodeTypeStat.keys() and 'EStringToStringMapEntry' in g.nodeTypeStat.keys()):\n", | ||
398 | "# sizes.append(g.numNodes[0])\n", | ||
399 | "# print(max(sizes))\n", | ||
400 | "# print(min(sizes))\n", | ||
401 | "# print(statistics.mean(sizes))\n", | ||
402 | "# print(len(sizes))\n", | ||
403 | "# plt.hist(sizes, bins=10)\n" | ||
404 | ] | ||
405 | }, | ||
406 | { | ||
407 | "cell_type": "code", | ||
408 | "execution_count": null, | ||
409 | "metadata": {}, | ||
410 | "outputs": [], | ||
411 | "source": [] | ||
412 | } | ||
413 | ], | ||
414 | "metadata": { | ||
415 | "kernelspec": { | ||
416 | "display_name": "Python 3", | ||
417 | "language": "python", | ||
418 | "name": "python3" | ||
419 | }, | ||
420 | "language_info": { | ||
421 | "codemirror_mode": { | ||
422 | "name": "ipython", | ||
423 | "version": 3 | ||
424 | }, | ||
425 | "file_extension": ".py", | ||
426 | "mimetype": "text/x-python", | ||
427 | "name": "python", | ||
428 | "nbconvert_exporter": "python", | ||
429 | "pygments_lexer": "ipython3", | ||
430 | "version": "3.7.3" | ||
431 | } | ||
432 | }, | ||
433 | "nbformat": 4, | ||
434 | "nbformat_minor": 2 | ||
435 | } | ||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/plot_violation.py b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/plot_violation.py new file mode 100644 index 00000000..e5e12f42 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/plot_violation.py | |||
@@ -0,0 +1,77 @@ | |||
1 | import matplotlib.pyplot as plt | ||
2 | import numpy as np | ||
3 | import cdf_histogram as cdf | ||
4 | import readCSV as reader | ||
5 | import constants | ||
6 | import csv | ||
7 | from shutil import copy | ||
8 | |||
9 | |||
10 | # viatra_controlled = np.genfromtxt('../statistics/violations/viatra_controlled.csv', delimiter='\n') | ||
11 | # viatra_controlled_mean = np.mean(viatra_controlled) | ||
12 | # viatra_nocons = np.genfromtxt('../statistics/violations/viatra_no_cons_violation.csv', delimiter='\n') | ||
13 | # viatra_nocons_mean = np.mean(viatra_nocons) | ||
14 | # human = np.genfromtxt('../statistics/violations/human_violation.csv', delimiter='\n') | ||
15 | # human_mean = np.mean(human) | ||
16 | # print('viatra controlled violation mean: ' + str(viatra_controlled_mean)) | ||
17 | # print('viatra no cons violation mean: ' + str(viatra_nocons_mean)) | ||
18 | # print('human output violation mean: ' + str(human_mean)) | ||
19 | |||
20 | |||
21 | def read_violation_file(file_name): | ||
22 | violation = {} | ||
23 | with open(file_name) as f: | ||
24 | for i, line in enumerate(f): | ||
25 | line = int(line.rstrip()) | ||
26 | if line in violation: | ||
27 | violation[line] += 1 | ||
28 | else: | ||
29 | violation[line] = 1 | ||
30 | f.close() | ||
31 | return violation | ||
32 | |||
33 | # violation = read_violation_file('../statistics/violations/viatra_controlled.csv') | ||
34 | # print(violation) | ||
35 | # fig, ax = plt.subplots() | ||
36 | # rects = ax.bar(violation.keys(), violation.values()) | ||
37 | # cdf.autolabel(rects, ax) | ||
38 | # ax.set_title('viatra controlled violation distribution') | ||
39 | # ax.set_xlabel('number of violations') | ||
40 | # ax.set_ylabel('number of occurrence') | ||
41 | # plt.show() | ||
42 | # fig.savefig('../statistics/violations/viatra_controlled_violation_distribution.png') | ||
43 | |||
44 | |||
45 | def plot_violation(): | ||
46 | v = np.array([0,1,1,0,0]) | ||
47 | print(v) | ||
48 | (n, bins) = np.histogram(v, bins=v.size, density=True) # NumPy version (no plot) | ||
49 | # plt.plot(.5 * (bins[1:] + bins[:-1]), n) | ||
50 | plt.hist(v, bins=50, density=1) | ||
51 | plt.show() | ||
52 | |||
53 | |||
54 | def human_output_size(): | ||
55 | list_of_files = reader.readmultiplefiles('../statistics/humanOutput/', 5000) | ||
56 | num_nodes_list =[] | ||
57 | human_size_dic = {} | ||
58 | for file in list_of_files: | ||
59 | contents = reader.readcsvfile(file) | ||
60 | num_of_node = contents[constants.NUMBER_NODES] | ||
61 | # human_size_dic[file] = int(num_of_node[0]) | ||
62 | # num_nodes_list.append(int(num_of_node[0])) | ||
63 | if 90 <= num_of_node[0] <= 110: | ||
64 | copy(file, '../statistics/human_output_100/') | ||
65 | |||
66 | # mean = np.mean(num_nodes_list) | ||
67 | # std = np.std(num_nodes_list) | ||
68 | # with open('../statistics/human_output_size.csv', 'w', newline='') as csvfile: | ||
69 | # spamwriter = csv.writer(csvfile, delimiter=',', | ||
70 | # quotechar='|', quoting=csv.QUOTE_MINIMAL) | ||
71 | # spamwriter.writerow(['mean', mean]) | ||
72 | # spamwriter.writerow(['standard deviation', std]) | ||
73 | # for key, value in human_size_dic.items(): | ||
74 | # spamwriter.writerow([key, value]) | ||
75 | |||
76 | |||
77 | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py b/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py new file mode 100644 index 00000000..cf532bc5 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py | |||
@@ -0,0 +1,53 @@ | |||
1 | from scipy import stats | ||
2 | from scipy.spatial import distance | ||
3 | |||
4 | def ks_distance(samples1, samples2): | ||
5 | value, p = stats.ks_2samp(samples1, samples2) | ||
6 | return (value, p) | ||
7 | |||
8 | def manual_ks(pdf1, pdf2): | ||
9 | result = 0 | ||
10 | sum1 = 0 | ||
11 | sum2 = 0 | ||
12 | for(a, b) in zip(pdf1, pdf2): | ||
13 | sum1 += a | ||
14 | sum2 += b | ||
15 | result = max(result, abs(sum1-sum2)) | ||
16 | return result | ||
17 | |||
18 | def js_distance(samples1, samples2): | ||
19 | map1 = fromSamples(samples1) | ||
20 | map2 = fromSamples(samples2) | ||
21 | allKeys = set(map1.keys()) | set(map2.keys()) | ||
22 | dist1 = distributionFromMap(map1, allKeys) | ||
23 | dist2 = distributionFromMap(map2, allKeys) | ||
24 | return distance.jensenshannon(dist1, dist2, 2) | ||
25 | |||
26 | def euclidean_distance(samples1, samples2): | ||
27 | map1 = fromSamples(samples1) | ||
28 | map2 = fromSamples(samples2) | ||
29 | allKeys = set(map1.keys()) | set(map2.keys()) | ||
30 | dist1 = distributionFromMap(map1, allKeys) | ||
31 | dist2 = distributionFromMap(map2, allKeys) | ||
32 | distance = 0 | ||
33 | for i in range(len(dist2)): | ||
34 | distance += pow(dist1[i] - dist2[i], 2) | ||
35 | return pow(distance, 0.5) | ||
36 | |||
37 | def fromSamples(samples): | ||
38 | m = {} | ||
39 | length = len(samples) | ||
40 | for sample in samples: | ||
41 | value = m.get(sample, 0) | ||
42 | m[sample] = value + 1 | ||
43 | for key in list(m.keys()): | ||
44 | m[key] /= length | ||
45 | return m | ||
46 | |||
47 | def distributionFromMap(m, allKeys): | ||
48 | dist = [] | ||
49 | for key in allKeys: | ||
50 | value = m.get(key, 0) | ||
51 | dist.append(value) | ||
52 | return dist | ||
53 | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py b/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py new file mode 100644 index 00000000..48d96ccc --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py | |||
@@ -0,0 +1,46 @@ | |||
1 | import readCSV as reader | ||
2 | import constants | ||
3 | import numpy as np | ||
4 | |||
5 | # graph stats for a collection of graphs | ||
6 | class GraphCollection: | ||
7 | |||
8 | # init with path contrain files and number of files to read reader is imported from (readCSV) | ||
9 | def __init__(self, path, number, name, shouldShuffle = True): | ||
10 | self.out_ds = [] | ||
11 | self.nas = [] | ||
12 | self.mpcs = [] | ||
13 | self.nts = [] | ||
14 | self.name = name | ||
15 | self.tccs = [] | ||
16 | self.violations = [] | ||
17 | models = reader.readmultiplefiles(path, number, shouldShuffle) | ||
18 | print(len(models)) | ||
19 | self.size = len(models) | ||
20 | for i in range(len(models)): | ||
21 | contents, out_d, na, mpc = reader.getmetrics(models[i]) | ||
22 | self.out_ds.append(out_d) | ||
23 | self.nas.append(na) | ||
24 | self.mpcs.append(mpc) | ||
25 | if(constants.Node_TYPE_KEY in contents): | ||
26 | self.nts.append(contents[constants.Node_TYPE_KEY]) | ||
27 | if(constants.TCC_VALUE in contents): | ||
28 | self.tccs.append(contents[constants.TCC_VALUE]) | ||
29 | if(constants.VIOLATION in contents): | ||
30 | self.violations.append(contents[constants.VIOLATION][0]) | ||
31 | |||
32 | #Graph stat for one graph | ||
33 | class GraphStat: | ||
34 | # init with teh file name of the stat | ||
35 | def __init__(self, filename): | ||
36 | contents, self.out_d, self.na, self.mpc = reader.getmetrics(filename) | ||
37 | self.numNodes = np.array(contents[constants.NUMBER_NODES]) | ||
38 | if constants.STATE_ID in contents: | ||
39 | self.id = (contents[constants.STATE_ID])[0] | ||
40 | if constants.Node_TYPE_KEY in contents: | ||
41 | self.nodeTypeStat = contents[constants.Node_TYPE_KEY] | ||
42 | if constants.VIOLATION in contents: | ||
43 | self.violations = int(contents[constants.VIOLATION][0]) | ||
44 | if(constants.TCC_VALUE_KEY in contents): | ||
45 | self.tcc = contents[constants.TCC_VALUE_KEY] | ||
46 | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/constants.py b/Metrics/Metrics-Calculation/metrics_plot/utils/constants.py new file mode 100644 index 00000000..e30cc583 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/utils/constants.py | |||
@@ -0,0 +1,35 @@ | |||
1 | NUMBER_EDGE_TYPES = 'Number of Edge types' | ||
2 | |||
3 | NUMBER_NODES = 'Number Of Nodes' | ||
4 | |||
5 | OUT_DEGREE_COUNT = 'OutDegreeCount' | ||
6 | |||
7 | OUT_DEGREE_VALUE = 'OutDegreeValue' | ||
8 | |||
9 | NA_COUNT = 'NACount' | ||
10 | |||
11 | NA_VALUE = 'NAValue' | ||
12 | |||
13 | MPC_VALUE = 'MPCValue' | ||
14 | |||
15 | MPC_COUNT = 'MPCCount' | ||
16 | |||
17 | METAMODEL = 'Meta Mode' | ||
18 | |||
19 | STATE_ID = 'State Id' | ||
20 | |||
21 | NODE_TYPE = 'Node Type' | ||
22 | |||
23 | Node_TYPE_KEY = 'NodeType' | ||
24 | |||
25 | HUMAN_OUT_D_REP = '../input/humanOutput/R_2015225_run_1.csv' | ||
26 | |||
27 | HUMAN_MPC_REP = '../input/humanOutput/R_2016324_run_1.csv' | ||
28 | |||
29 | HUMAN_NA_REP = '../input/humanOutput/R_2017419_run_1.csv' | ||
30 | |||
31 | VIOLATION = 'violations' | ||
32 | |||
33 | TCC_VALUE= 'TCCValue' | ||
34 | |||
35 | TCC_COUNT = 'TCCCount' | ||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py b/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py new file mode 100644 index 00000000..a56caf45 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py | |||
@@ -0,0 +1,186 @@ | |||
1 | import numpy as np | ||
2 | import matplotlib.pyplot as plt | ||
3 | from scipy import stats | ||
4 | import glob | ||
5 | import random | ||
6 | import constants | ||
7 | |||
8 | # | ||
9 | # read csvfile returns outdegree, node activity, mpc | ||
10 | # as matrix with the first row of values and second row of count | ||
11 | # | ||
12 | def readcsvfile(filename): | ||
13 | |||
14 | contents = {} | ||
15 | with open(filename) as f: | ||
16 | data = list(f) | ||
17 | f.close() | ||
18 | for i, line in enumerate(data): | ||
19 | arr = line.replace('\n', '').split(',') | ||
20 | # if there is no element in the line, continue | ||
21 | if len(line) < 0: continue | ||
22 | # else check for contents | ||
23 | # if it is MPC then use float | ||
24 | if arr[0] == constants.MPC_VALUE: | ||
25 | contents[constants.MPC_VALUE] = list(map(float, arr[1:])) | ||
26 | # meta models are string | ||
27 | elif(arr[0] == constants.METAMODEL): | ||
28 | contents[constants.METAMODEL] = arr[1:] | ||
29 | # Node types | ||
30 | elif(arr[0] == constants.NODE_TYPE): | ||
31 | types = data[i+1].replace('\n', '').split(',') | ||
32 | numbers = data[i+2].replace('\n', '').split(',') | ||
33 | #convert number to floats | ||
34 | numbers = [float(n) for n in numbers] | ||
35 | contents[constants.Node_TYPE_KEY] = {t : n for t, n in zip(types, numbers)} | ||
36 | elif(arr[0] == constants.TCC_VALUE): | ||
37 | contents[constants.TCC_VALUE] = list(map(float, arr[1:])) | ||
38 | # NA and OD are integers, and store other information as string | ||
39 | else: | ||
40 | try: | ||
41 | contents[arr[0]] = list(map(int, arr[1:])) | ||
42 | except: | ||
43 | contents[arr[0]] = arr[1:] | ||
44 | return contents | ||
45 | |||
46 | def checkAndReshape(arr): | ||
47 | if len(arr.shape) < 2: | ||
48 | arr = np.reshape(arr, (arr.shape[0],1)) | ||
49 | return arr | ||
50 | |||
51 | def readTrajectory(filename): | ||
52 | state_codes = [] | ||
53 | with open(filename) as f: | ||
54 | for i, line in enumerate(f): | ||
55 | if(line == ''): continue | ||
56 | state_codes.append(int(line)) | ||
57 | return state_codes | ||
58 | # | ||
59 | # take a matrix as input | ||
60 | # return the sample array | ||
61 | # | ||
62 | def getsample(dataMatrix): | ||
63 | data = [] | ||
64 | value = dataMatrix[0, :] | ||
65 | count = dataMatrix[1, :] | ||
66 | for i, v in enumerate(value): | ||
67 | for x in range(0, int(count[i])): | ||
68 | data.append(v) | ||
69 | return data | ||
70 | |||
71 | def reproduceSample(values, counts): | ||
72 | arr = np.array([values, counts]) | ||
73 | return getsample(arr) | ||
74 | |||
75 | # | ||
76 | # take an array of filenames as input | ||
77 | # return the samples of outdegree, na, mpc | ||
78 | # | ||
79 | def getmetrics(filename): | ||
80 | contents = readcsvfile(filename) | ||
81 | outdegree_sample = reproduceSample(contents[constants.OUT_DEGREE_VALUE], contents[constants.OUT_DEGREE_COUNT]) | ||
82 | na_sample = reproduceSample(contents[constants.NA_VALUE], contents[constants.NA_COUNT]) | ||
83 | mpc_sample = reproduceSample(contents[constants.MPC_VALUE], contents[constants.MPC_COUNT]) | ||
84 | |||
85 | if(constants.TCC_VALUE in contents): | ||
86 | contents[constants.TCC_VALUE] = reproduceSample(contents[constants.TCC_VALUE], contents[constants.TCC_COUNT]) | ||
87 | |||
88 | return contents,outdegree_sample, na_sample, mpc_sample | ||
89 | |||
90 | # | ||
91 | # read number of files in the given path RANDOMLY | ||
92 | # | ||
93 | def readmultiplefiles(dirName, maxNumberOfFiles, shouldShuffle = True): | ||
94 | list_of_files = glob.glob(dirName + '*.csv') # create the list of file | ||
95 | if shouldShuffle: | ||
96 | random.shuffle(list_of_files) | ||
97 | #if the number of files is out of bound then just give the whole list | ||
98 | file_names = list_of_files[:maxNumberOfFiles] | ||
99 | # print(file_names) | ||
100 | return file_names | ||
101 | |||
102 | |||
103 | def plotlines(x, y, ax): | ||
104 | l1, = ax.plot(x, y) | ||
105 | |||
106 | |||
107 | def testgetsamplesfromfiles(): | ||
108 | files = readmultiplefiles('../statistics/viatraOutput/', 2) | ||
109 | for file in files: | ||
110 | getmetrics(file) | ||
111 | |||
112 | def probability(data): | ||
113 | sum = np.sum(data) | ||
114 | probabilityList = [] | ||
115 | for d in data: | ||
116 | p = d/sum | ||
117 | probabilityList.append(p) | ||
118 | a = np.array(probabilityList) | ||
119 | return a | ||
120 | |||
121 | |||
122 | def cumulativeProbability(p): | ||
123 | cdf = np.cumsum(p) | ||
124 | return cdf | ||
125 | |||
126 | |||
127 | def plot(): | ||
128 | fig, ax = plt.subplots() | ||
129 | fig, ax1 = plt.subplots() | ||
130 | fig, ax2 = plt.subplots() | ||
131 | fig, ax3 = plt.subplots() | ||
132 | fig, ax4 = plt.subplots() | ||
133 | fig, ax5 = plt.subplots() | ||
134 | list_of_files = readmultiplefiles('../statistics/iatraOutput/') | ||
135 | for file_name in list_of_files: | ||
136 | contents = readcsvfile(file_name) | ||
137 | outdegree = [contents[constants.OUT_DEGREE_VALUE], contents[constants.OUT_DEGREE_COUNT]] | ||
138 | na = [contents[constants.NA_VALUE], contents[constants.NA_COUNT]] | ||
139 | mpc = [contents[constants.MPC_VALUE], contents[constants.MPC_COUNT]] | ||
140 | outV = outdegree[0, :] | ||
141 | outC = outdegree[1, :] | ||
142 | outP = probability(outC) | ||
143 | outCumP = cumulativeProbability(outP) | ||
144 | plotlines(outV, outP, ax) | ||
145 | naV = na[0, :] | ||
146 | naC = na[1, :] | ||
147 | naP = probability(naC) | ||
148 | naCumP = cumulativeProbability(naP) | ||
149 | plotlines(naV, naP, ax1) | ||
150 | mpcV = mpc[0, :] | ||
151 | mpcC = mpc[1, :] | ||
152 | mpcP = probability(mpcC) | ||
153 | mpcCumP = cumulativeProbability(mpcP) | ||
154 | plotlines(mpcV, mpcP, ax2) | ||
155 | plotlines(outV, outCumP, ax3) | ||
156 | plotlines(naV, naCumP, ax4) | ||
157 | plotlines(mpcV, mpcCumP, ax5) | ||
158 | ax.set_xlabel('ourdegree') | ||
159 | ax.set_ylabel('pdf') | ||
160 | ax.grid() | ||
161 | |||
162 | ax1.set_xlabel('node activity') | ||
163 | ax1.set_ylabel('pdf') | ||
164 | ax1.grid() | ||
165 | |||
166 | ax2.set_xlabel('multiplex participation coefficient') | ||
167 | ax2.set_ylabel('pdf') | ||
168 | ax2.grid() | ||
169 | |||
170 | ax3.set_xlabel('ourdegree') | ||
171 | ax3.set_ylabel('cdf') | ||
172 | ax3.grid() | ||
173 | |||
174 | ax4.set_xlabel('node activity') | ||
175 | ax4.set_ylabel('cdf') | ||
176 | ax4.grid() | ||
177 | |||
178 | ax5.set_xlabel('multiplex participation coefficient') | ||
179 | ax5.set_ylabel('cdf') | ||
180 | ax5.grid() | ||
181 | |||
182 | plt.show() | ||
183 | |||
184 | |||
185 | # plot() | ||
186 | |||