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;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.trendmicro.codi.CODIException;
import com.trendmicro.codi.ZNode;
import com.trendmicro.tme.grapheditor.ProcessorModel.RenderView;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class GraphModel {
private String name;
private Set<String> processors = new HashSet<String>();
private Set<String> rules = new HashSet<String>();
private boolean enabled = false;
private Set<String> admins = new HashSet<String>();
public GraphModel() {
}
public GraphModel(String name) {
this.name = name;
}
public String getName() {
return name;
}
public Set<String> getProcessors() {
return processors;
}
public void addProcessor(String processor) {
processors.add(processor);
}
public void removeProcessor(String processor) {
processors.remove(processor);
}
public Set<String> getAdmins() {
return admins;
}
public void addAdmin(String admin) {
admins.add(admin);
}
public void removeAdmin(String admin) {
admins.remove(admin);
}
public void addRule(String rule) {
rules.add(rule);
}
public void removeRule(String rule) {
rules.remove(rule);
}
public Set<String> getRules() {
return rules;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public String toSubgraph() throws JsonSyntaxException, CODIException {
StringBuilder sb = new StringBuilder();
for(String processorName : processors) {
ZNode node = new ZNode("/global/graph/processor/" + processorName);
ProcessorModel processor = new Gson().fromJson(node.getContentString(), ProcessorModel.class);
sb.append(processor.toSubgraph(RenderView.GRAPH_EDITOR));
}
for(String rule : rules) {
String[] tmpArray = rule.split("-");
String src = tmpArray[0];
String dst = tmpArray[1];
sb.append(String.format("\"%s\" -> \"%s\" [style=%s label=x href=\"%s\"];\n", src, dst, enabled ? "solid": "dashed", String.format("javascript:remove_rule('%s');", rule.replaceAll("\\\"", "\\\\\""))));
}
return sb.toString();
}
}