/*******************************************************************************
* Copyright (c) 2012-2013 RelationWare, Benno Luthiger
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* RelationWare, Benno Luthiger
******************************************************************************/
package org.ripla.web.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.server.Sizeable.Unit;
import com.vaadin.ui.ComboBox;
/**
* <p>
* Class to create a generic select widget.
* </p>
* Usage:
*
* <pre>
* layout.addComponent(GenericSelect.getSelection(property,
* GenericSelect.toCollection("red", "blue", "yellow"), 250, false, null));
* </pre>
*
* @author Luthiger
*/
public final class GenericSelect {
private GenericSelect() {
}
/**
* Creates a <code>Selection</code> widget with the provided options.
*
* @param inProperty
* {@link Property<String>}
* @param inOptions
* {@link Collection}
* @param inWidth
* int
* @param inAllowNull
* boolean
* @param inProcessor
* {@link IProcessor} for post processing, may be
* <code>null</code>
* @return {@link ComboBox}
*/
@SuppressWarnings("serial")
public static ComboBox getSelection(final Property<String> inProperty,
final Collection<String> inOptions, final int inWidth,
final boolean inAllowNull, final IProcessor inProcessor) {
final ComboBox outSelect = new ComboBox(null, inOptions);
outSelect.select(inProperty.getValue());
outSelect.setStyleName("ripla-select"); //$NON-NLS-1$
outSelect.setWidth(inWidth, Unit.PIXELS);
outSelect.setNullSelectionAllowed(inAllowNull);
outSelect.setImmediate(true);
outSelect.addValueChangeListener(new Property.ValueChangeListener() {
@Override
public void valueChange(final ValueChangeEvent inEvent) {
final String lItemID = (String) inEvent.getProperty()
.getValue();
inProperty.setValue(lItemID);
if (inProcessor != null) {
inProcessor.process(lItemID);
}
}
});
return outSelect;
}
/**
* Convenience method, creates a <code>Collection</code> with the specified
* String values.
*
* @param inValues
* String []
* @return {@link Collection}
*/
public static Collection<String> toCollection(final String... inValues) {
final Collection<String> out = new ArrayList<String>();
Collections.addAll(out, inValues);
return out;
}
// ---
/**
* Process the selection.
*
* @author Luthiger
*/
public interface IProcessor {
/**
* Do something depending on the selected item.
*
* @param inItemID
* String the selected item's id
*/
void process(String inItemID);
}
}