MyDaemonInstallationNodeContribution.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. package uraxis;
  2. import com.ur.urcap.api.contribution.DaemonContribution;
  3. import com.ur.urcap.api.contribution.InstallationNodeContribution;
  4. import com.ur.urcap.api.domain.data.DataModel;
  5. import com.ur.urcap.api.domain.script.ScriptWriter;
  6. import com.ur.urcap.api.ui.annotation.Div;
  7. import com.ur.urcap.api.ui.annotation.Input;
  8. import com.ur.urcap.api.ui.annotation.Label;
  9. import com.ur.urcap.api.ui.component.*;
  10. import org.apache.xmlrpc.XmlRpcException;
  11. import java.awt.EventQueue;
  12. import java.util.Timer;
  13. import java.util.TimerTask;
  14. public class MyDaemonInstallationNodeContribution implements InstallationNodeContribution {
  15. private static final String POPUPTITLE_KEY = "popuptitle";
  16. private static final String XMLRPC_VARIABLE = "my_daemon";
  17. private static final String ENABLED_KEY = "enabled";
  18. private static final String DEFAULT_VALUE = "HelloWorld";
  19. private static final String IP = "ip";
  20. private static final String PORT = "port";
  21. private DataModel model;
  22. // private final MyDaemonDaemonService daemonService;
  23. private MyDaemonInterface daemonInterface;
  24. private Timer uiTimer;
  25. private Timer statusTimer;
  26. public MyDaemonInstallationNodeContribution(MyDaemonDaemonService daemonService, DataModel model) {
  27. // this.daemonService = daemonService;
  28. this.model = model;
  29. daemonInterface = new MyDaemonInterface(getIP(), Integer.parseInt(getPort()));
  30. // applyDesiredDaemonStatus();
  31. Activator.daemonInterface=daemonInterface;
  32. }
  33. @Input(id = "btnEnableDaemon")
  34. private InputButton enableDaemonButton;
  35. @Input(id = "btnRef")
  36. private InputButton refButtonRef;
  37. @Input(id = "textIP")
  38. private InputTextField refTextIP;
  39. @Input(id = "textPort")
  40. private InputTextField refTextPort;
  41. @Label(id = "lblStatus")
  42. private LabelComponent refLblStatus;
  43. @Input(id = "btnDisableDaemon")
  44. private InputButton disableDaemonButton;
  45. @Label(id = "lblDaemonStatus")
  46. private LabelComponent daemonStatusLabel;
  47. @Input(id = "btnRef")
  48. public void onBtnRef(InputEvent event) {
  49. if (event.getEventType() == InputEvent.EventType.ON_CHANGE) {
  50. try {
  51. getDaemonInterface().client.execute("ref", new String[]{"foo", "bar"});
  52. } catch (XmlRpcException e) {
  53. e.printStackTrace();
  54. }
  55. }
  56. }
  57. @Input(id = "btnEnableDaemon")
  58. public void onStartClick(InputEvent event) {
  59. if (event.getEventType() == InputEvent.EventType.ON_CHANGE) {
  60. setDaemonEnabled(true);
  61. // applyDesiredDaemonStatus();
  62. }
  63. }
  64. @Input(id = "btnDisableDaemon")
  65. public void onStopClick(InputEvent event) {
  66. if (event.getEventType() == InputEvent.EventType.ON_CHANGE) {
  67. setDaemonEnabled(false);
  68. // applyDesiredDaemonStatus();
  69. }
  70. }
  71. @Override
  72. public void openView() {
  73. enableDaemonButton.setText("Start Daemon");
  74. disableDaemonButton.setText("Stop daemon");
  75. refTextIP.setText(getIP());
  76. refTextPort.setText(getPort());
  77. //UI updates from non-GUI threads must use EventQueue.invokeLater (or SwingUtilities.invokeLater)
  78. uiTimer = new Timer(true);
  79. uiTimer.schedule(new TimerTask() {
  80. @Override
  81. public void run() {
  82. EventQueue.invokeLater(new Runnable() {
  83. @Override
  84. public void run() {
  85. updateUI();
  86. }
  87. });
  88. }
  89. }, 0, 1000);
  90. // statusTimer = new Timer(true);
  91. // statusTimer.schedule(new TimerTask() {
  92. // @Override
  93. // public void run() {
  94. // EventQueue.invokeLater(new Runnable() {
  95. // @Override
  96. // public void run() {
  97. // try {
  98. // Object res = getDaemonInterface().client.execute("status", new String[]{});
  99. // refLblStatus.setText("<html>"+res.toString()+"</html>");
  100. // System.out.println(res);
  101. // } catch (XmlRpcException e) {
  102. // e.printStackTrace();
  103. // }
  104. // }
  105. // });
  106. // }},0,1000);
  107. }
  108. private void updateUI() {
  109. DaemonContribution.State state = getDaemonState();
  110. if (state == DaemonContribution.State.RUNNING) {
  111. enableDaemonButton.setEnabled(false);
  112. disableDaemonButton.setEnabled(true);
  113. } else {
  114. enableDaemonButton.setEnabled(true);
  115. disableDaemonButton.setEnabled(false);
  116. }
  117. String text = "";
  118. switch (state) {
  119. case RUNNING:
  120. text = "My Daemon runs";
  121. break;
  122. case STOPPED:
  123. text = "My Daemon stopped";
  124. break;
  125. case ERROR:
  126. text = "My Daemon failed";
  127. break;
  128. }
  129. daemonStatusLabel.setText(text);
  130. }
  131. @Override
  132. public void closeView() {
  133. if (uiTimer != null) {
  134. uiTimer.cancel();
  135. }
  136. setIP(refTextIP.getText());
  137. setPort(refTextPort.getText());
  138. }
  139. @Override
  140. public void generateScript(ScriptWriter writer) {
  141. writer.assign(XMLRPC_VARIABLE, "rpc_factory(\"xmlrpc\", \"http://"+ getIP()+":"+ getPort()+"\")");
  142. }
  143. public String getPopupTitle() {
  144. if (!model.isSet(POPUPTITLE_KEY)) {
  145. resetToDefaultValue();
  146. }
  147. return model.get(POPUPTITLE_KEY, DEFAULT_VALUE);
  148. }
  149. private void setPopupTitle(String title) {
  150. if ("".equals(title)) {
  151. resetToDefaultValue();
  152. } else {
  153. model.set(POPUPTITLE_KEY, title);
  154. // Apply the new setting to the daemon for real-time preview purposes
  155. // Note this might influence a running program, since the actual state is stored in the daemon.
  156. setDaemonTitle(title);
  157. }
  158. }
  159. public String getIP() {
  160. return model.get(IP, "127.0.0.1");
  161. }
  162. public void setIP(String ip) {
  163. model.set(IP, ip);
  164. }
  165. public String getPort() {
  166. return model.get(PORT, "8080");
  167. }
  168. public void setPort(String ip) {
  169. model.set(PORT, ip);
  170. }
  171. private void resetToDefaultValue() {
  172. model.set(POPUPTITLE_KEY, DEFAULT_VALUE);
  173. setDaemonTitle(DEFAULT_VALUE);
  174. }
  175. private void setDaemonTitle(String title) {
  176. try {
  177. daemonInterface.setTitle(title);
  178. } catch(Exception e){
  179. System.err.println("Could not set the title in the daemon process.");
  180. }
  181. }
  182. // private void applyDesiredDaemonStatus() {
  183. // new Thread(new Runnable() {
  184. // @Override
  185. // public void run() {
  186. // if (isDaemonEnabled()) {
  187. // // Download the daemon settings to the daemon process on initial start for real-time preview purposes
  188. // try {
  189. // awaitDaemonRunning(5000);
  190. // daemonInterface.setTitle(getPopupTitle());
  191. // } catch (Exception e) {
  192. // System.err.println("Could not set the title in the daemon process.");
  193. // }
  194. // } else {
  195. // daemonService.getDaemon().stop();
  196. // }
  197. // }
  198. // }).start();
  199. // }
  200. // private void awaitDaemonRunning(long timeOutMilliSeconds) throws InterruptedException {
  201. // daemonService.getDaemon().start();
  202. // long endTime = System.nanoTime() + timeOutMilliSeconds * 1000L * 1000L;
  203. // while(System.nanoTime() < endTime && (daemonService.getDaemon().getState() != DaemonContribution.State.RUNNING || !daemonInterface.isReachable())) {
  204. // Thread.sleep(100)
  205. // }
  206. // }
  207. //
  208. private DaemonContribution.State getDaemonState(){
  209. return DaemonContribution.State.RUNNING;
  210. // return daemonService.getDaemon().getState();
  211. }
  212. private Boolean isDaemonEnabled() {
  213. return model.get(ENABLED_KEY, true); //This daemon is enabled by default
  214. }
  215. private void setDaemonEnabled(Boolean enable) {
  216. model.set(ENABLED_KEY, enable);
  217. }
  218. public String getXMLRPCVariable(){
  219. return XMLRPC_VARIABLE;
  220. }
  221. public MyDaemonInterface getDaemonInterface() {return daemonInterface; }
  222. public boolean isDefined() {
  223. return true;
  224. }
  225. }