[jboss-cvs] JBossAS SVN: r67440 - in projects/microcontainer/trunk/aop-mc-int/src: main/org/jboss/aop/microcontainer/beans/beanmetadatafactory and 4 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Nov 26 07:56:45 EST 2007


Author: kabir.khan at jboss.com
Date: 2007-11-26 07:56:44 -0500 (Mon, 26 Nov 2007)
New Revision: 67440

Added:
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/AOPDomain.java
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/DomainBeanMetaDataFactory.java
   projects/microcontainer/trunk/aop-mc-int/src/resources/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleAopTestCase.xml
   projects/microcontainer/trunk/aop-mc-int/src/resources/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleBeansTestCase.xml
   projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainProxyTest.java
   projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleAopTestCase.java
   projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleBeansTestCase.java
   projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleTest.java
Modified:
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/Aspect.java
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/CFlowStack.java
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/DynamicCFlowDef.java
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/LifecycleBeanMetaDataFactory.java
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/PrecedenceDef.java
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/BeanMetaDataUtil.java
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/CFlowStackBeanMetaDataFactory.java
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/IntroductionBeanMetaDataFactory.java
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/LifecycleBeanMetaDataFactory.java
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/xml/AOPBeansSchemaInitializer.java
   projects/microcontainer/trunk/aop-mc-int/src/resources/main/schema/aop-beans_1_0.xsd
Log:
[JBAOP-468] Add support for Domains

Added: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/AOPDomain.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/AOPDomain.java	                        (rev 0)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/AOPDomain.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -0,0 +1,129 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.aop.microcontainer.beans;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.DomainDefinition;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AOPDomain
+{
+   String name;
+   AspectManager manager;
+   boolean parentFirst=false;
+   boolean inheritDefinitions=true;
+   boolean inheritBindings=false;
+   String extendz;
+   DomainDefinition definition;
+
+   public AspectManager getManager()
+   {
+      return manager;
+   }
+
+   public void setManager(AspectManager manager)
+   {
+      this.manager = manager;
+   }
+
+   public String getName()
+   {
+      return name;
+   }
+
+   public void setName(String name)
+   {
+      this.name = name;
+   }
+
+   public boolean isParentFirst()
+   {
+      return parentFirst;
+   }
+
+   public void setParentFirst(boolean parentFirst)
+   {
+      this.parentFirst = parentFirst;
+   }
+
+   public boolean isInheritDefinitions()
+   {
+      return inheritDefinitions;
+   }
+
+   public void setInheritDefinitions(boolean inheritDefinitions)
+   {
+      this.inheritDefinitions = inheritDefinitions;
+   }
+
+   public boolean isInheritBindings()
+   {
+      return inheritBindings;
+   }
+
+   public void setInheritBindings(boolean inheritBindings)
+   {
+      this.inheritBindings = inheritBindings;
+   }
+
+   public String getExtends()
+   {
+      return extendz;
+   }
+
+   public void setExtends(String extendz)
+   {
+      this.extendz = extendz;
+   }
+
+   public AspectManager getDomain()
+   {
+      return definition.getManager();
+   }
+   
+   public void start()
+   {
+      AspectManager parent = manager;
+      if (extendz != null)
+      {
+         DomainDefinition parentDef = manager.getContainer(extendz);
+         if (parentDef == null)
+         {
+            throw new RuntimeException("unable to find parent Domain: " + extendz);
+         }
+         parent = parentDef.getManager();
+      }
+         
+      definition = new DomainDefinition(name, parent, parentFirst, inheritDefinitions, inheritBindings);
+      manager.addContainer(definition);
+   }
+   
+   public void stop()
+   {
+      manager.removeContainer(name);
+   }
+   
+}

Modified: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/Aspect.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/Aspect.java	2007-11-26 11:10:37 UTC (rev 67439)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/Aspect.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -22,8 +22,6 @@
 package org.jboss.aop.microcontainer.beans;
 
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
 

Modified: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/CFlowStack.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/CFlowStack.java	2007-11-26 11:10:37 UTC (rev 67439)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/CFlowStack.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -21,7 +21,6 @@
 */ 
 package org.jboss.aop.microcontainer.beans;
 
-import java.util.LinkedHashMap;
 import java.util.List;
 
 import org.jboss.aop.AspectManager;

Modified: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/DynamicCFlowDef.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/DynamicCFlowDef.java	2007-11-26 11:10:37 UTC (rev 67439)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/DynamicCFlowDef.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -21,8 +21,6 @@
 */ 
 package org.jboss.aop.microcontainer.beans;
 
-import java.util.LinkedHashMap;
-
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.advice.DynamicCFlowDefinition;
 

Modified: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/LifecycleBeanMetaDataFactory.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/LifecycleBeanMetaDataFactory.java	2007-11-26 11:10:37 UTC (rev 67439)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/LifecycleBeanMetaDataFactory.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -107,24 +107,24 @@
       aspectBinding.setName(aspectBindingName);
       aspectBinding.setBean(LifecycleBinding.class.getName());
 
-      util.setSimpleProperty(aspectBinding, "callbackBean", name);
+      BeanMetaDataUtil.setSimpleProperty(aspectBinding, "callbackBean", name);
       util.setAspectManagerProperty(aspectBinding, "manager");
       if (expr != null)
       {
-         util.setSimpleProperty(aspectBinding, "expr", expr);
+         BeanMetaDataUtil.setSimpleProperty(aspectBinding, "expr", expr);
       }
       else if (classes != null) 
       {
-         util.setSimpleProperty(aspectBinding, "classes", classes);         
+         BeanMetaDataUtil.setSimpleProperty(aspectBinding, "classes", classes);         
       }
-      util.setSimpleProperty(aspectBinding, "state", getState());
+      BeanMetaDataUtil.setSimpleProperty(aspectBinding, "state", getState());
       if (installMethod != null)
       {
-         util.setSimpleProperty(aspectBinding, "installMethod", installMethod);
+         BeanMetaDataUtil.setSimpleProperty(aspectBinding, "installMethod", installMethod);
       }
       if (uninstallMethod != null)
       {
-         util.setSimpleProperty(aspectBinding, "uninstallMethod", uninstallMethod);
+         BeanMetaDataUtil.setSimpleProperty(aspectBinding, "uninstallMethod", uninstallMethod);
       }
       result.add(aspectBinding);
       
