001: /*
002:
003: This software is OSI Certified Open Source Software.
004: OSI Certified is a certification mark of the Open Source Initiative.
005:
006: The license (Mozilla version 1.0) can be read at the MMBase site.
007: See http://www.MMBase.org/license
008:
009: */
010:
011: package org.mmbase.core;
012:
013: import java.util.*;
014: import org.mmbase.bridge.Descriptor;
015: import org.mmbase.util.LocalizedString;
016:
017: /**
018: * @javadoc
019: *
020: * @author Pierre van Rooden
021: * @since MMBase-1.8
022: * @version $Id: AbstractDescriptor.java,v 1.12 2007/02/24 21:57:50 nklasens Exp $
023: */
024:
025: abstract public class AbstractDescriptor implements Descriptor,
026: Cloneable {
027:
028: protected String key;
029: protected LocalizedString description;
030: protected LocalizedString guiName;
031:
032: protected AbstractDescriptor() {
033: }
034:
035: /**
036: * Create a data type object
037: * @param name the name of the data type
038: */
039: protected AbstractDescriptor(String name) {
040: key = name;
041: setGUIName(name);
042: setDescription("");
043: }
044:
045: /**
046: * Create a data type object
047: * @param name the name of the data type
048: * @param descriptor
049: */
050: protected AbstractDescriptor(String name, Descriptor descriptor,
051: boolean cloneDataForRewrite) {
052: key = name;
053: if (cloneDataForRewrite) {
054: description = (LocalizedString) descriptor
055: .getLocalizedDescription().clone();
056: guiName = (LocalizedString) descriptor
057: .getLocalizedGUIName().clone();
058: } else {
059: description = descriptor.getLocalizedDescription();
060: guiName = descriptor.getLocalizedGUIName();
061: }
062: }
063:
064: protected AbstractDescriptor(String name, Descriptor descriptor) {
065: this (name, descriptor, true);
066: }
067:
068: /**
069: * The locale which must be used if no locale is specified.
070: * The default implementation returns <code>null</code>.
071: * This method can be overriden if another more logical default is
072: * available. E.g. in BasicField the locale of the current cloud is returned.
073: * @since MMBase-1.8.1
074: */
075: protected Locale getDefaultLocale() {
076: return null;
077: }
078:
079: /**
080: * Returns the name or 'key' of this descriptor.
081: * @return the name as a String
082: */
083: public String getName() {
084: return key;
085: }
086:
087: public String getDescription(Locale locale) {
088: if (description == null)
089: description = new LocalizedString(key);
090: return description.get(locale == null ? getDefaultLocale()
091: : locale);
092: }
093:
094: public String getDescription() {
095: return getDescription(getDefaultLocale());
096: }
097:
098: public LocalizedString getLocalizedDescription() {
099: return description;
100: }
101:
102: protected void setLocalizedDescription(LocalizedString description) {
103: this .description = description;
104: }
105:
106: public void setDescription(String desc, Locale locale) {
107: if (description == null)
108: description = new LocalizedString(key);
109: description.set(desc, locale);
110: }
111:
112: public void setDescription(String desc) {
113: setDescription(desc, getDefaultLocale());
114: }
115:
116: /**
117: * Retrieve the GUI name of the field depending on specified langauge.
118: * If the language is not available, the "en" value is returned instead.
119: * If that one is unavailable the internal fieldname is returned.
120: * @return the GUI Name
121: */
122: public String getGUIName(Locale locale) {
123: if (guiName == null)
124: guiName = new LocalizedString(key);
125: return guiName
126: .get(locale == null ? getDefaultLocale() : locale);
127: }
128:
129: /**
130: * Retrieve the GUI name of the field.
131: * If possible, the "en" value is returned.
132: * If that one is unavailable the internal fieldname is returned.
133: * @return the GUI Name
134: */
135: public String getGUIName() {
136: return getGUIName(getDefaultLocale());
137: }
138:
139: public void setGUIName(String g, Locale locale) {
140: if (guiName == null)
141: guiName = new LocalizedString(key);
142: guiName.set(g, locale);
143: }
144:
145: public void setGUIName(String g) {
146: setGUIName(g, getDefaultLocale());
147: }
148:
149: public LocalizedString getLocalizedGUIName() {
150: return guiName;
151: }
152:
153: protected void setLocalizedGUIName(LocalizedString value) {
154: guiName = value;
155: }
156:
157: public String toString() {
158: return key;
159: }
160:
161: public Object clone() throws CloneNotSupportedException {
162: return clone(getName() + ".clone");
163: }
164:
165: public Object clone(String name) throws CloneNotSupportedException {
166: AbstractDescriptor clone = (AbstractDescriptor) super .clone();
167: clone.description = (LocalizedString) description.clone();
168: clone.guiName = (LocalizedString) guiName.clone();
169: if (name != null) {
170: clone.key = name;
171: clone.description.setKey(name);
172: clone.guiName.setKey(name);
173: }
174: return clone;
175: }
176:
177: }
|