package org.tynamo.util;
import org.apache.tapestry5.OptionGroupModel;
import org.apache.tapestry5.OptionModel;
import org.apache.tapestry5.internal.OptionModelImpl;
import org.apache.tapestry5.ioc.services.PropertyAccess;
import org.apache.tapestry5.util.AbstractSelectModel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class GenericSelectionModel<T> extends AbstractSelectModel
{
private final String labelField;
private final List<T> list;
private final PropertyAccess adapter;
private final boolean sortByLabel;
public GenericSelectionModel(List<T> list)
{
this(list, null, null, true);
}
public GenericSelectionModel(List<T> list, boolean sortByLabel)
{
this(list, null, null, sortByLabel);
}
public GenericSelectionModel(List<T> list, String labelField, PropertyAccess adapter, boolean sortByLabel)
{
this.labelField = labelField;
this.list = list;
this.adapter = adapter;
this.sortByLabel = sortByLabel;
}
public List<OptionGroupModel> getOptionGroups()
{
return Collections.emptyList();
}
public List<OptionModel> getOptions()
{
List<OptionModel> optionModelList = new ArrayList<OptionModel>();
for (T obj : list)
{
if (labelField == null)
{
optionModelList.add(new OptionModelImpl(obj.toString(), obj));
} else
{
optionModelList.add(new OptionModelImpl(adapter.get(obj, labelField).toString(), obj));
}
}
if (sortByLabel)
{
Collections.sort(optionModelList, new Comparator<OptionModel>()
{
public int compare(OptionModel o1, OptionModel o2)
{
return o1.getLabel().compareTo(o2.getLabel());
}
});
}
return optionModelList;
}
}