package ui.controller; import java.awt.Point; import java.io.FileWriter; import java.io.IOException; import java.util.ListIterator; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import classes.Category; import classes.CpsEdge; import classes.CpsObject; import classes.HolonElement; import classes.HolonObject; import classes.HolonSwitch; import classes.HolonTransformer; import ui.model.Model; import ui.model.idCounter; public class StoreController { private Model MODEL; public StoreController(Model model) { this.MODEL = model; } /** * Writes the current State of the Modelling into a JSON File which can be * loaded * * @throws IOException */ public void writeJSONFile(String path) throws IOException { JSONObject json = new JSONObject(); json.put("ID", idCounter.getCounter()); writeCategory(json); writeObjects(json); writeElements(json); writeEdges(json); writeElementGraph(json); FileWriter writer = new FileWriter(path); writer.write(json.toJSONString());getClass(); writer.flush(); writer.close(); } /** * writes all Categories into a JSONObject * * @param json * @throws IOException */ public void writeCategory(JSONObject json) { JSONArray arr = new JSONArray(); for (Category cat : MODEL.getCategories()) arr.add(cat.getName()); json.put("CG", arr); } /** * writes all Objects in Category into a JSONObject * * @param json */ public void writeObjects(JSONObject json) { JSONArray arr = new JSONArray(); int i = 1; for (Category cats : MODEL.getCategories()) for (CpsObject cps : cats.getObjects()) { arr.add(getObjectType(cps)); arr.add(cps.getSav()); arr.add(cps.getObjName()); arr.add(cps.getImage()); json.put("CGO" + i++, arr); arr = new JSONArray(); } i = 1; for (CpsObject cps : MODEL.getObjectsOnCanvas()) { arr.add(getObjectType(cps)); arr.add(cps.getObjName()); arr.add(cps.getName()); arr.add(cps.getID()); arr.add(cps.getImage()); arr.add(cps.getPosition().x); arr.add(cps.getPosition().y); json.put("CVSO" + i++, arr); arr = new JSONArray(); ; } } /** * writes all Elements in Objects in Category into a JSONObject * * @param json */ public void writeElements(JSONObject json) { JSONArray arr = new JSONArray(); int i = 1; for (Category cats : MODEL.getCategories()) for (CpsObject cps : cats.getObjects()) if (cps instanceof HolonObject) for (HolonElement ele : ((HolonObject) cps).getElements()) { arr.add(ele.getSav()); arr.add(ele.getObj()); arr.add(ele.getEleName()); arr.add(ele.getAmount()); arr.add(ele.getEnergy()); json.put("CGE" + i++, arr); arr = new JSONArray(); } i = 1; for (CpsObject cps : MODEL.getObjectsOnCanvas()) { if (cps instanceof HolonObject) for (HolonElement ele : ((HolonObject) cps).getElements()) { arr.add(ele.getSav()); arr.add(cps.getID()); arr.add(ele.getEleName()); arr.add(ele.getAmount()); arr.add(ele.getEnergy()); arr.add(Boolean.compare(ele.getActive(), true) + 1); json.put("CVSE" + i++, arr); arr = new JSONArray(); } } } /** * write all Edges into a JSONObject * * @param json */ public void writeEdges(JSONObject json) { JSONArray arr = new JSONArray(); int i = 1; for (CpsEdge edge : MODEL.getEdgesOnCanvas()) { arr.add(edge.getA().getID()); arr.add(edge.getB().getID()); arr.add(edge.getCapacity()); arr.add(edge.getFlow()); json.put("EDGE" + i++, arr); arr = new JSONArray(); } } /** * writes the Graph from all Elements into a JSONObject * * @param json */ public void writeElementGraph(JSONObject json) { ListIterator iterator; JSONArray arr = new JSONArray(); int i = 1; for (Category cats : MODEL.getCategories()) for (CpsObject cps : cats.getObjects()) if (cps instanceof HolonObject) for (HolonElement ele : ((HolonObject) cps).getElements()) if (!ele.getGraphPoints().isEmpty()) { iterator = ele.getGraphPoints().listIterator(); arr.add(ele.getSav()); arr.add(ele.getObj()); arr.add(ele.getEleName()); while (iterator.hasNext()) { Point p = iterator.next(); arr.add((int) p.getX()); arr.add((int) p.getY()); } json.put("CGGP" + i++, arr); arr = new JSONArray(); } i = 1; for (CpsObject cps : MODEL.getObjectsOnCanvas()) { if (cps instanceof HolonObject) for (HolonElement ele : ((HolonObject) cps).getElements()) if (!ele.getGraphPoints().isEmpty()) { iterator = ele.getGraphPoints().listIterator(); arr.add(ele.getSav()); arr.add(cps.getID()); arr.add(ele.getEleName()); while (iterator.hasNext()) { Point p = iterator.next(); arr.add((int) p.getX()); arr.add((int) p.getY()); } json.put("CVSGP" + i++, arr); arr = new JSONArray(); } } } /** * Return the Object Type * * @param cps * @return */ public String getObjectType(CpsObject cps) { if (cps instanceof HolonObject) return "HolonObject"; if (cps instanceof HolonTransformer) return "HolonTransformer"; if (cps instanceof HolonSwitch) return "HolonSwitch"; else return "CpsNode"; } }