package com.trendmicro.tme.grapheditor;
import java.util.HashSet;
import java.util.Set;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class ProcessorModel {
public static enum RenderView {
PROCESSOR_EDITOR, GRAPH_EDITOR
}
private String name;
private Set<ExchangeModel> inputs = new HashSet<ExchangeModel>();
private Set<String> outputs = new HashSet<String>();
public ProcessorModel(String name) {
this.name = name;
}
public String getName() {
return name;
}
public Set<ExchangeModel> getInputs() {
return inputs;
}
public Set<String> getOutputs() {
return outputs;
}
public void addInput(String input) {
inputs.add(new ExchangeModel(input));
}
public void removeInput(String input) {
inputs.remove(new ExchangeModel(input));
}
public void addOutput(String output) {
outputs.add(output);
}
public void removeOutput(String output) {
outputs.remove(output);
}
public String toSubgraph(RenderView view) {
StringBuilder sb = new StringBuilder();
sb.append("subgraph \"cluster_");
sb.append(name);
sb.append("\"{\n");
sb.append("style=filled;\n");
sb.append("color=\"#F0F9E8\";\n");
sb.append("nodesep=0.2;\n");
sb.append("ranksep=0.2;\n");
for(ExchangeModel input : inputs) {
sb.append(input.toSubgraph());
sb.append(String.format("\"%s\" -> \"%s\" [style=dotted];\n", input.getFullName(), name));
}
if(view.equals(RenderView.PROCESSOR_EDITOR)) {
sb.append(String.format("\"add_input_%s\" [label=\"+\" shape=doublecircle href=\"javascript:add_input();\"];\n", name));
sb.append(String.format("\"add_input_%s\" -> \"%s\" [dir=none style=invisible];\n", name, name));
}
sb.append(String.format("\"%s\" [shape=box3d %s];\n", name, view.equals(RenderView.GRAPH_EDITOR) ? "href=\"javascript:processor_onclick('" + name + "');\"": ""));
if(view.equals(RenderView.PROCESSOR_EDITOR)) {
sb.append(String.format("\"add_output_%s\" [label=\"+\" shape=doublecircle href=\"javascript:add_output();\"];\n", name));
sb.append(String.format("\"%s\" -> \"add_output_%s\"[dir=none style=invisible];\n", name, name));
}
for(String output : outputs) {
sb.append(String.format("\"%s\" [id=\"output-%s\" shape=record color=\"#008000\" href=\"%s\"];\n", output, output, view.equals(RenderView.PROCESSOR_EDITOR) ? String.format("javascript:remove_output('%s');", output): "void(0);"));
sb.append(String.format("\"%s\" -> \"%s\" [style=dotted];\n", name, output));
}
sb.append("}\n");
return sb.toString();
}
}