CreateTemplatePopUp.java 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. package ui.view;
  2. import classes.AbstractCpsObject;
  3. import classes.Category;
  4. import classes.HolonElement;
  5. import classes.HolonObject;
  6. import classes.Pair;
  7. import ui.controller.Control;
  8. import ui.model.Model;
  9. import javax.swing.*;
  10. import javax.swing.border.EmptyBorder;
  11. import javax.swing.filechooser.FileNameExtensionFilter;
  12. import java.awt.*;
  13. import java.awt.event.KeyEvent;
  14. import java.awt.event.KeyListener;
  15. import java.awt.event.MouseAdapter;
  16. import java.awt.event.MouseEvent;
  17. import java.io.*;
  18. import java.util.ArrayList;
  19. import java.awt.event.ActionListener;
  20. import java.awt.event.ActionEvent;
  21. /**
  22. * PopUp for creating Holon Object Template.
  23. *
  24. * @author Gruppe 07 (A.T.M-B)
  25. */
  26. public class CreateTemplatePopUp extends JDialog {
  27. private static final long serialVersionUID = 1L;
  28. /**
  29. * Template HolonObject
  30. */
  31. private HolonObject template;
  32. /**
  33. * HolonElementList
  34. */
  35. DefaultListModel<String> listModel;
  36. /**
  37. * HolonElement List
  38. */
  39. JList<String> list;
  40. /**
  41. * Category the Template should be inserted into
  42. */
  43. private String category;
  44. // Template Attributes
  45. // PopUp Parts
  46. private Control controller;
  47. /**
  48. * Category Selection
  49. */
  50. Choice choice;
  51. /**
  52. * name textfield
  53. */
  54. private JTextField textField_name;
  55. /**
  56. * textField for path
  57. */
  58. private JTextField textField_imagePath;
  59. /**
  60. * Image Preview
  61. */
  62. JLabel lblImagePreview;
  63. /**
  64. * parent Frame
  65. */
  66. private Model model;
  67. JFrame parent;
  68. /**
  69. * Create the dialog.
  70. *
  71. * @param edit
  72. * true if edit
  73. * @param obj
  74. * the object
  75. * @param model
  76. * @param cat
  77. * the categorie
  78. */
  79. public CreateTemplatePopUp(HolonObject obj, Model model,
  80. JFrame parentFrame, Control controller) {
  81. setResizable(false);
  82. /*
  83. * use Category Controller an stuff lul
  84. */
  85. /*
  86. * initialize Data
  87. */
  88. template = new HolonObject(obj);
  89. this.parent = parentFrame;
  90. this.controller = controller;
  91. this.model=model;//Thankfully that was in the ctor already.
  92. /*
  93. * create Frame and GUI
  94. */
  95. setIconImage(Util.loadImage("/Images/Holeg.png", 30, 30));
  96. setBounds(100, 100, 476, 344);
  97. setLocationRelativeTo(parentFrame);
  98. getContentPane().setLayout(new BorderLayout());
  99. /**
  100. * Content Panel
  101. */
  102. JPanel contentPanel = new JPanel();
  103. contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
  104. getContentPane().add(contentPanel, BorderLayout.CENTER);
  105. contentPanel.setLayout(null);
  106. /**
  107. * Category Label
  108. */
  109. JLabel lblCategory = new JLabel("Category:");
  110. lblCategory.setBounds(12, 13, 68, 22);
  111. contentPanel.add(lblCategory);
  112. /**
  113. * Category Choice
  114. */
  115. choice = new Choice();
  116. choice.setBounds(86, 13, 172, 22);
  117. contentPanel.add(choice);
  118. // add categories
  119. if (model.getCategories().size() == 0)// if no categorie exist: create
  120. // new Template Category
  121. try {
  122. this.controller.addCategory("Template");
  123. } catch (IOException e1) {
  124. e1.printStackTrace();
  125. }
  126. // add Categories to the choice
  127. for (Category c : model.getCategories())
  128. choice.add(c.getName());
  129. /**
  130. * Name Label
  131. */
  132. JLabel lblName = new JLabel("Name:");
  133. lblName.setBounds(12, 48, 56, 16);
  134. contentPanel.add(lblName);
  135. /**
  136. * Name Textfield
  137. */
  138. textField_name = new JTextField();
  139. textField_name.setBounds(86, 48, 172, 22);
  140. contentPanel.add(textField_name);
  141. textField_name.setColumns(10);
  142. textField_name.setText(template.getName());
  143. /**
  144. * Image Path Lable
  145. */
  146. JLabel lblImage = new JLabel("Image:");
  147. lblImage.setBounds(12, 89, 56, 16);
  148. contentPanel.add(lblImage);
  149. /**
  150. * Image Path Text Field
  151. */
  152. textField_imagePath = new JTextField();
  153. textField_imagePath.setBounds(86, 86, 172, 22);
  154. contentPanel.add(textField_imagePath);
  155. textField_imagePath.setColumns(10);
  156. textField_imagePath.setText(template.getImage());
  157. /**
  158. * Browse Image Button
  159. */
  160. JButton btnBrowseImage = new JButton("BrowseImage");
  161. btnBrowseImage.setBounds(268, 85, 117, 25);
  162. contentPanel.add(btnBrowseImage);
  163. btnBrowseImage.addActionListener(actionevent -> {
  164. fileChooser();
  165. });
  166. /**
  167. * Image Preview
  168. */
  169. lblImagePreview = new JLabel("Image Preview");
  170. lblImagePreview.setIcon(new ImageIcon(Util.loadImage(
  171. template.getImage(), 62, 62)));
  172. lblImagePreview.setBounds(298, 13, 62, 62);
  173. contentPanel.add(lblImagePreview);
  174. /**
  175. * Holon Element List
  176. */
  177. listModel = new DefaultListModel<String>();
  178. /**
  179. * Add Elements to List
  180. */
  181. for (HolonElement he : template.getElements())
  182. listModel.addElement(he.getAmount() + " * " + he.getEleName()
  183. + ": " + he.getMaximumEnergy() + "U");
  184. /**
  185. * Add ScrollPane to List
  186. */
  187. JScrollPane scrollPane = new JScrollPane();
  188. scrollPane.setBounds(22, 118, 236, 150);
  189. contentPanel.add(scrollPane);
  190. list = new JList<String>(listModel);
  191. scrollPane.setViewportView(list);
  192. /**
  193. * Delete Element Button
  194. */
  195. JButton btnDeleteElement = new JButton("Delete Element");
  196. btnDeleteElement.setBounds(268, 228, 140, 25);
  197. contentPanel.add(btnDeleteElement);
  198. btnDeleteElement.addActionListener(e -> removeElement());
  199. /**
  200. * Edit Element Button
  201. */
  202. JButton btnEditElement = new JButton("Edit Element");
  203. btnEditElement.setBounds(268, 190, 140, 25);
  204. contentPanel.add(btnEditElement);
  205. btnEditElement.addActionListener(e -> editElement());
  206. /**
  207. * Add Element Button
  208. */
  209. JButton btnAddElement = new JButton("Add Element");
  210. btnAddElement.setBounds(268, 152, 140, 25);
  211. contentPanel.add(btnAddElement);
  212. btnAddElement.addActionListener(e -> addElement());
  213. /**
  214. * Cancel Button
  215. */
  216. JButton btnCancel = new JButton("Cancel");
  217. btnCancel.setBounds(384, 277, 74, 25);
  218. contentPanel.add(btnCancel);
  219. btnCancel.addActionListener(e -> dispose());
  220. /**
  221. * Add Template Button
  222. */
  223. JButton btnAddTemplate = new JButton("Add Template");
  224. btnAddTemplate.setBounds(75, 271, 113, 25);
  225. contentPanel.add(btnAddTemplate);
  226. btnAddTemplate.addActionListener(e -> createTemplate());
  227. /**
  228. * Title
  229. */
  230. setTitle("Create Template Menu");
  231. }
  232. /**
  233. * Choose the file.
  234. */
  235. private void fileChooser() {
  236. JFileChooser fileChooser = new JFileChooser();
  237. FileNameExtensionFilter filter = new FileNameExtensionFilter(
  238. "png, jpg or jpeg", "png", "jpg", "jpeg");
  239. fileChooser.setFileFilter(filter);
  240. int returnValue = fileChooser.showOpenDialog(null);
  241. if (returnValue == JFileChooser.APPROVE_OPTION) {
  242. File selectedFile = fileChooser.getSelectedFile();
  243. String filePath = selectedFile.getAbsolutePath();
  244. textField_imagePath.setText(filePath);
  245. ImageIcon icon = new ImageIcon(Util.loadImage(filePath, 62,
  246. 62));
  247. lblImagePreview.setIcon(icon);
  248. } else {
  249. System.out.println("Failed to Load");
  250. }
  251. }
  252. /**
  253. * create the template and add it to the category
  254. */
  255. private void createTemplate() {
  256. try {
  257. template.setName(textField_name.getText());
  258. template.setImage(textField_imagePath.getText());
  259. template.getElements().forEach(
  260. ele -> ele.setSaving(new Pair<String, String>(choice
  261. .getSelectedItem(), template.getName())));
  262. controller.addObject(controller.searchCategory(choice
  263. .getItem(choice.getSelectedIndex())), template.getName(),
  264. template.getElements(), template.getImage());
  265. this.dispose();
  266. } catch (IOException e) {
  267. System.out
  268. .println("Could not create Template: Category not found!");
  269. e.printStackTrace();
  270. }
  271. }
  272. /**
  273. * Add an Holon Element to the template
  274. */
  275. private void addElement() {
  276. AddElementPopUp popUp = new AddElementPopUp(parent, model);
  277. popUp.setActualCps(template);
  278. popUp.setVisible(true);
  279. HolonElement he = popUp.getElement();
  280. if (he != null) {
  281. listModel.addElement(he.getAmount() + " * " + he.getEleName()
  282. + ": " + he.getMaximumEnergy() + "U");
  283. template.addElement(he);
  284. he.setSaving(new Pair<>(category, textField_name.getText()));
  285. }
  286. }
  287. /**
  288. * Removes the Selected Element from the template
  289. */
  290. private void removeElement() {
  291. int index = list.getSelectedIndex();
  292. if (index == -1)
  293. return;
  294. template.deleteElement(index);
  295. listModel.remove(index);
  296. }
  297. /**
  298. * Edits the selected HolonElement
  299. */
  300. private void editElement() {
  301. int index = list.getSelectedIndex();
  302. if (index == -1)
  303. return;
  304. AddElementPopUp popUp = new AddElementPopUp(parent, model);
  305. popUp.setActualCps(template);
  306. popUp.setElement(template.getElements().get(index));
  307. popUp.setVisible(true);
  308. HolonElement he = popUp.getElement();
  309. if (he != null) {
  310. listModel.remove(index);
  311. listModel.addElement(he.getAmount() + " * " + he.getEleName()
  312. + ": " + he.getMaximumEnergy() + "U");
  313. template.deleteElement(index);
  314. template.addElement(he);
  315. he.setSaving(new Pair<>(category, textField_name.getText()));
  316. }
  317. }
  318. }