diff --git a/models/designPattern/Adapter.Json b/models/designPattern/Adapter.Json index 9cb8afd..54a16e8 100644 --- a/models/designPattern/Adapter.Json +++ b/models/designPattern/Adapter.Json @@ -1,10 +1,18 @@ { - "relations": [], - "transfer": { - "src": "FishingBoat", - "dst": "Captain", - "data": { "type": "String", "name": "data" }, - "style": "PULL", - "multiplicity": "1:1" - } + "name": "Adapter", + "contexts": [ + { + "relations": [], + "transfer": { + "src": "Captain", + "dst": "FishingBoat", + "data": { + "type": "Data", + "name": "data" + }, + "style": "PUSH", + "multiplicity": "1:1" + } + } + ] } \ No newline at end of file diff --git a/models/designPattern/Command.Json b/models/designPattern/Command.Json index f0641c9..8e20601 100644 --- a/models/designPattern/Command.Json +++ b/models/designPattern/Command.Json @@ -1,10 +1,22 @@ { - "relations": [], - "transfer": { - "src": "Wizard.{Stack}", - "dst": "Goblin.Size", - "data": { "type": "String", "name": "data" }, - "style": "PUSH", - "multiplicity": "1:1" - } + "name": "Command", + "contexts": [ + { + "relations": [{ + "src": "main", + "dst": "main.{goblin}", + "multiplicity": "1:1" + }], + "transfer": { + "src": "main.wizard", + "dst": "main.{goblin}", + "data": { + "type": "Data", + "name": "data" + }, + "style": "PUSH", + "multiplicity": "1:1" + } + } + ] } \ No newline at end of file diff --git a/models/designPattern/Proxy.Json b/models/designPattern/Proxy.Json index 5b9af0b..229e379 100644 --- a/models/designPattern/Proxy.Json +++ b/models/designPattern/Proxy.Json @@ -1,10 +1,18 @@ { - "relations": [], - "transfer": { - "src": "Client", - "dst": "IvoryTower", - "data": { "type": "Wizard", "name": "wizard" }, - "style": "PUSH", - "multiplicity": "1:1" - } + "name": "Proxy", + "contexts": [ + { + "relations": [], + "transfer": { + "src": "Client", + "dst": "IvoryTower", + "data": { + "type": "Wizard", + "name": "wizard" + }, + "style": "PUSH", + "multiplicity": "1:1" + } + } + ] } \ No newline at end of file diff --git a/models/designPattern/State.Json b/models/designPattern/State.Json index 7fa778b..85cf18f 100644 --- a/models/designPattern/State.Json +++ b/models/designPattern/State.Json @@ -2,21 +2,15 @@ "name" : "State", "contexts" : [ { - "relations": [ - { - "src" : "Main.Mammoth", - "dst" : "Main.Mammoth.{ConcreteState}", - "multiplicity" : "1:1" - } - ], + "relations": [], "transfer": { - "src": "Main.Mammoth.{ConcreteState}", - "dst": "Main", + "src": "main.mammoth.{concreteState}", + "dst": "main.mammoth", "data": { - "type": "String", + "type": "Data", "name": "data" }, - "style": "PUSH", + "style": "PULL", "multiplicity": "1:1" } } 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/Adapter.java b/src/main/java/designPatternExtensions/designPattern/Adapter.java index fc9b1a1..d867853 100644 --- a/src/main/java/designPatternExtensions/designPattern/Adapter.java +++ b/src/main/java/designPatternExtensions/designPattern/Adapter.java @@ -9,11 +9,11 @@ public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/Adapter.Json"); DataTransferContext dtc = design.getTransferContexts().getFirst(); - ObjectNode fishingBoat = dtc.getSrcFirstResource(); - ObjectNode captain = dtc.getDstFirstResource(); + ObjectNode captain = dtc.getSrcFirstResource(); + ObjectNode fishingBoat = dtc.getDstFirstResource(); ObjectNode adapter = new ObjectNode("FishingBoatAdapter"); - MediatorInsertion mi = new MediatorInsertion(captain, fishingBoat, adapter, dtc); + MediatorInsertion mi = new MediatorInsertion(captain, fishingBoat, adapter, PushPullValue.PUSH); design.addMediatorInsertion(mi); DependencyInversion di = new DependencyInversion( diff --git a/src/main/java/designPatternExtensions/designPattern/State.java b/src/main/java/designPatternExtensions/designPattern/State.java index 0b2629f..2c6d4f8 100644 --- a/src/main/java/designPatternExtensions/designPattern/State.java +++ b/src/main/java/designPatternExtensions/designPattern/State.java @@ -13,7 +13,7 @@ public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/State.Json"); ObjectNode main = design.getTransferContexts().getFirst().getSrcFirstResource(); - ObjectNode concreteState = design.getTransferContexts().getFirst().getDstFirstResource(); + ObjectNode concreteState = (ObjectNode) design.getTransferContexts().getFirst().getSrcResource().getEdge(1).getDestination(); // MediatorInsertion mi = new MediatorInsertion( // main, concreteState, new ObjectNode("Mammoth")); 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/generators/ASTGenerator.java b/src/main/java/generators/ASTGenerator.java index 0613207..6050c9a 100644 --- a/src/main/java/generators/ASTGenerator.java +++ b/src/main/java/generators/ASTGenerator.java @@ -53,7 +53,10 @@ if (primitiveDeltas.size() == 1) { return weavePrimitiveDelta(codebase, primitiveDeltas.getFirst()); } else { - // To do. + // To do: Temporary implementation to be replaced with the actual implementation. + for (PrimitiveDelta primDelta: primitiveDeltas) { + weavePrimitiveDelta(codebase, primDelta); + } return codebase; } } 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..c3e6174 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++) { @@ -196,17 +198,19 @@ dstObj = (ObjectNode) prevReference.getDestination(); String dataName = dstObj.getName(); dataName = dataName.substring(0, 1).toLowerCase() + dataName.substring(1); - primitiveDeltaList.add(new PrimitivePullPushDelta(prevReference, srcEdge, dataName)); - Delta delta = null; - for (PrimitiveDelta primDelta: primitiveDeltaList) { - if (delta == null) { - delta = new Delta(primDelta); - } else { - delta = new Delta(primDelta, delta); + if (!prevReference.isIdentical() && !prevReference.getDestination().equals(srcEdge.getDestination())) { + primitiveDeltaList.add(new PrimitivePullPushDelta(prevReference, srcEdge, dataName)); + 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 container passing delta + primitiveDeltaList.clear(); } - deltaStack.push(delta); // add a container passing delta - primitiveDeltaList.clear(); prevReference = new ReferenceEdge(srcObj, dstObj, dataName); } } @@ -247,21 +251,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(); }