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.Node;
@XStreamAlias("Flow")
public class Flow implements NodeHolder, LocationProvider {
@XStreamAlias("Request")
protected RequestFlow requestFlow;
@XStreamAlias("Response")
protected ResponseFlow responseFlow;
@XStreamAlias("Condition")
protected String condition;
@XStreamAlias("name")
@XStreamAsAttribute
private String name;
@XStreamOmitField
protected LocationProvider parent;
@Override
public void holdNode(Node node) {
NodeHolder.holdNode(requestFlow, NodeHolder.findMyselfUsingXpath(node, getReqNodeXPath()));
NodeHolder.holdNode(responseFlow, NodeHolder.findMyselfUsingXpath(node, getResNodeXPath()));
}
protected String getReqNodeXPath() {
return String.format("//Flow[@name='%s']/Request", name);
}
protected String getResNodeXPath() {
return String.format("//Flow[@name='%s']/Response", name);
}
public RequestFlow getRequestFlow() {
return requestFlow == null ? new RequestFlow() : requestFlow;
}
public ResponseFlow getResponseFlow() {
return responseFlow == null ? new ResponseFlow() : responseFlow;
}
@Override
public void setParent(LocationProvider parent) {
this.parent = parent;
LocationProvider.setParent(requestFlow, this);
LocationProvider.setParent(responseFlow, this);
}
@Override
public String location() {
return LocationProvider.append(parent, name);
}
public String getName() {
return name;
}
}