/*
* 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.HashMap;
import java.util.Map;
public class PropertyEditorManager {
private static String[] path = { "org.apache.harmony.beans.editors" }; //$NON-NLS-1$
private static final Map<Class<?>, Class<?>> registeredEditors = new HashMap<Class<?>, Class<?>>();
public PropertyEditorManager() {
}
public static void registerEditor(Class<?> targetType, Class<?> editorClass) {
if (targetType == null) {
throw new NullPointerException();
}
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPropertiesAccess();
}
if (editorClass != null) {
registeredEditors.put(targetType, editorClass);
} else {
registeredEditors.remove(targetType);
}
}
public static synchronized PropertyEditor findEditor(Class<?> targetType) {
if (targetType == null) {
throw new NullPointerException();
}
Class<?> editorClass = null;
PropertyEditor editor = null;
editorClass = registeredEditors.get(targetType);
if (editorClass == null) {
String editorClassName = targetType.getName() + "Editor"; //$NON-NLS-1$
ClassLoader loader = targetType.getClassLoader();
if (loader == null) {
loader = Thread.currentThread().getContextClassLoader();
}
try {
editorClass = Class.forName(editorClassName, true, loader);
} catch (ClassNotFoundException cnfe) {
String shortEditorClassName = editorClassName
.substring(editorClassName.lastIndexOf(".") + 1); //$NON-NLS-1$
if (targetType.isPrimitive()) {
shortEditorClassName = shortEditorClassName.substring(0, 1)
.toUpperCase()
+ shortEditorClassName.substring(1);
}
for (String element : path) {
editorClassName = element + "." + shortEditorClassName; //$NON-NLS-1$
try {
editorClass = Class.forName(editorClassName, true,
loader);
break;
} catch (Exception e) {
}
}
} catch (Exception e) {
}
}
if (editorClass != null) {
try {
editor = (PropertyEditor) editorClass.newInstance();
} catch (Exception e) {
}
}
return editor;
}
public static synchronized void setEditorSearchPath(String[] apath) {
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPropertiesAccess();
}
path = apath;
}
public static synchronized String[] getEditorSearchPath() {
return path;
}
}