Java tutorial
package com.arcusys.liferay.vaadinplugin.ui; /* * #%L * Liferay Vaadin Plugin * %% * Copyright (C) 2010 - 2013 Vaadin Ltd. * Copyright (C) 2013 Arcusys 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. * #L% */ import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.data.util.IndexedContainer; import com.vaadin.data.util.filter.SimpleStringFilter; import com.vaadin.event.FieldEvents; import com.vaadin.ui.*; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; @SuppressWarnings("serial") public class AdditionalDependenciesWindow extends Window { private final IndexedContainer dependencyContainer = new IndexedContainer(); private final TextField filterTextField; private final AbstractSelect dependenciesSelector; private Button closeButton; private SimpleStringFilter filter = null; public AdditionalDependenciesWindow(List<File> files, List<File> includedDependencies) { setCaption("Additional dependencies (WEB-INF/lib)"); setWidth("350px"); setHeight("350px"); VerticalLayout layout = new VerticalLayout(); layout.setSizeFull(); layout.setMargin(true); layout.setSpacing(true); setContent(layout); dependencyContainer.addContainerProperty("caption", String.class, null); filterTextField = createFilterTextField(); layout.addComponent(filterTextField); dependenciesSelector = createDependenciesSelector(); populateSelector(files, includedDependencies); layout.addComponent(dependenciesSelector); layout.setExpandRatio(dependenciesSelector, 1); layout.addComponent(createCloseButton()); } private TwinColSelect createDependenciesSelector() { TwinColSelect dependenciesSelector = new TwinColSelect(null, dependencyContainer); dependenciesSelector.setImmediate(true); dependenciesSelector.setMultiSelect(true); dependenciesSelector.setSizeFull(); dependenciesSelector.setLeftColumnCaption("Available"); dependenciesSelector.setRightColumnCaption("Included"); return dependenciesSelector; } private TextField createFilterTextField() { TextField filterTextField = new TextField("Filter"); filterTextField.setImmediate(true); filterTextField.addTextChangeListener(new FieldEvents.TextChangeListener() { public void textChange(FieldEvents.TextChangeEvent event) { filterDependencies(event.getText()); } }); filterTextField.setWidth("100%"); filterTextField.focus(); return filterTextField; } private void filterDependencies(String filterString) { Container.Filterable f = dependencyContainer; // remove old filterTextField if (filter != null) { f.removeContainerFilter(filter); } // set new filterTextField if (filterString == null || "".equals(filterString)) { filter = null; } else { filter = new SimpleStringFilter("caption", filterString, true, false); f.addContainerFilter(filter); } } private Button createCloseButton() { closeButton = new Button("Close", new Button.ClickListener() { public void buttonClick(Button.ClickEvent event) { close(); } }); return closeButton; } public void populateSelector(List<File> files, List<File> includedDependencies) { if (files != null) { Collections.sort(files); dependencyContainer.removeAllItems(); dependenciesSelector.setItemCaptionPropertyId("caption"); for (File file : files) { Item item = dependencyContainer.addItem(file); item.getItemProperty("caption").setValue(file.getName()); } if (includedDependencies != null) { dependenciesSelector.setValue(includedDependencies); } } } @SuppressWarnings("unchecked") public List<File> getAdditionalDependencies() { List<File> files = new ArrayList<File>(); for (Object o : (Set<Object>) dependenciesSelector.getValue()) { if (o instanceof File) { files.add((File) o); } } Collections.sort(files); return files; } }