blob: ed55829921620b9e71b69244a32b268883d4e2f1 [file] [log] [blame]
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -07001/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18package java.beans;
19
20import java.util.HashMap;
21import java.util.Map;
22
23public class PropertyEditorManager {
24
25 private static String[] path = { "org.apache.harmony.beans.editors" }; //$NON-NLS-1$
26
27 private static final Map<Class<?>, Class<?>> registeredEditors = new HashMap<Class<?>, Class<?>>();
28
29 public PropertyEditorManager() {
30 }
31
32 public static void registerEditor(Class<?> targetType, Class<?> editorClass) {
33 if (targetType == null) {
34 throw new NullPointerException();
35 }
36
37 SecurityManager sm = System.getSecurityManager();
38 if (sm != null) {
39 sm.checkPropertiesAccess();
40 }
41 if (editorClass != null) {
42 registeredEditors.put(targetType, editorClass);
43 } else {
44 registeredEditors.remove(targetType);
45 }
46 }
47
48 public static synchronized PropertyEditor findEditor(Class<?> targetType) {
49 if (targetType == null) {
50 throw new NullPointerException();
51 }
52
53 Class<?> editorClass = null;
54 PropertyEditor editor = null;
55
56 editorClass = registeredEditors.get(targetType);
57
58 if (editorClass == null) {
59 String editorClassName = targetType.getName() + "Editor"; //$NON-NLS-1$
60 ClassLoader loader = targetType.getClassLoader();
61
62 if (loader == null) {
63 loader = Thread.currentThread().getContextClassLoader();
64 }
65
66 try {
67 editorClass = Class.forName(editorClassName, true, loader);
68 } catch (ClassNotFoundException cnfe) {
69 String shortEditorClassName = editorClassName
70 .substring(editorClassName.lastIndexOf(".") + 1); //$NON-NLS-1$
71
72 if (targetType.isPrimitive()) {
73 shortEditorClassName = shortEditorClassName.substring(0, 1)
74 .toUpperCase()
75 + shortEditorClassName.substring(1);
76 }
77
78 for (String element : path) {
79 editorClassName = element + "." + shortEditorClassName; //$NON-NLS-1$
80
81 try {
82 editorClass = Class.forName(editorClassName, true,
83 loader);
84 break;
85 } catch (Exception e) {
86 }
87 }
88 } catch (Exception e) {
89 }
90 }
91
92 if (editorClass != null) {
93 try {
94 editor = (PropertyEditor) editorClass.newInstance();
95 } catch (Exception e) {
96 }
97 }
98
99 return editor;
100 }
101
102 public static synchronized void setEditorSearchPath(String[] apath) {
103 SecurityManager sm = System.getSecurityManager();
104 if (sm != null) {
105 sm.checkPropertiesAccess();
106 }
107
108 path = apath;
109 }
110
111 public static synchronized String[] getEditorSearchPath() {
112 return path;
113 }
114}