HelloWorldProgramNodeContribution.java 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package at.acdp.opcur;
  2. import com.ur.urcap.api.contribution.ProgramNodeContribution;
  3. import com.ur.urcap.api.domain.URCapAPI;
  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.Input;
  7. import com.ur.urcap.api.ui.annotation.Label;
  8. import com.ur.urcap.api.ui.component.InputEvent;
  9. import com.ur.urcap.api.ui.component.InputTextField;
  10. import com.ur.urcap.api.ui.component.LabelComponent;
  11. public class HelloWorldProgramNodeContribution implements ProgramNodeContribution {
  12. private static final String NAME = "name";
  13. private final DataModel model;
  14. private final URCapAPI api;
  15. public HelloWorldProgramNodeContribution(URCapAPI api, DataModel model) {
  16. this.api = api;
  17. this.model = model;
  18. }
  19. @Input(id = "yourname")
  20. private InputTextField nameTextField;
  21. @Label(id = "titlePreviewLabel")
  22. private LabelComponent titlePreviewLabel;
  23. @Label(id = "messagePreviewLabel")
  24. private LabelComponent messagePreviewLabel;
  25. @Input(id = "yourname")
  26. public void onInput(InputEvent event) {
  27. if (event.getEventType() == InputEvent.EventType.ON_CHANGE) {
  28. setName(nameTextField.getText());
  29. updatePopupMessageAndPreview();
  30. }
  31. }
  32. @Override
  33. public void openView() {
  34. nameTextField.setText(getName());
  35. updatePopupMessageAndPreview();
  36. }
  37. @Override
  38. public void closeView() {
  39. }
  40. @Override
  41. public String getTitle() {
  42. return "Hello World: " + (model.isSet(NAME) ? getName() : "");
  43. }
  44. @Override
  45. public boolean isDefined() {
  46. return getInstallation().isDefined() && !getName().isEmpty();
  47. }
  48. @Override
  49. public void generateScript(ScriptWriter writer) {
  50. // Directly generate this Program Node's popup message + access the popup title through a global variable
  51. writer.appendLine("popup(\"" + generatePopupMessage() + "\", hello_world_popup_title, False, False, blocking=True)");
  52. writer.writeChildren();
  53. }
  54. private String generatePopupMessage() {
  55. return model.isSet(NAME) ? "Hello " + getName() + ", welcome to PolyScope!" : "No name set";
  56. }
  57. private void updatePopupMessageAndPreview() {
  58. messagePreviewLabel.setText(generatePopupMessage());
  59. titlePreviewLabel.setText(getInstallation().isDefined() ? getInstallation().getPopupTitle() : "No title set");
  60. }
  61. private String getName() {
  62. return model.get(NAME, "");
  63. }
  64. private void setName(String name) {
  65. if ("".equals(name)){
  66. model.remove(NAME);
  67. }else{
  68. model.set(NAME, name);
  69. }
  70. }
  71. private HelloWorldInstallationNodeContribution getInstallation() {
  72. return api.getInstallationNode(HelloWorldInstallationNodeContribution.class);
  73. }
  74. }