001    package org.trails.component;
002    
003    import java.util.List;
004    
005    import org.apache.tapestry.annotations.InjectObject;
006    import org.apache.tapestry.annotations.Parameter;
007    import org.apache.tapestry.form.IOptionRenderer;
008    import org.apache.tapestry.form.IPropertySelectionModel;
009    import org.apache.tapestry.form.PropertySelection;
010    import org.apache.tapestry.form.ValidatableFieldSupport;
011    import org.trails.descriptor.IPropertyDescriptor;
012    
013    /**
014     * A base class for building trails-aware PropertySelection components
015     * Notice that this class uses the PropertySelection render mechanism,
016     * that means that derivative classes can't make use of HTML templates.
017      */
018    public abstract class AbstractPropertySelection extends PropertySelection
019    {
020    
021            @Parameter(defaultValue = "buildSelectionModel()")
022            public abstract IPropertySelectionModel getModel();
023    
024            public abstract void setModel(IPropertySelectionModel PropertySelectionModel);
025    
026            @InjectObject("service:tapestry.form.ValidatableFieldSupport")
027            public abstract ValidatableFieldSupport getValidatableFieldSupport();
028    
029            @Parameter(cache = false, defaultValue = "ognl:@org.apache.tapestry.form.DefaultOptionRenderer@DEFAULT_INSTANCE")
030            public abstract IOptionRenderer getOptionRenderer();
031    
032            @Parameter(name = "id", defaultValue = "id")
033            public abstract String getIdParameter();
034    
035            @Parameter(required = true)
036            public abstract IPropertyDescriptor getPropertyDescriptor();
037    
038            public abstract void setPropertyDescriptor(IPropertyDescriptor PropertyDescriptor);
039    
040            @Parameter(defaultValue = "not(propertyDescriptor.required)")
041            public abstract boolean isAllowNone();
042    
043            public abstract void setAllowNone(boolean allowNone);
044    
045            @Parameter(defaultValue = "literal:" + AbstractPropertySelectionModel.DEFAULT_NONE_LABEL)
046            public abstract String getNoneLabel();
047    
048            public abstract void setNoneLabel(String noneLabel);
049    
050            @Parameter
051            public abstract List getInstances();
052    
053            public abstract void setInstances(List instances);
054    
055            @Parameter
056            public abstract Object getValue();
057    
058            public abstract void setValue(Object value);
059    
060            public abstract IPropertySelectionModel buildSelectionModel();
061    
062    }