package com.vaadin.tests.layouts;
import java.util.ArrayList;
import java.util.List;
import com.vaadin.data.HasValue;
import com.vaadin.server.ThemeResource;
import com.vaadin.server.UserError;
import com.vaadin.tests.components.TestBase;
import com.vaadin.tests.components.TestDateField;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Layout;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.v7.data.Item;
import com.vaadin.v7.data.Property.ValueChangeEvent;
import com.vaadin.v7.data.Property.ValueChangeListener;
import com.vaadin.v7.ui.AbstractLegacyComponent;
import com.vaadin.v7.ui.Field;
import com.vaadin.v7.ui.NativeSelect;
import com.vaadin.v7.ui.OptionGroup;
import com.vaadin.v7.ui.PasswordField;
import com.vaadin.v7.ui.TextArea;
import com.vaadin.v7.ui.TextField;
public class CaptionsInLayoutsWaiAria extends TestBase {
private static final Object CAPTION = "CAPTION";
private static final Object CLASS = "C";
private static final Object WIDTH = "W";
private NativeSelect layoutSelect;
private Layout layout;
private VerticalLayout verticalLayout;
private HorizontalLayout horizontalLayout;
private GridLayout gridLayout;
private FormLayout formLayout;
private List<AbstractComponent> components = new ArrayList<>();
private CssLayout cssLayout;
private HorizontalLayout layoutParent = new HorizontalLayout();
@Override
protected void setup() {
// setTheme("tests-tickets");
addComponent(createLayoutSelect());
addComponent(toggleRequired());
// addComponent(toggleCaptions());
// addComponent(toggleError());
addComponent(toggleIcon());
addComponent(toggleReadOnly());
addComponent(toggleInvalid());
addComponent(toggleEnabled());
addComponent(addCaptionText());
// layoutParent.addComponent(new
// NativeButton("Button right of layout"));
addComponent(layoutParent);
// addComponent(new NativeButton("Button below layout"));
createComponents();
layoutSelect.setValue(layoutSelect.getItemIds().iterator().next());
}
private Component addCaptionText() {
Button b = new Button("Add caption text");
b.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
prependCaptions("a");
}
});
return b;
}
protected void prependCaptions(String prepend) {
for (Component c : components) {
c.setCaption(prepend + c.getCaption());
}
}
private Component toggleRequired() {
CheckBox requiredToggle = new CheckBox();
requiredToggle.setCaption("Required");
requiredToggle
.addValueChangeListener(event -> setRequired(event.getValue()));
return requiredToggle;
}
private Component toggleIcon() {
CheckBox iconToggle = new CheckBox();
iconToggle.setCaption("Icons");
iconToggle.addValueChangeListener(event -> setIcon(event.getValue()));
return iconToggle;
}
private Component toggleReadOnly() {
CheckBox readOnlyToggle = new CheckBox();
readOnlyToggle.setCaption("Read only");
readOnlyToggle
.addValueChangeListener(event -> setReadOnly(event.getValue()));
return readOnlyToggle;
}
private Component toggleEnabled() {
CheckBox enabledToggle = new CheckBox();
enabledToggle.setValue(true);
enabledToggle.setCaption("Enabled");
enabledToggle
.addValueChangeListener(event -> setEnabled(event.getValue()));
return enabledToggle;
}
private Component toggleInvalid() {
CheckBox invalid = new CheckBox("Invalid");
invalid.addValueChangeListener(event -> setInvalid(event.getValue()));
return invalid;
}
protected void setInvalid(boolean value) {
UserError userError = null;
if (value) {
userError = new UserError(
"Der eingegebene Wert ist nicht zulässig!");
}
for (AbstractComponent c : components) {
c.setComponentError(userError);
}
}
protected void setRequired(boolean value) {
for (AbstractComponent c : components) {
if (c instanceof HasValue) {
((HasValue) c).setRequiredIndicatorVisible(value);
} else if (c instanceof Field) {
((Field) c).setRequired(value);
}
}
}
protected void setIcon(boolean value) {
for (Component c : components) {
if (!value) {
c.setIcon(null);
} else {
c.setIcon(new ThemeResource("../runo/icons/16/ok.png"));
}
}
}
protected void setReadOnly(boolean value) {
for (Component c : components) {
if (c instanceof HasValue) {
((HasValue<String>) c).setReadOnly(value);
} else if (c instanceof AbstractLegacyComponent) {
((AbstractLegacyComponent) c).setReadOnly(value);
}
}
}
protected void setEnabled(boolean value) {
for (Component c : components) {
c.setEnabled(value);
}
}
private Component toggleError() {
CheckBox errorToggle = new CheckBox();
errorToggle.setCaption("Error");
errorToggle.addValueChangeListener(event -> setError(event.getValue()));
return errorToggle;
}
protected void setError(boolean value) {
for (AbstractComponent c : components) {
if (value) {
c.setComponentError(new UserError("error"));
} else {
c.setComponentError(null);
}
}
}
private void createComponents() {
components.add(new TextField("Default TextBox"));
components.add(new TextArea("Default TextArea."));
// components.add(new RichTextArea("Default RichtTextArea"));
components.add(new PasswordField("Default Password"));
components.add(new TestDateField("Default DateField"));
// PopupDateField popupDateField = new
// PopupDateField("Default DateField");
// popupDateField.setTextFieldEnabled(false);
// components.add(popupDateField);
components.add(new CheckBox("Default CheckBox"));
ComboBox<String> comboBox = new ComboBox<>("Default ComboBox");
comboBox.setItems("Item1");
components.add(comboBox);
OptionGroup radioGroup = new OptionGroup("Single Items");
radioGroup.addItem("Single Item 1");
radioGroup.addItem("Single Item 2");
radioGroup.setMultiSelect(false);
components.add(radioGroup);
OptionGroup checkGroup = new OptionGroup("Multi Items");
checkGroup.addItem("Multi Item 1");
checkGroup.addItem("Multi Item 2");
checkGroup.setMultiSelect(true);
components.add(checkGroup);
// Tree tree = new Tree();
// tree.setCaption("tree");
// tree.addItem("single item");
// components.add(tree);
}
private void setLayout(Layout newLayout) {
if (layout == null) {
layoutParent.addComponent(newLayout, 0);
} else {
layoutParent.replaceComponent(layout, newLayout);
}
layout = newLayout;
for (Component c : components) {
if (c.getParent() != layout) {
layout.addComponent(c);
}
}
}
private Layout getLayout(String caption,
Class<? extends Layout> layoutClass, String width) {
Layout l;
if (layoutClass == VerticalLayout.class) {
if (verticalLayout == null) {
verticalLayout = new VerticalLayout();
verticalLayout.setStyleName("borders");
}
l = verticalLayout;
} else if (layoutClass == HorizontalLayout.class) {
if (horizontalLayout == null) {
horizontalLayout = new HorizontalLayout();
horizontalLayout.setStyleName("borders");
}
l = horizontalLayout;
} else if (layoutClass == GridLayout.class) {
if (gridLayout == null) {
gridLayout = new GridLayout();
gridLayout.setStyleName("borders");
}
l = gridLayout;
} else if (layoutClass == CssLayout.class) {
if (cssLayout == null) {
cssLayout = new CssLayout();
cssLayout.setStyleName("borders");
}
l = cssLayout;
} else if (layoutClass == FormLayout.class) {
if (formLayout == null) {
formLayout = new FormLayout();
formLayout.setStyleName("borders");
}
l = formLayout;
} else {
return null;
}
l.setCaption(caption);
if (width.equals("auto")) {
width = null;
}
l.setWidth(width);
// addComponent(l);
return l;
}
private Component createLayoutSelect() {
layoutSelect = new NativeSelect("Layout");
layoutSelect.addContainerProperty(CAPTION, String.class, "");
layoutSelect.addContainerProperty(CLASS, Class.class, "");
layoutSelect.addContainerProperty(WIDTH, String.class, "");
layoutSelect.setItemCaptionPropertyId(CAPTION);
layoutSelect.setNullSelectionAllowed(false);
for (Class<?> cls : new Class[] { HorizontalLayout.class,
VerticalLayout.class, GridLayout.class, CssLayout.class,
FormLayout.class }) {
for (String width : new String[] { "auto" }) {
Object id = layoutSelect.addItem();
Item i = layoutSelect.getItem(id);
i.getItemProperty(CAPTION)
.setValue(cls.getSimpleName() + ", " + width);
i.getItemProperty(CLASS).setValue(cls);
i.getItemProperty(WIDTH).setValue(width);
}
}
layoutSelect.setImmediate(true);
layoutSelect.addListener(new ValueChangeListener() {
@Override
@SuppressWarnings("unchecked")
public void valueChange(ValueChangeEvent event) {
Item i = layoutSelect.getItem(event.getProperty().getValue());
setLayout(getLayout(
(String) i.getItemProperty(CAPTION).getValue(),
(Class<? extends Layout>) i.getItemProperty(CLASS)
.getValue(),
(String) i.getItemProperty(WIDTH).getValue()));
}
});
return layoutSelect;
}
@Override
protected String getDescription() {
return "Tests what happens when the caption changes in various layouts. Behavior should be consistent.";
}
@Override
protected Integer getTicketNumber() {
return 5424;
}
}