package org.vaadin.smartgwt.server.util;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.vaadin.smartgwt.server.PropertyAccessor;
/**
* Allows simple access / update of collections in base widgets
*
* @author Daniel Cardin
* @author NetAppsID inc.
*
* @param <T>
*/
public class CollectionHandler<T> {
private PropertyAccessor baseWidget;
private String attributeName;
private List<T> values = new ArrayList<T>();
public CollectionHandler(String attributeName) {
this.baseWidget = baseWidget;
this.attributeName = attributeName;
}
public T[] getValues() {
T[] values = (T[]) baseWidget.getAttributeAsObject(attributeName);
if (values == null) {
values = (T[]) new Object[0];
}
return values;
}
public List<T> getValuesAsList() {
return new ArrayList<T>(Arrays.asList(getValues()));
}
@SuppressWarnings("unchecked")
public void setValues(List<T> newValues) {
T[] tmp = (T[]) Array.newInstance(Object.class, 0);
T[] valuesArray = newValues.toArray(tmp);
baseWidget.setAttribute(attributeName, valuesArray);
}
@SuppressWarnings("unchecked")
public void setValues(T[] newValues) {
baseWidget.setAttribute(attributeName, newValues);
}
public boolean hasValue(T value) {
for (T t : getValues()) {
if (t == value)
return true;
}
return false;
}
public boolean removeValue(T valueToRemove)
{
List<T> values = getValuesAsList();
boolean removed = values.remove(valueToRemove);
setValues(values);
return removed;
}
public void addValue(T valueToAdd)
{
List<T> values = getValuesAsList();
values.add(valueToAdd);
setValues(values);
}
public void addValue(T valueToAdd, int position) {
List<T> values = getValuesAsList();
values.add(position, valueToAdd);
setValues(values);
}
public void removeValueAt(int position) {
List<T> values = getValuesAsList();
values.remove(position);
setValues(values);
}
public int size()
{
return getValues().length;
}
public void clear()
{
baseWidget.removeAttribute(attributeName);
}
}