LoadController.java 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  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.Collections;
  7. import java.util.HashMap;
  8. import java.util.Iterator;
  9. import org.json.simple.JSONArray;
  10. import org.json.simple.JSONObject;
  11. import org.json.simple.parser.JSONParser;
  12. import org.json.simple.parser.ParseException;
  13. import classes.Category;
  14. import classes.CpsEdge;
  15. import classes.CpsNode;
  16. import classes.AbstractCpsObject;
  17. import classes.HolonElement;
  18. import classes.HolonObject;
  19. import classes.HolonSwitch;
  20. import classes.HolonTransformer;
  21. import classes.IdCounter;
  22. import ui.model.Model;
  23. /**
  24. * Controller for the Loading.
  25. *
  26. * @author Gruppe14
  27. */
  28. public class LoadController {
  29. /**
  30. * enum Mode.
  31. */
  32. public enum Mode {
  33. ALL, CATEGORY, CANVAS
  34. }
  35. private Model model;
  36. private CategoryController cgC;
  37. private CanvasController cvsC;
  38. private ObjectController objC;
  39. private GlobalController global;
  40. private MultiPurposeController mpC;
  41. /**
  42. * Constructor.
  43. *
  44. * @param model
  45. * Model
  46. * @param cg
  47. * CategoryController
  48. * @param cvs
  49. * CanvasController
  50. * @param obj
  51. * ObjectController
  52. * @param mp
  53. * MultiPurposeController
  54. */
  55. public LoadController(Model model, CategoryController cg, CanvasController cvs, ObjectController obj,
  56. GlobalController global, MultiPurposeController mp) {
  57. this.model = model;
  58. this.cgC = cg;
  59. this.cvsC = cvs;
  60. this.objC = obj;
  61. this.global = global;
  62. this.mpC = mp;
  63. }
  64. /**
  65. * Reads the the JSON File and load the state into the Model.
  66. *
  67. * @param path
  68. * the Path
  69. * @throws IOException
  70. * exception
  71. */
  72. public void readJson(String path) throws IOException {
  73. JSONParser parser = new JSONParser();
  74. JSONObject json = new JSONObject();
  75. try {
  76. json = (JSONObject) parser.parse(new FileReader(path));
  77. } catch (ParseException ex) {
  78. // TODO Auto-generated catch block
  79. ex.printStackTrace();
  80. }
  81. ArrayList<String> obj = new ArrayList<>();
  82. ArrayList<String> ele = new ArrayList<>();
  83. ArrayList<String> edge = new ArrayList<>();
  84. ArrayList<String> gp = new ArrayList<>();
  85. Mode mode = Mode.valueOf(json.get("MODE").toString());
  86. if (mode.equals(Mode.ALL) || mode.equals(Mode.CATEGORY)) {
  87. model.setCgIdx(new HashMap<String, Integer>());
  88. model.setCategories(new ArrayList<Category>());
  89. }
  90. if (mode.equals(Mode.ALL) || mode.equals(Mode.CANVAS)) {
  91. model.setCvsObjIdx(new HashMap<Integer, Integer>());
  92. model.setObjectsOnCanvas(new ArrayList<AbstractCpsObject>());
  93. model.setEdgesOnCanvas(new ArrayList<CpsEdge>());
  94. }
  95. for (Object key : json.keySet()) {
  96. if (key.equals("CG"))
  97. readCategory((JSONArray) json.get(key));
  98. else if (key.equals("ID"))
  99. IdCounter.setCounter(Integer.parseInt(json.get(key.toString()).toString()));
  100. // else if (key.equals("SIZEX"))
  101. // global.setCanvasX(Integer.parseInt(json.get(key.toString()).toString()));
  102. // else if (key.equals("SIZEY"))
  103. // global.setCanvasY(Integer.parseInt(json.get(key.toString()).toString()));
  104. else if (key.toString().contains("CGO") || key.toString().contains("CVSO"))
  105. obj.add(key.toString());
  106. else if (key.toString().contains("CGE") || key.toString().contains("CVSE"))
  107. ele.add(key.toString());
  108. else if (key.toString().contains("EDGE"))
  109. edge.add(key.toString());
  110. else if (key.toString().contains("CGGP") || key.toString().contains("CVSGP"))
  111. gp.add(key.toString());
  112. }
  113. Collections.sort(obj);
  114. Collections.sort(ele);
  115. Collections.sort(edge);
  116. Collections.sort(gp);
  117. dispatch(obj, json);
  118. dispatch(ele, json);
  119. dispatch(edge, json);
  120. dispatch(gp, json);
  121. }
  122. /**
  123. * dispatch the Keys into the right processing.
  124. *
  125. * @param input
  126. * input
  127. * @param json
  128. * Json
  129. */
  130. public void dispatch(ArrayList<String> input, JSONObject json) {
  131. for (String str : input) {
  132. if (str.contains("CGO")) {
  133. readCategoryObject((JSONArray) json.get(str));
  134. } else if (str.contains("CVSO")) {
  135. readCanvasObject((JSONArray) json.get(str));
  136. } else if (str.contains("CGE") || str.contains("CVSE")) {
  137. readElement((JSONArray) json.get(str));
  138. } else if (str.contains("EDGE")) {
  139. readEdge((JSONArray) json.get(str));
  140. } else if (str.contains("CGGP") || str.contains("CVSGP")) {
  141. readElementGraph((JSONArray) json.get(str));
  142. }
  143. }
  144. }
  145. /**
  146. * Read all Categories from the JSON file.
  147. *
  148. * @param arr
  149. * JSONArray
  150. */
  151. public void readCategory(JSONArray arr) {
  152. Iterator<Object> i = arr.iterator();
  153. while (i.hasNext()) {
  154. cgC.addNewCategory(next(i));
  155. }
  156. }
  157. /**
  158. * Read all Objects in Category from the JSON File.
  159. *
  160. * @param arr
  161. * JSON Array
  162. */
  163. public void readCategoryObject(JSONArray arr) {
  164. Iterator<Object> i = arr.iterator();
  165. String type = next(i);
  166. if (type.equals("HolonObject")) {
  167. cgC.addNewHolonObject(mpC.searchCat(next(i)), next(i), new ArrayList<HolonElement>(), next(i));
  168. } else if (type.equals("HolonTransformer")) {
  169. cgC.addNewHolonTransformer(mpC.searchCat(next(i)), next(i), next(i));
  170. } else if (type.equals("HolonSwitch")) {
  171. cgC.addNewHolonSwitch(mpC.searchCat(next(i)), next(i), next(i));
  172. }
  173. }
  174. /**
  175. * Read all Objects in Canvas from JSON File.
  176. *
  177. * @param arr
  178. * JSON Array
  179. */
  180. public void readCanvasObject(JSONArray arr) {
  181. Iterator<Object> i = arr.iterator();
  182. AbstractCpsObject cps = null;
  183. String type = next(i);
  184. if (type.equals("HolonObject")) {
  185. cps = new HolonObject(next(i));
  186. } else if (type.equals("HolonTransformer")) {
  187. cps = new HolonTransformer(next(i));
  188. } else if (type.equals("HolonSwitch")) {
  189. cps = new HolonSwitch(next(i));
  190. } else if (type.equals("CpsNode")) {
  191. cps = new CpsNode(next(i));
  192. }
  193. cps.setName(next(i));
  194. cps.setID(Integer.parseInt(next(i)));
  195. cps.setImage(next(i));
  196. cps.setPosition(Integer.parseInt(next(i)), Integer.parseInt(next(i)));
  197. cvsC.addNewObject(cps);
  198. }
  199. /**
  200. * Read all Elements in Category and Canvas from JSON File.
  201. *
  202. * @param arr
  203. * JSON Array
  204. */
  205. public void readElement(JSONArray arr) {
  206. Iterator<Object> i = arr.iterator();
  207. String sav = next(i);
  208. String obj = next(i);
  209. HolonElement ele = new HolonElement(next(i), Integer.parseInt(next(i)), Float.parseFloat(next(i)));
  210. if (sav.equals("CVS")) {
  211. ele.setActive(convert(Integer.parseInt(next(i))));
  212. objC.addElementIntoCanvasObject((HolonObject) mpC.searchByID(Integer.parseInt(obj)), ele);
  213. } else
  214. objC.addElementIntoCategoryObject(sav, obj, ele);
  215. }
  216. /**
  217. * Read.
  218. *
  219. * @param arr
  220. * JSON Array
  221. */
  222. public void readEdge(JSONArray arr) {
  223. Iterator<Object> i = arr.iterator();
  224. CpsEdge edge = new CpsEdge(mpC.searchByID(Integer.parseInt(next(i))),
  225. mpC.searchByID(Integer.parseInt(next(i))));
  226. edge.setCapacity(Float.parseFloat(next(i)));
  227. edge.setFlow(Float.parseFloat(next(i)));
  228. cvsC.addEdgeOnCanvas(edge);
  229. }
  230. /**
  231. * Read the Element Graph.
  232. *
  233. * @param arr
  234. * JSON Array
  235. */
  236. public void readElementGraph(JSONArray arr) {
  237. Iterator<Object> i = arr.iterator();
  238. String sav = next(i);
  239. HolonElement ele;
  240. if (sav.equals("CVS")) {
  241. ele = mpC.searchEle((HolonObject) mpC.searchByID(Integer.parseInt(next(i))), next(i));
  242. while (i.hasNext())
  243. ele.getGraphPoints().add(new Point(Integer.parseInt(next(i)), Integer.parseInt(next(i))));
  244. } else {
  245. ele = mpC.searchEle((HolonObject) mpC.searchCatObj(mpC.searchCat(sav), next(i)), next(i));
  246. while (i.hasNext())
  247. ele.getGraphPoints().add(new Point(Integer.parseInt(next(i)), Integer.parseInt(next(i))));
  248. }
  249. }
  250. /**
  251. * Get the Next Element from an Iterator.
  252. *
  253. * @param i
  254. * Iterator
  255. * @return next Element from the Iterator
  256. */
  257. public String next(Iterator<Object> i) {
  258. return i.next().toString();
  259. }
  260. /**
  261. * converting saved Integers into Booleans.
  262. *
  263. * @param x
  264. * integer
  265. * @return boolean
  266. */
  267. public boolean convert(int x) {
  268. return x == 1 ? true : false;
  269. }
  270. }