SplitPane.java 27 KB

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