[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