diff --git a/models/designPattern/Builder.Json b/models/designPattern/Builder.Json index 11f180d..0ba1d34 100644 --- a/models/designPattern/Builder.Json +++ b/models/designPattern/Builder.Json @@ -1,10 +1,44 @@ { - "relations": [], - "transfer": { - "src": "Builder", - "dst": "Main", - "data": { "type": "String", "name": "data" }, - "style": "PULL", - "multiplicity": "1:1" - } + "name" : "Builder", + "contexts" : [ + { + "relations": [], + "transfer": { + "src": "Builders.{Builder}", + "dst": "Heroes.{Hero}", + "data": { + "type": "HairType", + "name": "hairType" + }, + "style": "PUSH", + "multiplicity": "1:1" + } + }, + { + "relations": [], + "transfer": { + "src": "Builders.{Builder}", + "dst": "Heroes.{Hero}", + "data": { + "type": "HairColor", + "name": "hairColor" + }, + "style": "PUSH", + "multiplicity": "1:1" + } + }, + { + "relations": [], + "transfer": { + "src": "Builders.{Builder}", + "dst": "Heroes.{Hero}", + "data": { + "type": "Armor", + "name": "armor" + }, + "style": "PUSH", + "multiplicity": "1:1" + } + } + ] } \ No newline at end of file diff --git a/models/designPattern/State.Json b/models/designPattern/State.Json index 31c38c1..7fa778b 100644 --- a/models/designPattern/State.Json +++ b/models/designPattern/State.Json @@ -1,10 +1,24 @@ { - "relations": [], - "transfer": { - "src": "main", - "dst": "ConcreteState", - "data": { "type": "String", "name": "data" }, - "style": "PUSH", - "multiplicity": "1:1" - } + "name" : "State", + "contexts" : [ + { + "relations": [ + { + "src" : "Main.Mammoth", + "dst" : "Main.Mammoth.{ConcreteState}", + "multiplicity" : "1:1" + } + ], + "transfer": { + "src": "Main.Mammoth.{ConcreteState}", + "dst": "Main", + "data": { + "type": "String", + "name": "data" + }, + "style": "PUSH", + "multiplicity": "1:1" + } + } + ] } \ No newline at end of file diff --git a/src/main/java/designPatternExtensions/ModelLoader.java b/src/main/java/designPatternExtensions/ModelLoader.java index 3a77a42..122b264 100644 --- a/src/main/java/designPatternExtensions/ModelLoader.java +++ b/src/main/java/designPatternExtensions/ModelLoader.java @@ -1,8 +1,11 @@ -package parser; +package designPatternExtensions; import models.objectOrientedTransfer.DataTransferContext; import models.objectOrientedTransfer.DataTransferDesign; import models.objectOrientedTransfer.IllegalRelationException; +import parser.JsonValue; +import parser.Parser; +import parser.Value; import parser.exceptions.ExpectedArrayValue; import parser.exceptions.ExpectedJsonValue; import parser.exceptions.ExpectedStringValue; @@ -18,6 +21,22 @@ try { Parser parser = new Parser(new BufferedReader(new FileReader(file))); Value jsonValue = parser.getValue(); + DataTransferDesign design; + return new DataTransferDesign((JsonValue) jsonValue); + + } catch (java.io.FileNotFoundException | ExpectedArrayValue + | ExpectedStringValue | ExpectedJsonValue e) { + throw new RuntimeException("Failed to load model: " + path, e); + } catch (IllegalRelationException e) { + throw new RuntimeException(e); + } + } + + public static DataTransferDesign load2(String path) { + File file = new File(path); + try { + Parser parser = new Parser(new BufferedReader(new FileReader(file))); + Value jsonValue = parser.getValue(); DataTransferContext context = new DataTransferContext(jsonValue); return new DataTransferDesign(context); diff --git a/src/main/java/designPatternExtensions/designPattern/AbstractFactory.java b/src/main/java/designPatternExtensions/designPattern/AbstractFactory.java index d5bafc0..f8f6aad 100644 --- a/src/main/java/designPatternExtensions/designPattern/AbstractFactory.java +++ b/src/main/java/designPatternExtensions/designPattern/AbstractFactory.java @@ -2,7 +2,7 @@ import designPatternExtensions.*; import models.objectOrientedTransfer.*; -import parser.ModelLoader; +import designPatternExtensions.ModelLoader; //https://github.com/iluwatar/java-design-patterns/tree/master/abstract-factory //App -> ConcreteKingdomFactory -> ConcreteCastle @@ -11,8 +11,8 @@ public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/AbstractFactory.Json"); - ObjectNode concreteCastle = design.getTransferContext().getSrcFirstResource(); - ObjectNode app = design.getTransferContext().getDstFirstResource(); + ObjectNode concreteCastle = design.getTransferContexts().getFirst().getSrcFirstResource(); + ObjectNode app = design.getTransferContexts().getFirst().getDstFirstResource(); ObjectNode concreteKingdomFactory = new ObjectNode("ConcreteKingdomFactory"); MediatorInsertion mi = new MediatorInsertion(app, concreteCastle, concreteKingdomFactory); diff --git a/src/main/java/designPatternExtensions/designPattern/Adapter.java b/src/main/java/designPatternExtensions/designPattern/Adapter.java index cb0802e..a329820 100644 --- a/src/main/java/designPatternExtensions/designPattern/Adapter.java +++ b/src/main/java/designPatternExtensions/designPattern/Adapter.java @@ -4,14 +4,14 @@ import designPatternExtensions.InterfaceNode; import designPatternExtensions.MediatorInsertion; import models.objectOrientedTransfer.*; -import parser.ModelLoader; +import designPatternExtensions.ModelLoader; public class Adapter implements DesignPattern { public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/Adapter.Json"); - ObjectNode fishingBoat = design.getTransferContext().getSrcFirstResource(); - ObjectNode captain = design.getTransferContext().getDstFirstResource(); + ObjectNode fishingBoat = design.getTransferContexts().getFirst().getSrcFirstResource(); + ObjectNode captain = design.getTransferContexts().getFirst().getDstFirstResource(); ObjectNode adapter = new ObjectNode("FishingBoatAdapter"); MediatorInsertion mi = new MediatorInsertion(captain, fishingBoat, adapter); diff --git a/src/main/java/designPatternExtensions/designPattern/Bridge.java b/src/main/java/designPatternExtensions/designPattern/Bridge.java index 466f2fb..ed9f29b 100644 --- a/src/main/java/designPatternExtensions/designPattern/Bridge.java +++ b/src/main/java/designPatternExtensions/designPattern/Bridge.java @@ -3,7 +3,7 @@ import designPatternExtensions.DependencyInversion; import designPatternExtensions.InterfaceNode; import models.objectOrientedTransfer.*; -import parser.ModelLoader; +import designPatternExtensions.ModelLoader; import java.util.ArrayList; @@ -14,8 +14,8 @@ public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/"+this.getClass().getSimpleName()+".Json"); - ObjectNode concreteEnchant = design.getTransferContext().getSrcFirstResource(); - ObjectNode concreteWeapon = design.getTransferContext().getDstFirstResource(); + ObjectNode concreteEnchant = design.getTransferContexts().getFirst().getSrcFirstResource(); + ObjectNode concreteWeapon = design.getTransferContexts().getFirst().getDstFirstResource(); DependencyInversion di1 = new DependencyInversion(concreteWeapon, new InterfaceNode(concreteWeapon, "Weapon")); design.addDependencyInversion(di1); diff --git a/src/main/java/designPatternExtensions/designPattern/Builder.java b/src/main/java/designPatternExtensions/designPattern/Builder.java index fd9b223..06b2805 100644 --- a/src/main/java/designPatternExtensions/designPattern/Builder.java +++ b/src/main/java/designPatternExtensions/designPattern/Builder.java @@ -2,7 +2,7 @@ import designPatternExtensions.MediatorInsertion; import models.objectOrientedTransfer.*; -import parser.ModelLoader; +import designPatternExtensions.ModelLoader; import java.util.ArrayList; @@ -10,16 +10,17 @@ //https://github.com/iluwatar/java-design-patterns/tree/master/builder //staticがないとnew Hero().new Builder(...)のような形になり、Builderとして成立しない //なんならメソッドチェーンもない +//Mainが仲介者になり、制御の委譲を用いる必要がある public class Builder implements DesignPattern { public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/Builder.Json"); - ObjectNode builder = design.getTransferContext().getSrcFirstResource(); - ObjectNode main = design.getTransferContext().getDstFirstResource(); - - MediatorInsertion mi = new MediatorInsertion(main, builder, new ObjectNode("Hero")); - design.addMediatorInsertion(mi); + ObjectNode builder = design.getTransferContexts().getFirst().getSrcFirstResource(); + ObjectNode main = design.getTransferContexts().getFirst().getDstFirstResource(); +// +// MediatorInsertion mi = new MediatorInsertion(main, builder, new ObjectNode("Hero")); +// design.addMediatorInsertion(mi); return design; } diff --git a/src/main/java/designPatternExtensions/designPattern/Command.java b/src/main/java/designPatternExtensions/designPattern/Command.java index 6d77ccd..c0a1fd4 100644 --- a/src/main/java/designPatternExtensions/designPattern/Command.java +++ b/src/main/java/designPatternExtensions/designPattern/Command.java @@ -4,7 +4,7 @@ import designPatternExtensions.InterfaceNode; import designPatternExtensions.MediatorInsertion; import models.objectOrientedTransfer.*; -import parser.ModelLoader; +import designPatternExtensions.ModelLoader; //メモ //https://github.com/iluwatar/java-design-patterns/tree/master/command @@ -15,8 +15,8 @@ public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/"+this.getClass().getSimpleName()+".Json"); - ObjectNode wizard = design.getTransferContext().getSrcFirstResource(); - ObjectNode goblin = design.getTransferContext().getDstFirstResource(); + ObjectNode wizard = design.getTransferContexts().getFirst().getSrcFirstResource(); + ObjectNode goblin = design.getTransferContexts().getFirst().getDstFirstResource(); return design; } diff --git a/src/main/java/designPatternExtensions/designPattern/Decorator.java b/src/main/java/designPatternExtensions/designPattern/Decorator.java index 9d5c549..1885ffb 100644 --- a/src/main/java/designPatternExtensions/designPattern/Decorator.java +++ b/src/main/java/designPatternExtensions/designPattern/Decorator.java @@ -4,16 +4,19 @@ import designPatternExtensions.InterfaceNode; import designPatternExtensions.MediatorInsertion; import models.objectOrientedTransfer.*; -import parser.ModelLoader; +import designPatternExtensions.ModelLoader; //https://github.com/iluwatar/java-design-patterns/tree/master/decorator //SimpleTrollを用いてClubbedTrollを作成しないとDecoratorとは言えない? +//仲介者オブジェクトM A->M->B M作成時にに、MにBを参照先を引数とするコンストラクタをつける +// public ClubbedTroll(SimpleTroll simpleTroll) { +// this.simpleTroll = simpleTroll; } public class Decorator implements DesignPattern { public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/Decorator.Json"); - ObjectNode simpleTroll = design.getTransferContext().getSrcFirstResource(); - ObjectNode client = design.getTransferContext().getDstFirstResource(); + ObjectNode simpleTroll = design.getTransferContexts().getFirst().getSrcFirstResource(); + ObjectNode client = design.getTransferContexts().getFirst().getDstFirstResource(); ObjectNode clubbedTroll = new ObjectNode("ClubbedTroll"); MediatorInsertion mi = new MediatorInsertion(client, simpleTroll, clubbedTroll); diff --git a/src/main/java/designPatternExtensions/designPattern/Iterator.java b/src/main/java/designPatternExtensions/designPattern/Iterator.java index bd5eb17..79c9482 100644 --- a/src/main/java/designPatternExtensions/designPattern/Iterator.java +++ b/src/main/java/designPatternExtensions/designPattern/Iterator.java @@ -3,7 +3,7 @@ import designPatternExtensions.InterfaceNode; import designPatternExtensions.MediatorInsertion; import models.objectOrientedTransfer.*; -import parser.ModelLoader; +import designPatternExtensions.ModelLoader; import java.util.ArrayList; //メモ @@ -16,8 +16,8 @@ public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/"+this.getClass().getSimpleName()+".Json"); - ObjectNode treasureChest = design.getTransferContext().getSrcFirstResource(); - ObjectNode client = design.getTransferContext().getDstFirstResource(); + ObjectNode treasureChest = design.getTransferContexts().getFirst().getSrcFirstResource(); + ObjectNode client = design.getTransferContexts().getFirst().getDstFirstResource(); ObjectNode iterator = new ObjectNode("TreasureChestItemIterator"); MediatorInsertion mi = new MediatorInsertion(client, treasureChest, iterator); diff --git a/src/main/java/designPatternExtensions/designPattern/Proxy.java b/src/main/java/designPatternExtensions/designPattern/Proxy.java index c70a13d..410f1ff 100644 --- a/src/main/java/designPatternExtensions/designPattern/Proxy.java +++ b/src/main/java/designPatternExtensions/designPattern/Proxy.java @@ -4,7 +4,7 @@ import designPatternExtensions.InterfaceNode; import designPatternExtensions.MediatorInsertion; import models.objectOrientedTransfer.*; -import parser.ModelLoader; +import designPatternExtensions.ModelLoader; //https://github.com/iluwatar/java-design-patterns/tree/master/proxy @@ -12,8 +12,8 @@ public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/Proxy.Json"); - ObjectNode client = design.getTransferContext().getSrcFirstResource(); - ObjectNode ivoryTower = design.getTransferContext().getDstFirstResource(); + ObjectNode client = design.getTransferContexts().getFirst().getSrcFirstResource(); + ObjectNode ivoryTower = design.getTransferContexts().getFirst().getDstFirstResource(); ObjectNode proxy = new ObjectNode("WizardTowerProxy"); MediatorInsertion mi = new MediatorInsertion(client, ivoryTower, proxy); diff --git a/src/main/java/designPatternExtensions/designPattern/State.java b/src/main/java/designPatternExtensions/designPattern/State.java index eb618ac..ca462f9 100644 --- a/src/main/java/designPatternExtensions/designPattern/State.java +++ b/src/main/java/designPatternExtensions/designPattern/State.java @@ -2,7 +2,7 @@ import designPatternExtensions.*; import models.objectOrientedTransfer.*; -import parser.ModelLoader; +import designPatternExtensions.ModelLoader; //https://github.com/iluwatar/java-design-patterns/tree/master/state // Mammoth内でConcreteStateのMapを持てたら再現できたといえる? @@ -11,12 +11,12 @@ public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/State.Json"); - ObjectNode main = design.getTransferContext().getSrcFirstResource(); - ObjectNode concreteState = design.getTransferContext().getDstFirstResource(); + ObjectNode main = design.getTransferContexts().getFirst().getSrcFirstResource(); + ObjectNode concreteState = design.getTransferContexts().getFirst().getDstFirstResource(); - MediatorInsertion mi = new MediatorInsertion( - main, concreteState, new ObjectNode("Mammoth")); - design.addMediatorInsertion(mi); +// MediatorInsertion mi = new MediatorInsertion( +// main, concreteState, new ObjectNode("Mammoth")); +// design.addMediatorInsertion(mi); DependencyInversion di = new DependencyInversion( concreteState, new InterfaceNode(concreteState, "State")); diff --git a/src/main/java/designPatternExtensions/designPattern/Strategy.java b/src/main/java/designPatternExtensions/designPattern/Strategy.java index 478a0f3..56ffed2 100644 --- a/src/main/java/designPatternExtensions/designPattern/Strategy.java +++ b/src/main/java/designPatternExtensions/designPattern/Strategy.java @@ -3,7 +3,7 @@ import designPatternExtensions.DependencyInversion; import designPatternExtensions.InterfaceNode; import models.objectOrientedTransfer.*; -import parser.ModelLoader; +import designPatternExtensions.ModelLoader; import java.util.ArrayList; import java.util.List; @@ -15,8 +15,8 @@ public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/Strategy.Json"); - ObjectNode dragonSlayer = design.getTransferContext().getSrcFirstResource(); - ObjectNode concreteStrategy = (ObjectNode) design.getTransferContext().getDstResource().get(0).getDestination(); + ObjectNode dragonSlayer = design.getTransferContexts().getFirst().getSrcFirstResource(); + ObjectNode concreteStrategy = (ObjectNode) design.getTransferContexts().getFirst().getDstResource().get(0).getDestination(); DependencyInversion di = new DependencyInversion( concreteStrategy, new InterfaceNode(concreteStrategy, "DragonSlayingStrategy"));