001 // Copyright 2004, 2005 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.tapestry.spec;
016
017 import org.apache.hivemind.LocationHolder;
018
019 /**
020 * Defines a transient or persistant property of a component or page.
021 *
022 * @author glongman@intelligentworks.com
023 */
024 public interface IPropertySpecification extends LocationHolder
025 {
026
027 /**
028 * Returns the initial value for this property, as a binding reference. May
029 * return null if the property has no initial value. The initial value is
030 * from finishLoad() and re-applied in pageDetached().
031 */
032
033 String getInitialValue();
034
035 String getName();
036
037 /**
038 * Returns true if {@link #getPersistence()}is null.
039 */
040 boolean isPersistent();
041
042 String getType();
043
044 void setInitialValue(String initialValue);
045
046 /**
047 * Sets the name of the property. This should not be changed once this
048 * IPropertySpecification is added to a
049 * {@link org.apache.tapestry.spec.IComponentSpecification}.
050 */
051 void setName(String name);
052
053 void setType(String type);
054
055 /**
056 * Sets whether or not this property represents a concrete generic type.
057 *
058 * @param isGeneric
059 */
060 void setGeneric(boolean isGeneric);
061
062 /**
063 * Checks if the type represented by this property is in a generic declaration.
064 *
065 * @return True if it is generic, false otherwise.
066 */
067 boolean isGeneric();
068
069 /**
070 * Checks if this property has previously had it's type information examined to
071 * determine if it is elligable for proxying. Meaning {@link #canProxy()} should
072 * be a real value.
073 *
074 * @return True if the proxy type has been checked, false otherwise.
075 */
076 boolean isProxyChecked();
077
078 /**
079 * Sets the state of this property so that it is known whether or not the type
080 * it represents has been checked as being compatible with proxying or not.
081 *
082 * @param checked
083 */
084 void setProxyChecked(boolean checked);
085
086 /**
087 * Checks if this parameter can be proxied.
088 *
089 * @return True if the type can be proxied, false otherwise.
090 */
091 boolean canProxy();
092
093 /**
094 * Sets whether or not this property can be proxied.
095 *
096 * @param canProxy
097 */
098 void setCanProxy(boolean canProxy);
099
100 /**
101 * A string indicating how the property is persisted.
102 *
103 * @since 4.0
104 */
105
106 void setPersistence(String persistence);
107
108 /**
109 * If null, then the property is not persistent.
110 *
111 * @since 4.0
112 */
113 String getPersistence();
114
115 }