package org.archstudio.myx.java; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import org.archstudio.myx.fw.IMyxBrick; import org.archstudio.myx.fw.IMyxBrickDescription; import org.archstudio.myx.fw.IMyxBrickFactory; import org.archstudio.myx.fw.IMyxBrickInitializationData; import org.archstudio.myx.fw.IMyxName; import org.archstudio.myx.fw.MyxBrickCreationException; public class MyxJavaClassBrickFactory implements IMyxBrickFactory { public MyxJavaClassBrickFactory() { } @Override public IMyxBrick create(IMyxName name, IMyxBrickDescription brickDescription, IMyxBrickInitializationData initializationData) throws MyxBrickCreationException { try { MyxJavaClassBrickDescription desc = (MyxJavaClassBrickDescription) brickDescription; Class<?> mainBrickClass = Class.forName(desc.getMainBrickClassName()); return create(name, brickDescription, initializationData, mainBrickClass); } catch (ClassNotFoundException e) { throw new MyxBrickCreationException("Can't find brick class", e); } } protected IMyxBrick create(IMyxName name, IMyxBrickDescription brickDescription, IMyxBrickInitializationData initializationData, Class<?> mainBrickClass) throws MyxBrickCreationException { try { Constructor<?> constructor = mainBrickClass.getConstructor(new Class[0]); Object o = constructor.newInstance(new Object[0]); return (IMyxBrick) o; } catch (NoSuchMethodException nsme) { throw new MyxBrickCreationException("Can't find brick constructor", nsme); } catch (IllegalAccessException iae) { throw new MyxBrickCreationException("Illegal access when creating brick", iae); } catch (InstantiationException ie) { throw new MyxBrickCreationException("Instantiation exception when creating brick", ie); } catch (InvocationTargetException ite) { throw new MyxBrickCreationException("Constructor invocation failed when creating brick", ite); } } }