package designPatternExtensions.designPattern;
import designPatternExtensions.DependencyInversion;
import designPatternExtensions.InterfaceNode;
import designPatternExtensions.MediatorInsertion;
import designPatternExtensions.ModelLoader;
import models.deltaAlgebra.ObjectNode;
import models.objectOrientedTransfer.DataTransferContext;
import models.objectOrientedTransfer.DataTransferDesign;
import models.objectOrientedTransfer.IllegalRelationException;
import models.objectOrientedTransfer.PushPullValue;
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 DataTransferDesign create() throws IllegalRelationException {
DataTransferDesign design = ModelLoader.load("models/designPattern/Chain-of-responsibility.Json");
DataTransferContext dtc = design.getTransferContexts().getFirst();
ObjectNode main = dtc.getSrcFirstResource();
ObjectNode concreteOrcRequestHandler = (ObjectNode) dtc.getDstResource().getEdge(1).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
*/