diff --git a/models/Test.json b/models/Test.json new file mode 100644 index 0000000..fa4f96c --- /dev/null +++ b/models/Test.json @@ -0,0 +1,17 @@ +{ + "name": "test", + "contexts": [ + { + "relations": [], + "transfer": { + "src": "A.{B}.{C}.{D}.Data", + "dst": "E.{F}.{G}.{H}.Data", + "data": { + "name": "data" + }, + "style": "HIERARCHICAL", + "multiplicity": "*:*" + } + } + ] +} \ No newline at end of file diff --git a/models/designPattern/Chain-of-responsibility.Json b/models/designPattern/Chain-of-responsibility.Json deleted file mode 100644 index 78c4119..0000000 --- a/models/designPattern/Chain-of-responsibility.Json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "Chain-of-responsibility", - "contexts": [ - { - "relations": [], - "transfer": { - "src": "Main.Request", - "dst": "Main.{ConcreteOrcRequestHandler}.Request", - "data": { - "name": "request" - }, - "style": "PUSH", - "multiplicity": "1:*" - } - } - ] -} \ No newline at end of file diff --git a/models/designPattern/ChainOfResponsibility.Json b/models/designPattern/ChainOfResponsibility.Json new file mode 100644 index 0000000..93592c2 --- /dev/null +++ b/models/designPattern/ChainOfResponsibility.Json @@ -0,0 +1,17 @@ +{ + "name": "Chain of responsibility", + "contexts": [ + { + "relations": [], + "transfer": { + "src": "Main.Request", + "dst": "Main.{ConcreteOrcRequestHandler}.Request", + "data": { + "name": "request" + }, + "style": "PUSH", + "multiplicity": "1:*" + } + } + ] +} \ No newline at end of file diff --git a/models/designPattern/Command.Json b/models/designPattern/Command.Json index 2cc27d5..2df7977 100644 --- a/models/designPattern/Command.Json +++ b/models/designPattern/Command.Json @@ -2,18 +2,30 @@ "name": "Command", "contexts": [ { + "relations": [], + "transfer": { + "src": "Main.Goblin", + "dst": "Main.Wizard.Goblin", + "data": { + "name": "goblin" + }, + "style": "PUSH", + "multiplicity": "1:1" + } + }, + { "relations": [{ - "src": "main", - "dst": "main.{goblin}", + "src": "Main.Data", + "dst": "Main.Wizard.Goblin.Data", "multiplicity": "1:1" }], "transfer": { - "src": "main.wizard.Data", - "dst": "main.{goblin}.Data", + "src": "Main.Data", + "dst": "Main.Wizard.Goblin.Data", "data": { "name": "data" }, - "style": "PUSH", + "style": "HIERARCHICAL", "multiplicity": "1:1" } } diff --git a/models/designPattern/Command2.Json b/models/designPattern/Command2.Json deleted file mode 100644 index dcc37e7..0000000 --- a/models/designPattern/Command2.Json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "Command", - "contexts": [ - { - "relations": [], - "transfer": { - "src": "Main.Goblin", - "dst": "Main.Wizard.Goblin", - "data": { - "name": "goblin" - }, - "style": "PUSH", - "multiplicity": "1:1" - } - }, - { - "relations": [{ - "src": "Main.Data", - "dst": "Main.Wizard.Goblin.Data", - "multiplicity": "1:1" - }], - "transfer": { - "src": "Main.Data", - "dst": "Main.Wizard.Goblin.Data", - "data": { - "name": "data" - }, - "style": "PLAIN", - "multiplicity": "1:1" - } - } - ] -} \ No newline at end of file diff --git a/models/designPattern/Factory-method.Json b/models/designPattern/Factory-method.Json deleted file mode 100644 index 2af49da..0000000 --- a/models/designPattern/Factory-method.Json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "Factory-method", - "contexts": [ - { - "relations": [], - "transfer": { - "src": "Main.ConcreteBlacksmith.{Weapon}", - "dst": "Main.Weapon", - "data": { - "name": "weapon" - }, - "style": "PLAIN", - "multiplicity": "*:1" - } - } - ] -} \ No newline at end of file diff --git a/models/designPattern/FactoryMethod.Json b/models/designPattern/FactoryMethod.Json new file mode 100644 index 0000000..a424636 --- /dev/null +++ b/models/designPattern/FactoryMethod.Json @@ -0,0 +1,17 @@ +{ + "name": "Factory method", + "contexts": [ + { + "relations": [], + "transfer": { + "src": "Main.ConcreteBlacksmith.{Weapon}", + "dst": "Main.Weapon", + "data": { + "name": "weapon" + }, + "style": "HIERARCHICAL", + "multiplicity": "*:1" + } + } + ] +} \ No newline at end of file diff --git a/models/designPattern/Flyweight.Json b/models/designPattern/Flyweight.Json index 9eeb987..d72e38d 100644 --- a/models/designPattern/Flyweight.Json +++ b/models/designPattern/Flyweight.Json @@ -9,7 +9,7 @@ "data": { "name": "potion" }, - "style": "PLAIN", + "style": "HIERARCHICAL", "multiplicity": "*:*" } }, diff --git a/models/designPattern/Flyweight2.Json b/models/designPattern/Flyweight2.Json deleted file mode 100644 index ac948d6..0000000 --- a/models/designPattern/Flyweight2.Json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "Flyweight", - "contexts": [ - { - "relations": [], - "transfer": { - "src": "AlchemistShop", - "dst": "Main", - "data": { - "type": "Data", - "name": "data" - }, - "style": "PULL", - "multiplicity": "1:1" - } - }, - { - "relations": [], - "transfer": { - "src": "AlchemistShop.{Potion}", - "dst": "AlchemistShop", - "data": { - "type": "Data", - "name": "data" - }, - "style": "PULL", - "multiplicity": "1:1" - } - } - ] -} \ No newline at end of file diff --git a/models/designPattern/Iterator.Json b/models/designPattern/Iterator.Json index 26afd82..1ba4cbd 100644 --- a/models/designPattern/Iterator.Json +++ b/models/designPattern/Iterator.Json @@ -17,7 +17,7 @@ "src": "App.TreasureChest.Iterator", "dst": "App.Iterator", "data": { "name": "iterator" }, - "style": "PLAIN", + "style": "HIERARCHICAL", "multiplicity": "1:1" } } diff --git a/models/designPattern/Memento.Json b/models/designPattern/Memento.Json index 2aa7b91..c661efd 100644 --- a/models/designPattern/Memento.Json +++ b/models/designPattern/Memento.Json @@ -7,7 +7,7 @@ "src": "Main.Star.StarMementoInternal", "dst": "Main.States.StarMementoInternal", "data": {"name": "memento"}, - "style": "PLAIN", + "style": "HIERARCHICAL", "multiplicity": "1:1" } }, @@ -17,7 +17,7 @@ "src": "Main.States.StarMementoInternal", "dst": "Main.Star.StarMementoInternal", "data": {"name": "memento"}, - "style": "PLAIN", + "style": "HIERARCHICAL", "multiplicity": "1:1" } } diff --git a/models/designPattern/Observer.Json b/models/designPattern/Observer.Json index 68ddeaa..f6e756e 100644 --- a/models/designPattern/Observer.Json +++ b/models/designPattern/Observer.Json @@ -21,7 +21,7 @@ "data": { "name": "observers" }, - "style": "PLAIN", + "style": "HIERARCHICAL", "multiplicity": "*:*" } } diff --git a/models/designPattern/Visitor.Json b/models/designPattern/Visitor.Json index acff773..f7e9c70 100644 --- a/models/designPattern/Visitor.Json +++ b/models/designPattern/Visitor.Json @@ -9,7 +9,7 @@ "data": { "name": "visitor" }, - "style": "PLAIN", + "style": "HIERARCHICAL", "multiplicity": "1:*" } } diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 44e00cb..482d01e 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -32,7 +32,7 @@ DataSynchronizationDesign design; -// design = ModelLoader.load("models/CustomerManagement-PUSH.Json"); +// design = ModelLoader.load("models/Test.Json"); // System.out.println(design.getDeltaComplex()); // System.out.println(ASTGenerator.generate(design)); @@ -47,7 +47,7 @@ // DependencyInversion di = new DependencyInversion(company, new InterfaceNode(company, "ICompany"), customer); // design.addDependencyInversion(di); - design = new Iterator().create(); + design = new FactoryMethod().create(); System.out.println(design.getDeltaComplex()); System.out.println(ASTGenerator.generate(design)); diff --git a/src/main/java/designPatternExtensions/designPattern/ChainOfResponsibility.java b/src/main/java/designPatternExtensions/designPattern/ChainOfResponsibility.java new file mode 100644 index 0000000..f0c29fa --- /dev/null +++ b/src/main/java/designPatternExtensions/designPattern/ChainOfResponsibility.java @@ -0,0 +1,44 @@ +package designPatternExtensions.designPattern; + +import designPatternExtensions.DependencyInversion; +import designPatternExtensions.InterfaceNode; +import designPatternExtensions.MediatorInsertion; +import designPatternExtensions.ModelLoader; +import models.deltaAlgebra.ObjectNode; +import models.dataSynchronizationModel.*; + +//メモ +//https://github.com/iluwatar/java-design-patterns/tree/master/chain-of-responsibility + +public class ChainOfResponsibility implements DesignPattern { + + public DataSynchronizationDesign create() throws IllegalRelationException { + DataSynchronizationDesign design = ModelLoader.load("models/designPattern/ChainOfResponsibility.Json"); + DataSynchronizationContext dtc = design.getSynchronizationContexts().getFirst(); + ObjectNode main = dtc.getSrcTopObject(); + ObjectNode concreteOrcRequestHandler = (ObjectNode) dtc.getDstObjectHierarchy().getEdge(0).getDestination(); + //ObjectNode concreteOrcRequestHandler = (ObjectNode) dtc.getDstResource().getEdge(0).getDestination(); + + DependencyInversion di = new DependencyInversion(concreteOrcRequestHandler, new InterfaceNode("RequestHandler")); + design.addDependencyInversion(di); + + MediatorInsertion mi = new MediatorInsertion(main, concreteOrcRequestHandler, new ObjectNode("OrcKing"), TransferStyle.PUSH); + design.addMediatorInsertion(mi); + + return design; + } +} + +/* + (RequestTypeなどは仕様?) + public class Request + + public class ConcreteOrcRequestHandler + + public class OrcKing { + + private List handlers; + } + + ConcreteOrcRequestHandler ---> RequestHandler + */ \ No newline at end of file diff --git a/src/main/java/designPatternExtensions/designPattern/Chain_of_Responsibility.java b/src/main/java/designPatternExtensions/designPattern/Chain_of_Responsibility.java deleted file mode 100644 index 1d11d4e..0000000 --- a/src/main/java/designPatternExtensions/designPattern/Chain_of_Responsibility.java +++ /dev/null @@ -1,44 +0,0 @@ -package designPatternExtensions.designPattern; - -import designPatternExtensions.DependencyInversion; -import designPatternExtensions.InterfaceNode; -import designPatternExtensions.MediatorInsertion; -import designPatternExtensions.ModelLoader; -import models.deltaAlgebra.ObjectNode; -import models.dataSynchronizationModel.*; - -//メモ -//https://github.com/iluwatar/java-design-patterns/tree/master/chain-of-responsibility - -public class Chain_of_Responsibility implements DesignPattern { - - public DataSynchronizationDesign create() throws IllegalRelationException { - DataSynchronizationDesign design = ModelLoader.load("models/designPattern/Chain-of-responsibility.Json"); - DataSynchronizationContext dtc = design.getSynchronizationContexts().getFirst(); - ObjectNode main = dtc.getSrcTopObject(); - ObjectNode concreteOrcRequestHandler = (ObjectNode) dtc.getDstObjectHierarchy().getEdge(0).getDestination(); - //ObjectNode concreteOrcRequestHandler = (ObjectNode) dtc.getDstResource().getEdge(0).getDestination(); - - DependencyInversion di = new DependencyInversion(concreteOrcRequestHandler, new InterfaceNode("RequestHandler")); - design.addDependencyInversion(di); - - MediatorInsertion mi = new MediatorInsertion(main, concreteOrcRequestHandler, new ObjectNode("OrcKing"), TransferStyle.PUSH); - design.addMediatorInsertion(mi); - - return design; - } -} - -/* - (RequestTypeなどは仕様?) - public class Request - - public class ConcreteOrcRequestHandler - - public class OrcKing { - - private List handlers; - } - - ConcreteOrcRequestHandler ---> RequestHandler - */ \ No newline at end of file diff --git a/src/main/java/designPatternExtensions/designPattern/Command.java b/src/main/java/designPatternExtensions/designPattern/Command.java index 2f819aa..69ff774 100644 --- a/src/main/java/designPatternExtensions/designPattern/Command.java +++ b/src/main/java/designPatternExtensions/designPattern/Command.java @@ -14,7 +14,7 @@ public class Command implements DesignPattern { public DataSynchronizationDesign create() throws IllegalRelationException { - DataSynchronizationDesign design = ModelLoader.load("models/designPattern/Command2.Json"); + DataSynchronizationDesign design = ModelLoader.load("models/designPattern/Command.Json"); DataSynchronizationContext dtc = design.getSynchronizationContexts().getFirst(); ObjectNode main = dtc.getDstTopObject(); ObjectNode wizard = (ObjectNode) dtc.getDstObjectHierarchy().getEdges().get(0).getDestination(); diff --git a/src/main/java/designPatternExtensions/designPattern/FactoryMethod.java b/src/main/java/designPatternExtensions/designPattern/FactoryMethod.java new file mode 100644 index 0000000..eb883ad --- /dev/null +++ b/src/main/java/designPatternExtensions/designPattern/FactoryMethod.java @@ -0,0 +1,25 @@ +package designPatternExtensions.designPattern; + +import designPatternExtensions.DependencyInversion; +import designPatternExtensions.InterfaceNode; +import designPatternExtensions.ModelLoader; +import models.deltaAlgebra.ObjectNode; +import models.dataSynchronizationModel.*; + +//メモ +//https://github.com/iluwatar/java-design-patterns/tree/master/prototype + +public class FactoryMethod implements DesignPattern{ + public DataSynchronizationDesign create() throws IllegalRelationException { + DataSynchronizationDesign design = ModelLoader.load("models/designPattern/FactoryMethod.Json"); + DataSynchronizationContext dtc = design.getSynchronizationContexts().getFirst(); + ObjectNode concreteBlacksmith = (ObjectNode) dtc.getSrcObjectHierarchy().getEdge(0).getDestination(); + ObjectNode main = dtc.getDstTopObject(); + + InterfaceNode blackSmith = new InterfaceNode("Blacksmith"); + DependencyInversion di = new DependencyInversion(concreteBlacksmith, blackSmith); + design.addDependencyInversion(di); + + return design; + } +} \ No newline at end of file diff --git a/src/main/java/designPatternExtensions/designPattern/Factory_method.java b/src/main/java/designPatternExtensions/designPattern/Factory_method.java deleted file mode 100644 index 3123901..0000000 --- a/src/main/java/designPatternExtensions/designPattern/Factory_method.java +++ /dev/null @@ -1,25 +0,0 @@ -package designPatternExtensions.designPattern; - -import designPatternExtensions.DependencyInversion; -import designPatternExtensions.InterfaceNode; -import designPatternExtensions.ModelLoader; -import models.deltaAlgebra.ObjectNode; -import models.dataSynchronizationModel.*; - -//メモ -//https://github.com/iluwatar/java-design-patterns/tree/master/prototype - -public class Factory_method implements DesignPattern{ - public DataSynchronizationDesign create() throws IllegalRelationException { - DataSynchronizationDesign design = ModelLoader.load("models/designPattern/Factory-method.Json"); - DataSynchronizationContext dtc = design.getSynchronizationContexts().getFirst(); - ObjectNode concreteBlacksmith = (ObjectNode) dtc.getSrcObjectHierarchy().getEdge(0).getDestination(); - ObjectNode main = dtc.getDstTopObject(); - - InterfaceNode blackSmith = new InterfaceNode("Blacksmith"); - DependencyInversion di = new DependencyInversion(concreteBlacksmith, blackSmith); - design.addDependencyInversion(di); - - return design; - } -} \ No newline at end of file diff --git a/src/main/java/generators/ASTGenerator.java b/src/main/java/generators/ASTGenerator.java index 27ffa36..0df695f 100644 --- a/src/main/java/generators/ASTGenerator.java +++ b/src/main/java/generators/ASTGenerator.java @@ -299,38 +299,71 @@ MethodInvocation callSetter = new MethodInvocation(field3, setter.getName(), args); // name3.setName2(name2) coordionator.addUniqueStatement(new ExpressionStatement(callSetter)); } else { - EnhancedForStatement broadcastLoop = new EnhancedForStatement(); // for (key2 loopVar: name2Map.keySet()) MethodInvocation callSetter = null; MethodInvocation keysGetter = null; String loopVarName = null; List args = new ArrayList<>(); - if (pullEdge.toMany()) { - loopVarName = pullEdge.getName() + idPostfix; - keyType = ((MapType) field12.getType()).getKeyType(); - args.add(new Variable(loopVarName)); - MethodInvocation valueGetter = new MethodInvocation(field2, mapGet, args); - args = new ArrayList<>(); - args.add(new Variable(loopVarName)); - args.add(valueGetter); - callSetter = new MethodInvocation(field3, setter.getName(), args); // name3.setName2(loopVar, name2Map.get(loopVar)) - keysGetter = new MethodInvocation(field2, mapKeySet); - } else { - loopVarName = pushEdge.getName() + idPostfix; + if (pullEdge.toMany() && pushEdge.toMany()) { keyType = ((MapType) field13.getType()).getKeyType(); - args.add(new Variable(loopVarName)); - MethodInvocation valueGetter = new MethodInvocation(field3, mapGet, args); - args = new ArrayList<>(); - args.add(field2); - callSetter = new MethodInvocation(valueGetter, setter.getName(), args); // name3Map.get(loopVar).setName2(name2) + loopVarName = pushEdge.getName() + idPostfix; keysGetter = new MethodInvocation(field3, mapKeySet); + String loopVarName2 = pullEdge.getName() + idPostfix; + keyType2 = ((MapType) field12.getType()).getKeyType(); + args.add(new Variable(loopVarName2)); + MethodInvocation componentGetter = new MethodInvocation(field2, mapGet, args); + args = new ArrayList<>(); + args.add(new Variable(loopVarName2)); + args.add(componentGetter); + List args2 = new ArrayList<>(); + args2.add(new Variable(loopVarName)); + Expression containerGetter = new MethodInvocation(field3, mapGet, args2); + callSetter = new MethodInvocation(containerGetter, setter.getName(), args); // name3Map.get(loopVar).setName2(loopVar2, name2Map.get(loopVar2)) + MethodInvocation keysGetter2 = new MethodInvocation(field2, mapKeySet); + Block loopBody2 = new Block(); + loopBody2.addStatement(new ExpressionStatement(callSetter)); + VariableDeclaration loopVar2 = new VariableDeclaration(keyType2, loopVarName2); + EnhancedForStatement broadcastLoop2 = new EnhancedForStatement(); // for (key2 loopVar2: name2Map.keySet()) + broadcastLoop2.setParameter(loopVar2); + broadcastLoop2.setExpression(keysGetter2); + broadcastLoop2.setBody(loopBody2); + Block loopBody1 = new Block(); + loopBody1.addStatement(broadcastLoop2); + VariableDeclaration loopVar = new VariableDeclaration(keyType, loopVarName); + EnhancedForStatement broadcastLoop1 = new EnhancedForStatement(); // for (key3 loopVar: name3Map.keySet()) + broadcastLoop1.setParameter(loopVar); + broadcastLoop1.setExpression(keysGetter); + broadcastLoop1.setBody(loopBody1); + coordionator.addUniqueStatement(broadcastLoop1); + } else { + EnhancedForStatement broadcastLoop = new EnhancedForStatement(); // for (key2 loopVar: name2Map.keySet()) + if (pullEdge.toMany()) { + loopVarName = pullEdge.getName() + idPostfix; + keyType = ((MapType) field12.getType()).getKeyType(); + args.add(new Variable(loopVarName)); + MethodInvocation componentGetter = new MethodInvocation(field2, mapGet, args); + args = new ArrayList<>(); + args.add(new Variable(loopVarName)); + args.add(componentGetter); + callSetter = new MethodInvocation(field3, setter.getName(), args); // name3.setName2(loopVar, name2Map.get(loopVar)) + keysGetter = new MethodInvocation(field2, mapKeySet); + } else { + loopVarName = pushEdge.getName() + idPostfix; + keyType = ((MapType) field13.getType()).getKeyType(); + args.add(new Variable(loopVarName)); + MethodInvocation containerGetter = new MethodInvocation(field3, mapGet, args); + args = new ArrayList<>(); + args.add(field2); + callSetter = new MethodInvocation(containerGetter, setter.getName(), args); // name3Map.get(loopVar).setName2(name2) + keysGetter = new MethodInvocation(field3, mapKeySet); + } + Block loopBody = new Block(); + loopBody.addStatement(new ExpressionStatement(callSetter)); + VariableDeclaration loopVar = new VariableDeclaration(keyType, loopVarName); + broadcastLoop.setParameter(loopVar); + broadcastLoop.setExpression(keysGetter); + broadcastLoop.setBody(loopBody); + coordionator.addUniqueStatement(broadcastLoop); } - Block loopBody = new Block(); - loopBody.addStatement(new ExpressionStatement(callSetter)); - VariableDeclaration loopVar = new VariableDeclaration(keyType, loopVarName); - broadcastLoop.setParameter(loopVar); - broadcastLoop.setExpression(keysGetter); - broadcastLoop.setBody(loopBody); - coordionator.addUniqueStatement(broadcastLoop); } } else { VariableDeclaration idVar = new VariableDeclaration(keyType, pushEdge.getName() + idPostfix); diff --git a/src/main/java/models/dataSynchronizationModel/DataSynchronizationContext.java b/src/main/java/models/dataSynchronizationModel/DataSynchronizationContext.java index 1f22ccf..393031b 100644 --- a/src/main/java/models/dataSynchronizationModel/DataSynchronizationContext.java +++ b/src/main/java/models/dataSynchronizationModel/DataSynchronizationContext.java @@ -24,7 +24,7 @@ private List intermediateRelations; private Relation syncronizationRelation; private String dataName; - private TransferStyle transferStyle = TransferStyle.PLAIN; + private TransferStyle transferStyle = TransferStyle.HIERARCHICAL; private Map objectNodeMap = new HashMap<>(); public DataSynchronizationContext(Value jsonValue) { @@ -169,8 +169,8 @@ private void setTransferStyle(StringValue stringValue){ String style = stringValue.getStringValue(); - if (style.equals("PLAIN")) { - transferStyle = TransferStyle.PLAIN; + if (style.equals("HIERARCHICAL")) { + transferStyle = TransferStyle.HIERARCHICAL; } else if (style.equals("PUSH")) { transferStyle = TransferStyle.PUSH; } else if (style.equals("PULL")) { diff --git a/src/main/java/models/dataSynchronizationModel/DataSynchronizationDesign.java b/src/main/java/models/dataSynchronizationModel/DataSynchronizationDesign.java index f4cbeee..b5bfc4f 100644 --- a/src/main/java/models/dataSynchronizationModel/DataSynchronizationDesign.java +++ b/src/main/java/models/dataSynchronizationModel/DataSynchronizationDesign.java @@ -98,7 +98,7 @@ // Transfer style is PULL or PLAIN srcObj = synchronizationContext.getDstTopObject(); dstObj = synchronizationContext.getSrcTopObject(); - if (transferStyle == TransferStyle.PLAIN) { + if (transferStyle == TransferStyle.HIERARCHICAL) { useShortcut = false; } } @@ -119,7 +119,7 @@ if (useShortcut) { allRelations.add(synchronizationContext.getSyncronizationRelation().getPrevRelation()); } else { - if (transferStyle == TransferStyle.PLAIN) { + if (transferStyle == TransferStyle.HIERARCHICAL) { allRelations.add(synchronizationContext.getSyncronizationRelation()); } else { Relation lastRelation = allRelations.getLast(); @@ -207,10 +207,12 @@ } else { delta = delta.combine(primDelta); } - if (!prevDstEdge.toMany()) { - prevDstEdge = new ReferenceEdge(srcObj, dstObj, dataName); - } else { + if (prevDstEdge.toMany()) { prevDstEdge = new ReferenceEdge(srcObj, dstObj, dataName, prevDstEdge.getKeyTypeName()); + } else if (dstEdge.toMany()) { + prevDstEdge = new ReferenceEdge(srcObj, dstObj, dataName, dstEdge.getKeyTypeName()); + } else { + prevDstEdge = new ReferenceEdge(srcObj, dstObj, dataName); } } } else { diff --git a/src/main/java/models/dataSynchronizationModel/TransferStyle.java b/src/main/java/models/dataSynchronizationModel/TransferStyle.java index d4d3f90..f028d04 100644 --- a/src/main/java/models/dataSynchronizationModel/TransferStyle.java +++ b/src/main/java/models/dataSynchronizationModel/TransferStyle.java @@ -1,14 +1,14 @@ package models.dataSynchronizationModel; public enum TransferStyle { + HIERARCHICAL, PULL, - PLAIN, PUSH; public String toString() { switch (this) { - case PLAIN: - return "PLAIN"; + case HIERARCHICAL: + return "HIERARCHICAL"; case PUSH: return "PUSH"; case PULL: diff --git a/src/test/java/parser/PatternTest.java b/src/test/java/parser/PatternTest.java index f638118..1ec5013 100644 --- a/src/test/java/parser/PatternTest.java +++ b/src/test/java/parser/PatternTest.java @@ -10,12 +10,12 @@ @Test void adapter() throws Exception { run(new Adapter()); } @Test void bridge() throws Exception { run(new Bridge()); } @Test void builder() throws Exception { run(new Builder()); } - @Test void chainOfResponsibility() throws Exception { run(new Chain_of_Responsibility()); } + @Test void chainOfResponsibility() throws Exception { run(new ChainOfResponsibility()); } @Test void command() throws Exception { run(new Command()); } @Test void composite() throws Exception { run(new Composite()); } @Test void decorator() throws Exception { run(new Decorator()); } @Test void facade() throws Exception { run(new Facade()); } - @Test void factoryMethod() throws Exception { run(new Factory_method()); } + @Test void factoryMethod() throws Exception { run(new FactoryMethod()); } @Test void flyweight() throws Exception { run(new Flyweight()); } @Test void interpreter() throws Exception { run(new Interpreter()); } @Test void iterator() throws Exception { run(new Iterator()); }