123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- package ui.controller;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.Iterator;
- import org.json.simple.JSONArray;
- import org.json.simple.JSONObject;
- import org.json.simple.parser.JSONParser;
- import org.json.simple.parser.ParseException;
- import classes.Category;
- import classes.CpsEdge;
- import classes.CpsNode;
- 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 LoadStoreController {
- private Model MODEL;
- private CategoryController categoryController;
- private CanvasController canvasController;
- private ObjectController objectController;
- public LoadStoreController(Model model, CategoryController cg, CanvasController cvs, ObjectController obj) {
- this.MODEL = model;
- this.categoryController = cg;
- this.canvasController = cvs;
- this.objectController = obj;
- }
- /**
- * Writes a Savefile in .json
- *
- * @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);
-
- FileWriter writer = new FileWriter(path);
- writer.write(json.toJSONString());
- 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.getID());
- arr.add(cps.getImage());
- arr.add(cps.getPosition().x);
- arr.add(cps.getPosition().y);
- json.put("CVSO" + i++, arr);
- arr = new JSONArray();
- ;
- }
- }
- /**
- *
- * @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";
- }
- /**
- * 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());
- json.put("CVSE" + i++, arr);
- arr = new JSONArray();
- }
- }
- }
-
- /**
- * Writes all Graph Points into JSONObject
- * @param json
- */
- public void writeGraph(JSONObject json) {
-
- }
- /**
- * 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();
- }
- }
- public void readJSON(String path) throws IOException {
- JSONParser parser = new JSONParser();
- MODEL.setCategories(new ArrayList<>());
- MODEL.setObjectsOnCanvas(new ArrayList<>());
- ArrayList<String> obj = new ArrayList<>();
- ArrayList<String> ele = new ArrayList<>();
- ArrayList<String> edge = new ArrayList<>();
- try {
- JSONObject json = (JSONObject) parser.parse(new FileReader(path));
- for (Object key : json.keySet()) {
- if (key.equals("CG"))
- readCategory((JSONArray) json.get(key));
- else if (key.toString().contains("CGO") || key.toString().contains("CVSO"))
- obj.add(key.toString());
- else if (key.toString().contains("CGE") || key.toString().contains("CVSE"))
- ele.add(key.toString());
- else if (key.toString().contains("EDGE"))
- edge.add(key.toString());
- else idCounter.setCounter(Integer.parseInt(json.get(key.toString()).toString()));
- }
- dispatch(obj, json);
- dispatch(ele, json);
- dispatch(edge, json);
- } catch (ParseException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public void dispatch(ArrayList<String> input, JSONObject json) {
- for (String str : input) {
- if (str.contains("CGO")) {
- readCategoryObject((JSONArray) json.get(str));
- } else if (str.contains("CVSO")) {
- readCanvasObject((JSONArray) json.get(str));
- } else if (str.contains("CGE") || str.contains("CVSE")) {
- readElement((JSONArray) json.get(str));
- } else if (str.contains("EDGE")) {
- readEdge((JSONArray) json.get(str));
- }
- }
- }
- public void readCategory(JSONArray arr) {
- Iterator<Object> i = arr.iterator();
- while (i.hasNext()) {
- categoryController.addNewCategory(i.next().toString());
- }
- }
- public void readCategoryObject(JSONArray arr) {
- Iterator<Object> i = arr.iterator();
- String type = i.next().toString();
- if (type.equals("HolonObject")) {
- categoryController.addNewHolonObject(categoryController.searchCatNode(i.next().toString()),
- i.next().toString(), new ArrayList<>(), i.next().toString());
- }
- if (type.equals("HolonTransformer")) {
- categoryController.addNewHolonTransformer(categoryController.searchCatNode(i.next().toString()),
- i.next().toString(), i.next().toString());
- }
- if (type.equals("HolonSwitch")) {
- categoryController.addNewHolonSwitch(categoryController.searchCatNode(i.next().toString()),
- i.next().toString(), i.next().toString());
- }
- }
- public void readCanvasObject(JSONArray arr) {
- Iterator<Object> i = arr.iterator();
- CpsObject cps = null;
- String type = i.next().toString();
- if (type.equals("HolonObject")) {
- cps = new HolonObject(i.next().toString());
- }
- if (type.equals("HolonTransformer")) {
- cps = new HolonTransformer(i.next().toString());
- }
- if (type.equals("HolonSwitch")) {
- cps = new HolonSwitch(i.next().toString());
- }
- if (type.equals("CpsNode")) {
- cps = new CpsNode(i.next().toString());
- }
- cps.setID(Integer.parseInt(i.next().toString()));
- cps.setImage(i.next().toString());
- cps.setPosition(Integer.parseInt(i.next().toString()), Integer.parseInt(i.next().toString()));
- canvasController.addObjectIntoCanvas(cps);
- }
- public void readElement(JSONArray arr) {
- Iterator<Object> i = arr.iterator();
- String sav = i.next().toString();
- System.out.println(sav);
- if (sav.equals("Canvas")) {
- objectController.addNewElementIntoCanvasObject(Integer.parseInt(i.next().toString()), i.next().toString(),
- Integer.parseInt(i.next().toString()), Float.parseFloat(i.next().toString()));
- } else
- objectController.addNewElementIntoCategoryObject(sav, i.next().toString(), i.next().toString(),
- Integer.parseInt(i.next().toString()), Float.parseFloat(i.next().toString()));
- }
- public void readEdge(JSONArray arr) {
- Iterator<Object> i = arr.iterator();
- CpsEdge edge = new CpsEdge(objectController.searchByID(Integer.parseInt(i.next().toString())),
- objectController.searchByID(Integer.parseInt(i.next().toString())));
- edge.setCapacity(Float.parseFloat(i.next().toString()));
- edge.setFlow(Float.parseFloat(i.next().toString()));
- canvasController.addEdgeOnCanvas(edge);
- }
- }
|