001: /*
002: * $RCSfile: ProcessorFactory.java,v $
003: *
004: * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * - Redistribution of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * - Redistribution in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in
015: * the documentation and/or other materials provided with the
016: * distribution.
017: *
018: * Neither the name of Sun Microsystems, Inc. or the names of
019: * contributors may be used to endorse or promote products derived
020: * from this software without specific prior written permission.
021: *
022: * This software is provided "AS IS," without a warranty of any
023: * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
024: * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
025: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
026: * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL
027: * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF
028: * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
029: * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR
030: * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
031: * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
032: * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
033: * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
034: * POSSIBILITY OF SUCH DAMAGES.
035: *
036: * You acknowledge that this software is not designed, licensed or
037: * intended for use in the design, construction, operation or
038: * maintenance of any nuclear facility.
039: *
040: * $Revision: 1.1 $
041: * $Date: 2007/08/28 16:44:32 $
042: * $State: Exp $
043: */
044:
045: package org.jdesktop.j3d.loaders.collada.xml_walker;
046:
047: import java.lang.reflect.Constructor;
048: import java.lang.reflect.InvocationTargetException;
049: import java.util.logging.Logger;
050:
051: /**
052: * Creates walker objects from collada schema objects
053: *
054: * @author paulby
055: */
056: public class ProcessorFactory {
057:
058: private static Logger logger = Logger
059: .getLogger("collada.objectfactory");
060:
061: private static final String walkerPackage = "org.jdesktop.j3d.loaders.collada.xml_walker.";
062:
063: /**
064: * Create a procesor to handle this schemaObject
065: *
066: * @param schemaObj
067: * @param parentProcessor
068: * @return
069: */
070: public static Processor createProcessor(Object schemaObj,
071: Processor parentProcessor) {
072: if (schemaObj == null)
073: return null;
074:
075: Class schemaClass = schemaObj.getClass();
076: String schemaClassName = schemaClass.getName();
077: String schemaObjName = schemaClassName
078: .substring(schemaClassName.lastIndexOf('.') + 1);
079: if (schemaObjName.indexOf('$') != 0)
080: schemaObjName = schemaObjName.substring(schemaObjName
081: .lastIndexOf('$') + 1);
082: try {
083: System.out.println("Looking for " + walkerPackage
084: + schemaObjName + "Processor");
085: Class walkerClass = Class.forName(walkerPackage
086: + schemaObjName + "Processor");
087: Constructor con = walkerClass.getConstructor(new Class[] {
088: schemaClass, Processor.class });
089: return (Processor) con.newInstance(schemaObj,
090: parentProcessor);
091: } catch (ClassNotFoundException ex) {
092: logger.warning("No Handler for " + schemaClass
093: + " looking for " + schemaObjName);
094: } catch (NoSuchMethodException ex) {
095: logger.warning("No constructor " + schemaObjName + "("
096: + schemaClassName + ")");
097: ex.printStackTrace();
098: } catch (InstantiationException ex) {
099: ex.printStackTrace();
100: } catch (IllegalAccessException ex) {
101: ex.printStackTrace();
102: } catch (InvocationTargetException ex) {
103: ex.printStackTrace();
104: }
105:
106: return null;
107: }
108: }
|