Frames | No Frames |
1: /* ======================================================================== 2: * JCommon : a free general purpose class library for the Java(tm) platform 3: * ======================================================================== 4: * 5: * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. 6: * 7: * Project Info: http://www.jfree.org/jcommon/index.html 8: * 9: * This library is free software; you can redistribute it and/or modify it 10: * under the terms of the GNU Lesser General Public License as published by 11: * the Free Software Foundation; either version 2.1 of the License, or 12: * (at your option) any later version. 13: * 14: * This library is distributed in the hope that it will be useful, but 15: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 17: * License for more details. 18: * 19: * You should have received a copy of the GNU Lesser General Public 20: * License along with this library; if not, write to the Free Software 21: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 22: * USA. 23: * 24: * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 25: * in the United States and other countries.] 26: * 27: * --------------------------------- 28: * ClassLoaderObjectDescription.java 29: * --------------------------------- 30: * (C)opyright 2003, 2004, by Thomas Morgner and Contributors. 31: * 32: * Original Author: Thomas Morgner; 33: * Contributor(s): David Gilbert (for Object Refinery Limited); 34: * 35: * $Id: ClassLoaderObjectDescription.java,v 1.5 2005/11/14 11:01:04 mungady Exp $ 36: * 37: * Changes (from 19-Feb-2003) 38: * ------------------------- 39: * 19-Feb-2003 : Added standard header and Javadocs (DG); 40: * 29-Apr-2003 : Distilled from the JFreeReport project and moved into JCommon 41: * 42: */ 43: 44: package org.jfree.xml.factory.objects; 45: 46: import java.lang.reflect.Constructor; 47: import java.lang.reflect.Modifier; 48: 49: import org.jfree.util.ObjectUtilities; 50: 51: /** 52: * An object-description for a class loader. 53: * 54: * @author Thomas Morgner 55: */ 56: public class ClassLoaderObjectDescription extends AbstractObjectDescription { 57: 58: /** 59: * Creates a new object description. 60: */ 61: public ClassLoaderObjectDescription() { 62: super(Object.class); 63: setParameterDefinition("class", String.class); 64: } 65: 66: /** 67: * Creates an object based on this object description. 68: * 69: * @return The object. 70: */ 71: public Object createObject() { 72: try { 73: final String o = (String) getParameter("class"); 74: return ObjectUtilities.getClassLoader(getClass()).loadClass(o).newInstance(); 75: } 76: catch (Exception e) { 77: return null; 78: } 79: } 80: 81: /** 82: * Sets the parameters of the object description to match the supplied object. 83: * 84: * @param o the object. 85: * 86: * @throws ObjectFactoryException if there is a problem while reading the 87: * properties of the given object. 88: */ 89: public void setParameterFromObject(final Object o) throws ObjectFactoryException { 90: if (o == null) { 91: throw new ObjectFactoryException("The Object is null."); 92: } 93: try { 94: final Constructor c = o.getClass().getConstructor(new Class[0]); 95: if (!Modifier.isPublic(c.getModifiers())) { 96: throw new ObjectFactoryException 97: ("The given object has no public default constructor. [" + o.getClass() + "]"); 98: } 99: setParameter("class", o.getClass().getName()); 100: } 101: catch (Exception e) { 102: throw new ObjectFactoryException 103: ("The given object has no default constructor. [" + o.getClass() + "]", e); 104: } 105: } 106: }