splitPane.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799
  1. package ui.view;
  2. import javax.swing.JSplitPane;
  3. import javax.swing.JScrollPane;
  4. import javax.swing.JPanel;
  5. import java.util.ArrayList;
  6. import java.util.Hashtable;
  7. import java.util.Random;
  8. import javax.swing.GroupLayout;
  9. import javax.swing.GroupLayout.Alignment;
  10. import javax.swing.JLabel;
  11. import javax.swing.LayoutStyle.ComponentPlacement;
  12. import javax.swing.event.DocumentEvent;
  13. import javax.swing.event.DocumentListener;
  14. import javax.swing.event.TreeSelectionEvent;
  15. import javax.swing.event.TreeSelectionListener;
  16. import javax.swing.tree.DefaultMutableTreeNode;
  17. import javax.swing.tree.DefaultTreeModel;
  18. import javax.swing.tree.MutableTreeNode;
  19. import javax.swing.tree.TreeNode;
  20. import DataSets.GraphDataSet;
  21. import DataSets.PropertyDataSet;
  22. import classes.AbstractCpsObject;
  23. import classes.CpsUpperNode;
  24. import classes.HolonObject;
  25. import classes.HolonSwitch;
  26. import classes.TrackedDataSet;
  27. import interfaces.GraphListener;
  28. import ui.controller.Control;
  29. import javax.swing.JTextField;
  30. import javax.swing.JComboBox;
  31. import javax.swing.JButton;
  32. import javax.swing.JTree;
  33. import java.awt.Color;
  34. import java.awt.event.ActionEvent;
  35. import java.awt.event.ActionListener;
  36. import java.awt.event.ItemEvent;
  37. import java.awt.event.ItemListener;
  38. import javax.swing.border.CompoundBorder;
  39. import javax.swing.border.LineBorder;
  40. import javax.swing.JPopupMenu;
  41. import java.awt.Component;
  42. import java.awt.Dimension;
  43. import java.awt.event.MouseAdapter;
  44. import java.awt.event.MouseEvent;
  45. import javax.swing.JMenuItem;
  46. import javax.swing.BorderFactory;
  47. import javax.swing.Box;
  48. import javax.swing.BoxLayout;
  49. import java.awt.FlowLayout;
  50. import java.awt.BorderLayout;
  51. public class splitPane extends JSplitPane implements GraphListener {
  52. // Property Integers
  53. public static final int CONS_OBJ_INT = 0;
  54. public static final int PROD_OBJ_INT = 1;
  55. public static final int ACTIVE_ELEMENTS_INT = 2;
  56. public static final int SW_ACTIVE_INT = 3;
  57. public static final int PROD_HOLON_INT = 4;
  58. public static final int CONS_HOLON_INT = 5;
  59. public static final int SUPPLIED_INT = 6;
  60. public static final int NOT_SUPPLIED_INT = 7;
  61. public static final int PART_SUPPLIED_INT = 8;
  62. public static final int GRID_PROD_INT = 9;
  63. public static final int GRID_CONS_INT = 10;
  64. // Property Strings
  65. public static final String TOT_PROD_HOLON = "total Holon Production";
  66. public static final String TOT_CONS_HOLON = "total Holon Consumption";
  67. public static final String SUPPLIED_OBJ = "Percentage of supplied Objects";
  68. public static final String NOT_SUPPLIED_OBJ = "Percentage of not supplied Objects";
  69. public static final String PART_SUPPLIED_OBJ = "Percentage of partially supplied Objects";
  70. public static final String TOT_PROD_OBJ = "total Production";
  71. public static final String TOT_CONS_OBJ = "total Consumption";
  72. public static final String NR_ACTIVE_ELEMENTS = "active Elements";
  73. public static final String SW_ACTIVE = "active";
  74. public static final String TOT_PROD_GRID = "total Grid Production";
  75. public static final String TOT_CONS_GRID = "total Grid Consumption";
  76. // editable textfields
  77. private JTextField graphNrTxtField;
  78. private JTextField redField;
  79. private JTextField greenField;
  80. private JTextField blueField;
  81. // Tree Properties
  82. private JTree objectTree;
  83. private DefaultTreeModel treeModel;
  84. private DefaultMutableTreeNode objectsNode;
  85. private DefaultMutableTreeNode wholeHolon;
  86. private DefaultMutableTreeNode switchesNode;
  87. private DefaultMutableTreeNode gridsNode;
  88. private Hashtable<String, GraphDataSet> objectHashtable;
  89. private Hashtable<String, StatisticGraphPanel> graphHashtable;
  90. private Hashtable<String, PropertyDataSet> holonHashtable;
  91. private Hashtable<String, Integer> propValTable;
  92. private JPanel colorPanel;
  93. //contains information about a selected property
  94. private PropertyDataSet currentProperty = new PropertyDataSet();
  95. private JComboBox colorComboBox;
  96. private Control controller;
  97. private JPanel graphPanel;
  98. JLabel showObjectlbl;
  99. JLabel showPropertylbl;
  100. public splitPane(Control cont) {
  101. this.controller = cont;
  102. objectHashtable = new Hashtable<String, GraphDataSet>();
  103. graphHashtable = new Hashtable<String, StatisticGraphPanel>();
  104. holonHashtable = new Hashtable<String, PropertyDataSet>();
  105. holonHashtable.put(TOT_PROD_HOLON, new PropertyDataSet());
  106. holonHashtable.put(TOT_CONS_HOLON, new PropertyDataSet());
  107. holonHashtable.put(SUPPLIED_OBJ, new PropertyDataSet());
  108. holonHashtable.put(NOT_SUPPLIED_OBJ, new PropertyDataSet());
  109. holonHashtable.put(PART_SUPPLIED_OBJ, new PropertyDataSet());
  110. //propValTable associates the Strings to the numbers
  111. propValTable = new Hashtable<String, Integer>();
  112. propValTable.put(TOT_PROD_OBJ, PROD_OBJ_INT);
  113. propValTable.put(TOT_CONS_OBJ, CONS_OBJ_INT);
  114. propValTable.put(NR_ACTIVE_ELEMENTS, ACTIVE_ELEMENTS_INT);
  115. propValTable.put(SW_ACTIVE, SW_ACTIVE_INT);
  116. propValTable.put(TOT_PROD_HOLON, PROD_HOLON_INT);
  117. propValTable.put(TOT_CONS_HOLON, CONS_HOLON_INT);
  118. propValTable.put(SUPPLIED_OBJ, SUPPLIED_INT);
  119. propValTable.put(NOT_SUPPLIED_OBJ, NOT_SUPPLIED_INT);
  120. propValTable.put(PART_SUPPLIED_OBJ, PART_SUPPLIED_INT);
  121. propValTable.put(TOT_PROD_GRID, GRID_PROD_INT);
  122. propValTable.put(TOT_CONS_GRID, GRID_CONS_INT);
  123. JScrollPane dataPane = new JScrollPane();
  124. setLeftComponent(dataPane);
  125. JPanel panel = new JPanel();
  126. dataPane.setViewportView(panel);
  127. JScrollPane treeScrollPane = new JScrollPane();
  128. //================= LABLES ON THE LEFT SIDE =================//
  129. JLabel lblObject = new JLabel("Object(s):");
  130. showObjectlbl = new JLabel("...");
  131. JLabel lblProperty = new JLabel("Property:");
  132. showPropertylbl = new JLabel("...");
  133. JLabel lblGraph = new JLabel("Graph:");
  134. JLabel lblColor = new JLabel("Color:");
  135. //================= LABLES END ===============================//
  136. //================= COLOR COMBOBOX ===========================//
  137. colorComboBox = new JComboBox();
  138. colorComboBox.addItem("");
  139. colorComboBox.addItem("Red");
  140. colorComboBox.addItem("Blue");
  141. colorComboBox.addItem("Green");
  142. colorComboBox.addItem("Yellow");
  143. colorComboBox.addItem("Orange");
  144. colorComboBox.addItem("Cyan");
  145. colorComboBox.addItem("Magenta");
  146. colorComboBox.addItem("Pink");
  147. colorComboBox.addItem("Gray");
  148. colorComboBox.addItem("Random");
  149. colorComboBox.addItemListener(new ItemListener() {
  150. @Override
  151. public void itemStateChanged(ItemEvent e) {
  152. String colorName = (String) colorComboBox.getSelectedItem();
  153. Color tmpColor = Color.WHITE;
  154. switch (colorName) {
  155. case "":
  156. tmpColor = currentProperty.getColor();
  157. break;
  158. case "Red":
  159. tmpColor = Color.RED;
  160. colorChanged(tmpColor);
  161. break;
  162. case "Blue":
  163. tmpColor = Color.BLUE;
  164. colorChanged(tmpColor);
  165. break;
  166. case "Green":
  167. tmpColor = Color.GREEN;
  168. colorChanged(tmpColor);
  169. break;
  170. case "Yellow":
  171. tmpColor = Color.YELLOW;
  172. colorChanged(tmpColor);
  173. break;
  174. case "Orange":
  175. tmpColor = Color.ORANGE;
  176. colorChanged(tmpColor);
  177. break;
  178. case "Cyan":
  179. tmpColor = Color.CYAN;
  180. colorChanged(tmpColor);
  181. break;
  182. case "Magenta":
  183. tmpColor = Color.MAGENTA;
  184. colorChanged(tmpColor);
  185. break;
  186. case "Pink":
  187. tmpColor = Color.PINK;
  188. colorChanged(tmpColor);
  189. break;
  190. case "Gray":
  191. tmpColor = Color.GRAY;
  192. colorChanged(tmpColor);
  193. break;
  194. case "Random":
  195. Random rdm = new Random();
  196. tmpColor = new Color(rdm.nextInt(255), rdm.nextInt(255), rdm.nextInt(255));
  197. }
  198. redField.setText(Integer.toString(tmpColor.getRed()));
  199. greenField.setText(Integer.toString(tmpColor.getGreen()));
  200. blueField.setText(Integer.toString(tmpColor.getBlue()));
  201. }
  202. });
  203. // ==================== COLORBOX END ==========================//
  204. // ====================GRAPH NR TEXTFIELD======================//
  205. graphNrTxtField = new JTextField();
  206. graphNrTxtField.setColumns(10);
  207. graphNrTxtField.getDocument().addDocumentListener(new DocumentListener() {
  208. /*
  209. * if textField for Red changes, changes will applied in the
  210. * DataStructure "currentProperty" if Value is legit
  211. */
  212. @Override
  213. public void insertUpdate(DocumentEvent e) {
  214. if (currentProperty != null) {
  215. currentProperty.setGraph(graphNrTxtField.getText());
  216. }
  217. }
  218. @Override
  219. public void removeUpdate(DocumentEvent e) {
  220. if (currentProperty != null) {
  221. currentProperty.setGraph(graphNrTxtField.getText());
  222. }
  223. }
  224. @Override
  225. public void changedUpdate(DocumentEvent e) {
  226. }
  227. });
  228. // ====================GRAPH NR TEXTFIELD END==================//
  229. // ====================RED TEXTFIELD===========================//
  230. redField = new JTextField();
  231. redField.setColumns(10);
  232. redField.getDocument().addDocumentListener(new DocumentListener() {
  233. /*
  234. * if textField for Red changes, changes will applied in the
  235. * DataStructure "currentProperty" if Value is legit
  236. */
  237. @Override
  238. public void insertUpdate(DocumentEvent e) {
  239. int tmp = -1;
  240. try {
  241. tmp = Integer.parseInt(redField.getText());
  242. } catch (NumberFormatException e1) {
  243. }
  244. if (tmp > -1 && tmp <= 255) {
  245. if (currentProperty != null) {
  246. Color oldColor = currentProperty.getColor();
  247. Color color = new Color(tmp, oldColor.getGreen(), oldColor.getBlue());
  248. currentProperty.setColor(color);
  249. colorChanged(color);
  250. }
  251. }
  252. }
  253. @Override
  254. public void removeUpdate(DocumentEvent e) {
  255. int tmp = -1;
  256. try {
  257. tmp = Integer.parseInt(redField.getText());
  258. } catch (NumberFormatException e1) {
  259. }
  260. if (tmp > -1 && tmp <= 255) {
  261. if (currentProperty != null) {
  262. Color oldColor = currentProperty.getColor();
  263. Color color = new Color(tmp, oldColor.getGreen(), oldColor.getBlue());
  264. currentProperty.setColor(color);
  265. colorChanged(color);
  266. }
  267. }
  268. }
  269. @Override
  270. public void changedUpdate(DocumentEvent e) {
  271. }
  272. });
  273. // ======================RED TEXTFIELD END==========================//
  274. // ======================GREEN TEXTFIELD============================//
  275. greenField = new JTextField();
  276. greenField.setColumns(10);
  277. greenField.getDocument().addDocumentListener(new DocumentListener() {
  278. /*
  279. * if textField for Red changes, changes will applied in the
  280. * DataStructure "currentProperty" if Value is legit
  281. */
  282. @Override
  283. public void insertUpdate(DocumentEvent e) {
  284. int tmp = -1;
  285. try {
  286. tmp = Integer.parseInt(greenField.getText());
  287. } catch (NumberFormatException e1) {
  288. }
  289. if (tmp > -1 && tmp <= 255) {
  290. if (currentProperty != null) {
  291. Color oldColor = currentProperty.getColor();
  292. Color color = new Color(oldColor.getRed(), tmp, oldColor.getBlue());
  293. currentProperty.setColor(color);
  294. colorChanged(color);
  295. }
  296. }
  297. }
  298. @Override
  299. public void removeUpdate(DocumentEvent e) {
  300. int tmp = -1;
  301. try {
  302. tmp = Integer.parseInt(greenField.getText());
  303. } catch (NumberFormatException e1) {
  304. }
  305. if (tmp > -1 && tmp <= 255) {
  306. if (currentProperty != null) {
  307. Color oldColor = currentProperty.getColor();
  308. Color color = new Color(oldColor.getRed(), tmp, oldColor.getBlue());
  309. currentProperty.setColor(color);
  310. colorChanged(color);
  311. }
  312. }
  313. }
  314. @Override
  315. public void changedUpdate(DocumentEvent e) {
  316. }
  317. });
  318. // ======================GREEN TEXTFIELD END========================//
  319. // ======================BLUE TEXTFIELD=============================//
  320. blueField = new JTextField();
  321. blueField.setColumns(10);
  322. blueField.getDocument().addDocumentListener(new DocumentListener() {
  323. /*
  324. * if textField for Red changes, changes will applied in the
  325. * DataStructure "currentProperty" if Value is legit
  326. */
  327. @Override
  328. public void insertUpdate(DocumentEvent e) {
  329. int tmp = -1;
  330. try {
  331. tmp = Integer.parseInt(blueField.getText());
  332. } catch (NumberFormatException e1) {
  333. }
  334. if (tmp > -1 && tmp <= 255) {
  335. if (currentProperty != null) {
  336. Color oldColor = currentProperty.getColor();
  337. Color color = new Color(oldColor.getRed(), oldColor.getGreen(), tmp);
  338. currentProperty.setColor(color);
  339. colorChanged(color);
  340. }
  341. }
  342. }
  343. @Override
  344. public void removeUpdate(DocumentEvent e) {
  345. int tmp = -1;
  346. try {
  347. tmp = Integer.parseInt(blueField.getText());
  348. } catch (NumberFormatException e1) {
  349. }
  350. if (tmp > -1 && tmp <= 255) {
  351. if (currentProperty != null) {
  352. Color oldColor = currentProperty.getColor();
  353. Color color = new Color(oldColor.getRed(), oldColor.getGreen(), tmp);
  354. currentProperty.setColor(color);
  355. colorChanged(color);
  356. }
  357. }
  358. }
  359. @Override
  360. public void changedUpdate(DocumentEvent e) {
  361. }
  362. });
  363. // ======================BLUE TEXTFIELD END=========================//
  364. JLabel lblR = new JLabel("R:");
  365. JLabel lblG = new JLabel("G:");
  366. JLabel lblB = new JLabel("B:");
  367. //======================== ADD BUTTON =============================//
  368. JButton btnAdd = new JButton("Add");
  369. btnAdd.addActionListener(new ActionListener() {
  370. public void actionPerformed(ActionEvent e) {
  371. DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) objectTree
  372. .getLastSelectedPathComponent();
  373. if (selectedNode == null) {
  374. return;
  375. } else {
  376. if (selectedNode.getLevel() == 3) {
  377. StatisticGraphPanel tmp = null;
  378. if (graphNrTxtField.getText().length() > 0) {
  379. if (!graphHashtable.containsKey(graphNrTxtField.getText())
  380. && graphNrTxtField.getText().length() > 0) {
  381. tmp = new StatisticGraphPanel(controller.getModel(), controller,
  382. graphNrTxtField.getText(), graphHashtable);
  383. //tmp.setPreferredSize(new Dimension(280, 150));
  384. //tmp.setMaximumSize(new Dimension(1000, 1000));
  385. // tmp.setMinimumSize(new Dimension(100, 45));
  386. tmp.setBorder(new LineBorder(new Color(0, 0, 0), 1));
  387. graphPanel.add(tmp);
  388. graphPanel.add(Box.createRigidArea(new Dimension(50, 50)));
  389. graphPanel.revalidate();
  390. graphPanel.updateUI();
  391. graphHashtable.put(graphNrTxtField.getText(), tmp);
  392. }
  393. String object = ((DefaultMutableTreeNode) selectedNode.getParent()).toString();
  394. String property = selectedNode.toString();
  395. GraphDataSet dataSet = objectHashtable.get(object);
  396. TrackedDataSet tds = new TrackedDataSet(dataSet.getObject(), propValTable.get(property),
  397. currentProperty.getColor());
  398. graphHashtable.get(graphNrTxtField.getText()).addObjec(tds);
  399. }
  400. }
  401. }
  402. }
  403. });
  404. //============================== ADD BUTTON END ==============================//
  405. colorPanel = new JPanel();
  406. colorPanel.setBorder(new LineBorder(new Color(0, 0, 0)));
  407. colorPanel.setBackground(Color.WHITE);
  408. //================== LAYOUT FOR COMPONENTS ON THE LEFT SIDE ==================//
  409. GroupLayout gl_panel = new GroupLayout(panel);
  410. gl_panel.setHorizontalGroup(gl_panel.createParallelGroup(Alignment.LEADING)
  411. .addGroup(gl_panel.createSequentialGroup().addContainerGap().addGroup(gl_panel
  412. .createParallelGroup(Alignment.TRAILING, false).addComponent(treeScrollPane,
  413. Alignment.LEADING)
  414. .addGroup(Alignment.LEADING,
  415. gl_panel.createSequentialGroup()
  416. .addGroup(gl_panel.createParallelGroup(Alignment.LEADING).addComponent(lblGraph)
  417. .addComponent(lblObject).addComponent(lblProperty)
  418. .addComponent(lblColor)
  419. .addGroup(gl_panel.createSequentialGroup().addComponent(lblR)
  420. .addPreferredGap(ComponentPlacement.RELATED).addGroup(gl_panel
  421. .createParallelGroup(Alignment.LEADING, false)
  422. .addComponent(colorPanel, GroupLayout.DEFAULT_SIZE,
  423. GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  424. .addComponent(redField, GroupLayout.DEFAULT_SIZE, 37,
  425. Short.MAX_VALUE))))
  426. .addPreferredGap(ComponentPlacement.RELATED)
  427. .addGroup(gl_panel.createParallelGroup(Alignment.LEADING, false)
  428. .addComponent(showObjectlbl, GroupLayout.DEFAULT_SIZE,
  429. GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  430. .addComponent(showPropertylbl, GroupLayout.DEFAULT_SIZE,
  431. GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  432. .addComponent(colorComboBox, 0, GroupLayout.DEFAULT_SIZE,
  433. Short.MAX_VALUE)
  434. .addComponent(graphNrTxtField)
  435. .addGroup(gl_panel.createSequentialGroup().addGroup(gl_panel
  436. .createParallelGroup(Alignment.TRAILING).addComponent(btnAdd)
  437. .addGroup(gl_panel.createSequentialGroup().addComponent(lblG)
  438. .addPreferredGap(ComponentPlacement.RELATED)
  439. .addComponent(greenField, GroupLayout.PREFERRED_SIZE,
  440. 37, GroupLayout.PREFERRED_SIZE)))
  441. .addPreferredGap(ComponentPlacement.RELATED).addComponent(lblB)
  442. .addPreferredGap(ComponentPlacement.RELATED)
  443. .addComponent(blueField, GroupLayout.PREFERRED_SIZE, 37,
  444. GroupLayout.PREFERRED_SIZE)))))
  445. .addGap(32)));
  446. gl_panel.setVerticalGroup(
  447. gl_panel.createParallelGroup(Alignment.LEADING)
  448. .addGroup(gl_panel.createSequentialGroup().addContainerGap()
  449. .addComponent(treeScrollPane, GroupLayout.PREFERRED_SIZE, 174,
  450. GroupLayout.PREFERRED_SIZE)
  451. .addPreferredGap(ComponentPlacement.RELATED)
  452. .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
  453. .addComponent(lblObject, GroupLayout.PREFERRED_SIZE, 14,
  454. GroupLayout.PREFERRED_SIZE)
  455. .addComponent(showObjectlbl))
  456. .addPreferredGap(ComponentPlacement.RELATED)
  457. .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE).addComponent(lblProperty)
  458. .addComponent(showPropertylbl))
  459. .addPreferredGap(ComponentPlacement.RELATED)
  460. .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE).addComponent(lblGraph)
  461. .addComponent(graphNrTxtField, GroupLayout.PREFERRED_SIZE,
  462. GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
  463. .addPreferredGap(ComponentPlacement.RELATED)
  464. .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE).addComponent(lblColor)
  465. .addComponent(colorComboBox, GroupLayout.PREFERRED_SIZE,
  466. GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
  467. .addGap(18)
  468. .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE).addComponent(lblR)
  469. .addComponent(redField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
  470. GroupLayout.PREFERRED_SIZE)
  471. .addComponent(lblG)
  472. .addComponent(greenField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
  473. GroupLayout.PREFERRED_SIZE)
  474. .addComponent(lblB).addComponent(blueField, GroupLayout.PREFERRED_SIZE,
  475. GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
  476. .addPreferredGap(ComponentPlacement.RELATED)
  477. .addComponent(colorPanel, GroupLayout.PREFERRED_SIZE, 33, GroupLayout.PREFERRED_SIZE)
  478. .addPreferredGap(ComponentPlacement.RELATED).addComponent(btnAdd)
  479. .addContainerGap(35, Short.MAX_VALUE)));
  480. //======================== LAYOUT END ================================//
  481. //======================== TREE STRUCTURE=============================//
  482. objectTree = new JTree();
  483. treeModel = (DefaultTreeModel) objectTree.getModel();
  484. DefaultMutableTreeNode root = new DefaultMutableTreeNode("Statistics");
  485. wholeHolon = new DefaultMutableTreeNode("whole Holon");
  486. wholeHolon.add(new DefaultMutableTreeNode(TOT_PROD_HOLON));
  487. wholeHolon.add(new DefaultMutableTreeNode(TOT_CONS_HOLON));
  488. wholeHolon.add(new DefaultMutableTreeNode(SUPPLIED_OBJ));
  489. wholeHolon.add(new DefaultMutableTreeNode(NOT_SUPPLIED_OBJ));
  490. wholeHolon.add(new DefaultMutableTreeNode(PART_SUPPLIED_OBJ));
  491. objectsNode = new DefaultMutableTreeNode("Objects");
  492. objectsNode.add(new DefaultMutableTreeNode("empty"));
  493. switchesNode = new DefaultMutableTreeNode("Switches");
  494. switchesNode.add(new DefaultMutableTreeNode("empty"));
  495. gridsNode = new DefaultMutableTreeNode("Grids");
  496. gridsNode.add(new DefaultMutableTreeNode("empty"));
  497. treeModel.setRoot(root);
  498. root.add(wholeHolon);
  499. root.add(objectsNode);
  500. root.add(switchesNode);
  501. root.add(gridsNode);
  502. objectTree.setModel(treeModel);
  503. treeScrollPane.setViewportView(objectTree);
  504. JPopupMenu popupMenu = new JPopupMenu();
  505. addPopup(objectTree, popupMenu);
  506. JMenuItem mntmUntrack = new JMenuItem("Untrack");
  507. mntmUntrack.addActionListener(new ActionListener() {
  508. public void actionPerformed(ActionEvent e) {
  509. DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) objectTree
  510. .getLastSelectedPathComponent();
  511. if (selectedNode.getLevel() == 2 && !selectedNode.getParent().toString().equals("whole Holon")) {
  512. String object = selectedNode.toString();
  513. controller.removeTrackingObj(objectHashtable.get(object).getObject());
  514. }
  515. }
  516. });
  517. popupMenu.add(mntmUntrack);
  518. objectTree.addTreeSelectionListener(new TreeSelectionListener() {
  519. @Override
  520. public void valueChanged(TreeSelectionEvent e) {
  521. resetFields();
  522. showObjectlbl.setText("...");
  523. showPropertylbl.setText("...");
  524. DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) objectTree
  525. .getLastSelectedPathComponent();
  526. if (selectedNode == null) {
  527. return;
  528. } else {
  529. if (selectedNode.getLevel() == 0) {
  530. disableFields();
  531. }
  532. if (selectedNode.getLevel() == 1) {
  533. disableFields();
  534. currentProperty = null;
  535. graphNrTxtField.setText("");
  536. showObjectlbl.setText(selectedNode.toString());
  537. }
  538. if (selectedNode.getLevel() == 2) {
  539. if (((DefaultMutableTreeNode) selectedNode.getParent()).toString().equals("whole Holon")) {
  540. enableFields();
  541. String object = selectedNode.getParent().toString();
  542. String property = selectedNode.toString();
  543. currentProperty = holonHashtable.get(property);
  544. Color color = currentProperty.getColor();
  545. redField.setText(Integer.toString(color.getRed()));
  546. greenField.setText(Integer.toString(color.getGreen()));
  547. blueField.setText(Integer.toString(color.getBlue()));
  548. showPropertylbl.setText(property);
  549. showObjectlbl.setText(object);
  550. graphNrTxtField.setText(currentProperty.getAssignedGraph());
  551. colorPanel.setBackground(color);
  552. } else {
  553. disableFields();
  554. currentProperty = null;
  555. graphNrTxtField.setText("");
  556. showObjectlbl.setText(selectedNode.toString());
  557. }
  558. }
  559. if (selectedNode.getLevel() == 3) {
  560. enableFields();
  561. String object = ((DefaultMutableTreeNode) selectedNode.getParent()).toString();
  562. String property = selectedNode.toString();
  563. currentProperty = objectHashtable.get(object).getPropertytTable().get(property);
  564. Color color = currentProperty.getColor();
  565. redField.setText(Integer.toString(color.getRed()));
  566. greenField.setText(Integer.toString(color.getGreen()));
  567. blueField.setText(Integer.toString(color.getBlue()));
  568. showObjectlbl.setText(object);
  569. showPropertylbl.setText(property);
  570. graphNrTxtField.setText(currentProperty.getAssignedGraph());
  571. colorPanel.setBackground(color);
  572. }
  573. }
  574. }
  575. });
  576. //========================= TREE STRUCTURE END ============================//
  577. panel.setLayout(gl_panel);
  578. JScrollPane graphScrollPane = new JScrollPane();
  579. setRightComponent(graphScrollPane);
  580. graphPanel = new JPanel();
  581. graphPanel.setLayout(new BoxLayout(graphPanel, BoxLayout.Y_AXIS));
  582. graphPanel.revalidate();
  583. graphPanel.updateUI();
  584. graphScrollPane.setViewportView(graphPanel);
  585. repaintTree();
  586. }
  587. //=============================== END CONSTRUCTOR ==============================//
  588. //=============================== METHODS ======================================//
  589. @Override
  590. public void repaintTree() {
  591. treeModel.reload();
  592. }
  593. @Override
  594. public void addTrackedObject(ArrayList<AbstractCpsObject> hlList) {
  595. objectsNode.removeAllChildren();
  596. switchesNode.removeAllChildren();
  597. gridsNode.removeAllChildren();
  598. objectHashtable.clear();
  599. if (hlList.size() > 0 && hlList != null) {
  600. for (AbstractCpsObject abs : hlList) {
  601. String name = abs.getName() + " " + abs.getID();
  602. DefaultMutableTreeNode tmp = new DefaultMutableTreeNode(name);
  603. Hashtable<String, PropertyDataSet> tmpHash = new Hashtable<String, PropertyDataSet>();
  604. //HolonObjects
  605. if(abs instanceof HolonObject){
  606. tmp.add(new DefaultMutableTreeNode(TOT_PROD_OBJ));
  607. tmp.add(new DefaultMutableTreeNode(TOT_CONS_OBJ));
  608. tmp.add(new DefaultMutableTreeNode(NR_ACTIVE_ELEMENTS));
  609. tmpHash.put(TOT_PROD_OBJ, new PropertyDataSet());
  610. tmpHash.put(TOT_CONS_OBJ, new PropertyDataSet());
  611. tmpHash.put(NR_ACTIVE_ELEMENTS, new PropertyDataSet());
  612. objectsNode.add(tmp);
  613. }
  614. //HolonSwitches
  615. if(abs instanceof HolonSwitch){
  616. tmp.add(new DefaultMutableTreeNode(SW_ACTIVE));
  617. tmpHash.put(SW_ACTIVE, new PropertyDataSet());
  618. switchesNode.add(tmp);
  619. }
  620. //NodesOfNodes
  621. if(abs instanceof CpsUpperNode){
  622. tmp.add(new DefaultMutableTreeNode(TOT_PROD_GRID));
  623. tmp.add(new DefaultMutableTreeNode(TOT_CONS_GRID));
  624. tmpHash.put(TOT_PROD_GRID, new PropertyDataSet());
  625. tmpHash.put(TOT_CONS_GRID, new PropertyDataSet());
  626. gridsNode.add(tmp);
  627. }
  628. GraphDataSet gS = new GraphDataSet(abs, tmpHash);
  629. objectHashtable.put(name, gS);
  630. }
  631. }
  632. if(objectsNode.getChildCount() == 0){
  633. objectsNode.add(new DefaultMutableTreeNode("empty"));
  634. }
  635. if(switchesNode.getChildCount() == 0){
  636. switchesNode.add(new DefaultMutableTreeNode("empty"));
  637. }
  638. if(gridsNode.getChildCount() == 0){
  639. gridsNode.add(new DefaultMutableTreeNode("empty"));
  640. }
  641. }
  642. public void colorChanged(Color color) {
  643. colorPanel.setBackground(color);
  644. }
  645. public void resetFields() {
  646. colorPanel.setBackground(Color.WHITE);
  647. redField.setText("");
  648. greenField.setText("");
  649. blueField.setText("");
  650. colorComboBox.setSelectedIndex(0);
  651. }
  652. public void disableFields() {
  653. redField.setEnabled(false);
  654. greenField.setEnabled(false);
  655. blueField.setEnabled(false);
  656. graphNrTxtField.setEnabled(false);
  657. colorComboBox.setEnabled(false);
  658. colorPanel.setBackground(Color.LIGHT_GRAY);
  659. }
  660. public void enableFields() {
  661. redField.setEnabled(true);
  662. greenField.setEnabled(true);
  663. blueField.setEnabled(true);
  664. graphNrTxtField.setEnabled(true);
  665. colorComboBox.setEnabled(true);
  666. colorPanel.setBackground(Color.WHITE);
  667. }
  668. public void repaintGraphs() {
  669. for (StatisticGraphPanel sg : graphHashtable.values()) {
  670. sg.repaint();
  671. }
  672. }
  673. private static void addPopup(Component component, final JPopupMenu popup) {
  674. component.addMouseListener(new MouseAdapter() {
  675. public void mousePressed(MouseEvent e) {
  676. if (e.isPopupTrigger()) {
  677. showMenu(e);
  678. }
  679. }
  680. public void mouseReleased(MouseEvent e) {
  681. if (e.isPopupTrigger()) {
  682. showMenu(e);
  683. }
  684. }
  685. private void showMenu(MouseEvent e) {
  686. popup.show(e.getComponent(), e.getX(), e.getY());
  687. }
  688. });
  689. }
  690. }