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.

HasValueRequiredIndicator.java 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package com.vaadin.tests.components;
  2. import java.lang.reflect.ParameterizedType;
  3. import java.lang.reflect.Type;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import com.googlecode.gentyref.GenericTypeReflector;
  7. import com.vaadin.data.HasValue;
  8. import com.vaadin.server.VaadinRequest;
  9. import com.vaadin.ui.AbsoluteLayout;
  10. import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
  11. import com.vaadin.ui.Component;
  12. import com.vaadin.ui.CssLayout;
  13. import com.vaadin.ui.FormLayout;
  14. import com.vaadin.ui.GridLayout;
  15. import com.vaadin.ui.HorizontalLayout;
  16. import com.vaadin.ui.Layout;
  17. import com.vaadin.ui.VerticalLayout;
  18. /**
  19. * @author Vaadin Ltd
  20. *
  21. */
  22. public abstract class HasValueRequiredIndicator<C extends HasValue & Component>
  23. extends AbstractTestUI {
  24. private static final List<Class<? extends Layout>> LAYOUTS = getVaadinLayouts();
  25. @Override
  26. protected void setup(VaadinRequest request) {
  27. getContent().setSizeFull();
  28. getVaadinLayouts().stream().map(this::createLayout).forEach(layout -> {
  29. addComponent(layout, createComponent());
  30. addComponent(layout);
  31. });
  32. }
  33. protected void addComponent(Layout layout, C component) {
  34. layout.addComponent(component);
  35. if (layout instanceof AbsoluteLayout) {
  36. AbsoluteLayout absLayout = (AbsoluteLayout) layout;
  37. ComponentPosition position = absLayout.new ComponentPosition();
  38. position.setTop(30f, Unit.PIXELS);
  39. absLayout.setPosition(component, position);
  40. }
  41. }
  42. protected Layout createLayout(Class<? extends Layout> clazz) {
  43. try {
  44. Layout layout = clazz.newInstance();
  45. if (clazz.equals(AbsoluteLayout.class)) {
  46. layout.setWidth("100px");
  47. layout.setHeight("150px");
  48. }
  49. layout.addStyleName("vaadin-layout");
  50. return layout;
  51. } catch (InstantiationException | IllegalAccessException e) {
  52. throw new RuntimeException(e);
  53. }
  54. }
  55. protected C createComponent() {
  56. Type type = GenericTypeReflector.getTypeParameter(getClass(),
  57. HasValueRequiredIndicator.class.getTypeParameters()[0]);
  58. if (type instanceof ParameterizedType) {
  59. type = ((ParameterizedType) type).getRawType();
  60. }
  61. if (type instanceof Class<?>) {
  62. Class<?> clazz = (Class<?>) type;
  63. try {
  64. C component = (C) clazz.newInstance();
  65. initValue(component);
  66. component.setRequiredIndicatorVisible(true);
  67. component.addStyleName("test-component");
  68. return component;
  69. } catch (InstantiationException | IllegalAccessException e) {
  70. throw new RuntimeException(e);
  71. }
  72. } else {
  73. throw new IllegalStateException(
  74. "Cannot infer component type " + type.getTypeName());
  75. }
  76. }
  77. /**
  78. * Initialize value for the {@code component}.
  79. *
  80. * @param component
  81. * a UI component
  82. */
  83. protected abstract void initValue(C component);
  84. private static List<Class<? extends Layout>> getVaadinLayouts() {
  85. List<Class<? extends Layout>> layouts = new ArrayList<>();
  86. layouts.add(AbsoluteLayout.class);
  87. layouts.add(VerticalLayout.class);
  88. layouts.add(HorizontalLayout.class);
  89. layouts.add(FormLayout.class);
  90. layouts.add(CssLayout.class);
  91. layouts.add(GridLayout.class);
  92. return layouts;
  93. }
  94. }