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.

AbstractSingleSelection.java 2.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package com.vaadin.tests.components.abstractsingleselect;
  2. import com.vaadin.annotations.Widgetset;
  3. import com.vaadin.data.provider.Query;
  4. import com.vaadin.server.VaadinRequest;
  5. import com.vaadin.tests.components.AbstractTestUI;
  6. import com.vaadin.ui.AbstractSingleSelect;
  7. import com.vaadin.ui.Button;
  8. import com.vaadin.ui.ComboBox;
  9. import com.vaadin.ui.NativeSelect;
  10. import com.vaadin.ui.RadioButtonGroup;
  11. @Widgetset("com.vaadin.DefaultWidgetSet")
  12. @SuppressWarnings({ "unchecked", "rawtypes" })
  13. public class AbstractSingleSelection extends AbstractTestUI {
  14. /* Initial placeholder component */
  15. AbstractSingleSelect<String> component = new ComboBox<>();
  16. @Override
  17. protected void setup(VaadinRequest request) {
  18. NativeSelect<Class<? extends AbstractSingleSelect>> componentSelect = new NativeSelect<>();
  19. componentSelect.setItems(RadioButtonGroup.class, NativeSelect.class,
  20. ComboBox.class);
  21. componentSelect.setItemCaptionGenerator(Class::getSimpleName);
  22. componentSelect.setEmptySelectionAllowed(false);
  23. componentSelect
  24. .addValueChangeListener(singleSelectClass -> createComponent(
  25. singleSelectClass.getValue()));
  26. addComponent(componentSelect);
  27. addComponent(component); // This will be replaced in createComponent
  28. addComponent(new Button("Deselect",
  29. event -> component.setSelectedItem(null)));
  30. addComponent(new Button("Select Bar",
  31. event -> component.setSelectedItem("Bar")));
  32. addComponent(new Button("Refresh",
  33. event -> component.getDataProvider().refreshAll()));
  34. // Select a value from native select to create the initial component
  35. componentSelect.getDataProvider().fetch(new Query<>()).findFirst()
  36. .ifPresent(componentSelect::setSelectedItem);
  37. }
  38. private void createComponent(
  39. Class<? extends AbstractSingleSelect> singleSelectClass) {
  40. try {
  41. AbstractSingleSelect<String> select = singleSelectClass
  42. .newInstance();
  43. select.setItems("Foo", "Bar", "Baz", "Reset");
  44. select.setSelectedItem("Bar");
  45. if (select instanceof NativeSelect) {
  46. ((NativeSelect) select).setEmptySelectionAllowed(false);
  47. }
  48. select.addValueChangeListener(event -> {
  49. if ("Reset".equals(event.getValue())) {
  50. select.setSelectedItem("Bar");
  51. }
  52. });
  53. select.setId("testComponent");
  54. replaceComponent(component, select);
  55. component = select;
  56. } catch (InstantiationException | IllegalAccessException e1) {
  57. throw new RuntimeException("Component creation failed", e1);
  58. }
  59. }
  60. }