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;
@XStreamAlias("Step")
public class Step implements LocationProvider {
@XStreamAlias("Name")
protected String name;
@XStreamAlias("Condition")
protected String condition;
@XStreamAlias("executed")
@XStreamAsAttribute
protected boolean executed = true;
@XStreamOmitField
protected String baseName;
@XStreamOmitField
protected LocationProvider parent;
protected Step(String name, String condition, LocationProvider parent) {
this.name = name;
this.condition = escapeCondition(condition);
this.parent = parent;
}
private String escapeCondition(String condition) {
return condition==null? null:condition.replace("<","<").replace(">",">");
}
public void setName(String name) {
this.name = name;
}
public void setCondition(String condition) {
this.condition = condition;
}
@Override
public String toString() {
return "Step{" +
"name='" + name + '\'' +
", condition='" + condition + '\'' +
'}';
}
public Step duplicate() {
final Step copy = new Step(name + System.currentTimeMillis(), condition, parent);
copy.baseName = name;
return copy;
}
@Override
public void setParent(LocationProvider parent) {
this.parent = parent;
}
@Override
public String location() {
String loc = "Policy: " + name;
if (condition != null) {
loc += " Condition: " + condition;
}
return LocationProvider.append(parent, loc);
}
public String policyNameAndCondition() {
String loc = "Policy: " + baseName;
if (condition != null) {
loc += " Condition: " + condition;
}
return loc;
}
public String initUsingTemplate(String template, String name) {
return String.format(template, name, LocationProvider.endpointName(this),
LocationProvider.proxyFileName(this), LocationProvider.flowName(this), policyNameAndCondition());
}
public String getName() {
return name;
}
public void setExecuted(boolean executed) {
this.executed = executed;
}
public boolean isExecuted() {
return executed;
}
}