package com.github.sriki77.apiproxy.instrument.model;
import org.w3c.dom.Node;
import java.util.Optional;
public class DOMStep extends Step {
private Step inner;
private Optional<Node> nameNode;
private Optional<Node> condNode;
public DOMStep(Step inner, Optional<Node> nameNode, Optional<Node> condNode) {
super(inner.name,inner.condition,inner.parent);
this.inner = inner;
this.nameNode = nameNode;
this.condNode = condNode;
this.baseName= inner.baseName;
setName(inner.name);
setCondition(inner.condition);
}
@Override
public void setName(String name) {
if(name==null){
return;
}
validateNodePresence(nameNode);
super.setName(name);
inner.setName(name);
updateNode(nameNode, name);
}
private void validateNodePresence(Optional<Node> node) {
if (!node.isPresent()) {
throw new RuntimeException("Name/Condition node not present for original step. You cannot add a new one to the clone.");
}
}
private void updateNode(Optional<Node> node, String value) {
if (node.isPresent()) {
node.get().setTextContent(value);
}
}
@Override
public void setCondition(String condition) {
if(condition==null){
return;
}
validateNodePresence(condNode);
super.setCondition(condition);
inner.setCondition(condition);
updateNode(condNode, condition);
}
@Override
public Step duplicate() {
throw new RuntimeException("Duplication of DOM Step not supported");
}
}