diff options
Diffstat (limited to 'libjava/java/beans/PropertyEditorManager.java')
-rw-r--r-- | libjava/java/beans/PropertyEditorManager.java | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/libjava/java/beans/PropertyEditorManager.java b/libjava/java/beans/PropertyEditorManager.java new file mode 100644 index 00000000000..b64b2a83b7c --- /dev/null +++ b/libjava/java/beans/PropertyEditorManager.java @@ -0,0 +1,150 @@ +/* java.beans.PropertyEditorManager + Copyright (C) 1998 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +As a special exception, if you link this library with other files to +produce an executable, this library does not by itself cause the +resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why the +executable file might be covered by the GNU General Public License. */ + + +package java.beans; + +import gnu.java.lang.ClassHelper; + +/** + ** PropertyEditorManager is used to find property editors + ** for various types (not necessarily Beans).<P> + ** + ** It first checks to see if the property editor is + ** already registered; if it is, that property editor is + ** used. Next it takes the type's classname and appends + ** "Editor" to it, and searches first in the class's + ** package and then in the property editor search path.<P> + ** + ** Default property editors are provided for:<P> + ** <OL> + ** <LI>boolean, byte, short, int, long, float, and double</LI> + ** <LI>java.lang.String</LI> + ** <LI>java.awt.Color</LI> + ** <LI>java.awt.Font</LI> + ** <OL> + ** + ** <STRONG>Spec Suggestion:</STRONG> Perhaps an editor for + ** Filename or something like it should be provided. As well + ** as char. + ** + ** @author John Keiser + ** @since JDK1.1 + ** @version 1.1.0, 29 Jul 1998 + **/ + +public class PropertyEditorManager { + static java.util.Hashtable editors = new java.util.Hashtable(); + static String[] editorSearchPath = {"gnu.java.beans.editors","sun.beans.editors"}; + + static { + registerEditor(java.lang.Boolean.TYPE, gnu.java.beans.editors.NativeBooleanEditor.class); + registerEditor(java.lang.Byte.TYPE, gnu.java.beans.editors.NativeByteEditor.class); + registerEditor(java.lang.Short.TYPE, gnu.java.beans.editors.NativeShortEditor.class); + registerEditor(java.lang.Integer.TYPE, gnu.java.beans.editors.NativeIntEditor.class); + registerEditor(java.lang.Long.TYPE, gnu.java.beans.editors.NativeLongEditor.class); + registerEditor(java.lang.Float.TYPE, gnu.java.beans.editors.NativeFloatEditor.class); + registerEditor(java.lang.Double.TYPE, gnu.java.beans.editors.NativeDoubleEditor.class); + registerEditor(java.lang.String.class, gnu.java.beans.editors.StringEditor.class); + registerEditor(java.awt.Color.class, gnu.java.beans.editors.ColorEditor.class); + registerEditor(java.awt.Font.class, gnu.java.beans.editors.FontEditor.class); + } + + /** Beats me why this class can be instantiated, but there + ** you have it. + **/ + public PropertyEditorManager() { } + + /** Register an editor for a class. Replaces old editor + ** if there was one registered before. + ** @param editedClass the class that the property editor + ** will edit. + ** @param editorClass the PropertyEditor class. + **/ + public static void registerEditor(Class editedClass, Class editorClass) { + editors.put(editedClass, editorClass); + } + + /** Returns a new instance of the property editor for the + ** specified class. + ** @param editedClass the class that the property editor + ** will edit. + ** @return a PropertyEditor instance that can edit the + ** specified class. + **/ + public static PropertyEditor findEditor(Class editedClass) { + try { + + Class found = (Class)editors.get(editedClass); + if(found != null) { + return (PropertyEditor)found.newInstance(); + } + + try { + found = Class.forName(editedClass.getName()+"Editor"); + registerEditor(editedClass,found); + return (PropertyEditor)found.newInstance(); + } catch(ClassNotFoundException E) { + } + + String appendName = "." + ClassHelper.getTruncatedClassName(editedClass) + "Editor"; + synchronized(editorSearchPath) { + for(int i=0;i<editorSearchPath.length;i++) { + try { + found = Class.forName(editorSearchPath[i] + appendName); + registerEditor(editedClass,found); + return (PropertyEditor)found.newInstance(); + } catch(ClassNotFoundException E) { + } + } + } + + } catch(InstantiationException E) { + } catch(IllegalAccessException E) { + } + return null; + } + + /** Get the editor search path. + ** As a minor departure from the spec, the default value + ** for the editor search path is "gnu.java.beans.editors", + ** "sun.beans.editors". + ** @return the editor search path. + **/ + public static String[] getEditorSearchPath() { + return editorSearchPath; + } + + /** Set the editor search path. + ** @param editorSearchPath the new value for the editor + ** search path. + **/ + public static void setEditorSearchPath(String[] editorSearchPath) { + synchronized(editorSearchPath) { + PropertyEditorManager.editorSearchPath = editorSearchPath; + } + } +} |