You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TestWidgetConnector.java 2.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package com.vaadin.tests.widgetset.client;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import com.google.gwt.core.client.GWT;
  5. import com.google.gwt.dom.client.Style.Position;
  6. import com.google.gwt.user.client.Element;
  7. import com.google.gwt.user.client.ui.Label;
  8. import com.google.gwt.user.client.ui.SimplePanel;
  9. import com.google.gwt.user.client.ui.Widget;
  10. import com.vaadin.client.annotations.OnStateChange;
  11. import com.vaadin.client.metadata.Invoker;
  12. import com.vaadin.client.ui.AbstractComponentConnector;
  13. import com.vaadin.client.ui.SubPartAware;
  14. import com.vaadin.shared.AbstractComponentState;
  15. import com.vaadin.shared.ui.Connect;
  16. import com.vaadin.tests.widgetset.server.TestWidgetComponent;
  17. @Connect(TestWidgetComponent.class)
  18. public class TestWidgetConnector extends AbstractComponentConnector {
  19. public static class SubPartAwareSimplePanel extends SimplePanel
  20. implements SubPartAware {
  21. public SubPartAwareSimplePanel() {
  22. getElement().getStyle().setPosition(Position.ABSOLUTE);
  23. }
  24. @Override
  25. public Element getSubPartElement(String subPart) {
  26. Widget target = getWidget();
  27. if (target instanceof SubPartAware) {
  28. return ((SubPartAware) target).getSubPartElement(subPart);
  29. } else {
  30. return null;
  31. }
  32. }
  33. @Override
  34. public String getSubPartName(Element subElement) {
  35. Widget target = getWidget();
  36. if (target instanceof SubPartAware) {
  37. return ((SubPartAware) target).getSubPartName(subElement);
  38. } else {
  39. return null;
  40. }
  41. }
  42. }
  43. public static class TestWidgetState extends AbstractComponentState {
  44. public String widgetClass;
  45. }
  46. private final TestWidgetRegistry registry = GWT
  47. .create(TestWidgetRegistry.class);
  48. public abstract static class TestWidgetRegistry {
  49. private Map<String, Invoker> creators = new HashMap<>();
  50. // Called by generated sub class
  51. protected void register(String widgetClass, Invoker creator) {
  52. creators.put(widgetClass, creator);
  53. }
  54. public Widget createWidget(String widgetClass) {
  55. Invoker invoker = creators.get(widgetClass);
  56. if (invoker == null) {
  57. return new Label("Widget not found: " + widgetClass);
  58. } else {
  59. return (Widget) invoker.invoke(null);
  60. }
  61. }
  62. }
  63. @OnStateChange("widgetClass")
  64. private void updateWidgetClass() {
  65. getWidget().setWidget(registry.createWidget(getState().widgetClass));
  66. }
  67. @Override
  68. public TestWidgetState getState() {
  69. return (TestWidgetState) super.getState();
  70. }
  71. @Override
  72. public SubPartAwareSimplePanel getWidget() {
  73. return (SubPartAwareSimplePanel) super.getWidget();
  74. }
  75. }