@@ -149,13 +149,13 @@
 
    private void getDependencies(ArrayList<AbstractDependencyValueMetaData> dependencies, MetaDataVisitorNode node)
    {
-      Iterator children = node.getChildren();
+      Iterator<? extends MetaDataVisitorNode> children = node.getChildren();
       
       if (children != null)
       {
          while (children.hasNext())
          {
-            MetaDataVisitorNode child = (MetaDataVisitorNode)children.next();
+            MetaDataVisitorNode child = children.next();
             if (child instanceof AbstractDependencyValueMetaData)
             {
                dependencies.add((AbstractDependencyValueMetaData)child);

Modified: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/PrecedenceDef.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/PrecedenceDef.java	2007-11-26 11:10:37 UTC (rev 67439)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/PrecedenceDef.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -21,7 +21,6 @@
 */ 
 package org.jboss.aop.microcontainer.beans;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import org.jboss.aop.AspectManager;

Modified: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/BeanMetaDataUtil.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/BeanMetaDataUtil.java	2007-11-26 11:10:37 UTC (rev 67439)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/BeanMetaDataUtil.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -101,7 +101,16 @@
       {
          advmd.setDependentState(new ControllerState(builder.getState()));
       }
-      builder.getBean().addProperty(new AbstractPropertyMetaData(builder.getPropertyName(), advmd));
+      AbstractBeanMetaData bean = builder.getBean();
+      AbstractPropertyMetaData existing = (AbstractPropertyMetaData)bean.getProperty(builder.getPropertyName());
+      if (existing != null)
+      {
+         existing.setValue(advmd);
+      }
+      else
+      {
+         bean.addProperty(new AbstractPropertyMetaData(builder.getPropertyName(), advmd));
+      }
    }
 
    public void setAspectManagerProperty(AbstractBeanMetaData bean, String propertyName)

Modified: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/CFlowStackBeanMetaDataFactory.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/CFlowStackBeanMetaDataFactory.java	2007-11-26 11:10:37 UTC (rev 67439)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/CFlowStackBeanMetaDataFactory.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -30,7 +30,6 @@
 import org.jboss.beans.metadata.plugins.AbstractListMetaData;
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
-import org.jboss.beans.metadata.spi.PropertyMetaData;
 
 /**
  * AspectBeanMetaDataFactory.
@@ -57,7 +56,7 @@
       //Add the Aspect
       AbstractBeanMetaData cflowStack = new AbstractBeanMetaData(CFlowStack.class.getName());
       cflowStack.setName(getName());
-      util.setSimpleProperty(cflowStack, "name", getName());
+      BeanMetaDataUtil.setSimpleProperty(cflowStack, "name", getName());
       util.setAspectManagerProperty(cflowStack, "manager");
       result.add(cflowStack);
       

Added: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/DomainBeanMetaDataFactory.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/DomainBeanMetaDataFactory.java	                        (rev 0)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/DomainBeanMetaDataFactory.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -0,0 +1,120 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.aop.microcontainer.beans.beanmetadatafactory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+import org.jboss.aop.microcontainer.beans.AOPDomain;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class DomainBeanMetaDataFactory extends AspectManagerAwareBeanMetaDataFactory
+{
+   private static final long serialVersionUID = 1L;
+   String parentFirst;
+   String inheritDefinitions;
+   String inheritBindings;
+   String extendz;
+   
+   ArrayList<BeanMetaData> childBeans = new ArrayList<BeanMetaData>();
+   
+   public DomainBeanMetaDataFactory()
+   {
+      setBeanClass("IGNORED");
+   }
+
+   public void setParentFirst(String parentFirst)
+   {
+      this.parentFirst = parentFirst;
+   }
+
+   public void setInheritDefinitions(String inheritDefinitions)
+   {
+      this.inheritDefinitions = inheritDefinitions;
+   }
+
+   public void setInheritBindings(String inheritBindings)
+   {
+      this.inheritBindings = inheritBindings;
+   }
+
+   public void setExtends(String extendz)
+   {
+      this.extendz = extendz;
+   }
+
+   public void addChildBean(BeanMetaData child)
+   {
+      childBeans.add(child);
+   }
+   
+   @Override
+   public List<BeanMetaData> getBeans()
+   {
+      ArrayList<BeanMetaData> result = new ArrayList<BeanMetaData>();
+      
+      AbstractBeanMetaData domain = new AbstractBeanMetaData(AOPDomain.class.getName());
+      BeanMetaDataUtil.setSimpleProperty(domain, "name", getName());
+      domain.setName(getName());
+      
+      if (parentFirst != null)
+      {
+         BeanMetaDataUtil.setSimpleProperty(domain, "parentFirst", parentFirst);
+      }
+      if (inheritDefinitions != null)
+      {
+         BeanMetaDataUtil.setSimpleProperty(domain, "inheritDefinitions", inheritDefinitions);
+      }
+      if (inheritBindings != null)
+      {
+         BeanMetaDataUtil.setSimpleProperty(domain, "inheritBindings", inheritBindings);
+      }
+      if (extendz != null)
+      {
+         BeanMetaDataUtil.setSimpleProperty(domain, "extends", extendz);
+      }
+      util.setAspectManagerProperty(domain, "manager");
+      result.add(domain);
+      
+      for (BeanMetaData child : childBeans)
+      {
+         if (child instanceof BeanMetaDataFactory)
+         {
+            result.addAll(((BeanMetaDataFactory)child).getBeans());
+         }
+         else
+         {
+            result.add(child);
+         }
+      }
+      
+      return result;
+   }
+}

Modified: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/IntroductionBeanMetaDataFactory.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/IntroductionBeanMetaDataFactory.java	2007-11-26 11:10:37 UTC (rev 67439)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/IntroductionBeanMetaDataFactory.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -26,7 +26,6 @@
 import java.util.StringTokenizer;
 
 import org.jboss.aop.microcontainer.beans.IntroductionBinding;
-import org.jboss.aop.microcontainer.beans.PrecedenceDefEntry;
 import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
 import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
 import org.jboss.beans.metadata.plugins.AbstractListMetaData;
@@ -105,6 +104,7 @@
          name = GUID.asString();
       }
       introduction.setName(name);
+      BeanMetaDataUtil.setSimpleProperty(introduction, "name", name);
       util.setAspectManagerProperty(introduction, "manager");
       if (clazz != null)
       {

Modified: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/LifecycleBeanMetaDataFactory.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/LifecycleBeanMetaDataFactory.java	2007-11-26 11:10:37 UTC (rev 67439)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/beanmetadatafactory/LifecycleBeanMetaDataFactory.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -95,24 +95,24 @@
       aspectBinding.setName(aspectBindingName);
       aspectBinding.setBean(LifecycleBinding.class.getName());
 
-      util.setSimpleProperty(aspectBinding, "callbackBean", name);
+      BeanMetaDataUtil.setSimpleProperty(aspectBinding, "callbackBean", name);
       util.setAspectManagerProperty(aspectBinding, "manager");
       if (expr != null)
       {
-         util.setSimpleProperty(aspectBinding, "expr", expr);
+         BeanMetaDataUtil.setSimpleProperty(aspectBinding, "expr", expr);
       }
       else if (classes != null) 
       {
-         util.setSimpleProperty(aspectBinding, "classes", classes);         
+         BeanMetaDataUtil.setSimpleProperty(aspectBinding, "classes", classes);         
       }
-      util.setSimpleProperty(aspectBinding, "state", getState());
+      BeanMetaDataUtil.setSimpleProperty(aspectBinding, "state", getState());
       if (installMethod != null)
       {
-         util.setSimpleProperty(aspectBinding, "installMethod", installMethod);
+         BeanMetaDataUtil.setSimpleProperty(aspectBinding, "installMethod", installMethod);
       }
       if (uninstallMethod != null)
       {
-         util.setSimpleProperty(aspectBinding, "uninstallMethod", uninstallMethod);
+         BeanMetaDataUtil.setSimpleProperty(aspectBinding, "uninstallMethod", uninstallMethod);
       }
       result.add(aspectBinding);
       
@@ -137,13 +137,13 @@
 
    private void getDependencies(ArrayList<AbstractDependencyValueMetaData> dependencies, MetaDataVisitorNode node)
    {
-      Iterator children = node.getChildren();
+      Iterator<? extends MetaDataVisitorNode> children = node.getChildren();
       
       if (children != null)
       {
          while (children.hasNext())
          {
-            MetaDataVisitorNode child = (MetaDataVisitorNode)children.next();
+            MetaDataVisitorNode child = children.next();
             if (child instanceof AbstractDependencyValueMetaData)
             {
                dependencies.add((AbstractDependencyValueMetaData)child);

Modified: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/xml/AOPBeansSchemaInitializer.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/xml/AOPBeansSchemaInitializer.java	2007-11-26 11:10:37 UTC (rev 67439)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/xml/AOPBeansSchemaInitializer.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -43,6 +43,7 @@
 import org.jboss.aop.microcontainer.beans.beanmetadatafactory.ConfigureLifecycleBeanMetaDataFactory;
 import org.jboss.aop.microcontainer.beans.beanmetadatafactory.CreateLifecycleBeanMetaDataFactory;
 import org.jboss.aop.microcontainer.beans.beanmetadatafactory.DescribeLifecycleBeanMetaDataFactory;
+import org.jboss.aop.microcontainer.beans.beanmetadatafactory.DomainBeanMetaDataFactory;
 import org.jboss.aop.microcontainer.beans.beanmetadatafactory.InstallLifecycleBeanMetaDataFactory;
 import org.jboss.aop.microcontainer.beans.beanmetadatafactory.InstantiateLifecycleBeanMetaDataFactory;
 import org.jboss.aop.microcontainer.beans.beanmetadatafactory.IntroductionBeanMetaDataFactory;
@@ -80,12 +81,22 @@
    /** The namespace */
    private static final String AOP_BEANS_NS = "urn:jboss:aop-beans:1.0";
 
+   private static final QName domainTypeQName = new QName(AOP_BEANS_NS, "domainType");
+   
+   private static final QName aspectQName = new QName(AOP_BEANS_NS, "aspect");
+   
+   private static final QName interceptorQName = new QName(AOP_BEANS_NS, "interceptor");
+   
    /** The aspect or interceptor binding */
    private static final QName aspectOrInterceptorTypeQName = new QName(AOP_BEANS_NS, "aspectOrInterceptorType");
 
+   private static final QName bindQName = new QName(AOP_BEANS_NS, "bind");
+
    /** The aspect or interceptor binding */
    private static final QName bindTypeQName = new QName(AOP_BEANS_NS, "bindType");
    
+   private static final QName stackQName = new QName(AOP_BEANS_NS, "stack");
+   
    private static final QName stackTypeQName = new QName(AOP_BEANS_NS, "stackType");
 
    private static final QName stackRefQName =  new QName(AOP_BEANS_NS, "stack-ref");
@@ -118,8 +129,12 @@
 
    private static final QName finallyTypeQName = new QName(AOP_BEANS_NS, "finallyType");
 
+   private static final QName typedefQName = new QName(AOP_BEANS_NS, "typedef");
+   
    private static final QName typedefTypeQName = new QName(AOP_BEANS_NS, "typedefType");
    
+   private static final QName cflowStackQName = new QName(AOP_BEANS_NS, "cflow-stack");
+   
    private static final QName cflowStackTypeQName = new QName(AOP_BEANS_NS, "cflowStackType");
 
    private static final QName cflowStackEntryTypeQName = new QName(AOP_BEANS_NS, "cflowStackEntryType");
@@ -128,18 +143,32 @@
    
    private static final QName notCalledQName = new QName(AOP_BEANS_NS, "not-called");
    
+   private static final QName dynamicCflowQName = new QName(AOP_BEANS_NS, "dynamic-cflow");
+   
    private static final QName dynamicCflowStackTypeQName = new QName(AOP_BEANS_NS, "dynamicCflowStackType");
    
+   private static final QName pointcutQName = new QName(AOP_BEANS_NS, "pointcut");
+   
    private static final QName pointcutTypeQName = new QName(AOP_BEANS_NS, "pointcutType"); 
    
+   private static final QName prepareQName = new QName(AOP_BEANS_NS, "prepare");
+   
    private static final QName prepareTypeQName = new QName(AOP_BEANS_NS, "prepareType"); 
    
+   private static final QName annotationQName = new QName(AOP_BEANS_NS, "annotation");
+   
    private static final QName annotationTypeQName = new QName(AOP_BEANS_NS, "annotationType"); 
    
+   private static final QName annotationIntroductionQName = new QName(AOP_BEANS_NS, "annotation-introduction");
+   
    private static final QName annotationIntroductionTypeQName = new QName(AOP_BEANS_NS, "annotationIntroductionType");
    
+   private static final QName precedenceQName = new QName(AOP_BEANS_NS, "precedence");
+   
    private static final QName precedenceTypeQName = new QName(AOP_BEANS_NS, "precedenceType");
    
+   private static final QName introductionQName = new QName(AOP_BEANS_NS, "introduction");
+   
    private static final QName introductionTypeQName = new QName(AOP_BEANS_NS, "introductionType");
 
    private static final QName interfacesQName = new QName(AOP_BEANS_NS, "interfaces");
@@ -169,7 +198,10 @@
    /** The lifecycle configure aspect binding */
    private static final QName lifecycleTypeQName = new QName(AOP_BEANS_NS, "lifecycleType");
    
+
    
+
+   
    public SchemaBinding init(SchemaBinding schema)
    {
       // ignore XB property replacement
@@ -188,6 +220,7 @@
    
    private void initTopLevelBindings(SchemaBinding schema)
    {
+      initDomainType(schema);
       initAspectOrInterceptorType(schema);   // aspect and interceptor binding
       initBindType(schema); // bind binding
       initStackType(schema);
@@ -220,6 +253,26 @@
       initTransientType(schema);
       initConstructionType(schema);
    }
+
+   private void initDomainType(SchemaBinding schema)
+   {
+      TypeBinding type = schema.getType(domainTypeQName);
+      type.setHandler(DomainHandler.HANDLER);
+      type.pushInterceptor(interceptorQName, DomainAspectManagerAwareBeanMetaDataFactoryInterceptor.INTERCEPTOR);
+      type.pushInterceptor(aspectQName, DomainAspectManagerAwareBeanMetaDataFactoryInterceptor.INTERCEPTOR);
+      type.pushInterceptor(bindQName, DomainAspectManagerAwareBeanMetaDataFactoryInterceptor.INTERCEPTOR);
+      type.pushInterceptor(stackQName, DomainAspectManagerAwareBeanMetaDataFactoryInterceptor.INTERCEPTOR);
+      type.pushInterceptor(typedefQName, DomainBeanMetaDataInterceptor.INTERCEPTOR);
+      type.pushInterceptor(cflowStackQName, DomainAspectManagerAwareBeanMetaDataFactoryInterceptor.INTERCEPTOR);
+      type.pushInterceptor(dynamicCflowQName, DomainBeanMetaDataInterceptor.INTERCEPTOR);
+      type.pushInterceptor(prepareQName, DomainBeanMetaDataInterceptor.INTERCEPTOR);
+      type.pushInterceptor(pointcutQName, DomainBeanMetaDataInterceptor.INTERCEPTOR);
+      type.pushInterceptor(annotationQName, DomainBeanMetaDataInterceptor.INTERCEPTOR);
+      type.pushInterceptor(annotationIntroductionQName, DomainBeanMetaDataInterceptor.INTERCEPTOR);
+      type.pushInterceptor(precedenceQName, DomainAspectManagerAwareBeanMetaDataFactoryInterceptor.INTERCEPTOR);
+      type.pushInterceptor(introductionQName, DomainAspectManagerAwareBeanMetaDataFactoryInterceptor.INTERCEPTOR);
+
+   }
    
    private void initAspectOrInterceptorType(SchemaBinding schema)
    {
@@ -227,8 +280,6 @@
       BeanSchemaBindingHelper.initBeanFactoryHandlers(type);
       type.setHandler(new AspectBeanFactoryHandler());
 
-//      type.pushInterceptor(propertyQName, BeanFactoryPropertyInterceptor.INTERCEPTOR);
-//      type.pushInterceptor(attributeQName, BeanFactoryPropertyInterceptor.INTERCEPTOR);
    }
    
    private void initBindType(SchemaBinding schema)
@@ -439,7 +490,46 @@
          }
       }
    }
-   
+
+   private static class DomainHandler  extends AspectManagerAwareBeanFactoryHandler
+   {
+      public static final DomainHandler HANDLER = new DomainHandler();
+
+      @Override
+      public Object startElement(Object parent, QName name, ElementBinding element)
+      {
+         return new DomainBeanMetaDataFactory();
+      }
+
+      @Override
+      public void attributes(Object o, QName elementName, ElementBinding element, Attributes attrs, NamespaceContext nsCtx)
+      {
+         super.attributes(o, elementName, element, attrs, nsCtx);
+         DomainBeanMetaDataFactory bean = (DomainBeanMetaDataFactory)o;
+         for (int i = 0; i < attrs.getLength(); ++i)
+         {
+            String localName = attrs.getLocalName(i);
+            if ("parentFirst".equals(localName))
+            {
+               bean.setParentFirst(attrs.getValue(i));
+            }
+            else if ("inheritDefinitions".equals(localName))
+            {
+               bean.setInheritDefinitions(attrs.getValue(i));
+            }
+            else if ("inheritBindings".equals(localName))
+            {
+               BeanMetaDataUtil.setSimpleProperty(bean, "inheritBindings", attrs.getValue(i));
+            }
+            else if ("extends".equals(localName))
+            {
+               BeanMetaDataUtil.setSimpleProperty(bean, "extends", attrs.getValue(i));
+            }
+         }
+
+      }
+   }
+
    private static class AspectBeanFactoryHandler extends AspectManagerAwareBeanFactoryHandler
    {
       @Override
@@ -1168,7 +1258,42 @@
          IntroductionBeanMetaDataFactory.addInterfaces(mixin, "interfaces", ((StringBuffer)child).toString());
       }      
    }
