package com.github.sriki77.apiproxy.instrument.model; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import com.thoughtworks.xstream.annotations.XStreamOmitField; import org.w3c.dom.Document; import org.w3c.dom.Node; import java.io.File; import java.util.ArrayList; import java.util.List; public abstract class Endpoint implements NodeHolder, LocationProvider { @XStreamAlias("FaultRules") protected FaultRules faultRules; @XStreamAlias("PreFlow") protected PreFlow preflow; @XStreamAlias("Flows") protected Flows flows; @XStreamAlias("PostFlow") protected PostFlow postflow; @XStreamAlias("name") @XStreamAsAttribute private String name; @XStreamOmitField private File xmlFile; @XStreamOmitField private Node node; @XStreamOmitField private List<PolicyUpdate> updates; public File getXmlFile() { return xmlFile; } @Override public void holdNode(Node node) { this.node = node; NodeHolder.holdNode(faultRules, NodeHolder.findMyselfUsingXpath(node, "//FaultRules")); NodeHolder.holdNode(preflow, NodeHolder.findMyselfUsingXpath(node, "//PreFlow")); NodeHolder.holdNode(postflow, NodeHolder.findMyselfUsingXpath(node, "//PostFlow")); NodeHolder.holdNode(flows, NodeHolder.findMyselfUsingXpath(node, "//Flows")); } public FaultRules getFaultRules() { return faultRules == null ? new FaultRules() : faultRules; } public PreFlow getPreflow() { return preflow == null ? new PreFlow() : preflow; } public Flows getFlows() { return flows == null ? new Flows() : flows; } public PostFlow getPostflow() { return postflow == null ? new PostFlow() : postflow; } public Node getNode() { return node; } @Override public String location() { return endpointType() + ":" + name + ",File:" + xmlFile.getName(); } public abstract String endpointType(); public void init(File xmlFile, Document node) { this.xmlFile = xmlFile; holdNode(node); setParent(this); } @Override public void setParent(LocationProvider parent) { LocationProvider.setParent(faultRules, parent); LocationProvider.setParent(preflow, parent); LocationProvider.setParent(postflow, parent); LocationProvider.setParent(flows, parent); } public void addUpdate(PolicyUpdate update) { if (updates == null) { this.updates = new ArrayList<>(); } this.updates.add(update); } public List<PolicyUpdate> updates() { return updates == null ? new ArrayList<>() : updates; } @Override public String toString() { return "Endpoint{" + "name='" + name + '\'' + '}'; } public String getName() { return name; } }