001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package com.sun.rave.designtime.markup;
043:
044: import java.beans.FeatureDescriptor;
045:
046: /**
047: * <p>An AttributeDescriptor describes a markup attribute that is used to persist the value of a
048: * JavaBean property. The AttributeDescriptor is "stuffed" into the PropertyDescriptor using the
049: * name-value pair storage: FeatureDescriptor.setValue(String key, Object value). The key is
050: * defined by Constants.PropertyDescriptor.ATTRIBUTE_DESCRIPTOR, or literally "attributeDescriptor".
051: * If an AttributeDescriptor is found in a property's PropertyDescriptor, the IDE will persist any
052: * property settings in the .jsp file as an attribute. If no AttributeDescriptor is found, any
053: * property settings will be persisted in the .java file as standard JavaBeans properties. For
054: * example, a property called 'background' of type 'java.awt.Color' might be persisted in
055: * two ways:</p>
056: *
057: * <p><ul><li>If it has an AttributeDescriptor, it will be persisted as a markup attribute, like
058: * this: <code>background="#FFFFFF"</code>
059: * <li>If there is no AttributeDescriptor, it will be persisted as a property setter method call,
060: * like this: <code>setBackground(new java.awt.Color(255, 255, 255));</code>
061: * </p>
062: *
063: * @author Joe Nuxoll
064: * @version 1.0
065: * @see java.beans.FeatureDescriptor#setValue(String, Object)
066: * @see com.sun.rave.designtime.Constants.PropertyDescriptor#ATTRIBUTE_DESCRIPTOR
067: */
068: public class AttributeDescriptor extends FeatureDescriptor {
069:
070: /**
071: * protected storage for the 'required' property
072: */
073: protected boolean required;
074:
075: /**
076: * protected storage for the 'defaultValue' property
077: */
078: protected String defaultValue;
079:
080: /**
081: * protected storage for the 'bindable' property
082: */
083: protected boolean bindable;
084:
085: /**
086: * Constructs an empty AttributeDescriptor
087: */
088: public AttributeDescriptor() {
089: }
090:
091: /**
092: * Constructs an AttributeDescriptor with the specified attributeName
093: *
094: * @param attributeName The desired attribute name
095: */
096: public AttributeDescriptor(String attributeName) {
097: setName(attributeName);
098: }
099:
100: /**
101: * Constructs an AttributeDescriptor with the specified attributeName, required state, and
102: * default value
103: *
104: * @param attributeName The desired attribute name
105: * @param required <code>true</code> if this is a required attribute, <code>false</code> if not
106: * @param defaultValue The default value for this attribute (will not be persisted if the
107: * set value matches the default value)
108: */
109: public AttributeDescriptor(String attributeName, boolean required,
110: String defaultValue) {
111: setName(attributeName);
112: this .required = required;
113: this .defaultValue = defaultValue;
114: }
115:
116: /**
117: * Constructs an AttributeDescriptor with the specified attributeName, required state, default
118: * value, and bindable state
119: *
120: * @param attributeName The desired attribute name
121: * @param required <code>true</code> if this is a required attribute, <code>false</code> if not
122: * @param defaultValue The default value for this attribute (will not be persisted if the
123: * set value matches the default value)
124: * @param bindable <code>true</code> if this property is 'bindable', meaning it can have a value
125: * expression set on it, or <code>false</code> if not
126: */
127: public AttributeDescriptor(String attributeName, boolean required,
128: String defaultValue, boolean bindable) {
129: setName(attributeName);
130: this .required = required;
131: this .defaultValue = defaultValue;
132: this .bindable = bindable;
133: }
134:
135: /**
136: * Sets the 'required' property. A required attribute is one that must have a setting in order
137: * to produce valid JSP.
138: *
139: * @param required <code>true</code> if this attribute should be required, <code>false</code> if
140: * not
141: */
142: public void setRequired(boolean required) {
143: this .required = required;
144: }
145:
146: /**
147: * Gets the 'required' property. A required attribute is one that must have a setting in order
148: * to produce valid JSP.
149: *
150: * @return the current state of the 'required' property
151: */
152: public boolean isRequired() {
153: return required;
154: }
155:
156: /**
157: * Sets the 'defaultValue' property. The default value is the value that this property has if
158: * it is not set at all - thus when the value is explicitly set to the default, the property
159: * setting is removed from the persistence.
160: *
161: * @param defaultValue The default value for this attribute (will not be persisted if the set
162: * value matches the default value)
163: */
164: public void setDefaultValue(String defaultValue) {
165: this .defaultValue = defaultValue;
166: }
167:
168: /**
169: * Gets the 'defaultValue' property. The default value is the value that this property has if
170: * it is not set at all - thus when the value is explicitly set to the default, the property
171: * setting is removed from the persistence.
172: *
173: * @return the 'defaultValue' property setting
174: */
175: public String getDefaultValue() {
176: return defaultValue;
177: }
178:
179: /**
180: * Sets the 'bindable' property. A 'bindable' property is one that may have a value binding
181: * expression as its value.
182: *
183: * @param bindable <code>true</code> if this attribute should be bindable, <code>false</code> if
184: * not
185: */
186: public void setBindable(boolean bindable) {
187: this .bindable = bindable;
188: }
189:
190: /**
191: * Gets the 'bindable' property. A 'bindable' property is one that may have a value binding
192: * expression as its value.
193: *
194: * @return <code>true</code> if this attribute should be bindable, <code>false</code> if not
195: */
196: public boolean isBindable() {
197: return bindable;
198: }
199:
200: public boolean equals(Object o) {
201: if (o instanceof AttributeDescriptor) {
202: AttributeDescriptor ad = (AttributeDescriptor) o;
203: return ad == this
204: || ad.required == required
205: && ad.bindable == bindable
206: && (ad.defaultValue == null && defaultValue == null || ad.defaultValue != null
207: && ad.defaultValue.equals(defaultValue));
208: }
209: return false;
210: }
211: }
|