splitPane.java 23 KB

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