[Jboss-cvs] JBossAS SVN: r55947 - in projects/microcontainer/trunk/kernel/src/main/org/jboss: beans/metadata/plugins beans/metadata/spi kernel/plugins/dependency kernel/spi/dependency

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Aug 15 08:58:42 EDT 2006


Author: alesj
Date: 2006-08-15 08:58:30 -0400 (Tue, 15 Aug 2006)
New Revision: 55947

Added:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/TypeProvider.java
Modified:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractBeanMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/MetaDataVisitor.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/MetaDataVisitorNode.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/DescribeAction.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/spi/dependency/KernelController.java
Log:
Preparing for revisit MD.

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractBeanMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractBeanMetaData.java	2006-08-15 12:52:33 UTC (rev 55946)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractBeanMetaData.java	2006-08-15 12:58:30 UTC (rev 55947)
@@ -359,10 +359,6 @@
    
    public Set<SupplyMetaData> getSupplies()
    {
-      if (supplies == null)
-      {
-         supplies = new HashSet<SupplyMetaData>();
-      }
       return supplies;
    }
    

Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/TypeProvider.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/TypeProvider.java	2006-08-15 12:52:33 UTC (rev 55946)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/TypeProvider.java	2006-08-15 12:58:30 UTC (rev 55947)
@@ -0,0 +1,15 @@
+/*
+ * 
+ */
+
+package org.jboss.beans.metadata.plugins;
+
+/**
+ * @author <a href="mailto:ales.justin at genera-lynx.com">Ales Justin</a>
+ */
+public interface TypeProvider
+{
+
+   Class getType();
+
+}

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/MetaDataVisitor.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/MetaDataVisitor.java	2006-08-15 12:52:33 UTC (rev 55946)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/MetaDataVisitor.java	2006-08-15 12:58:30 UTC (rev 55947)
@@ -21,6 +21,8 @@
 */
 package org.jboss.beans.metadata.spi;
 
+import java.util.Stack;
+
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.DependencyItem;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
@@ -67,4 +69,19 @@
     * @param node the node
     */
    void visit(MetaDataVisitorNode node);
+
+   /**
+    * Revisit the node
+    *
+    * @param node the node
+    */
+   void revisit(MetaDataVisitorNode node);
+
+   /**
+    * Current meta data visited branch
+    *
+    * @return stack of meta data objects in this branch
+    */
+   Stack visitorNodeStack();
+
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/MetaDataVisitorNode.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/MetaDataVisitorNode.java	2006-08-15 12:52:33 UTC (rev 55946)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/MetaDataVisitorNode.java	2006-08-15 12:58:30 UTC (rev 55947)
@@ -39,6 +39,13 @@
    public void visit(MetaDataVisitor vistor);
    
    /**
+    * Revisit the node
+    *
+    * @param vistor the visitor
+    */
+//   public void revisit(MetaDataVisitor vistor);
+
+   /**
     * Return the child nodes
     * 
     * @return Iterator<MetaDataVisitorNode> or null if there aren't any

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java	2006-08-15 12:52:33 UTC (rev 55946)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java	2006-08-15 12:58:30 UTC (rev 55947)
@@ -89,6 +89,8 @@
       List<KernelControllerContext> list = suppliers.get(name);
       if (list != null && list.isEmpty() == false)
          return list.get(0);
+      else if (name instanceof Class)
+         return getContextByClass((Class)name);
       else
          return null;
    }
@@ -212,7 +214,7 @@
    /**
     * @return all instantiated contexts whose target is instance of this class clazz param
     */