+
+   private static class DomainAspectManagerAwareBeanMetaDataFactoryInterceptor extends DefaultElementInterceptor
+   {
+      public static final DomainAspectManagerAwareBeanMetaDataFactoryInterceptor INTERCEPTOR = new DomainAspectManagerAwareBeanMetaDataFactoryInterceptor();
+      
+      @Override
+      public void add(Object parent, Object child, QName name)
+      {
+         DomainBeanMetaDataFactory domain = (DomainBeanMetaDataFactory)parent;
+         AspectManagerAwareBeanMetaDataFactory factory = (AspectManagerAwareBeanMetaDataFactory)child;
+         //Overwrite the manager property
+         factory.setManagerBean(domain.getName());
+         factory.setManagerProperty("domain");
+         domain.addChildBean(factory);
+      }      
+   }
    
+   private static class DomainBeanMetaDataInterceptor extends DefaultElementInterceptor
+   {
+      public static final DomainBeanMetaDataInterceptor INTERCEPTOR = new DomainBeanMetaDataInterceptor();
+      
+      @Override
+      public void add(Object parent, Object child, QName name)
+      {
+         DomainBeanMetaDataFactory domain = (DomainBeanMetaDataFactory)parent;
+         AbstractBeanMetaData bean = (AbstractBeanMetaData)child;
+         //Overwrite the manager property
+         BeanMetaDataUtil util = new BeanMetaDataUtil();
+         util.setManagerBean(domain.getName());
+         util.setManagerProperty("domain");
+         util.setAspectManagerProperty(bean, "manager");
+         
+         domain.addChildBean(bean);
+      }      
+      
+   }
    ///////////////////////////////////////////////////////////////////////////////////////
    //Characters Handlers
    private static class AnnotationCharactersHandler extends CharactersHandler

