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

Norman Richards norman.richards at jboss.com
Wed Nov 15 01:12:51 EST 2006


  User: nrichards
  Date: 06/11/15 01:12:51

  Modified:    src/main/org/jboss/seam/init  Initialization.java
  Log:
  JBSEAM-502: add package namespaces for simplified xml configuration
  
  Revision  Changes    Path
  1.112     +102 -10   jboss-seam/src/main/org/jboss/seam/init/Initialization.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Initialization.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/init/Initialization.java,v
  retrieving revision 1.111
  retrieving revision 1.112
  diff -u -b -r1.111 -r1.112
  --- Initialization.java	14 Nov 2006 00:15:01 -0000	1.111
  +++ Initialization.java	15 Nov 2006 06:12:51 -0000	1.112
  @@ -30,6 +30,7 @@
   import org.jboss.seam.ScopeType;
   import org.jboss.seam.Seam;
   import org.jboss.seam.annotations.Name;
  +import org.jboss.seam.annotations.Namespace;
   import org.jboss.seam.annotations.Role;
   import org.jboss.seam.annotations.Roles;
   import org.jboss.seam.contexts.Context;
  @@ -83,7 +84,8 @@
   import org.jboss.seam.core.UserPrincipal;
   import org.jboss.seam.core.Validation;
   import org.jboss.seam.debug.Introspector;
  -import org.jboss.seam.deployment.Scanner;
  +import org.jboss.seam.deployment.ComponentScanner;
  +import org.jboss.seam.deployment.NamespaceScanner;
   import org.jboss.seam.framework.CurrentDate;
   import org.jboss.seam.framework.CurrentDatetime;
   import org.jboss.seam.framework.CurrentTime;
  @@ -109,7 +111,7 @@
   /**
    * @author Gavin King
    * @author <a href="mailto:theute at jboss.org">Thomas Heute</a>
  - * @version $Revision: 1.111 $
  + * @version $Revision: 1.112 $
    */
   public class Initialization
   {
  @@ -125,9 +127,14 @@
      private Set<Class> installedComponents = new HashSet<Class>();
      private Set<String> importedPackages = new HashSet<String>();
   
  +
  +   private Map<String,NamespaceInfo> namespaceMap = new HashMap<String, NamespaceInfo>();
  +
      public Initialization(ServletContext servletContext)
      {
         this.servletContext = servletContext;
  +
  +      addNamespaces();
         initComponentsFromXmlDocument();
         initComponentsFromXmlDocuments();
         initPropertiesFromServletContext();
  @@ -205,7 +212,9 @@
         List<Element> importElements = doc.getRootElement().elements("import-java-package");
         for (Element importElement: importElements)
         {
  -         importedPackages.add( importElement.getTextTrim() );
  +          String pkgName = importElement.getTextTrim();
  +          importedPackages.add(pkgName);
  +          addNamespace(Package.getPackage(pkgName));
         }
   
         List<Element> componentElements = doc.getRootElement().elements("component");
  @@ -214,7 +223,10 @@
            String installed = component.attributeValue("installed");
            if (installed==null || "true".equals( replace(installed, replacements) ) )
            {
  -            installComponentFromXmlElement(component, component.attributeValue("class"), replacements);
  +            installComponentFromXmlElement(component, 
  +                                           component.attributeValue("name"), 
  +                                           component.attributeValue("class"), 
  +                                           replacements);
            }
         }
   
  @@ -223,6 +235,39 @@
         {
            installFactoryFromXmlElement(factory);
         }
  +
  +      // assume anything with a namespace is a component
  +      // ok for now - might need to change later
  +      for (Element elem: (List<Element>) doc.getRootElement().elements()) {
  +          String ns = elem.getNamespace().getURI();
  +          NamespaceInfo nsInfo = namespaceMap.get(ns);
  +          if (nsInfo != null) {
  +              String installed = elem.attributeValue("installed");
  +              if (installed==null || "true".equals(replace(installed, replacements))) {
  +                  String className = nsInfo.getPackage().getName() + "." + elem.getName();
  +                  try {
  +                      Class clazz = Reflections.classForName(className);
  +                  } catch (ClassNotFoundException e) {
  +                      // if it isn't a classname, set 
  +                      className = null; 
  +                  }
  +
  +                  String name = elem.attributeValue("name");
  +                  if (name == null) {
  +                      name = elem.getName();
  +                      String prefix = nsInfo.getNamespace().prefix();
  +                      if ((prefix!=null) && (prefix.length()>0)) {
  +                          name = prefix + "." + name;
  +                      }
  +                  }
  +                  
  +                  installComponentFromXmlElement(elem, 
  +                                                 name,
  +                                                 className, 
  +                                                 replacements);
  +              }
  +          }
  +      }
      }
   
      private void installFactoryFromXmlElement(Element factory)
  @@ -266,10 +311,12 @@
         return value;
      }
   
  -   private void installComponentFromXmlElement(Element component, String className, Properties replacements) 
  +   private void installComponentFromXmlElement(Element component, 
  +                                               String name, 
  +                                               String className, 
  +                                               Properties replacements) 
            throws ClassNotFoundException
      {
  -      String name = component.attributeValue("name");
         String scopeName = component.attributeValue("scope");
         String jndiName = component.attributeValue("jndi-name");
         ScopeType scope = scopeName==null ? null : ScopeType.valueOf(scopeName.toUpperCase());
  @@ -390,11 +437,11 @@
         Set<Package> scannedPackages = new HashSet<Package>();
         if ( isScannerEnabled )
         {
  -         for ( Class<Object> scannedClass: new Scanner("seam.properties").getClasses() )
  +         for ( Class<Object> scannedClass: new ComponentScanner("seam.properties").getClasses() )
            {
               installScannedClass(scannedPackages, scannedClass);
            }
  -         for ( Class<Object> scannedClass: new Scanner("META-INF/components.xml").getClasses() )
  +         for ( Class<Object> scannedClass: new ComponentScanner("META-INF/components.xml").getClasses() )
            {
               installScannedClass(scannedPackages, scannedClass);
            }
  @@ -437,7 +484,10 @@
               }
               else
               {
  -               installComponentFromXmlElement( doc.getRootElement(), clazz.getName(), replacements );
  +               installComponentFromXmlElement(doc.getRootElement(), 
  +                                              doc.getRootElement().attributeValue("name"),
  +                                              clazz.getName(), 
  +                                              replacements );
               }
            }
            catch (Exception e)
  @@ -473,6 +523,31 @@
         componentDescriptors.add( new ComponentDescriptor( role.name(), scannedClass, scope, null ) );
      }
   
  +    private void addNamespace(Package pkg) {
  +        if (pkg != null) {
  +            Namespace ns = (Namespace) pkg.getAnnotation(Namespace.class);
  +            if (ns != null) {
  +                log.info("Mapping namespace " + ns.value() + "  to package " + 
  +                         pkg.getName() + " with prefix=" + ns.prefix());
  +                namespaceMap.put(ns.value(), new NamespaceInfo(ns, pkg));
  +            }
  +        }
  +    }
  +
  +    private void addNamespaces() {
  +        addNamespace(Package.getPackage("org.jboss.seam.core"));
  +        
  +        if (isScannerEnabled) {
  +            for (Package pkg: new NamespaceScanner("seam.properties").getPackages()) { 
  +                addNamespace(pkg);
  +            }
  +            for (Package pkg: new NamespaceScanner("META-INF/components.xml").getPackages()) {
  +                addNamespace(pkg);
  +            }
  +        }
  +    }
  +
  +
      private void initPropertiesFromServletContext()
      {
         Enumeration params = servletContext.getInitParameterNames();
  @@ -748,6 +823,23 @@
         }
      }
   
  +    private static class NamespaceInfo {
  +        private Namespace namespace;
  +        private Package pkg;
  +
  +        public NamespaceInfo(Namespace namespace, Package pkg) {
  +            this.namespace = namespace;
  +            this.pkg = pkg;
  +        }
  +        public Namespace getNamespace() {
  +            return namespace;
  +        }
  +        public Package getPackage() {
  +            return pkg;
  +        }
  +
  +    }
  +
      private static class ComponentDescriptor
      {
         private String name;
  
  
  



More information about the jboss-cvs-commits mailing list