001    package org.tynamo.util;
002    
003    import org.apache.tapestry5.OptionGroupModel;
004    import org.apache.tapestry5.OptionModel;
005    import org.apache.tapestry5.internal.OptionModelImpl;
006    import org.apache.tapestry5.ioc.services.PropertyAccess;
007    import org.apache.tapestry5.util.AbstractSelectModel;
008    
009    import java.util.ArrayList;
010    import java.util.List;
011    import java.util.Collections;
012    
013    public class GenericSelectionModel<T> extends AbstractSelectModel
014    {
015    
016            private final String labelField;
017    
018            private final List<T> list;
019    
020            private final PropertyAccess adapter;
021    
022            public GenericSelectionModel(List<T> list)
023            {
024                    this.labelField = null;
025                    this.list = list;
026                    this.adapter = null;
027            }
028    
029            public GenericSelectionModel(List<T> list, String labelField, PropertyAccess adapter)
030            {
031                    this.labelField = labelField;
032                    this.list = list;
033                    this.adapter = adapter;
034            }
035    
036            public List<OptionGroupModel> getOptionGroups()
037            {
038                    return Collections.EMPTY_LIST;
039            }
040    
041            public List<OptionModel> getOptions()
042            {
043                    List<OptionModel> optionModelList = new ArrayList<OptionModel>();
044                    for (T obj : list)
045                    {
046                            if (labelField == null)
047                            {
048                                    optionModelList.add(new OptionModelImpl(obj.toString(), obj));
049                            } else
050                            {
051                                    optionModelList.add(new OptionModelImpl(adapter.get(obj, labelField).toString(), obj));
052                            }
053                    }
054                    return optionModelList;
055            }
056    }