001// Licensed under the Apache License, Version 2.0 (the "License"); 002// you may not use this file except in compliance with the License. 003// You may obtain a copy of the License at 004// 005// http://www.apache.org/licenses/LICENSE-2.0 006// 007// Unless required by applicable law or agreed to in writing, software 008// distributed under the License is distributed on an "AS IS" BASIS, 009// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 010// See the License for the specific language governing permissions and 011// limitations under the License. 012 013package org.apache.tapestry5.beaneditor; 014 015import org.apache.tapestry5.PropertyConduit; 016import org.apache.tapestry5.ioc.AnnotationProvider; 017 018/** 019 * Part of a {@link org.apache.tapestry5.beaneditor.BeanModel} that defines the attributes of a single property of a 020 * bean. 021 * 022 * 023 * A PropertyModel is also an {@link AnnotationProvider}, as long as the {@link org.apache.tapestry5.PropertyConduit} is 024 * non-null. When there is no property conduit, then {@link org.apache.tapestry5.ioc.AnnotationProvider#getAnnotation(Class)} 025 * will return null. 026 */ 027public interface PropertyModel extends AnnotationProvider 028{ 029 /** 030 * Returns the name of the property (which may, in fact, be a property expression). 031 */ 032 String getPropertyName(); 033 034 /** 035 * Returns the id used to access other resources (this is based on the property name, but with any excess 036 * punctuation stripped out). 037 */ 038 String getId(); 039 040 /** 041 * Returns a user-presentable label for the property. 042 */ 043 String getLabel(); 044 045 /** 046 * Returns the type of the property. 047 */ 048 Class getPropertyType(); 049 050 /** 051 * Returns a logical name for the type of UI needed to view or edit the property. This is initially determined from 052 * the property type. 053 */ 054 String getDataType(); 055 056 /** 057 * Changes the data type for the property. 058 * 059 * @param dataType 060 * @return the property model, for further changes 061 */ 062 PropertyModel dataType(String dataType); 063 064 /** 065 * Returns an object used to read or update the property. For virtual properties (properties that do not actually 066 * exist on the bean), the conduit may be null. 067 */ 068 PropertyConduit getConduit(); 069 070 /** 071 * Changes the label for the property to the provided value. 072 * 073 * @param label new label for property 074 * @return the property model, for further changes 075 */ 076 PropertyModel label(String label); 077 078 /** 079 * Returns the containing model, often used for "fluent" construction of the model. 080 */ 081 BeanModel model(); 082 083 /** 084 * Returns true if the property can be used for sorting. By default, this is true only if the property type 085 * implements Comparable. 086 */ 087 boolean isSortable(); 088 089 /** 090 * Updates sortable and returns the model for further changes. 091 * 092 * @return the property model, for further changes 093 */ 094 PropertyModel sortable(boolean sortable); 095}