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