LoadController.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. package ui.controller;
  2. import java.awt.Point;
  3. import java.io.FileReader;
  4. import java.io.IOException;
  5. import java.util.ArrayList;
  6. import java.util.Iterator;
  7. import org.json.simple.JSONArray;
  8. import org.json.simple.JSONObject;
  9. import org.json.simple.parser.JSONParser;
  10. import org.json.simple.parser.ParseException;
  11. import classes.CpsEdge;
  12. import classes.CpsNode;
  13. import classes.CpsObject;
  14. import classes.HolonElement;
  15. import classes.HolonObject;
  16. import classes.HolonSwitch;
  17. import classes.HolonTransformer;
  18. import ui.model.Model;
  19. import ui.model.idCounter;
  20. public class LoadController {
  21. private Model MODEL;
  22. private CategoryController cgC;
  23. private CanvasController cvsC;
  24. private ObjectController objC;
  25. private SearchController sC;
  26. public LoadController(Model model, CategoryController cg, CanvasController cvs, ObjectController obj, SearchController sC) {
  27. this.MODEL = model;
  28. this.cgC = cg;
  29. this.cvsC = cvs;
  30. this.objC = obj;
  31. this.sC = sC;
  32. }
  33. /**
  34. * Reads the the JSON File and load the state into the Model
  35. *
  36. * @param path
  37. * @throws IOException
  38. */
  39. public void readJSON(String path) throws IOException {
  40. JSONParser parser = new JSONParser();
  41. MODEL.setCategories(new ArrayList<>());
  42. MODEL.setObjectsOnCanvas(new ArrayList<>());
  43. ArrayList<String> obj = new ArrayList<>();
  44. ArrayList<String> ele = new ArrayList<>();
  45. ArrayList<String> edge = new ArrayList<>();
  46. ArrayList<String> gp = new ArrayList<>();
  47. try {
  48. JSONObject json = (JSONObject) parser.parse(new FileReader(path));
  49. for (Object key : json.keySet()) {
  50. if (key.equals("CG"))
  51. readCategory((JSONArray) json.get(key));
  52. else if (key.toString().contains("CGO") || key.toString().contains("CVSO"))
  53. obj.add(key.toString());
  54. else if (key.toString().contains("CGE") || key.toString().contains("CVSE"))
  55. ele.add(key.toString());
  56. else if (key.toString().contains("EDGE"))
  57. edge.add(key.toString());
  58. else if (key.toString().contains("CGGP") || key.toString().contains("CVSGP"))
  59. gp.add(key.toString());
  60. else
  61. idCounter.setCounter(Integer.parseInt(json.get(key.toString()).toString()));
  62. }
  63. dispatch(obj, json);
  64. dispatch(ele, json);
  65. dispatch(edge, json);
  66. dispatch(gp, json);
  67. } catch (ParseException e) {
  68. // TODO Auto-generated catch block
  69. e.printStackTrace();
  70. }
  71. }
  72. /**
  73. * dispatch the Keys into the right processing
  74. *
  75. * @param input
  76. * @param json
  77. */
  78. public void dispatch(ArrayList<String> input, JSONObject json) {
  79. for (String str : input) {
  80. if (str.contains("CGO")) {
  81. readCategoryObject((JSONArray) json.get(str));
  82. } else if (str.contains("CVSO")) {
  83. readCanvasObject((JSONArray) json.get(str));
  84. } else if (str.contains("CGE") || str.contains("CVSE")) {
  85. readElement((JSONArray) json.get(str));
  86. } else if (str.contains("EDGE")) {
  87. readEdge((JSONArray) json.get(str));
  88. } else if (str.contains("CGGP") || str.contains("CVSGP")) {
  89. readElementGraph((JSONArray) json.get(str));
  90. }
  91. }
  92. }
  93. /**
  94. * Read all Categories from the JSON file
  95. *
  96. * @param arr
  97. */
  98. public void readCategory(JSONArray arr) {
  99. Iterator<Object> i = arr.iterator();
  100. while (i.hasNext()) {
  101. cgC.addNewCategory(next(i));
  102. }
  103. }
  104. /**
  105. * Read all Objects in Category from the JSON File
  106. *
  107. * @param arr
  108. */
  109. public void readCategoryObject(JSONArray arr) {
  110. Iterator<Object> i = arr.iterator();
  111. String type = next(i);
  112. if (type.equals("HolonObject")) {
  113. cgC.addNewHolonObject(sC.searchCategory(next(i)), next(i), new ArrayList<>(), next(i));
  114. } else if (type.equals("HolonTransformer")) {
  115. cgC.addNewHolonTransformer(sC.searchCategory(next(i)), next(i), next(i));
  116. } else if (type.equals("HolonSwitch")) {
  117. cgC.addNewHolonSwitch(sC.searchCategory(next(i)), next(i), next(i));
  118. }
  119. }
  120. /**
  121. * Read all Objects in Canvas from JSON File
  122. *
  123. * @param arr
  124. */
  125. public void readCanvasObject(JSONArray arr) {
  126. Iterator<Object> i = arr.iterator();
  127. CpsObject cps = null;
  128. String type = next(i);
  129. if (type.equals("HolonObject")) {
  130. cps = new HolonObject(next(i));
  131. } else if (type.equals("HolonTransformer")) {
  132. cps = new HolonTransformer(next(i));
  133. } else if (type.equals("HolonSwitch")) {
  134. cps = new HolonSwitch(next(i));
  135. } else if (type.equals("CpsNode")) {
  136. cps = new CpsNode(next(i));
  137. }
  138. cps.setName(next(i));
  139. cps.setID(Integer.parseInt(next(i)));
  140. cps.setImage(next(i));
  141. cps.setPosition(Integer.parseInt(next(i)), Integer.parseInt(next(i)));
  142. cvsC.addNewObject(cps);
  143. }
  144. /**
  145. * Read all Elements in Category and Canvas from JSON File
  146. *
  147. * @param arr
  148. */
  149. public void readElement(JSONArray arr) {
  150. Iterator<Object> i = arr.iterator();
  151. String sav = next(i);
  152. String obj = next(i);
  153. HolonElement ele = new HolonElement(next(i), Integer.parseInt(next(i)), Float.parseFloat(next(i)));
  154. if (sav.equals("Canvas")) {
  155. ele.setActive(compare(Integer.parseInt(next(i))));
  156. objC.addElementIntoCanvasObject((HolonObject) sC.searchByID(Integer.parseInt(obj)), ele);
  157. } else
  158. objC.addElementIntoCategoryObject(sav, obj, ele);
  159. }
  160. /**
  161. *
  162. * @param arr
  163. */
  164. public void readEdge(JSONArray arr) {
  165. Iterator<Object> i = arr.iterator();
  166. CpsEdge edge = new CpsEdge(sC.searchByID(Integer.parseInt(next(i))),
  167. sC.searchByID(Integer.parseInt(next(i))));
  168. edge.setCapacity(Float.parseFloat(next(i)));
  169. edge.setFlow(Float.parseFloat(next(i)));
  170. cvsC.addEdgeOnCanvas(edge);
  171. }
  172. public void readElementGraph(JSONArray arr) {
  173. Iterator<Object> i = arr.iterator();
  174. String sav = next(i);
  175. HolonElement ele;
  176. if (sav.equals("Canvas")) {
  177. ele = sC.searchHolonElement((HolonObject) sC.searchByID(Integer.parseInt(next(i))), next(i));
  178. while (i.hasNext())
  179. ele.getGraphPoints().add(new Point(Integer.parseInt(next(i)), Integer.parseInt(next(i))));
  180. } else {
  181. ele = sC.searchHolonElement((HolonObject) sC.searchHolonObject(next(i), sC.searchCategory(sav).getObjects()),
  182. next(i));
  183. while (i.hasNext())
  184. ele.getGraphPoints().add(new Point(Integer.parseInt(next(i)), Integer.parseInt(next(i))));
  185. }
  186. }
  187. /**
  188. *
  189. * @param i
  190. * @return
  191. */
  192. public String next(Iterator<Object> i) {
  193. return i.next().toString();
  194. }
  195. public boolean compare(int x) {
  196. return x == 1 ? true : false;
  197. }
  198. }