package designPatternExtensions.designPattern;
import designPatternExtensions.DependencyInversion;
import designPatternExtensions.InterfaceNode;
import designPatternExtensions.MediatorInsertion;
import designPatternExtensions.ModelLoader;
import models.deltaAlgebra.ObjectNode;
import models.dataSynchronizationModel.*;
import javax.print.attribute.standard.Media;
//メモ
//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();
InterfaceNode requestHandler = new InterfaceNode(concreteOrcRequestHandler, "RequestHandler");
DependencyInversion di = new DependencyInversion(concreteOrcRequestHandler, requestHandler);
design.addDependencyInversion(di);
MediatorInsertion mi = new MediatorInsertion(main, concreteOrcRequestHandler, new ObjectNode("OrcKing"), PushPullValue.PUSH);
design.addMediatorInsertion(mi);
return design;
}
}
/*
(RequestTypeなどは仕様?)
public class Request
public class ConcreteOrcRequestHandler
public class OrcKing {
private List<ConcreteOrcRequestHandler> handlers;
}
ConcreteOrcRequestHandler ---> RequestHandler
*/