Modified: projects/microcontainer/trunk/aop-mc-int/src/resources/main/schema/aop-beans_1_0.xsd
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/resources/main/schema/aop-beans_1_0.xsd	2007-11-26 11:10:37 UTC (rev 67439)
+++ projects/microcontainer/trunk/aop-mc-int/src/resources/main/schema/aop-beans_1_0.xsd	2007-11-26 12:56:44 UTC (rev 67440)
@@ -20,7 +20,7 @@
          ]]>
       </xsd:documentation>
    </xsd:annotation>
-<!-- 
+
 	<xsd:element name="domain" type="domainType">
       <xsd:annotation>
          <xsd:documentation>
@@ -39,19 +39,27 @@
            ]]>
          </xsd:documentation>
       </xsd:annotation>
-      <xsd:complexContent>
-         <xsd:choice minOccurs="0" maxOccurs="1">
-               <xsd:element name="interceptor" type="mc:propertyType" minOccurs="0" maxOccurs="unbounded"/>
-               <xsd:element name="property" type="mc:propertyType" minOccurs="0" maxOccurs="unbounded"/>
-         </xsd:choice>
-         <xsd:attribute name="name" type="xsd:string" use="required"/>
-         <xsd:attribute name="parentFirst" type="xsd:string" use="optional" default="false"/>
-         <xsd:attribute name="inheritDefinitions" type="xsd:string" use="optional" default="true"/>
-         <xsd:attribute name="inheritBindings" type="xsd:boolean" use="optional" default="false"/>
-         <xsd:attribute name="extends" type="xsd:string" use="optional"/>
-         </xsd:extension>
-      </xsd:complexContent>
-   </xsd:complexType> -->
+      <xsd:choice minOccurs="0" maxOccurs="1">
+         <xsd:element name="interceptor" type="aspectOrInterceptorType" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="aspect" type="aspectOrInterceptorType" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="bind" type="bindType" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="stack" type="stackType" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="typedef" type="typedefType" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="cflow-stack" type="cflowStackType" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="dynamic-cflow" type="dynamicCflowStackType" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="prepare" type="prepareType" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="pointcut" type="pointcutType" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="annotation-introduction" type="annotationIntroductionType" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="annotation" type="annotationType" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="precedence" type="precedenceType" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="introduction" type="introductionType" minOccurs="0" maxOccurs="unbounded"/>
+      </xsd:choice>
+      <xsd:attribute name="name" type="xsd:string" use="required"/>
+      <xsd:attribute name="parentFirst" type="xsd:string" use="optional" default="false"/>
+      <xsd:attribute name="inheritDefinitions" type="xsd:string" use="optional" default="true"/>
+      <xsd:attribute name="inheritBindings" type="xsd:boolean" use="optional" default="false"/>
+      <xsd:attribute name="extends" type="xsd:string" use="optional"/>
+   </xsd:complexType> 
 
    <xsd:element name="interceptor" type="aspectOrInterceptorType">
       <xsd:annotation>
