CategoryController.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. package ui.controller;
  2. import java.util.ArrayList;
  3. import classes.Category;
  4. import classes.AbstractCanvasObject;
  5. import classes.HolonElement;
  6. import classes.HolonObject;
  7. import classes.HolonSwitch;
  8. import classes.Pair;
  9. import ui.model.Model;
  10. import util.Event;
  11. /**
  12. * Controller for the Categories.
  13. *
  14. * @author Gruppe14
  15. */
  16. public class CategoryController {
  17. private Model model;
  18. private MultiPurposeController mpC;
  19. private final Event OnCategoryChanged;
  20. /**
  21. * Constructor.
  22. *
  23. * @param model
  24. * the Model
  25. * @param mp
  26. * the MultiPurposeController
  27. * @param control
  28. */
  29. public CategoryController(Model model, MultiPurposeController mp, Control control) {
  30. this.model = model;
  31. this.mpC = mp;
  32. this.OnCategoryChanged = control.OnCategoryChanged;
  33. initCategories();
  34. }
  35. /**
  36. * init default category and objects.
  37. */
  38. public void initCategories() {
  39. addNewCategory("Energy");
  40. addNewCategory("Building");
  41. addNewCategory("Component");
  42. addNewHolonObject(mpC.searchCat("Energy"), "Power Plant", new ArrayList<HolonElement>(),
  43. "/Images/power-plant.png");
  44. addNewHolonObject(mpC.searchCat("Building"), "House", new ArrayList<HolonElement>(), "/Images/home-2.png");
  45. addNewHolonSwitch(mpC.searchCat("Component"), "Switch", "/Images/switch-on.png");
  46. OnCategoryChanged.broadcast();
  47. }
  48. /**
  49. * Adds Category into Model if a Category with the same name already exists
  50. *
  51. * @param category
  52. * the new Category
  53. */
  54. public void addCategory(Category category) {
  55. int i = 0;
  56. while (mpC.searchCat(category.getName()) != null) {
  57. if (category.getName().contains("_"))
  58. category.setName(category.getName().substring(0, category.getName().indexOf('_')));
  59. category.setName(category.getName() + "_" + i);
  60. i++;
  61. }
  62. model.getCgIdx().put(category.getName(), model.getCategories().size());
  63. model.getCategories().add(category);
  64. OnCategoryChanged.broadcast();
  65. }
  66. /**
  67. * Adds New Category into Model.
  68. *
  69. * @param name
  70. * Bezeichnung der neuen Kategorie
  71. */
  72. public void addNewCategory(String name) {
  73. addCategory(new Category(name));
  74. }
  75. /**
  76. * remove a Category from Model.
  77. *
  78. * @param c
  79. * Category
  80. */
  81. public void removeCategory(Category c) {
  82. mpC.decIdx(c.getName(), model.getCgIdx());
  83. model.getCgIdx().remove(c.getName());
  84. model.getCategories().remove(c);
  85. OnCategoryChanged.broadcast();
  86. }
  87. /**
  88. * get All Categories
  89. *
  90. * @return the ArrayList of all Categories
  91. */
  92. public ArrayList<Category> getCategories()
  93. {
  94. return model.getCategories();
  95. }
  96. /**
  97. * delete a given Category.
  98. *
  99. * @param category
  100. * the Category
  101. */
  102. public void deleteCategory(String category) {
  103. removeCategory(mpC.searchCat(category));
  104. }
  105. /**
  106. * Add Object into a Category.
  107. *
  108. * @param category
  109. * Category
  110. * @param object
  111. * Object
  112. */
  113. public void addObject(Category category, AbstractCanvasObject object) {
  114. int i = 0;
  115. boolean updateElementSaves = false;
  116. String name = "";
  117. while (mpC.searchCatObj(category, object.getObjName()) != null) {
  118. updateElementSaves = true;
  119. if (object.getObjName().contains("_"))
  120. object.setObjName(object.getObjName().substring(0, object.getObjName().indexOf('_')));
  121. name = object.getObjName() + "_" + i;
  122. object.setObjName(name);
  123. object.setName(name);
  124. i++;
  125. }
  126. if(updateElementSaves && object instanceof HolonObject &&((HolonObject)object).getElements()!=null){
  127. for(HolonElement e: ((HolonObject)object).getElements()){
  128. e.setSaving(new Pair<String,String>(e.getSaving().getKey(), name));
  129. }
  130. }
  131. category.getObjIdx().put(object.getObjName(), category.getObjects().size());
  132. category.getObjects().add(object);
  133. }
  134. /**
  135. * Add new Holon Object to a Category.
  136. *
  137. * @param category
  138. * Category
  139. * @param object
  140. * New Object Name
  141. * @param elements
  142. * Array of Elements
  143. * @param image
  144. * the image Path
  145. */
  146. public void addNewHolonObject(Category category, String object, ArrayList<HolonElement> elements, String image) {
  147. HolonObject obj = new HolonObject(object);
  148. obj.setImage(image);
  149. obj.setElements(elements);
  150. obj.setSav(category.getName());
  151. addObject(category, obj);
  152. }
  153. /**
  154. * Add new Holon Switch.
  155. *
  156. * @param cat
  157. * Category
  158. * @param objName
  159. * New Object Name
  160. * @param image
  161. * the Image Path
  162. */
  163. public void addNewHolonSwitch(Category cat, String objName, String image) {
  164. HolonSwitch holonSwitch = new HolonSwitch(objName);
  165. holonSwitch.setImage(image);
  166. holonSwitch.setSav(cat.getName());
  167. addObject(cat, holonSwitch);
  168. }
  169. /**
  170. * Removes an Object from a Category.
  171. * @param category Category
  172. * @param cps the Object
  173. */
  174. public void removeObject(Category category, AbstractCanvasObject cps) {
  175. mpC.decIdx(cps.getObjName(), category.getObjIdx());
  176. category.getObjIdx().remove(cps.getObjName());
  177. category.getObjects().remove(cps);
  178. OnCategoryChanged.broadcast();
  179. }
  180. /**
  181. * Delete an Object from a Category.
  182. *
  183. * @param category
  184. * the Category
  185. * @param obj
  186. * the Object
  187. */
  188. public void deleteObject(String category, String obj) {
  189. Category cat = mpC.searchCat(category);
  190. removeObject(cat, mpC.searchCatObj(cat, obj));
  191. }
  192. }