package brainslug.flow.node;
import brainslug.flow.definition.EnumIdentifier;
import brainslug.flow.definition.Identifier;
import brainslug.flow.definition.StringIdentifier;
import brainslug.flow.path.FlowEdgeDefinition;
import brainslug.util.MixableBase;
import java.util.ArrayList;
import java.util.List;
public class FlowNodeDefinition<T extends FlowNodeDefinition> extends MixableBase<FlowNodeDefinition> {
Identifier id;
String displayName;
String documentation;
List<FlowEdgeDefinition> incoming = new ArrayList<FlowEdgeDefinition>();
List<FlowEdgeDefinition> outgoing = new ArrayList<FlowEdgeDefinition>();
public T id(Enum id) {
this.id = new EnumIdentifier(id);
return self();
}
public T id(String id) {
this.id = new StringIdentifier(id);
return self();
}
public T id(Identifier id) {
this.id = id;
return self();
}
public T display(String displayName) {
this.displayName = displayName;
return self();
}
public T documentation(String documentation) {
this.documentation = documentation;
return self();
}
public T self() {
return (T) this;
}
public FlowNodeDefinition<T> addIncoming(FlowNodeDefinition source) {
incoming.add(new FlowEdgeDefinition(source, this));
return this;
}
public FlowNodeDefinition<T> addOutgoing(FlowNodeDefinition target) {
outgoing.add(new FlowEdgeDefinition(this, target));
return this;
}
public List<FlowEdgeDefinition> getIncoming() {
return incoming;
}
public List<FlowEdgeDefinition> getOutgoing() {
return outgoing;
}
public Identifier getId() {
return id;
}
public String getDisplayName() {
return displayName == null ? "" : displayName;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
FlowNodeDefinition that = (FlowNodeDefinition) o;
if (id != null ? !id.equals(that.id) : that.id != null) return false;
return true;
}
@Override
public int hashCode() {
return id != null ? id.hashCode() : 0;
}
@Override
public String toString() {
return "FlowNodeDefinition{" +
"getIdentifier=" + id +
", incoming=" + incoming +
", outgoing=" + outgoing +
'}';
}
}