@@ -96,10 +104,6 @@
       </xsd:annotation>
       <xsd:complexContent>
          <xsd:extension base="aopBeanfactoryType">
-            <!--  xsd:choice minOccurs="0" maxOccurs="1">
-               <xsd:element name="attribute" type="mc:propertyType" minOccurs="0" maxOccurs="unbounded"/>
-               <xsd:element name="property" type="mc:propertyType" minOccurs="0" maxOccurs="unbounded"/>
-            </xsd:choice -->
             <xsd:attribute name="scope" type="xsd:string" use="optional"/>
             <xsd:attribute name="factory" type="xsd:string" use="optional"/>
             <xsd:attribute name="manager-bean" type="xsd:string" use="optional"/>

Added: projects/microcontainer/trunk/aop-mc-int/src/resources/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleAopTestCase.xml
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/resources/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleAopTestCase.xml	                        (rev 0)
+++ projects/microcontainer/trunk/aop-mc-int/src/resources/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleAopTestCase.xml	2007-11-26 12:56:44 UTC (rev 67440)
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+   <bean name="AspectManager" class="org.jboss.aop.AspectManager">
+      <constructor factoryClass="org.jboss.aop.AspectManager" factoryMethod="instance"/>
+   </bean>
+
+   <domain xmlns="urn:jboss:aop-beans:1.0" name="AOPDomain">
+
+      <annotation xmlns="urn:jboss:aop-beans:1.0" expr="class(org.jboss.test.microcontainer.beans.POJO)" invisible="false">
+         @org.jboss.test.microcontainer.beans.Annotation1
+      </annotation>
+
+      <annotation-introduction xmlns="urn:jboss:aop-beans:1.0" expr="class(org.jboss.test.microcontainer.beans.POJO)" invisible="false">
+         @org.jboss.test.microcontainer.beans.Annotation1
+      </annotation-introduction>
+
+      <precedence xmlns="urn:jboss:aop-beans:1.0">
+         <interceptor-ref name="org.jboss.test.microcontainer.beans.TestInterceptor"/>
+         <advice aspect="org.jboss.test.microcontainer.beans.TestAspect" name="advice"/>
+      </precedence>
+
+      <introduction xmlns="urn:jboss:aop-beans:1.0" name="MixinBinding" class="org.jboss.test.microcontainer.beans.POJO">
+         <mixin>
+            <interfaces>org.jboss.test.microcontainer.beans.MixinInterface</interfaces>
+            <class>org.jboss.test.microcontainer.beans.MixinImpl</class>
+            <transient>true</transient>
+         </mixin>
+      </introduction>
+
+      <pointcut xmlns="urn:jboss:aop-beans:1.0" name="NamedPointcut" expr="all(org.acme.POJO)"/>
+
+      <prepare xmlns="urn:jboss:aop-beans:1.0" name="Prepare" expr="all(org.acme.POJO)"/>
+      
+      <dynamic-cflow xmlns="urn:jboss:aop-beans:1.0" name="DynamicCFlow" class="org.jboss.test.microcontainer.beans.DynamicCFlowImpl"/>
+      
+      <cflow-stack xmlns="urn:jboss:aop-beans:1.0" name="CFlow">
+         <not-called expr="void org.jboss.test.microcontainer.beans.test.CFlowTest->notCallPOJO(..)"/>
+         <called expr="void org.jboss.test.microcontainer.beans.test.CFlowTest->callPOJO(..)"/>
+      </cflow-stack>
+
+      <typedef name="TypeDef" expr="class(org.jboss.test.microcontainer.beans.POJO)"/>
+   
+      <aspect class="org.jboss.test.microcontainer.beans.TestAspectWithProperty">
+         <mc:property xmlns:mc="urn:jboss:bean-deployer:2.0" name="someProperty">This is only a test</mc:property>
+      </aspect>
+
+      <interceptor class="org.jboss.test.microcontainer.beans.TestInterceptor"/>
+
+      <aspect class="org.jboss.test.microcontainer.beans.TestAspect"/>
+
+      <stack name="TestStack">
+         <advice aspect="org.jboss.test.microcontainer.beans.TestAspect" name="advice"/>
+      </stack>
+      
+      <bind pointcut="execution(* org.jboss.test.microcontainer.beans.POJO->*(..))">
+         <advice aspect="org.jboss.test.microcontainer.beans.TestAspectWithProperty" name="advice"/>
+         <interceptor-ref name="org.jboss.test.microcontainer.beans.TestInterceptor"/>
+         <stack-ref name="TestStack"/>
+      </bind>
+   </domain>   
+   
+</deployment>

