From 5e8b8c3a817dd9f7ae46338b6dbd3684dfb885fe Mon Sep 17 00:00:00 2001 From: 20001LastOrder Date: Wed, 31 Jul 2019 14:45:06 -0400 Subject: Further development of realistic solver, create generation config for ecore models --- .../realistic/metrics/calculator/graph/EMFGraph.xtend | 12 ++++-------- .../calculator/graph/PartialInterpretationGraph.xtend | 17 ++++++++++------- 2 files changed, 14 insertions(+), 15 deletions(-) (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph') 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 index 4ebd59b7..959006f4 100644 --- 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 @@ -24,7 +24,8 @@ class EMFGraph extends Graph{ */ def void init(List objects, List metrics, String name, List referenceTypes){ objects.forEach[it| - var types = new HashSet(it.eClass.EAllSuperTypes.map[it|it.name]); + // TODO: Maybe want to consider all the super types as well + var types = new HashSet(); types.add(it.eClass.name); statistic.addNodeWithAllTypes(it, types); ] @@ -38,18 +39,13 @@ class EMFGraph extends Graph{ // )){ // typeToAdd = it.EOpposite; // } - //if(!typeToAdd.name.equals('incomingTransitions')){ - statistic.addEdgeType(typeToAdd.name); - //} +// + statistic.addEdgeType(typeToAdd.name); ]; objects.forEach[source| source.eClass.EAllReferences.forEach[r| - //add the type first (if it is not added already) //many references -// if(r.name.equals('incomingTransitions')){ -// return; -// } if(r.isMany){ source.getNeighbours(r).forEach[target| addEdge(source, target, r); 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 index bb679bf6..ef68f366 100644 --- 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 @@ -21,16 +21,19 @@ class PartialInterpretationGraph extends Graph{ //only need the name of the reference type (remove everything with and after "reference") var n = it.name.split(" ").get(0); // TODO: Here is to only consider one part of opposite edges - //if(!n.equals('target') && !n.equals('source') /* && !n.equals('incomingTransitions')*/){ + if(!n.equals('target') && !n.equals('source') /* && !n.equals('incomingTransitions')*/){ this.statistic.addEdgeType(n); - //} + } ] // add all elements val typeInterpretations = getTypes(partial); for(type : typeInterpretations){ - var typeName = type.interpretationOf.name.replace(classSuffix, ''); - for(node : type.elements){ - this.statistic.addNodeWithType(node, typeName); + //Only consider the most concrete class + if(type.interpretationOf.subtypes.size == 0){ + var typeName = type.interpretationOf.name.replace(classSuffix, ''); + for(node : type.elements){ + this.statistic.addNodeWithType(node, typeName); + } } } @@ -38,11 +41,11 @@ class PartialInterpretationGraph extends Graph{ //only need the name of the reference type (remove everything with and after "reference") val type = relationInterpretation.interpretationOf.name.split(" ").get(0); // TODO: Here is to only consider one part of opposite edges - //if(!type.equals('target') && !type.equals('source') /*&& !type.equals('incomingTransitions')*/){ + if(!type.equals('target') && !type.equals('source') /*&& !type.equals('incomingTransitions')*/){ for(edge : relationInterpretation.relationlinks.filter(BinaryElementRelationLink)){ statistic.addEdge(edge.param1, edge.param2, type); } - //} + } } this.name = name; -- cgit v1.2.3-54-g00ecf