|  | /* | 
|  | * Licensed to the Apache Software Foundation (ASF) under one or more | 
|  | * contributor license agreements.  See the NOTICE file distributed with | 
|  | * this work for additional information regarding copyright ownership. | 
|  | * The ASF licenses this file to You under the Apache License, Version 2.0 | 
|  | * (the "License"); you may not use this file except in compliance with | 
|  | * the License.  You may obtain a copy of the License at | 
|  | * | 
|  | * http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, software | 
|  | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | 
|  | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | 
|  | * License for the specific language governing permissions and limitations under | 
|  | * the License. | 
|  | */ | 
|  |  | 
|  | package java.beans; | 
|  |  | 
|  | import java.util.Collections; | 
|  | import java.util.Enumeration; | 
|  | import java.util.HashMap; | 
|  | import java.util.LinkedList; | 
|  | import java.util.Map; | 
|  |  | 
|  | /** | 
|  | * Common base class for Descriptors. | 
|  | */ | 
|  | public class FeatureDescriptor { | 
|  |  | 
|  | private Map<String, Object> values; | 
|  |  | 
|  | boolean preferred, hidden, expert; | 
|  |  | 
|  | String shortDescription; | 
|  |  | 
|  | String name; | 
|  |  | 
|  | String displayName; | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Constructs an instance. | 
|  | * </p> | 
|  | */ | 
|  | public FeatureDescriptor() { | 
|  | this.values = new HashMap<String, Object>(); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Sets the value for the named attribute. | 
|  | * </p> | 
|  | * | 
|  | * @param attributeName | 
|  | *            The name of the attribute to set a value with. | 
|  | * @param value | 
|  | *            The value to set. | 
|  | */ | 
|  | public void setValue(String attributeName, Object value) { | 
|  | if (attributeName == null || value == null) { | 
|  | throw new NullPointerException(); | 
|  | } | 
|  | values.put(attributeName, value); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Gets the value associated with the named attribute. | 
|  | * </p> | 
|  | * | 
|  | * @param attributeName | 
|  | *            The name of the attribute to get a value for. | 
|  | * @return The attribute's value. | 
|  | */ | 
|  | public Object getValue(String attributeName) { | 
|  | Object result = null; | 
|  | if (attributeName != null) { | 
|  | result = values.get(attributeName); | 
|  | } | 
|  | return result; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Enumerates the attribute names. | 
|  | * </p> | 
|  | * | 
|  | * @return An instance of {@link Enumeration}. | 
|  | */ | 
|  | public Enumeration<String> attributeNames() { | 
|  | // Create a new list, so that the references are copied | 
|  | return Collections.enumeration(new LinkedList<String>(values.keySet())); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Sets the short description. | 
|  | * </p> | 
|  | * | 
|  | * @param text | 
|  | *            The description to set. | 
|  | */ | 
|  | public void setShortDescription(String text) { | 
|  | this.shortDescription = text; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Sets the name. | 
|  | * </p> | 
|  | * | 
|  | * @param name | 
|  | *            The name to set. | 
|  | */ | 
|  | public void setName(String name) { | 
|  | this.name = name; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Sets the display name. | 
|  | * </p> | 
|  | * | 
|  | * @param displayName | 
|  | *            The display name to set. | 
|  | */ | 
|  | public void setDisplayName(String displayName) { | 
|  | this.displayName = displayName; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Gets the short description or {@link #getDisplayName()} if not set. | 
|  | * </p> | 
|  | * | 
|  | * @return The description. | 
|  | */ | 
|  | public String getShortDescription() { | 
|  | return shortDescription == null ? getDisplayName() : shortDescription; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Gets the name. | 
|  | * </p> | 
|  | * | 
|  | * @return The name. | 
|  | */ | 
|  | public String getName() { | 
|  | return name; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Gets the display name or {@link #getName()} if not set. | 
|  | * </p> | 
|  | * | 
|  | * @return The display name. | 
|  | */ | 
|  | public String getDisplayName() { | 
|  | return displayName == null ? getName() : displayName; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Sets the preferred indicator. | 
|  | * </p> | 
|  | * | 
|  | * @param preferred | 
|  | *            <code>true</code> if preferred, <code>false</code> | 
|  | *            otherwise. | 
|  | */ | 
|  | public void setPreferred(boolean preferred) { | 
|  | this.preferred = preferred; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Sets the hidden indicator. | 
|  | * </p> | 
|  | * | 
|  | * @param hidden | 
|  | *            <code>true</code> if hidden, <code>false</code> otherwise. | 
|  | */ | 
|  | public void setHidden(boolean hidden) { | 
|  | this.hidden = hidden; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Sets the expert indicator. | 
|  | * </p> | 
|  | * | 
|  | * @param expert | 
|  | *            <code>true</code> if expert, <code>false</code> otherwise. | 
|  | */ | 
|  | public void setExpert(boolean expert) { | 
|  | this.expert = expert; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Indicates if this feature is preferred. | 
|  | * </p> | 
|  | * | 
|  | * @return <code>true</code> if preferred, <code>false</code> otherwise. | 
|  | */ | 
|  | public boolean isPreferred() { | 
|  | return preferred; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Indicates if this feature is hidden. | 
|  | * </p> | 
|  | * | 
|  | * @return <code>true</code> if hidden, <code>false</code> otherwise. | 
|  | */ | 
|  | public boolean isHidden() { | 
|  | return hidden; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * <p> | 
|  | * Indicates if this feature is an expert feature. | 
|  | * </p> | 
|  | * | 
|  | * @return <code>true</code> if hidden, <code>false</code> otherwise. | 
|  | */ | 
|  | public boolean isExpert() { | 
|  | return expert; | 
|  | } | 
|  | } |