Added: projects/microcontainer/trunk/aop-mc-int/src/resources/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleBeansTestCase.xml
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/resources/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleBeansTestCase.xml	                        (rev 0)
+++ projects/microcontainer/trunk/aop-mc-int/src/resources/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleBeansTestCase.xml	2007-11-26 12:56:44 UTC (rev 67440)
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+   <bean name="AspectManager" class="org.jboss.aop.AspectManager">
+      <constructor factoryClass="org.jboss.aop.AspectManager" factoryMethod="instance"/>
+   </bean>
+
+   <bean name="AOPDomain" class="org.jboss.aop.microcontainer.beans.AOPDomain">
+      <property name="name">AOPDomain</property>
+      <property name="manager"><inject bean="AspectManager"/></property>
+   </bean>
+
+   <bean name="ClassAnnotationOverride" class="org.jboss.aop.microcontainer.beans.AnnotationOverride">
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="expr">class(org.jboss.test.microcontainer.beans.POJO)</property>
+      <property name="annotation">@org.jboss.test.microcontainer.beans.Annotation1</property>
+      <property name="invisible">false</property>
+   </bean>
+
+   <bean name="ClassAnnotationIntroduction" class="org.jboss.aop.microcontainer.beans.AnnotationIntroduction">
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="expr">class(org.jboss.test.microcontainer.beans.POJO)</property>
+      <property name="annotation">@org.jboss.test.microcontainer.beans.Annotation2</property>
+      <property name="invisible">false</property>
+   </bean>
+
+   <bean name="MixinBinding" class="org.jboss.aop.microcontainer.beans.IntroductionBinding">
+      <property name="expr">has(* *->method())</property>
+      <property name="name">MixinBinding</property>
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="mixins">
+         <list>
+            <inject bean="MixinBinding$1"/>
+         </list>
+      </property>
+   </bean>
+   <bean name="MixinBinding$1" class="org.jboss.aop.microcontainer.beans.MixinEntry">
+      <property name="construction">new org.jboss.test.microcontainer.beans.MixinImpl(this, "CUSTOM CONSTRUCTION")</property>
+      <property name="interfaces">
+         <list elementClass="java.lang.String">
+            <value>org.jboss.test.microcontainer.beans.MixinInterface</value>
+         </list>
+      </property>
+      <property name="mixin">org.jboss.test.microcontainer.beans.MixinImpl</property>
+   </bean>
+
+   <bean name="PrecedenceBinding" class="org.jboss.aop.microcontainer.beans.PrecedenceDef">
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="entries">
+         <list>
+            <inject bean="PrecedenceBinding$1"/>
+            <inject bean="PrecedenceBinding$2"/>
+         </list>
+      </property>
+   </bean>
+   <bean name="PrecedenceBinding$1" class="org.jboss.aop.microcontainer.beans.PrecedenceDefEntry">
+      <property name="aspectName">org.jboss.test.microcontainer.beans.TestInterceptor</property>
+   </bean>
+   <bean name="PrecedenceBinding$2" class="org.jboss.aop.microcontainer.beans.PrecedenceDefEntry">
+      <property name="aspectName">org.jboss.test.microcontainer.beans.TestAspect</property>
+      <property name="aspectMethod">advice</property>
+   </bean>
+
+   <bean name="NamedPointcut" class="org.jboss.aop.microcontainer.beans.NamedPointcut">
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="name">NamedPointcut</property>
+      <property name="expr">execution(* org.jboss.test.microcontainer.beans.POJO->*())</property>
+   </bean>
+
+   <bean name="Prepare" class="org.jboss.aop.microcontainer.beans.Prepare">
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="name">Prepare</property>
+      <property name="expr">all(org.acme.POJO)</property>
+   </bean>
+
+   <bean name="DynamicCFlow" class="org.jboss.aop.microcontainer.beans.DynamicCFlowDef">
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="name">DynamicCFlow</property>
+      <property name="className">org.jboss.test.microcontainer.beans.DynamicCFlowImpl</property>
+   </bean>
+
+   <bean name="CFlow" class="org.jboss.aop.microcontainer.beans.CFlowStack">
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="name">CFlow</property>
+      <property name="entries">
+         <list>
+            <inject bean="CFlow$1"/>
+            <inject bean="CFlow$2"/>
+         </list>
+      </property>
+   </bean>
+   <bean name="CFlow$1" class="org.jboss.aop.microcontainer.beans.CFlowStackEntry">
+      <property name="called">false</property>
+      <property name="expr">void org.jboss.test.microcontainer.beans.test.CFlowTest->notCallPOJO(..)</property>
+   </bean>
+   <bean name="CFlow$2" class="org.jboss.aop.microcontainer.beans.CFlowStackEntry">
+      <property name="called">true</property>
+      <property name="expr">void org.jboss.test.microcontainer.beans.test.CFlowTest->callPOJO(..)</property>
+   </bean>
+
+
+   <bean name="TypeDef" class="org.jboss.aop.microcontainer.beans.TypeDef">
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="name">TypeDef</property>
+      <property name="expr">class(org.jboss.test.microcontainer.beans.POJO)</property>
+   </bean>
+
+   <beanfactory name="Factory$org.jboss.test.microcontainer.beans.TestAspectWithProperty" class="org.jboss.test.microcontainer.beans.TestAspectWithProperty">
+      <property name="someProperty">This is only a test</property>
+   </beanfactory>
+   <bean name="org.jboss.test.microcontainer.beans.TestAspectWithProperty" class="org.jboss.aop.microcontainer.beans.Aspect">
+      <property name="advice"><inject bean="Factory$org.jboss.test.microcontainer.beans.TestAspectWithProperty"/></property>
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+   </bean>
+
+   <beanfactory name="Factory$org.jboss.test.microcontainer.beans.TestInterceptor" class="org.jboss.test.microcontainer.beans.TestInterceptor"/>
+   <bean name="org.jboss.test.microcontainer.beans.TestInterceptor" class="org.jboss.aop.microcontainer.beans.Aspect">
+      <property name="advice"><inject bean="Factory$org.jboss.test.microcontainer.beans.TestInterceptor"/></property>
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+   </bean>
+
+   <beanfactory name="Factory$org.jboss.test.microcontainer.beans.TestAspect" class="org.jboss.test.microcontainer.beans.TestAspect"/>
+   <bean name="org.jboss.test.microcontainer.beans.TestAspect" class="org.jboss.aop.microcontainer.beans.Aspect">
+      <property name="advice"><inject bean="Factory$org.jboss.test.microcontainer.beans.TestAspect"/></property>
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+   </bean>
+
+   <bean name="TestStack" class="org.jboss.aop.microcontainer.beans.Stack">
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="name">TestStack</property>
+      <property name="advices">
+         <list>
+            <inject bean="TestStack$1"/>
+         </list>
+      </property>
+   </bean>
+   <bean name="TestStack$1" class="org.jboss.aop.microcontainer.beans.InterceptorEntry">
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="aspect"><inject bean="org.jboss.test.microcontainer.beans.TestAspect"/></property>
+      <property name="aspectMethod">advice</property>
+      <property name="forStack">true</property>
+   </bean>
+
+   <bean name="TestAspectBinding" class="org.jboss.aop.microcontainer.beans.AspectBinding">
+      <property name="pointcut">execution(* org.jboss.test.microcontainer.beans.POJO->*(..))</property>
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="advices">
+         <list>
+            <inject bean="TestAspectBinding$1"/>
+            <inject bean="TestAspectBinding$2"/>
+            <inject bean="TestAspectBinding$3"/>
+         </list>
+      </property>
+   </bean>
+   <bean name="TestAspectBinding$1" class="org.jboss.aop.microcontainer.beans.InterceptorEntry">
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="aspect"><inject bean="org.jboss.test.microcontainer.beans.TestAspectWithProperty"/></property>
+      <property name="aspectMethod">advice</property>
+      <property name="aspectBinding"><inject bean="TestAspectBinding" state="Instantiated"/></property>
+   </bean>
+   <bean name="TestAspectBinding$2" class="org.jboss.aop.microcontainer.beans.InterceptorEntry">
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="aspect"><inject bean="org.jboss.test.microcontainer.beans.TestInterceptor"/></property>
+      <property name="aspectBinding"><inject bean="TestAspectBinding" state="Instantiated"/></property>
+   </bean>
+   <bean name="TestAspectBinding$3" class="org.jboss.aop.microcontainer.beans.StackEntry">
+      <property name="manager"><inject bean="AOPDomain" property="domain"/></property>
+      <property name="stack"><inject bean="TestStack"/></property>
+      <property name="aspectBinding"><inject bean="TestAspectBinding" state="Instantiated"/></property>
+   </bean>
+   
+   
+</deployment>

