ConnectHandheld.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. package Connection;
  2. import java.awt.BorderLayout;
  3. import java.awt.Dimension;
  4. import java.awt.image.BufferedImage;
  5. import java.io.IOException;
  6. import java.net.BindException;
  7. import java.text.NumberFormat;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. import javax.swing.ImageIcon;
  11. import javax.swing.JButton;
  12. import javax.swing.JFormattedTextField;
  13. import javax.swing.JFrame;
  14. import javax.swing.JLabel;
  15. import javax.swing.JOptionPane;
  16. import javax.swing.JPanel;
  17. import javax.swing.JScrollPane;
  18. import javax.swing.JSplitPane;
  19. import javax.swing.JTextArea;
  20. import javax.swing.text.NumberFormatter;
  21. import api.AddOn;
  22. import classes.AbstractCanvasObject;
  23. import classes.GroupNode;
  24. import classes.HolonObject;
  25. import Connection.socket.Server;
  26. import ui.controller.Control;
  27. import ui.view.componnents.Console;
  28. public class ConnectHandheld implements AddOn{
  29. //Holeg
  30. Control control;
  31. private HolonObject observed;
  32. //Gui
  33. private JPanel content = new JPanel();
  34. private JTextArea textArea;
  35. //TCP
  36. int port = 4242;
  37. Server server;
  38. private Console console;
  39. private boolean holonObjectConnected;
  40. private JLabel houseLabel;
  41. public static void main(String[] args)
  42. {
  43. JFrame newFrame = new JFrame("exampleWindow");
  44. ConnectHandheld instance = new ConnectHandheld();
  45. newFrame.setContentPane(instance.getPanel());
  46. newFrame.pack();
  47. newFrame.setVisible(true);
  48. newFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  49. }
  50. public ConnectHandheld() {
  51. content.setLayout(new BorderLayout());
  52. textArea = new JTextArea();
  53. textArea.setEditable(false);
  54. console = new Console();
  55. JScrollPane scrollPane = new JScrollPane(console);
  56. JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
  57. createSettingsPanel() , scrollPane);
  58. splitPane.setResizeWeight(0.0);
  59. content.add(splitPane, BorderLayout.CENTER);
  60. content.setPreferredSize(new Dimension(400,600));
  61. }
  62. private JPanel createSettingsPanel() {
  63. JPanel settingsPanel = new JPanel(null);
  64. settingsPanel.setPreferredSize(new Dimension(400, 400));
  65. settingsPanel.setMinimumSize(new Dimension(400, 225));
  66. NumberFormat format = NumberFormat.getIntegerInstance();
  67. format.setGroupingUsed(false);
  68. format.setParseIntegerOnly(true);
  69. NumberFormatter integerFormatter = new NumberFormatter(format);
  70. integerFormatter.setMinimum(0);
  71. integerFormatter.setMaximum(65535);
  72. integerFormatter.setCommitsOnValidEdit(true);
  73. JLabel portLabel = new JLabel("Port:");
  74. portLabel.setBounds(10, 20, 35, 30);
  75. settingsPanel.add(portLabel);
  76. JFormattedTextField portTF = new JFormattedTextField(integerFormatter);
  77. portTF.setText(""+port);
  78. portTF.setBounds(55 ,20, 80, 30);
  79. portTF.addPropertyChangeListener(propertyChange ->{
  80. String text = portTF.getValue().toString();
  81. text = text.replaceAll("\\s", "");
  82. port = Integer.parseInt((text));
  83. });
  84. settingsPanel.add(portTF);
  85. houseLabel = new JLabel("House Status: " + (holonObjectConnected?"Connected":"Not selected"));
  86. houseLabel.setBounds(10, 90, 220, 30);
  87. settingsPanel.add(houseLabel);
  88. JButton selectRoom1Button = new JButton("Select");
  89. selectRoom1Button.setBounds(230,95, 90, 20);
  90. selectRoom1Button.addActionListener(actionEvent -> this.selectHolonObject());
  91. settingsPanel.add(selectRoom1Button);
  92. JButton connectButton = new JButton("Start Server");
  93. connectButton.setBounds(100 ,175, 200, 50);
  94. connectButton.addActionListener(actionEvent -> connect());
  95. settingsPanel.add(connectButton);
  96. return settingsPanel;
  97. }
  98. private void connect() {
  99. if(!holonObjectConnected) {
  100. console.println("Select a HolonObject");
  101. return;
  102. }
  103. try {
  104. if(server != null) {
  105. server.stopServer();
  106. }
  107. console.println("Start Server on Port:" + port);
  108. server = new Server(port, console, observed, control);
  109. }catch(BindException e){
  110. console.println(e.getMessage());
  111. }
  112. catch (IOException e) {
  113. // TODO Auto-generated catch block
  114. e.printStackTrace();
  115. }
  116. }
  117. @Override
  118. public JPanel getPanel() {
  119. return content;
  120. }
  121. @Override
  122. public void setController(Control control) {
  123. this.control = control;
  124. }
  125. private void selectHolonObject() {
  126. List<HolonObject> holonObjectList = new ArrayList<HolonObject>();
  127. addObjectToList(control.getModel().getObjectsOnCanvas(),holonObjectList);
  128. Object[] possibilities = holonObjectList.stream().map(aCps -> new Handle<HolonObject>(aCps)).toArray();
  129. @SuppressWarnings("unchecked")
  130. Handle<HolonObject> selected = (Handle<HolonObject>) JOptionPane.showInputDialog(content, "Select HolonObject:", "HolonObject?", JOptionPane.OK_OPTION,new ImageIcon(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB)) , possibilities, "");
  131. if(selected != null) {
  132. console.println("Selected: " + selected);
  133. observed = selected.object;
  134. holonObjectConnected = true;
  135. if(server != null) {
  136. server.setObserved(selected.object);
  137. }
  138. updateSelectionLabel();
  139. }
  140. }
  141. private void updateSelectionLabel() {
  142. houseLabel.setText("House Status: " + (holonObjectConnected?"Connected":"Not selected"));
  143. }
  144. private void addObjectToList(List<AbstractCanvasObject> listToSearch, List<HolonObject> listToAdd){
  145. for (AbstractCanvasObject aCps : listToSearch) {
  146. if (aCps instanceof HolonObject) listToAdd.add((HolonObject) aCps);
  147. else if(aCps instanceof GroupNode) {
  148. addObjectToList(((GroupNode)aCps).getNodes(),listToAdd);
  149. }
  150. }
  151. }
  152. private class Handle<T>{
  153. public T object;
  154. Handle(T object){
  155. this.object = object;
  156. }
  157. public String toString() {
  158. return object.toString();
  159. }
  160. }
  161. }