/*
* Copyright 2000-2016 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.tests;
import java.time.LocalDate;
import java.util.Random;
import com.vaadin.server.ExternalResource;
import com.vaadin.shared.ui.datefield.DateResolution;
import com.vaadin.tests.components.TestDateField;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.AbstractDateField;
import com.vaadin.ui.Button;
import com.vaadin.ui.CustomLayout;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Layout;
import com.vaadin.ui.LegacyWindow;
import com.vaadin.ui.Link;
import com.vaadin.ui.Panel;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.v7.ui.Select;
import com.vaadin.v7.ui.TextField;
/**
* This example demonstrates layouts. Layouts are populated with sample Vaadin
* UI components.
*
* @author Vaadin Ltd.
*
*/
public class RandomLayoutStress extends com.vaadin.server.LegacyApplication {
private final Random seededRandom = new Random(1);
// FIXME increasing these settings brings out interesting client-side issues
// (DOM errors)
// TODO increasing values "even more" crashes Hosted Mode, pumping Xmx/Xms
// helps to some extent
private static final int componentCountA = 50;
private static final int componentCountB = 50;
private static final int componentCountC = 200;
private static final int componentCountD = 50;
/**
* Initialize Application. Demo components are added to main window.
*/
@Override
public void init() {
final LegacyWindow mainWindow = new LegacyWindow("Layout demo");
setMainWindow(mainWindow);
// Create horizontal ordered layout
VerticalLayout panelALayout = new VerticalLayout();
panelALayout.setMargin(true);
final Panel panelA = new Panel(
"Panel containing horizontal ordered layout", panelALayout);
HorizontalLayout layoutA = new HorizontalLayout();
// Add 4 random components
fillLayout(layoutA, componentCountA);
// Add layout to panel
panelALayout.addComponent(layoutA);
// Create vertical ordered layout
VerticalLayout panelBLayout = new VerticalLayout();
panelBLayout.setMargin(true);
final Panel panelB = new Panel(
"Panel containing vertical ordered layout", panelBLayout);
VerticalLayout layoutB = new VerticalLayout();
// Add 4 random components
fillLayout(layoutB, componentCountB);
// Add layout to panel
panelBLayout.addComponent(layoutB);
// Create grid layout
final int gridSize = (int) java.lang.Math.sqrt(componentCountC);
VerticalLayout panelGLayout = new VerticalLayout();
panelGLayout.setMargin(true);
final Panel panelG = new Panel("Panel containing grid layout ("
+ gridSize + " x " + gridSize + ")", panelGLayout);
GridLayout layoutG = new GridLayout(gridSize, gridSize);
// Add 12 random components
fillLayout(layoutG, componentCountC);
// Add layout to panel
panelGLayout.addComponent(layoutG);
// Create TabSheet
final TabSheet tabsheet = new TabSheet();
tabsheet.setCaption(
"Tabsheet, above layouts are added to this component");
layoutA = new HorizontalLayout();
// Add 4 random components
fillLayout(layoutA, componentCountA);
tabsheet.addTab(layoutA, "Horizontal ordered layout", null);
layoutB = new VerticalLayout();
// Add 4 random components
fillLayout(layoutB, componentCountB);
tabsheet.addTab(layoutB, "Vertical ordered layout", null);
layoutG = new GridLayout(gridSize, gridSize);
// Add 12 random components
fillLayout(layoutG, componentCountC);
tabsheet.addTab(layoutG, "Grid layout (4 x 2)", null);
// Create custom layout
VerticalLayout panelCLayout = new VerticalLayout();
panelCLayout.setMargin(true);
final Panel panelC = new Panel("Custom layout with style exampleStyle",
panelCLayout);
final CustomLayout layoutC = new CustomLayout("exampleStyle");
// Add 4 random components
fillLayout(layoutC, componentCountD);
// Add layout to panel
panelCLayout.addComponent(layoutC);
// Add demo panels (layouts) to main window
mainWindow.addComponent(panelA);
mainWindow.addComponent(panelB);
mainWindow.addComponent(panelG);
mainWindow.addComponent(tabsheet);
mainWindow.addComponent(panelC);
}
private AbstractComponent getRandomComponent(int caption) {
AbstractComponent result = null;
final int randint = seededRandom.nextInt(7);
switch (randint) {
case 0:
// Label
result = new Label();
result.setCaption("Label component " + caption);
break;
case 1:
// Button
result = new Button();
result.setCaption("Button component " + caption);
break;
case 2:
// TextField
result = new TextField();
result.setCaption("TextField component " + caption);
break;
case 3:
// Select
result = new Select("Select " + caption);
result.setCaption("Select component " + caption);
((Select) result).addItem("First item");
((Select) result).addItem("Second item");
((Select) result).addItem("Third item");
break;
case 4:
// Link
result = new Link("",
new ExternalResource("http://www.vaadin.com"));
result.setCaption("Link component " + caption);
break;
case 5:
// Link
VerticalLayout panelLayout = new VerticalLayout();
panelLayout.setMargin(true);
result = new Panel(panelLayout);
result.setCaption("Panel component " + caption);
panelLayout.addComponent(new Label(
"Panel is a container for other components, by default it draws a frame around it's "
+ "extremities and may have a caption to clarify the nature of the contained components' purpose."
+ " Panel contains an layout where the actual contained components are added, "
+ "this layout may be switched on the fly."));
((Panel) result).setWidth("250px");
break;
case 6:
// Datefield
result = new TestDateField();
((AbstractDateField<LocalDate, DateResolution>) result).setStyleName("calendar");
((AbstractDateField<LocalDate, DateResolution>) result).setValue(LocalDate.now());
result.setCaption("Calendar component " + caption);
break;
case 7:
// Datefield
result = new TestDateField();
((AbstractDateField<LocalDate, DateResolution>) result).setValue(LocalDate.now());
result.setCaption("Calendar component " + caption);
break;
}
return result;
}
/**
* Add demo components to given layout
*
* @param layout
*/
private void fillLayout(Layout layout, int numberOfComponents) {
for (int i = 0; i < numberOfComponents; i++) {
layout.addComponent(getRandomComponent(i));
}
}
}