Added: projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainProxyTest.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainProxyTest.java	                        (rev 0)
+++ projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainProxyTest.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -0,0 +1,86 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.microcontainer.beans.test;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.DomainDefinition;
+import org.jboss.aop.microcontainer.junit.AOPMicrocontainerTest;
+import org.jboss.aop.proxy.container.AOPProxyFactoryParameters;
+import org.jboss.aop.proxy.container.ContainerCache;
+import org.jboss.aop.proxy.container.GeneratedAOPProxyFactory;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class DomainProxyTest extends AOPMicrocontainerTest
+{
+   GeneratedAOPProxyFactory proxyFactory = new GeneratedAOPProxyFactory();
+
+   public DomainProxyTest(String name)
+   {
+      super(name);
+   }
+   
+   protected AspectManager getMainAspectManager()
+   {
+      AspectManager manager = (AspectManager)getBean("AspectManager");
+      assertNotNull(manager);
+      return manager;
+   }
+   
+   protected AspectManager getDomain(String name)
+   {
+      AspectManager manager = getMainAspectManager();
+      DomainDefinition def = manager.getContainer(name);
+      assertNotNull(def);
+      AspectManager domain = def.getManager();
+      assertNotNull(domain);
+      return domain;
+   }
+   
+   protected Object createProxy(Object target)
+   {
+      AspectManager manager = getMainAspectManager();
+      return createProxy(manager, target);
+   }
+
+   protected Object createProxy(String domainName, Object target)
+   {
+      AspectManager domain = getDomain(domainName);
+      return createProxy(domain, target);
+   }
+   
+   private Object createProxy(AspectManager manager, Object target)
+   {
+      ContainerCache containerCache = ContainerCache.initialise(manager, target.getClass(), null, false);
+      AOPProxyFactoryParameters params = new AOPProxyFactoryParameters();
+      params.setProxiedClass(target.getClass());
+      params.setTarget(target);
+      params.setContainerCache(containerCache);
+      return proxyFactory.createAdvisedProxy(params);
+   }
+}
\ No newline at end of file

