workcraft/XmasPlugin/src/org/workcraft/plugins/xmas/commands/JsonExportCommand.java
package org.workcraft.plugins.xmas.commands;
import org.workcraft.commands.Command;
import org.workcraft.dom.Connection;
import org.workcraft.dom.Node;
import org.workcraft.dom.visual.VisualComponent;
import org.workcraft.dom.visual.VisualGroup;
import org.workcraft.plugins.xmas.VisualXmas;
import org.workcraft.plugins.xmas.Xmas;
import org.workcraft.plugins.xmas.XmasSettings;
import org.workcraft.plugins.xmas.components.*;
import org.workcraft.utils.Hierarchy;
import org.workcraft.utils.WorkspaceUtils;
import org.workcraft.workspace.WorkspaceEntry;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Collection;
public class JsonExportCommand implements Command {
@Override
public String getDisplayName() {
return "Export to JSON file";
}
@Override
public String getSection() {
return "Export";
}
@Override
public boolean isApplicableTo(WorkspaceEntry we) {
return WorkspaceUtils.isApplicable(we, Xmas.class);
}
public Collection<VisualSourceComponent> srcNodes;
public void syncReset() {
File syncFile = XmasSettings.getTempVxmSyncFile();
PrintWriter writerS = null;
try {
writerS = new PrintWriter(syncFile);
writerS.println("empty");
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (writerS != null) {
writerS.close();
}
}
}
@SuppressWarnings("PMD.EmptyControlStatement")
@Override
public void run(WorkspaceEntry we) {
System.out.println("Running tests");
final VisualXmas vnet = WorkspaceUtils.getAs(we, VisualXmas.class);
final Xmas cnet = WorkspaceUtils.getAs(we, Xmas.class);
//srcNodes = cnet.getSourceComponent();
int no = 1;
SourceComponent srcNode = null;
SinkComponent snkNode = null;
FunctionComponent funNode = null;
QueueComponent quNode = null;
ForkComponent frkNode = null;
JoinComponent jnNode = null;
SwitchComponent swNode = null;
MergeComponent mrgNode = null;
int syncr = 0;
for (Node node : vnet.getNodes()) {
if (node instanceof VisualSyncComponent) {
syncr = 1;
}
}
if (syncr == 0) {
syncReset();
}
for (VisualGroup vg: Hierarchy.getDescendantsOfType(vnet.getRoot(), VisualGroup.class)) {
for (VisualComponent vp: vg.getComponents()) {
if (vp instanceof VisualSourceComponent) {
VisualSourceComponent vsc = (VisualSourceComponent) vp;
SourceComponent sc = vsc.getReferencedComponent();
sc.setGr(no);
} else if (vp instanceof VisualSinkComponent) {
VisualSinkComponent vsc = (VisualSinkComponent) vp;
SinkComponent sc = vsc.getReferencedComponent();
sc.setGr(no);
} else if (vp instanceof VisualFunctionComponent) {
VisualFunctionComponent vsc = (VisualFunctionComponent) vp;
FunctionComponent sc = vsc.getReferencedComponent();
sc.setGr(no);
} else if (vp instanceof VisualQueueComponent) {
VisualQueueComponent vsc = (VisualQueueComponent) vp;
QueueComponent sc = vsc.getReferencedComponent();
sc.setGr(no);
} else if (vp instanceof VisualForkComponent) {
VisualForkComponent vsc = (VisualForkComponent) vp;
ForkComponent sc = vsc.getReferencedComponent();
sc.setGr(no);
} else if (vp instanceof VisualJoinComponent) {
VisualJoinComponent vsc = (VisualJoinComponent) vp;
JoinComponent sc = vsc.getReferencedComponent();
sc.setGr(no);
} else if (vp instanceof VisualSwitchComponent) {
VisualSwitchComponent vsc = (VisualSwitchComponent) vp;
SwitchComponent sc = vsc.getReferencedComponent();
sc.setGr(no);
} else if (vp instanceof VisualMergeComponent) {
VisualMergeComponent vsc = (VisualMergeComponent) vp;
MergeComponent sc = vsc.getReferencedComponent();
sc.setGr(no);
}
}
no++;
}
for (SourceComponent node : cnet.getSourceComponents()) {
//System.out.println("Num =" + cnet.getPostset(node).size());
//System.out.println("Name =" + cnet.getName(node));
//((SourceComponent) node).setVal('b');
//System.out.println("Val =" + ((SourceComponent) node).getType());
srcNode = node;
}
//System.out.println("Name_ =" + cnet.getName(srcNode));
XmasContact contactNode = null;
//Collection<Contact> contacts = srcNode.getContacts();
Collection<XmasContact> contacts = srcNode.getOutputs();
Collection<XmasContact> contacts2 = srcNode.getOutputs();
for (XmasContact node : contacts) {
//System.out.println("OutputContact =" + cnet.getName(node));
contactNode = node;
}
//All contacts
//System.out.println("Name_ =" + cnet.getName(contactNode));
for (Connection c : cnet.getConnections(contactNode)) {
//System.out.println("OutputConnection =" + cnet.getName(c));
//if (c.getFirst() instanceof Contact) System.out.println("Found First Contact");
if (c.getSecond() instanceof XmasContact) {
//System.out.println("Found Output Contact" + cnet.getName(c.getSecond()));
//Node cpNode = c.getSecond().getParent();
//System.out.println("Found Output Component" + cnet.getName(cpNode));
}
}
int numNodes = cnet.getNodes().size();
//GEN JSON
File file = XmasSettings.getTempVxmJsonFile();
PrintWriter writer = null;
try {
writer = new PrintWriter(file);
int countNodes = 0;
int numOutputs = 0;
System.out.println("Generate Json");
System.out.println("{");
writer.println("{");
System.out.println(" \"VARS\": [],");
writer.println(" \"VARS\": [],");
System.out.println(" \"PACKET_TYPE\": {},");
writer.println(" \"PACKET_TYPE\": {},");
System.out.println(" \"COMPOSITE_OBJECTS\": [],");
writer.println(" \"COMPOSITE_OBJECTS\": [],");
System.out.println(" \"NETWORK\": [");
writer.println(" \"NETWORK\": [");
for (Node node : cnet.getNodes()) {
countNodes++;
System.out.println(" {");
writer.println(" {");
String rstr;
rstr = cnet.getName(node);
rstr = rstr.replace(rstr.charAt(0), Character.toUpperCase(rstr.charAt(0)));
System.out.println(" \"id\": \"" + cnet.getName(node) + "\",");
//writer.println(" \"id\": \"" + cnet.getName(node) + "\",");
writer.println(" \"id\": \"" + rstr + "\",");
if ("fork".equals(cnet.getType(node))) {
System.out.println(" \"type\": \"" + "xfork" + "\",");
writer.println(" \"type\": \"" + "xfork" + "\",");
} else if ("switch".equals(cnet.getType(node))) {
System.out.println(" \"type\": \"" + "xswitch" + "\",");
writer.println(" \"type\": \"" + "xswitch" + "\",");
} else {
System.out.println(" \"type\": \"" + cnet.getType(node) + "\",");
writer.println(" \"type\": \"" + cnet.getType(node) + "\",");
}
System.out.println(" \"outs\" : [");
writer.println(" \"outs\" : [");
if (node instanceof SourceComponent) {
srcNode = (SourceComponent) node;
contacts = srcNode.getOutputs();
numOutputs = 1;
} else if (node instanceof SinkComponent) {
snkNode = (SinkComponent) node;
contacts = snkNode.getOutputs();
numOutputs = 1;
} else if (node instanceof FunctionComponent) {
funNode = (FunctionComponent) node;
contacts = funNode.getOutputs();
numOutputs = 1;
} else if (node instanceof QueueComponent) {
quNode = (QueueComponent) node;
contacts = quNode.getOutputs();
numOutputs = 1;
} else if (node instanceof ForkComponent) {
frkNode = (ForkComponent) node;
contacts = frkNode.getOutputs();
numOutputs = 2;
} else if (node instanceof JoinComponent) {
jnNode = (JoinComponent) node;
contacts = jnNode.getOutputs();
numOutputs = 1;
} else if (node instanceof SwitchComponent) {
swNode = (SwitchComponent) node;
contacts = swNode.getOutputs();
numOutputs = 2;
} else if (node instanceof MergeComponent) {
mrgNode = (MergeComponent) node;
contacts = mrgNode.getOutputs();
numOutputs = 1;
}
for (XmasContact contactNode2 : contacts) {
for (Connection c : cnet.getConnections(contactNode2)) {
if (c.getSecond() instanceof XmasContact) {
//System.out.println("Output Contact" + cnet.getName(c.getSecond()));
System.out.println(" {");
writer.println(" {");
Node cpNode = c.getSecond().getParent();
int contactCount = 1;
int contactNo = 1;
if (cpNode instanceof JoinComponent) {
JoinComponent jnNode2 = (JoinComponent) cpNode;
contacts2 = jnNode2.getInputs();
for (XmasContact jncntNode : contacts2) {
if (jncntNode == c.getSecond()) {
//System.out.println(" Found jn contact = " + contactNo);
contactNo = contactCount;
}
contactCount++;
}
} else if (cpNode instanceof MergeComponent) {
MergeComponent mrgNode2 = (MergeComponent) cpNode;
contacts2 = mrgNode2.getInputs();
for (XmasContact mrgcntNode : contacts2) {
if (mrgcntNode == c.getSecond()) {
//System.out.println(" Found mrg contact = " + contactNo);
contactNo = contactCount;
}
contactCount++;
}
}
rstr = cnet.getName(cpNode);
rstr = rstr.replace(rstr.charAt(0), Character.toUpperCase(rstr.charAt(0)));
System.out.println(" \"id\": " + "\"" + cnet.getName(cpNode) + "\",");
//writer.println(" \"id\": " + "\"" + cnet.getName(cpNode) + "\",");
writer.println(" \"id\": " + "\"" + rstr + "\",");
System.out.println(" \"in_port\": " + (contactNo - 1));
writer.println(" \"in_port\": " + (contactNo - 1));
if (numOutputs > 1) {
System.out.println(" },");
writer.println(" },");
numOutputs = 1; //fpb
} else {
System.out.println(" }");
writer.println(" }");
}
}
}
}
if (node instanceof SourceComponent) {
System.out.println(" ],");
writer.println(" ],");
} else if (node instanceof QueueComponent) {
System.out.println(" ],");
writer.println(" ],");
} else {
System.out.println(" ],");
writer.println(" ],");
}
/*else {
System.out.println(" ]");
writer.println(" ]");
}*/
if (node instanceof SourceComponent) {
//char srcchecktype = srcNode.getVal();
//System.out.println("type = " + srcchecktype);
//int srccheckmode = srcNode.getMode();
//System.out.println("mode = " + srccheckmode);
System.out.println(" \"fields\": [");
writer.println(" \"fields\": [");
System.out.println(" {");
writer.println(" {");
int sgr = srcNode.getGr();
System.out.println(" \"gr\": " + sgr + ",");
writer.println(" \"gr\": " + sgr + ",");
String srcgp = srcNode.getGp();
System.out.println(" \"gpf\": " + srcgp);
writer.println(" \"gpf\": " + srcgp);
System.out.println(" }");
writer.println(" }");
System.out.println(" ]");
writer.println(" ]");
} else if (node instanceof SinkComponent) {
System.out.println(" \"fields\": [");
writer.println(" \"fields\": [");
System.out.println(" {");
writer.println(" {");
int sgr = snkNode.getGr();
System.out.println(" \"gr\": " + sgr);
writer.println(" \"gr\": " + sgr);
System.out.println(" }");
writer.println(" }");
System.out.println(" ]");
writer.println(" ]");
} else if (node instanceof FunctionComponent) {
//char fncheckfn = funNode.getVal();
//System.out.println("val = " + fncheckfn);
System.out.println(" \"fields\": [");
writer.println(" \"fields\": [");
System.out.println(" {");
writer.println(" {");
//String fs = funNode.getFun();
//System.out.println(" \"fn\": " + fs);
//writer.println(" \"fn\": " + fs + ",");
int fgr = funNode.getGr();
System.out.println(" \"gr\": " + fgr);
writer.println(" \"gr\": " + fgr);
System.out.println(" }");
writer.println(" }");
System.out.println(" ]");
writer.println(" ]");
} else if (node instanceof QueueComponent) {
System.out.println(" \"fields\": [");
writer.println(" \"fields\": [");
System.out.println(" {");
writer.println(" {");
//int quchecksize = quNode.getCapacity();
//System.out.println("capacity = " + quchecksize + ",");
int qusize = quNode.getCapacity();
//int qusize = 2; //hardwire
//int qusize = 3; //hardwire
System.out.println(" \"size\": " + qusize + ",");
writer.println(" \"size\": " + qusize + ",");
int quinit = quNode.getInit();
System.out.println(" \"init\": " + quinit + ",");
writer.println(" \"init\": " + quinit + ",");
int qgr = quNode.getGr();
System.out.println(" \"gr\": " + qgr + ",");
writer.println(" \"gr\": " + qgr + ",");
String qugp = quNode.getGp();
System.out.println(" \"gpf\": " + qugp);
writer.println(" \"gpf\": " + qugp);
System.out.println(" }");
writer.println(" }");
System.out.println(" ]");
writer.println(" ]");
} else if (node instanceof ForkComponent) {
System.out.println(" \"fields\": [");
writer.println(" \"fields\": [");
System.out.println(" {");
writer.println(" {");
int fgr = frkNode.getGr();
System.out.println(" \"gr\": " + fgr);
writer.println(" \"gr\": " + fgr);
System.out.println(" }");
writer.println(" }");
System.out.println(" ]");
writer.println(" ]");
} else if (node instanceof JoinComponent) {
System.out.println(" \"fields\": [");
writer.println(" \"fields\": [");
System.out.println(" {");
writer.println(" {");
int jgr = jnNode.getGr();
System.out.println(" \"gr\": " + jgr);
writer.println(" \"gr\": " + jgr);
System.out.println(" }");
writer.println(" }");
System.out.println(" ]");
writer.println(" ]");
} else if (node instanceof SwitchComponent) {
System.out.println(" \"fields\": [");
writer.println(" \"fields\": [");
System.out.println(" {");
writer.println(" {");
int sgr = swNode.getGr();
System.out.println(" \"gr\": " + sgr);
writer.println(" \"gr\": " + sgr);
System.out.println(" }");
writer.println(" }");
System.out.println(" ]");
writer.println(" ]");
} else if (node instanceof MergeComponent) {
System.out.println(" \"fields\": [");
writer.println(" \"fields\": [");
System.out.println(" {");
writer.println(" {");
int mgr = mrgNode.getGr();
System.out.println(" \"gr\": " + mgr);
writer.println(" \"gr\": " + mgr);
System.out.println(" }");
writer.println(" }");
System.out.println(" ]");
writer.println(" ]");
}
if (countNodes < numNodes) {
System.out.println(" },");
writer.println(" },");
} else {
System.out.println(" }");
writer.println(" }");
}
}
System.out.println(" ]");
writer.println(" ]");
System.out.println("}");
writer.println("}");
System.out.println("Output written to JsonFile");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
writer.close();
}
}
}
}