00001 00027 package org.objectweb.jonas_ejb.deployment.rules; 00028 00029 import java.lang.reflect.Method; 00030 00031 import org.apache.commons.digester.Digester; 00032 import org.apache.commons.digester.Rule; 00033 import org.objectweb.jonas_lib.deployment.rules.JRuleSetBase; 00034 import org.xml.sax.Attributes; 00035 00042 public class EjbJarRuleSet extends JRuleSetBase { 00043 00047 public EjbJarRuleSet() { 00048 super("ejb-jar/"); 00049 } 00050 00057 public void addRuleInstances(Digester digester) { 00058 digester.addRule("ejb-jar", new SetPublicIdRule("setPublicId")); 00059 digester.addSetProperties("ejb-jar"); 00060 digester.addCallMethod(prefix + "description", "setDescription", 0); 00061 digester.addCallMethod(prefix + "display-name", "setDisplayName", 0); 00062 digester.addCallMethod(prefix + "small-icon", "setSmallIcon", 0); 00063 digester.addCallMethod(prefix + "large-icon", "setLargeIcon", 0); 00064 digester.addRuleSet(new EnterpriseBeansRuleSet(prefix)); 00065 digester.addRuleSet(new RelationshipsRuleSet(prefix)); 00066 digester.addRuleSet(new AssemblyDescriptorRuleSet(prefix)); 00067 digester.addCallMethod(prefix + "ejb-client-jar", "setEjbClientJar", 0); 00068 } 00069 00075 private final class SetPublicIdRule extends Rule { 00076 00082 public SetPublicIdRule(String method) { 00083 this.method = method; 00084 } 00085 00089 private String method = null; 00090 00098 public void begin(Attributes attributes) throws Exception { 00099 Object top = digester.peek(); 00100 Class[] paramClasses = new Class[1]; 00101 paramClasses[0] = "String".getClass(); 00102 String[] paramValues = new String[1]; 00103 paramValues[0] = digester.getPublicId(); 00104 00105 Method m = null; 00106 try { 00107 m = top.getClass().getMethod(method, paramClasses); 00108 } catch (NoSuchMethodException e) { 00109 System.out.println("Can't find method " + method + " in " + top + " CLASS " + top.getClass()); 00110 return; 00111 } 00112 00113 m.invoke(top, (Object[]) paramValues); 00114 00115 } 00116 00117 } 00118 }