[jboss-cvs] jboss-seam/src/main/org/jboss/seam/init ...

Norman Richards norman.richards at jboss.com
Tue Jun 19 17:36:38 EDT 2007


  User: nrichards
  Date: 07/06/19 17:36:38

  Added:       src/main/org/jboss/seam/init  DeploymentDescriptorInfo.java
  Log:
  JBSEAM-955
  
  Revision  Changes    Path
  1.1      date: 2007/06/19 21:36:38;  author: nrichards;  state: Exp;jboss-seam/src/main/org/jboss/seam/init/DeploymentDescriptorInfo.java
  
  Index: DeploymentDescriptorInfo.java
  ===================================================================
  package org.jboss.seam.init;
  
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  
  import org.dom4j.DocumentException;
  import org.dom4j.Element;
  import org.jboss.seam.ComponentType;
  import org.jboss.seam.log.LogProvider;
  import org.jboss.seam.log.Logging;
  import org.jboss.seam.util.Resources;
  import org.jboss.seam.util.XML;
  
  public class DeploymentDescriptorInfo { 
      public final String NS_EJBJAR = "http://java.sun.com/xml/ns/javaee";
      public final String NS_PERSISTENCE = "http://java.sun.com/xml/ns/persistence";
      public final String NS_ORM = "http://java.sun.com/xml/ns/persistence/orm";
      
      private static final LogProvider log = Logging.getLogProvider(Initialization.class);
      
      protected Map<String,EjbInfo> allBeans = new HashMap<String,EjbInfo>();
  
  
      public DeploymentDescriptorInfo() {
          // we really need to try all classloaders
          try {
              addXML(XML.getRootElement(Resources.getResourceAsStream("/META-INF/ejb-jar.xml")));
          } catch (DocumentException e) {
              log.warn("Couldn't parse /META-INF/ejb-jar.xml for component types " + e.getMessage());
          }
  
          try {
              addXML(XML.getRootElement(Resources.getResourceAsStream("/META-INF/orm.xml")));
          } catch (DocumentException e) {
              log.warn("Couldn't parse /META-INF/orm.xml for component types " + e.getMessage());
          }
      }
      
      
      
      public EjbInfo getBeanByClass(String name) {
          return allBeans.get(name);
      }
  
      public void addXML(Element root) {        
          if (root != null) {
              String ns = root.getNamespaceURI();
              if (ns != null) {
                  if (ns.equals(NS_EJBJAR)) {
                      addEJBJarXML(root);
                  } else if (ns.equals(NS_ORM)) {
                      addOrmXML(root);
                  } 
              }
          }
      }
      
      @SuppressWarnings("unchecked")
      private void addEJBJarXML(Element root) {
  
          Element beans = root.element("enterprise-beans");
          if (beans != null) {
              for (Element bean: (List<Element>) beans.elements("session")) {
                  EjbInfo info = new EjbInfo();
                  info.setName(bean.element("ejb-name").getTextTrim());
                  info.setEjbClass(bean.element("ejb-class").getTextTrim());
  
                  Element sessionType = bean.element("session-type");
                  if (sessionType != null && sessionType.getTextTrim().equalsIgnoreCase("Stateful")) {
                      info.setBeanType(ComponentType.STATEFUL_SESSION_BEAN);            
                  } else {
                      info.setBeanType(ComponentType.STATELESS_SESSION_BEAN);     
                  }
                  add(info);
              }          
              for (Element bean: (List<Element>) beans.elements("message-driven")) {
                  EjbInfo info = new EjbInfo();
                  info.setName(bean.element("ejb-name").getTextTrim());
                  info.setEjbClass(bean.element("ejb-class").getTextTrim());
                  info.setBeanType(ComponentType.MESSAGE_DRIVEN_BEAN);
                  add(info);
              }      
          }
      }
          
      @SuppressWarnings("unchecked")
      private void addOrmXML(Element root) {
          String packagePrefix = "";
          
          Element pkg = root.element("package");
          if (pkg!=null) {
              packagePrefix = pkg.getTextTrim() + ".";
          }
                  
          for (Element entity: (List<Element>) root.elements("entity")) {
              String className = packagePrefix + entity.attribute("class").getText();
              EjbInfo info = new EjbInfo();
              info.setBeanType(ComponentType.ENTITY_BEAN);
              info.setEjbClass(className);
              add(info);
          }
  
      }
  
  
      protected void add(EjbInfo info) {
          allBeans.put(info.getEjbClass(), info);        
      }
  
  
  
      public static class EjbInfo {
          String name;
          String ejbClass;
          ComponentType beanType;
          public ComponentType getBeanType() {
              return beanType;
          }
          public void setBeanType(ComponentType beanType) {
              this.beanType = beanType;
          }
          public String getEjbClass() {
              return ejbClass;
          }
          public void setEjbClass(String ejbClass) {
              this.ejbClass = ejbClass;
          }
          public String getName() {
              return name;
          }
          public void setName(String name) {
              this.name = name;
          }   
  
  
      }
  }
  
  
  



More information about the jboss-cvs-commits mailing list