Added: projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleAopTestCase.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleAopTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleAopTestCase.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -0,0 +1,44 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.microcontainer.beans.test;
+
+import junit.framework.Test;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class DomainSimpleAopTestCase extends DomainSimpleTest
+{
+
+   public DomainSimpleAopTestCase(String name)
+   {
+      super(name);
+   }
+
+   public static Test suite()
+   {
+      return suite(DomainSimpleAopTestCase.class);
+   }
+
+}

Added: projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleBeansTestCase.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleBeansTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleBeansTestCase.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -0,0 +1,44 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.microcontainer.beans.test;
+
+import junit.framework.Test;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class DomainSimpleBeansTestCase extends DomainSimpleTest
+{
+
+   public DomainSimpleBeansTestCase(String name)
+   {
+      super(name);
+   }
+
+   public static Test suite()
+   {
+      return suite(DomainSimpleBeansTestCase.class);
+   }
+
+}

Added: projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleTest.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleTest.java	                        (rev 0)
+++ projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/beans/test/DomainSimpleTest.java	2007-11-26 12:56:44 UTC (rev 67440)
@@ -0,0 +1,147 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.microcontainer.beans.test;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.test.microcontainer.beans.POJO;
+import org.jboss.test.microcontainer.beans.TestAspect;
+import org.jboss.test.microcontainer.beans.TestAspectWithProperty;
+import org.jboss.test.microcontainer.beans.TestInterceptor;
+
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public abstract class DomainSimpleTest extends DomainProxyTest
+{
+   public DomainSimpleTest(String name)
+   {
+      super(name);
+   }
+
+   public void testDomain()
+   {
+      TestAspect.invoked = false;
+      TestInterceptor.invoked = false;
+      TestAspectWithProperty.last = null;
+      POJO pojo = (POJO)createProxy("AOPDomain", new POJO());
+      assertNotNull(pojo);
+      pojo.method();
+      assertNotNull(TestAspectWithProperty.last);
+      assertEquals("This is only a test", TestAspectWithProperty.last.getSomeProperty());
+      assertTrue(TestInterceptor.invoked);
+      assertTrue(TestAspect.invoked);
+    
+      AspectManager domain = getDomain("AOPDomain");
+      checkArtifacts(domain, true);
+   }
+
+   public void testNoDomain()
+   {
+      TestInterceptor.invoked = false;
+      TestAspectWithProperty.last = null;
+      TestAspect.invoked = false;
+      POJO pojo = (POJO)createProxy(new POJO());
+      assertNotNull(pojo);
+      pojo.method();
+      assertNull(TestAspectWithProperty.last);
+      assertFalse(TestInterceptor.invoked);
+      assertFalse(TestAspect.invoked);
+      
+      AspectManager manager = getMainAspectManager();
+      checkArtifacts(manager, false);
+   }
+   
+   private void checkArtifacts(AspectManager manager, boolean shouldBeThere)
+   {
+      Object o = manager.getTypedef("TypeDef");
+      checkShouldBeThere(o, shouldBeThere);
+      
+      o = manager.getCFlowStack("CFlow");
+      checkShouldBeThere(o, shouldBeThere);
+      
+      o = manager.getDynamicCFlow("DynamicCFlow");
+      checkShouldBeThere(o, shouldBeThere);
+      
+      o = manager.getPointcut("Prepare");
+      checkShouldBeThere(o, shouldBeThere);
+      
+      o = manager.getPointcut("NamedPointcut");
+      checkShouldBeThere(o, shouldBeThere);
+   
+      o = manager.getInterfaceIntroduction("MixinBinding");
+      checkShouldBeThere(o, shouldBeThere);
+      
+      List coll =  manager.getAnnotationIntroductions();
+      checkShouldBeThere(coll, shouldBeThere);
+      
+      coll = manager.getAnnotationOverrides();
+      checkShouldBeThere(coll, shouldBeThere);
+      
+      Map map = manager.getPrecedenceDefs();
+      checkShouldBeThere(map, shouldBeThere);
+   }
+   
+   private void checkShouldBeThere(Object o, boolean shouldBeThere)
+   {
+      if (shouldBeThere) assertNotNull(o);
+      else assertNull(o);
+   }
+   
+   private void checkShouldBeThere(Collection coll, boolean shouldBeThere)
+   {
+      if (shouldBeThere)
+      {
+         assertNotNull(coll);
+         assertEquals(1, coll.size());
+      }
+      else
+      {
+         if (coll != null)
+         {
+            assertEquals(0, coll.size());
+         }
+      }
+   }
+   
+   private void checkShouldBeThere(Map coll, boolean shouldBeThere)
+   {
+      if (shouldBeThere)
+      {
+         assertNotNull(coll);
+         assertEquals(1, coll.size());
+      }
+      else
+      {
+         if (coll != null)
+         {
+            assertEquals(0, coll.size());
+         }
+      }
+   }
+}




More information about the jboss-cvs-commits mailing list