1 16 package org.apache.commons.jelly.tags.core; 17 18 import java.lang.reflect.InvocationTargetException ; 19 import java.util.ArrayList ; 20 import java.util.List ; 21 22 import org.apache.commons.beanutils.ConstructorUtils; 23 import org.apache.commons.jelly.JellyTagException; 24 import org.apache.commons.jelly.MissingAttributeException; 25 import org.apache.commons.jelly.XMLOutput; 26 27 32 public class NewTag extends BaseClassLoaderTag implements ArgTagParent { 33 34 35 private String var; 36 37 38 private String className; 39 40 private List paramTypes = new ArrayList (); 41 private List paramValues = new ArrayList (); 42 43 public NewTag() { 44 } 45 46 47 public void setVar(String var) { 48 this.var = var; 49 } 50 51 52 public void setClassName(String className) { 53 this.className = className; 54 } 55 56 public void addArgument(Class type, Object value) { 57 paramTypes.add(type); 58 paramValues.add(value); 59 } 60 61 public void doTag(XMLOutput output) throws MissingAttributeException, JellyTagException { 64 ArgTag parentArg = null; 65 if ( var == null ) { 66 parentArg = (ArgTag)(findAncestorWithClass(ArgTag.class)); 67 if(null == parentArg) { 68 throw new MissingAttributeException( "var" ); 69 } 70 } 71 if ( className == null ) { 72 throw new MissingAttributeException( "className" ); 73 } 74 invokeBody(output); 75 76 try { 77 Class theClass = getClassLoader().loadClass( className ); 78 Object object = null; 79 if(paramTypes.size() == 0) { 80 object = theClass.newInstance(); 81 } else { 82 Object [] values = paramValues.toArray(); 83 Class [] types = (Class [])(paramTypes.toArray(new Class [paramTypes.size()])); 84 object = ConstructorUtils.invokeConstructor(theClass,values,types); 85 paramTypes.clear(); 86 paramValues.clear(); 87 } 88 if(null != var) { 89 context.setVariable(var, object); 90 } else { 91 parentArg.setValue(object); 92 } 93 } 94 catch (ClassNotFoundException e) { 95 throw new JellyTagException(e); 96 } 97 catch (InstantiationException e) { 98 throw new JellyTagException(e); 99 } 100 catch (NoSuchMethodException e) { 101 throw new JellyTagException(e); 102 } 103 catch (IllegalAccessException e) { 104 throw new JellyTagException(e); 105 } 106 catch (InvocationTargetException e) { 107 throw new JellyTagException(e); 108 } 109 } 110 } 111 | Popular Tags |