-   public Set<ControllerContext> getInstantiatedContexts(Class clazz)
+   public Set<KernelControllerContext> getInstantiatedContexts(Class clazz)
    {
       lockRead();
       try
@@ -235,7 +237,7 @@
     * add instantiated context into contextsByClass map
     * look at all target's superclasses and interfaces
     */
-   public void addInstantiatedContext(ControllerContext context)
+   public void addInstantiatedContext(KernelControllerContext context)
    {
       prepareToTraverse(context, true);
    }
@@ -244,12 +246,12 @@
     * remove instantiated context from contextsByClass map
     * look at all target's superclasses and interfaces
     */
-   public void removeInstantiatedContext(ControllerContext context)
+   public void removeInstantiatedContext(KernelControllerContext context)
    {
       prepareToTraverse(context, false);
    }
 
-   protected void prepareToTraverse(ControllerContext context, boolean addition)
+   protected void prepareToTraverse(KernelControllerContext context, boolean addition)
    {
       lockWrite();
       try
@@ -273,7 +275,7 @@
     * @param context context whose target is instance of clazz
     * @param clazz current class to map context to
     */
-   protected void traverseBean(ControllerContext context, Class clazz, boolean addition, boolean trace)
+   protected void traverseBean(KernelControllerContext context, Class clazz, boolean addition, boolean trace)
    {
       if (clazz == null || clazz == Object.class)
       {
@@ -285,7 +287,7 @@
          if (classContext == null)
          {
             classContext = new ClassContext();
-            classContext.contexts = new HashSet<ControllerContext>();
+            classContext.contexts = new HashSet<KernelControllerContext>();
             contextsByClass.put(clazz, classContext);
          }
          else if (classContext.used)
@@ -322,7 +324,23 @@
    private class ClassContext
    {
       private boolean used;
-      private Set<ControllerContext> contexts;
+      private Set<KernelControllerContext> contexts;
    }
 
+   private KernelControllerContext getContextByClass(Class clazz)
+   {
+      Set<KernelControllerContext> contexts = getInstantiatedContexts(clazz);
+      int numberOfMatchingBeans = 0;
+      if (contexts != null)
+      {
+         numberOfMatchingBeans = contexts.size();
+      }
+      if (numberOfMatchingBeans != 1)
+      {
+         log.error("Should not be here, illegas size of matching contexts (" + numberOfMatchingBeans + ") - dependency failed! " + clazz);
+         return null;
+      }
+      return contexts.iterator().next();
+   }
+
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java	2006-08-15 12:52:33 UTC (rev 55946)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java	2006-08-15 12:58:30 UTC (rev 55947)
@@ -25,6 +25,7 @@
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Iterator;
+import java.util.Stack;
 
 import org.jboss.beans.info.spi.BeanInfo;
 import org.jboss.beans.metadata.spi.BeanMetaData;
@@ -161,24 +162,69 @@
    {
       return accessContext;
    }
-   
+
+   protected abstract class AbstractMetaDataVistor implements MetaDataVisitor, PrivilegedAction<Object>
+   {
+      /** The current context for when the dependencies are required */
+      protected ControllerState contextState = ControllerState.INSTANTIATED;
+
+      /** The metadata */
+      protected BeanMetaData bmd;
+
+      /** Visited branch stack */
+      protected Stack visitorNodeStack;
+
+      protected AbstractMetaDataVistor(BeanMetaData bmd)
+      {
+         this.bmd = bmd;
+      }
+
+      public void visit(MetaDataVisitorNode node)
+      {
+      }
+
+      public void revisit(MetaDataVisitorNode node)
+      {
+      }
+
+      public KernelControllerContext getControllerContext()
+      {
+         return AbstractKernelControllerContext.this;
+      }
+
+      public ControllerState getContextState()
+      {
+         return contextState;
+      }
+
+      public void addDependency(DependencyItem dependency)
+      {
+         getDependencyInfo().addIDependOn(dependency);
+      }
+
+      public void setContextState(ControllerState contextState)
+      {
+         this.contextState = contextState;
+      }
+
+      public Stack visitorNodeStack()
+      {
+         return visitorNodeStack;
+      }
+
+   }
+
    /**
     * A visitor for the metadata that looks for dependencies.
     */
-   protected class PreprocessMetaDataVisitor implements MetaDataVisitor, PrivilegedAction<Object>
+   protected class PreprocessMetaDataVisitor extends AbstractMetaDataVistor
    {
-      /** The current context for when the dependencies are required */ 
-      private ControllerState contextState = ControllerState.INSTANTIATED;
-      
-      /** The metadata */
-      private BeanMetaData bmd;
-      
       /**
        * Create a new MetaDataVisitor.
        */
       public PreprocessMetaDataVisitor(BeanMetaData bmd)
       {
-         this.bmd = bmd;
+         super(bmd);
       }
       
       /**
@@ -221,24 +267,66 @@
          }
       }
 
-      public KernelControllerContext getControllerContext()
+   }
+
+   /**
+    * A visitor for the metadata that looks for dependencies.
+    */
+   protected class DescribedMetaDataVisitor extends AbstractMetaDataVistor
+   {
+      /**
+       * Create a new MetaDataVisitor.
+       */
+      public DescribedMetaDataVisitor(BeanMetaData bmd)
       {
-         return AbstractKernelControllerContext.this;
+         super(bmd);
+         this.visitorNodeStack = new Stack();
       }
-      
-      public ControllerState getContextState()
+
+      /**
+       * Visit the bean metadata node, this is the starting point
+       */
+      public Object run()
       {
-         return contextState;
+         visitorNodeStack.push(bmd);
+         bmd.revisit(this);
+         visitorNodeStack.pop();
+         visitorNodeStack = null;
+         return null;
       }
-      
-      public void addDependency(DependencyItem dependency)
+
+      /**
+       * Visit a node
+       *
+       * @param node the node
+       */
+      public void revisit(MetaDataVisitorNode node)
       {
-         getDependencyInfo().addIDependOn(dependency);
-      }
+         boolean trace = log.isTraceEnabled();
+         if (trace)
+            log.trace("Revisit node " + node);
 
-      public void setContextState(ControllerState contextState)
-      {
-         this.contextState = contextState;
+         // Visit the children of this node
+         Iterator children = node.getChildren();
+         if (children != null)
+         {
+            ControllerState restoreState = contextState;
+            while (children.hasNext())
+            {
+               MetaDataVisitorNode child = (MetaDataVisitorNode) children.next();
+               visitorNodeStack.push(child);
+               try
+               {
+//                  child.visit(this);
+               }
+               finally
+               {
+                  contextState = restoreState;
+                  visitorNodeStack.pop();
+               }
+            }
+         }
       }
    }
+
 }
\ No newline at end of file

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/DescribeAction.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/DescribeAction.java	2006-08-15 12:52:33 UTC (rev 55946)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/DescribeAction.java	2006-08-15 12:58:30 UTC (rev 55947)
@@ -26,10 +26,8 @@
 import java.util.Set;
 
 import org.jboss.beans.info.spi.BeanInfo;
-import org.jboss.beans.metadata.plugins.AbstractSupplyMetaData;
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.beans.metadata.spi.PropertyMetaData;
-import org.jboss.beans.metadata.spi.SupplyMetaData;
 import org.jboss.dependency.plugins.AbstractDependencyItem;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
@@ -62,8 +60,6 @@
          BeanInfo info = configurator.getBeanInfo(metaData);
          context.setBeanInfo(info);
 
-         addClassSuppliers(metaData, info);
-
          info = addAnnotations(context, metaData, info);
 
          DependencyInfo depends = context.getDependencyInfo();
@@ -178,31 +174,4 @@
       return metaCtx;
    }
 
-   /**
-    * Adds classes to supply for contextual injection.
-    *
-    * @param metaData
-    * @param info
-    */
-   private void addClassSuppliers(BeanMetaData metaData, BeanInfo info)
-   {
-      traverseBeanClass(metaData, info.getClassInfo().getType());
-   }
-
-   private void traverseBeanClass(BeanMetaData metaData, Class clazz)
-   {
-      if (clazz == null || clazz == Object.class)
-      {
-         return;
-      }
-      Set<SupplyMetaData> supplies = metaData.getSupplies();
-      supplies.add(new AbstractSupplyMetaData(clazz));
-      traverseBeanClass(metaData, clazz.getSuperclass());
-      Class[] intfaces = clazz.getInterfaces();
-      for(Class intface : intfaces)
-      {
-         traverseBeanClass(metaData, intface);
-      }
-   }
-
 }
\ No newline at end of file

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/spi/dependency/KernelController.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/spi/dependency/KernelController.java	2006-08-15 12:52:33 UTC (rev 55946)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/spi/dependency/KernelController.java	2006-08-15 12:58:30 UTC (rev 55947)
@@ -25,7 +25,6 @@
 
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.dependency.spi.Controller;
-import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.kernel.spi.KernelObject;
 
 /**
@@ -77,17 +76,17 @@
    /**
     * @return all instantiated contexts whose target is instance of this class clazz param
     */
-   Set<ControllerContext> getInstantiatedContexts(Class clazz);
+   Set<KernelControllerContext> getInstantiatedContexts(Class clazz);
 
    /**
     * add instantiated context into contextsByClass map
     * look at all target's superclasses and interfaces
     */
-   void addInstantiatedContext(ControllerContext context);
+   void addInstantiatedContext(KernelControllerContext context);
 
    /**
     * remove instantiated context from contextsByClass map
     * look at all target's superclasses and interfaces
     */
-   void removeInstantiatedContext(ControllerContext context);
+   void removeInstantiatedContext(KernelControllerContext context);
 }




More information about the jboss-cvs-commits mailing list