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: package com.sun.rave.propertyeditors.domains;
042:
043: import com.sun.rave.propertyeditors.util.Bundle;
044: import java.util.Locale;
045:
046: /**
047: * Abstract representation of a set of binary tuples that represents
048: * the domain of values for a particular property. Domain elements are
049: * represented by instances of class {@link Element}. Concrete subclasses of
050: * this class may provide a static list of items, or calculate the list
051: * dynamically based on the current state of the associated components. If the
052: * number of elements in a domain is large, it is recommended that the elements
053: * be returned in sorted order, according to the natural ordering of the element
054: * labels.
055: *
056: * <p>A {@link Domain} implementation that needs access to the dynamic
057: * context should extend {@link AttachedDomain} instead of this class.
058: *
059: * <p>{@link EditableDomain} should be used to represent domains which users may
060: * modify by the addition or removal or modification of elements.
061: *
062: * <p><strong>Nota Bena:</strong> No check is made for duplicate elements.
063: */
064: public abstract class Domain {
065:
066: /**
067: * The localizing <code>Bundle</code> for this package. Classes in other
068: * packages that extend <code>Domain</code> must provide their own
069: * localization solution.
070: */
071: static final Bundle bundle = Bundle.getBundle(Domain.class);
072:
073: /**
074: * Returns the display name of the element type that this domain represents.
075: * This name may be used in messages, labels, and window titles. By default,
076: * returns null. If null is returned, editors will generally use the property's
077: * display name.
078: */
079: public String getDisplayName() {
080: return null;
081: }
082:
083: /**
084: * Returns an array of {@link Element}s that represent the legal values
085: * to which our associated property may be set. If there are no such
086: * legal values, a zero-length array is returned. This method must never
087: * return null.
088: *
089: * <p>The returned {@link Element}s should be in the order most natural
090: * for presentation to a user in a property editor.
091: */
092: abstract public Element[] getElements();
093:
094: /**
095: * Returns the element at the index indicated, or null if there is no element
096: * at the index indicated, or if the index is out of bounds.
097: */
098: public Element getElementAt(int index) {
099: if (index < 0 || index > getElements().length)
100: return null;
101: return getElements()[index];
102: }
103:
104: /**
105: * Returns the index of the element indicated, of -1 if the element does
106: * not exist in this domain. If an element is present more than once, the
107: * index of the first one encountered is returned.
108: */
109: public int getIndexOf(Element element) {
110: Element[] elements = getElements();
111: for (int i = 0; i < elements.length; i++) {
112: if (elements[i].equals(element))
113: return i;
114: }
115: return -1;
116: }
117:
118: /**
119: * Returns the number of elements in the domain.
120: */
121: public int getSize() {
122: return getElements().length;
123: }
124:
125: /**
126: * Returns true if this domain corresponds to a required property. A
127: * required property is one for which a "null" or "empty" value is not valid.
128: * If this method returns false, property editors must make a "null" or
129: * "unset" option available. By default, this method returns <code>false</code>.
130: */
131: public boolean isRequired() {
132: return false;
133: }
134:
135: /**
136: * Returns the unique property help id that maps to the help topic for this
137: * property editor. By default, returns null. Extending classes that provide
138: * help should override this method.
139: */
140: public String getPropertyHelpId() {
141: return null;
142: }
143:
144: }
|