diff --git a/models/designPattern/Strategy.Json b/models/designPattern/Strategy.Json index 9d70b0a..f421663 100644 --- a/models/designPattern/Strategy.Json +++ b/models/designPattern/Strategy.Json @@ -1,10 +1,22 @@ { - "relations": [], - "transfer": { - "src": "main.dragonSlayer", - "dst": "main.{ConcreteStrategy}", - "data": { "type": "String", "name": "data" }, - "style": "PUSH", - "multiplicity": "1:1" - } + "name": "Strategy", + "contexts": [ + { + "relations": [{ + "src": "main", + "dst": "main.{concreteStrategy}", + "multiplicity": "1:1" + }], + "transfer": { + "src": "main.dragonSlayer", + "dst": "main.{concreteStrategy}", + "data": { + "type": "Data", + "name": "data" + }, + "style": "PUSH", + "multiplicity": "1:1" + } + } + ] } \ No newline at end of file diff --git a/src/main/java/designPatternExtensions/designPattern/Strategy.java b/src/main/java/designPatternExtensions/designPattern/Strategy.java index 2bc18dd..f1363d3 100644 --- a/src/main/java/designPatternExtensions/designPattern/Strategy.java +++ b/src/main/java/designPatternExtensions/designPattern/Strategy.java @@ -2,6 +2,7 @@ import designPatternExtensions.DependencyInversion; import designPatternExtensions.InterfaceNode; +import designPatternExtensions.MediatorInsertion; import models.deltaAlgebra.ObjectNode; import models.objectOrientedTransfer.*; import designPatternExtensions.ModelLoader; @@ -13,8 +14,8 @@ public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/Strategy.Json"); - ObjectNode dragonSlayer = design.getTransferContexts().getFirst().getSrcFirstResource(); - ObjectNode concreteStrategy = (ObjectNode) design.getTransferContexts().getFirst().getDstResource().getEdges().get(0).getDestination(); + ObjectNode main = design.getTransferContexts().getFirst().getSrcFirstResource(); + ObjectNode concreteStrategy = (ObjectNode) design.getTransferContexts().getFirst().getDstResource().getEdge(0).getDestination(); DependencyInversion di = new DependencyInversion( concreteStrategy, new InterfaceNode(concreteStrategy, "DragonSlayingStrategy")); diff --git a/src/main/java/models/deltaAlgebra/ObjectNode.java b/src/main/java/models/deltaAlgebra/ObjectNode.java index 75dc2c8..5f2d78d 100644 --- a/src/main/java/models/deltaAlgebra/ObjectNode.java +++ b/src/main/java/models/deltaAlgebra/ObjectNode.java @@ -17,6 +17,16 @@ this.name = name; } + public boolean equals(Object another) { + if (this == another) { + return true; + } + if (another == null || !(another instanceof ObjectNode)) { + return false; + } + return name.equals(((ObjectNode) another).name); + } + public String toString() { return name; } diff --git a/src/main/java/models/deltaAlgebra/ReferenceEdge.java b/src/main/java/models/deltaAlgebra/ReferenceEdge.java index 6ca3c2a..6fe1628 100644 --- a/src/main/java/models/deltaAlgebra/ReferenceEdge.java +++ b/src/main/java/models/deltaAlgebra/ReferenceEdge.java @@ -52,6 +52,10 @@ return keyTypeName; } + public boolean isIdentical() { + return source.equals(destination); + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/models/objectOrientedTransfer/DataTransferDesign.java b/src/main/java/models/objectOrientedTransfer/DataTransferDesign.java index 65ba9b5..8ff6d81 100644 --- a/src/main/java/models/objectOrientedTransfer/DataTransferDesign.java +++ b/src/main/java/models/objectOrientedTransfer/DataTransferDesign.java @@ -182,7 +182,9 @@ dstObj = (ObjectNode) dstEdge.getDestination(); String dataName = dstObj.getName(); dataName = dataName.substring(0, 1).toLowerCase() + dataName.substring(1); - primitiveDeltaList.add(new PrimitivePullDelta(prevReference, dstEdge, dataName)); + if (!prevReference.isIdentical()) { + primitiveDeltaList.add(new PrimitivePullDelta(prevReference, dstEdge, dataName)); + } prevReference = new ReferenceEdge(srcObj, dstObj, dataName); } for (int i = 0; i < newSrcHierarchy.getDepth(); i++) { @@ -247,21 +249,20 @@ prevReference = new ReferenceEdge(srcObj, dstObj, dataName); } } - - // 3) Create a component obtaining delta. - if (primitiveDeltaList.size() > 0) { - Delta delta = null; - for (PrimitiveDelta primDelta: primitiveDeltaList) { - if (delta == null) { - delta = new Delta(primDelta); - } else { - delta = new Delta(primDelta, delta); - } - } - deltaStack.push(delta); // add a component obtaining delta - } toOne = true; } + // 3) Create a component obtaining delta. + if (primitiveDeltaList.size() > 0) { + Delta delta = null; + for (PrimitiveDelta primDelta: primitiveDeltaList) { + if (delta == null) { + delta = new Delta(primDelta); + } else { + delta = new Delta(primDelta, delta); + } + } + deltaStack.push(delta); // add a component obtaining delta + } } else { throw new IllegalRelationException(); }