Advertisement
Guest User

Untitled

a guest
Apr 27th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.14 KB | None | 0 0
  1. package view;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Dimension;
  5. import java.awt.GridLayout;
  6. import java.awt.Point;
  7.  
  8. import java.awt.event.ActionEvent;
  9. import java.awt.event.ActionListener;
  10. import java.util.ArrayList;
  11.  
  12. import javax.swing.BorderFactory;
  13. import javax.swing.Box;
  14. import javax.swing.JButton;
  15. import javax.swing.JFrame;
  16. import javax.swing.JLabel;
  17. import javax.swing.JOptionPane;
  18. import javax.swing.JPanel;
  19. import javax.swing.JTextArea;
  20. import javax.swing.JTextField;
  21.  
  22. import org.graphstream.algorithm.ConnectedComponents;
  23. import org.graphstream.graph.Edge;
  24. import org.graphstream.graph.Graph;
  25. import org.graphstream.graph.Node;
  26. import org.graphstream.graph.implementations.MultiGraph;
  27. import org.graphstream.ui.swingViewer.ViewPanel;
  28. import org.graphstream.ui.view.Viewer;
  29.  
  30. public class View extends JFrame {
  31.  
  32. /**
  33. * serial wrbna m3rf leh
  34. */
  35. private static final long serialVersionUID = 1L;
  36. private JTextField fromName, gainValue, toName;
  37. private JLabel from, to, gain, forwardPathsHL, loopsHL, deltasHL, finalAnsHL;
  38. private JButton addNode, addEdge, solve, reset, close;
  39. private JPanel data, headersPanel;
  40. private Graph graph;
  41. private JTextArea finalAnswerContent, forwardContent, loopContent, deltaContent;
  42. private ConnectedComponents cc;
  43. private int nodeNumber = 0;
  44. private Controller controller;
  45.  
  46. private void createObjects() {
  47. controller = new Controller();
  48. fromName = new JTextField();
  49. fromName.setPreferredSize(new Dimension(100, 20));
  50. toName = new JTextField();
  51. toName.setPreferredSize(new Dimension(100, 20));
  52. gainValue = new JTextField();
  53. gainValue.setPreferredSize(new Dimension(100, 20));
  54. from = new JLabel("from");
  55. from.setForeground(Color.ORANGE);
  56. gain = new JLabel("gain");
  57. gain.setForeground(Color.ORANGE);
  58. to = new JLabel("to");
  59. to.setForeground(Color.ORANGE);
  60. addNode = new JButton("Add node");
  61. addNode.setBackground(Color.ORANGE);
  62. addEdge = new JButton("Add edge");
  63. addEdge.setBackground(Color.ORANGE);
  64. reset = new JButton("reset");
  65. reset.setBackground(Color.ORANGE);
  66. close = new JButton("close");
  67. close.setBackground(Color.ORANGE);
  68. solve = new JButton("solve");
  69. solve.setBackground(Color.ORANGE);
  70. data = new JPanel();
  71. graph = new MultiGraph("SFG");
  72. graph.addAttribute("ui.quality");
  73. graph.addAttribute("ui.antialias");
  74. graph.setStrict(false);
  75. graph.setAutoCreate(true);
  76. graph.addAttribute("ui.quality");
  77. graph.addAttribute("ui.stylesheet",
  78. "node { size: 30px,30px; fill-color: orange; stroke-mode: plain; stroke-color: #999; shadow-mode: gradient-radial; shadow-width: 2px; shadow-color: #999, white; shadow-offset: 3px, -3px; } edge {arrow-shape: arrow; arrow-size: 10px, 10px;}");
  79.  
  80. headersPanel = new JPanel();
  81. cc = new ConnectedComponents();
  82.  
  83. forwardPathsHL = new JLabel("Forward Paths : ");
  84. loopsHL = new JLabel("Loops : ");
  85. deltasHL = new JLabel("Deltas : ");
  86. finalAnsHL = new JLabel("Final answer : ");
  87. forwardPathsHL.setForeground(Color.ORANGE);
  88. loopsHL.setForeground(Color.ORANGE);
  89. deltasHL.setForeground(Color.ORANGE);
  90. finalAnsHL.setForeground(Color.ORANGE);
  91. forwardContent = new JTextArea(10, 50);
  92. forwardContent.setBorder(BorderFactory.createLineBorder(Color.ORANGE, 7));
  93. loopContent = new JTextArea(10, 50);
  94. loopContent.setBorder(BorderFactory.createLineBorder(Color.ORANGE, 7));
  95. deltaContent = new JTextArea(10, 50);
  96. deltaContent.setBorder(BorderFactory.createLineBorder(Color.ORANGE, 7));
  97. finalAnswerContent = new JTextArea(5, 50);
  98. finalAnswerContent.setBorder(BorderFactory.createLineBorder(Color.ORANGE, 7));
  99. forwardContent.setEditable(false);
  100. loopContent.setEditable(false);
  101. deltaContent.setEditable(false);
  102. finalAnswerContent.setEditable(false);
  103. forwardContent.setLineWrap(true);
  104. loopContent.setLineWrap(true);
  105. deltaContent.setLineWrap(true);
  106. finalAnswerContent.setLineWrap(true);
  107. }
  108.  
  109. private void createdata() {
  110.  
  111. Box box1 = Box.createVerticalBox();
  112. data.add(from);
  113. data.add(fromName);
  114. data.add(to);
  115. data.add(toName);
  116. data.add(gain);
  117. data.add(gainValue);
  118. data.add(addEdge);
  119. data.add(addNode);
  120. Box box2 = Box.createHorizontalBox();
  121. box2.add(solve);
  122. box2.add(close);
  123. box2.add(reset);
  124. data.add(box2);
  125. headersPanel.add(forwardPathsHL);
  126. headersPanel.add(forwardContent);
  127. headersPanel.setOpaque(false);
  128. box1.add(headersPanel);
  129.  
  130. headersPanel = new JPanel();
  131. headersPanel.add(loopsHL);
  132. headersPanel.add(loopContent);
  133.  
  134. headersPanel.setOpaque(false);
  135. box1.add(headersPanel);
  136. headersPanel = new JPanel();
  137. headersPanel.add(deltasHL);
  138. headersPanel.add(deltaContent);
  139.  
  140. headersPanel.setOpaque(false);
  141. box1.add(headersPanel);
  142.  
  143. headersPanel = new JPanel();
  144. headersPanel.add(finalAnsHL);
  145. headersPanel.add(finalAnswerContent);
  146. headersPanel.setOpaque(false);
  147.  
  148. box1.add(headersPanel);
  149. data.add(box1);
  150. data.setBackground(Color.DARK_GRAY);
  151. setResizable(false);
  152.  
  153. }
  154.  
  155. private void printAns() {
  156. StringBuilder s = new StringBuilder("");
  157. for (ArrayList<Point> fb : controller.getForwardPaths()) {
  158. for (Point p : fb)
  159. s.append(" " + String.valueOf(p.x)).append(" " + String.valueOf(p.y) + " ");
  160. s.append("\n");
  161. }
  162. forwardContent.setText(s.toString());
  163. s = new StringBuilder("");
  164. for (ArrayList<Point> l : controller.getLoops()) {
  165. for (Point p : l)
  166. s.append(" " + String.valueOf(p.x)).append(" " + String.valueOf(p.y) + " ");
  167. s.append("\n");
  168. }
  169. loopContent.setText(s.toString());
  170. s = new StringBuilder("");
  171. for (double delta : controller.getDeltas())
  172. s.append(String.valueOf(delta) + " ");
  173. deltaContent.setText(s.toString());
  174. finalAnswerContent.setText(String.valueOf(controller.getFinalAns()));
  175. }
  176.  
  177. private void addSolveActiontLisenter() {
  178. solve.addActionListener(new ActionListener() {
  179. @Override
  180. public void actionPerformed(ActionEvent arg0) {
  181. // check if they are one component
  182. // if they have one and only one node with zero in degree
  183. // if and only if one node with zero out degree
  184. cc.init(graph);
  185. if (cc.getConnectedComponentsCount() != 1) {
  186. JOptionPane.showMessageDialog(null, "There must be a component");
  187. return;
  188. }
  189. int countNodeWithZeroIndgree = 0;
  190. for (Node n : graph) {
  191. if (n.getInDegree() == 0) {
  192. countNodeWithZeroIndgree++;
  193. }
  194. }
  195. if (countNodeWithZeroIndgree != 1) {
  196. JOptionPane.showMessageDialog(null, "Only one Node must have zero InDegree");
  197. return;
  198. }
  199. int countNodeWithZeroOutdgree = 0;
  200. for (Node n : graph) {
  201. if (n.getOutDegree() == 0) {
  202. countNodeWithZeroOutdgree++;
  203. }
  204. }
  205. if (countNodeWithZeroOutdgree != 1) {
  206. JOptionPane.showMessageDialog(null, "Only one Node must have zero outDegree");
  207. return;
  208. }
  209. controller.solve(graph);
  210. printAns();
  211. }
  212. });
  213. }
  214.  
  215. private void addCloseActionListener() {
  216. close.addActionListener(new ActionListener() {
  217. @Override
  218. public void actionPerformed(ActionEvent arg0) {
  219. setVisible(false);
  220. dispose();
  221. }
  222. });
  223. }
  224.  
  225. private void addResetActionListener() {
  226. reset.addActionListener(new ActionListener() {
  227. @Override
  228. public void actionPerformed(ActionEvent arg0) {
  229. graph.clear();
  230. graph.addAttribute("ui.quality");
  231. graph.addAttribute("ui.antialias");
  232. graph.setStrict(false);
  233. graph.setAutoCreate(true);
  234. graph.addAttribute("ui.quality");
  235. graph.addAttribute("ui.stylesheet",
  236. "node { size: 30px,30px; fill-color: orange; stroke-mode: plain; stroke-color: #999; shadow-mode: gradient-radial; shadow-width: 2px; shadow-color: #999, white; shadow-offset: 3px, -3px; } edge {arrow-shape: arrow; arrow-size: 10px, 10px;}");
  237. nodeNumber = 0;
  238. cleanUpInputBoxes();
  239. cleanUpOPBoxes();
  240.  
  241. }
  242. });
  243. }
  244.  
  245. private void addEdgeActionListener() {
  246. addEdge.addActionListener(new ActionListener() {
  247. @Override
  248. public void actionPerformed(ActionEvent arg0) {
  249. // check from
  250. try {
  251. int frm = Integer.parseInt(fromName.getText());
  252. int t = Integer.parseInt(toName.getText());
  253. Double g = Double.parseDouble(gainValue.getText());
  254. if (frm > nodeNumber || t > nodeNumber || g.equals(0.0)) {
  255. cleanUpInputBoxes();
  256. JOptionPane.showMessageDialog(null, "Wrong input.");
  257. return;
  258. }
  259. } catch (Exception e) {
  260. cleanUpInputBoxes();
  261. JOptionPane.showMessageDialog(null, "Wrong input.");
  262. return;
  263. }
  264.  
  265. graph.addEdge(fromName.getText() + toName.getText(), fromName.getText(), toName.getText(), true);
  266. Edge e = graph.getEdge(fromName.getText() + toName.getText());
  267. e.addAttribute("ui.label", gainValue.getText());
  268. e.addAttribute("ui.stylesheet", "edge { shape: line;fill-color: #222;arrow-size: 10px, 10px;}");
  269. cleanUpInputBoxes();
  270. }
  271. });
  272. }
  273.  
  274. private void addNodeActionListener() {
  275. addNode.addActionListener(new ActionListener() {
  276. @Override
  277. public void actionPerformed(ActionEvent e) {
  278. nodeNumber++;
  279. graph.addNode(((Integer) nodeNumber).toString());
  280. Node n = graph.getNode(((Integer) nodeNumber).toString());
  281. n.addAttribute("ui.label", n.getId());
  282. }
  283. });
  284. }
  285.  
  286. private void addActionLisenters() {
  287. addNodeActionListener();
  288. addEdgeActionListener();
  289. addSolveActiontLisenter();
  290. addCloseActionListener();
  291. addResetActionListener();
  292. }
  293.  
  294. public View() {
  295. createObjects();
  296. createdata();
  297. setLayout(new GridLayout(1, 2, 0, 0));
  298. add(data);
  299. Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
  300. viewer.enableAutoLayout();
  301. ViewPanel view = viewer.addDefaultView(false);
  302. view.getCamera().setViewCenter(2, 3, 4);
  303. view.getCamera().setAutoFitView(true);
  304. view.getCamera().resetView();
  305. add(view);
  306. addActionLisenters();
  307. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  308. setSize(1400, 800);
  309. setVisible(true);
  310. }
  311.  
  312. private void cleanUpInputBoxes() {
  313. fromName.setText("");
  314. toName.setText("");
  315. gainValue.setText("");
  316. }
  317. private void cleanUpOPBoxes() {
  318. finalAnswerContent.setText("");
  319. loopContent.setText("");
  320. forwardContent.setText("");
  321. deltaContent.setText("");
  322. }
  323.  
  324. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement