[jboss-cvs] JBossAS SVN: r69862 - in projects/microcontainer/trunk/kernel/src: main/org/jboss/beans/metadata/spi/builder and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Feb 15 09:11:55 EST 2008


Author: adrian at jboss.org
Date: 2008-02-15 09:11:55 -0500 (Fri, 15 Feb 2008)
New Revision: 69862

Added:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/ParameterMetaDataBuilderImpl.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/ParameterMetaDataBuilder.java
Removed:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/ParameterMetaDataBuilder.java
Modified:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/AbstractInstallMetaDataBuilder.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/LifecycleMetaDataBuilder.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/StateMetaDataBuilder.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/dependency/test/MatcherDemandSupplyTestCase.java
Log:
General javadoc and fixup of BeanMetaDataBuilder to make it more useful

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/AbstractInstallMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/AbstractInstallMetaDataBuilder.java	2008-02-15 14:10:54 UTC (rev 69861)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/AbstractInstallMetaDataBuilder.java	2008-02-15 14:11:55 UTC (rev 69862)
@@ -29,6 +29,7 @@
  * AbstractInstallMetaDataBuilder.
  *
  * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
  */
 public abstract class AbstractInstallMetaDataBuilder extends StateMetaDataBuilder
 {
@@ -51,11 +52,4 @@
    {
       // do nothing
    }
-
-   public void addParameter(AbstractInstallMetaData installMetaData, String type, Object value)
-   {
-      ParameterMetaDataBuilder<AbstractInstallMetaData> builder = new ParameterMetaDataBuilder<AbstractInstallMetaData>(installMetaData);
-      builder.addParameterMetaData(type, value);
-   }
-
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java	2008-02-15 14:10:54 UTC (rev 69861)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java	2008-02-15 14:11:55 UTC (rev 69862)
@@ -21,18 +21,29 @@
 */
 package org.jboss.beans.metadata.plugins.builder;
 
+import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
+import org.jboss.beans.metadata.plugins.AbstractArrayMetaData;
 import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
 import org.jboss.beans.metadata.plugins.AbstractClassLoaderMetaData;
+import org.jboss.beans.metadata.plugins.AbstractCollectionMetaData;
 import org.jboss.beans.metadata.plugins.AbstractConstructorMetaData;
 import org.jboss.beans.metadata.plugins.AbstractDemandMetaData;
 import org.jboss.beans.metadata.plugins.AbstractDependencyMetaData;
+import org.jboss.beans.metadata.plugins.AbstractDependencyValueMetaData;
 import org.jboss.beans.metadata.plugins.AbstractInstallMetaData;
+import org.jboss.beans.metadata.plugins.AbstractListMetaData;
+import org.jboss.beans.metadata.plugins.AbstractMapMetaData;
 import org.jboss.beans.metadata.plugins.AbstractPropertyMetaData;
+import org.jboss.beans.metadata.plugins.AbstractSetMetaData;
 import org.jboss.beans.metadata.plugins.AbstractSupplyMetaData;
 import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
+import org.jboss.beans.metadata.plugins.StringValueMetaData;
+import org.jboss.beans.metadata.plugins.ThisValueMetaData;
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.beans.metadata.spi.DemandMetaData;
 import org.jboss.beans.metadata.spi.DependencyMetaData;
@@ -40,6 +51,7 @@
 import org.jboss.beans.metadata.spi.SupplyMetaData;
 import org.jboss.beans.metadata.spi.ValueMetaData;
 import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.beans.metadata.spi.builder.ParameterMetaDataBuilder;
 import org.jboss.dependency.spi.ControllerMode;
 import org.jboss.dependency.spi.ControllerState;
 
@@ -50,30 +62,60 @@
  * TODO - add on demand, when building OSGi, Spring, ...
  *
  * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ * @author <a href="mailto:adrian at jboss.org">Adrian Brock</a>
  */
-class BeanMetaDataBuilderImpl implements BeanMetaDataBuilder
+class BeanMetaDataBuilderImpl extends BeanMetaDataBuilder
 {
+   /** The bean metadata */
    private AbstractBeanMetaData beanMetaData;
-   // parameter builders
-   private ParameterMetaDataBuilder<AbstractConstructorMetaData> constructorBuilder;
+
+   /** The constructor builder */
+   private ParameterMetaDataBuilderImpl<AbstractConstructorMetaData> constructorBuilder;
+   
+   /** The create lifecycle builder */
    private LifecycleMetaDataBuilder createBuilder;
+   
+   /** The start lifecycle builder */
    private LifecycleMetaDataBuilder startBuilder;
+   
+   /** The stop lifecycle builder */
    private LifecycleMetaDataBuilder stopBuilder;
+   
+   /** The destroy lifecycle builder */
    private LifecycleMetaDataBuilder destroyBuilder;
-   // install
+
+   /** The install builder */
    private AbstractInstallMetaDataBuilder installBuilder;
+   
+   /** The uninstall builder */
    private AbstractInstallMetaDataBuilder uninstallBuilder;
 
+   /**
+    * Create a new BeanMetaDataBuilderImpl.
+    * 
+    * @param bean the bean
+    */
    public BeanMetaDataBuilderImpl(String bean)
    {
       this(new AbstractBeanMetaData(bean));
    }
 
+   /**
+    * Create a new BeanMetaDataBuilderImpl.
+    * 
+    * @param name the bean name
+    * @param bean the bean
+    */
    public BeanMetaDataBuilderImpl(String name, String bean)
    {
       this(new AbstractBeanMetaData(name, bean));
    }
 
+   /**
+    * Create a new BeanMetaDataBuilderImpl.
+    * 
+    * @param beanMetaData the bean metadata
+    */
    public BeanMetaDataBuilderImpl(AbstractBeanMetaData beanMetaData)
    {
       this.beanMetaData = beanMetaData;
@@ -98,20 +140,15 @@
       return this;
    }
 
-   public BeanMetaDataBuilder setMode(String modeString)
-   {
-      return setMode(new ControllerMode(modeString));
-   }
-
    public BeanMetaDataBuilder setMode(ControllerMode mode)
    {
       beanMetaData.setMode(mode);
       return this;
    }
 
-   public BeanMetaDataBuilder setClassLoader(Object classLoader)
+   public BeanMetaDataBuilder setClassLoader(ValueMetaData classLoader)
    {
-      beanMetaData.setClassLoader(new AbstractClassLoaderMetaData(new AbstractValueMetaData(classLoader)));
+      beanMetaData.setClassLoader(new AbstractClassLoaderMetaData(classLoader));
       return this;
    }
 
@@ -122,15 +159,34 @@
       {
          constructor = new AbstractConstructorMetaData();
          beanMetaData.setConstructor(constructor);
-         constructorBuilder = new ParameterMetaDataBuilder<AbstractConstructorMetaData>(constructor);
+         constructorBuilder = new ParameterMetaDataBuilderImpl<AbstractConstructorMetaData>(constructor);
       }
    }
 
-   public BeanMetaDataBuilder setConstructorValue(Object value)
+   public BeanMetaDataBuilder setFactory(ValueMetaData factory)
    {
-      return setConstructorValue(new AbstractValueMetaData(value));
+      checkConstructorBuilder();
+      AbstractConstructorMetaData constructor = (AbstractConstructorMetaData) beanMetaData.getConstructor();
+      constructor.setFactory(factory);
+      return this;
    }
 
+   public BeanMetaDataBuilder setFactoryClass(String factoryClass)
+   {
+      checkConstructorBuilder();
+      AbstractConstructorMetaData constructor = (AbstractConstructorMetaData) beanMetaData.getConstructor();
+      constructor.setFactoryClass(factoryClass);
+      return this;
+   }
+
+   public BeanMetaDataBuilder setFactoryMethod(String factoryMethod)
+   {
+      checkConstructorBuilder();
+      AbstractConstructorMetaData constructor = (AbstractConstructorMetaData) beanMetaData.getConstructor();
+      constructor.setFactoryMethod(factoryMethod);
+      return this;
+   }
+
    public BeanMetaDataBuilder setConstructorValue(ValueMetaData value)
    {
       checkConstructorBuilder();
@@ -146,6 +202,13 @@
       return this;
    }
 
+   public BeanMetaDataBuilder addConstructorParameter(String type, String value)
+   {
+      checkConstructorBuilder();
+      constructorBuilder.addParameterMetaData(type, value);
+      return this;
+   }
+
    public BeanMetaDataBuilder addConstructorParameter(String type, ValueMetaData value)
    {
       checkConstructorBuilder();
@@ -197,6 +260,12 @@
       return this;
    }
 
+   public BeanMetaDataBuilder addCreateParameter(String type, String value)
+   {
+      createBuilder.addParameterMetaData(type, value);
+      return this;
+   }
+
    public BeanMetaDataBuilder addCreateParameter(String type, ValueMetaData value)
    {
       createBuilder.addParameterMetaData(type, value);
@@ -215,6 +284,12 @@
       return this;
    }
 
+   public BeanMetaDataBuilder addStartParameter(String type, String value)
+   {
+      startBuilder.addParameterMetaData(type, value);
+      return this;
+   }
+
    public BeanMetaDataBuilder addStartParameter(String type, ValueMetaData value)
    {
       startBuilder.addParameterMetaData(type, value);
@@ -233,6 +308,12 @@
       return this;
    }
 
+   public BeanMetaDataBuilder addStopParameter(String type, String value)
+   {
+      stopBuilder.addParameterMetaData(type, value);
+      return this;
+   }
+
    public BeanMetaDataBuilder addStopParameter(String type, ValueMetaData value)
    {
       stopBuilder.addParameterMetaData(type, value);
@@ -251,15 +332,16 @@
       return this;
    }
 
-   public BeanMetaDataBuilder addDestroyParameter(String type, ValueMetaData value)
+   public BeanMetaDataBuilder addDestroyParameter(String type, String value)
    {
       destroyBuilder.addParameterMetaData(type, value);
       return this;
    }
 
-   public BeanMetaDataBuilder addSupply(Object supply)
+   public BeanMetaDataBuilder addDestroyParameter(String type, ValueMetaData value)
    {
-      return addSupply(supply, null);
+      destroyBuilder.addParameterMetaData(type, value);
+      return this;
    }
 
    public BeanMetaDataBuilder addSupply(Object supply, String type)
@@ -277,13 +359,8 @@
       return this;
    }
 
-   public BeanMetaDataBuilder addDemand(Object demand)
+   public BeanMetaDataBuilder addDemand(Object demand, ControllerState whenRequired, String transformer)
    {
-      return addDemand(demand, null, null);
-   }
-
-   public BeanMetaDataBuilder addDemand(Object demand, String whenRequired, String transformer)
-   {
       Set<DemandMetaData> demands = beanMetaData.getDemands();
       if (demands == null)
       {
@@ -292,7 +369,7 @@
       }
       AbstractDemandMetaData admd = new AbstractDemandMetaData(demand);
       if (whenRequired != null)
-         admd.setWhenRequired(new ControllerState(whenRequired));
+         admd.setWhenRequired(whenRequired);
       if (transformer != null)
          admd.setTransformer(transformer);
       demands.add(admd);
@@ -311,76 +388,110 @@
       return this;
    }
 
-   public BeanMetaDataBuilder addInstall(String methodName)
+   public ParameterMetaDataBuilder addInstallWithParameters(String methodName, String bean, ControllerState state)
    {
-      return addInstall(methodName, null);
+      AbstractInstallMetaData install = (AbstractInstallMetaData) installBuilder.createLifecycleMetaData(methodName);
+      install.setBean(bean);
+      if (state != null)
+         install.setDependentState(state);
+      return new ParameterMetaDataBuilderImpl<AbstractInstallMetaData>(install);
    }
 
-   public BeanMetaDataBuilder addInstall(String methodName, String bean)
+   public ParameterMetaDataBuilder addUninstallWithParameters(String methodName, String bean, ControllerState state)
    {
-      return addInstall(methodName, bean, new String[]{}, new Object[]{});
+      AbstractInstallMetaData uninstall = (AbstractInstallMetaData) uninstallBuilder.createLifecycleMetaData(methodName);
+      uninstall.setBean(bean);
+      if (state != null)
+         uninstall.setDependentState(state);
+      return new ParameterMetaDataBuilderImpl<AbstractInstallMetaData>(uninstall);
    }
 
-   public BeanMetaDataBuilder addInstall(String methodName, String type, Object value)
+   public ValueMetaData createNull()
    {
-      return addInstall(methodName, null, type, value);
+      return new AbstractValueMetaData();
    }
-
-   public BeanMetaDataBuilder addInstall(String methodName, String bean, String type, Object value)
+   
+   public ValueMetaData createThis()
    {
-      return addInstall(methodName, bean, new String[]{type}, new Object[]{value});
+      return new ThisValueMetaData();
    }
-
-   public BeanMetaDataBuilder addInstall(String methodName, String[] types, Object[] values)
+   
+   public ValueMetaData createValue(Object value)
    {
-      return addInstall(methodName, null, types, values);
+      return new AbstractValueMetaData(value);
    }
-
-   public BeanMetaDataBuilder addInstall(String methodName, String bean, String[] types, Object[] values)
+   
+   public ValueMetaData createString(String type, String value)
    {
-      AbstractInstallMetaData install = (AbstractInstallMetaData)installBuilder.createLifecycleMetaData(methodName);
-      install.setBean(bean);
-      for(int i = 0; i < types.length; i++)
-      {
-         installBuilder.addParameter(install, types[i], values[i]);
-      }
-      return this;
+      StringValueMetaData result = new StringValueMetaData(value);
+      result.setType(type);
+      return result;
    }
-
-   public BeanMetaDataBuilder addUninstall(String methodName)
+   
+   public ValueMetaData createInject(Object bean, String property, ControllerState whenRequired, ControllerState dependentState)
    {
-      return addUninstall(methodName, null);
+      AbstractDependencyValueMetaData result = new AbstractDependencyValueMetaData(bean, property);
+      if (whenRequired != null)
+         result.setWhenRequiredState(whenRequired);
+      if (dependentState != null)
+         result.setDependentState(dependentState);
+      return result;
    }
-
-   public BeanMetaDataBuilder addUninstall(String methodName, String type, Object value)
+   
+   @SuppressWarnings("unchecked")
+   public Collection<ValueMetaData> createCollection(String collectionType, String elementType)
    {
-      return addUninstall(methodName, new String[]{type}, new Object[]{value});
+      AbstractCollectionMetaData collection = new AbstractCollectionMetaData();
+      if (collectionType != null)
+         collection.setType(collectionType);
+      if (elementType != null)
+         collection.setElementType(elementType);
+      return (Collection) collection;
    }
-
-   public BeanMetaDataBuilder addUninstall(String methodName, String[] types, Object[] values)
+   
+   @SuppressWarnings("unchecked")
+   public List<ValueMetaData> createList(String listType, String elementType)
    {
-      return addUninstall(methodName, null, types, values);
+      AbstractListMetaData collection = new AbstractListMetaData();
+      if (listType != null)
+         collection.setType(listType);
+      if (elementType != null)
+         collection.setElementType(elementType);
+      return (List) collection;
    }
-
-   public BeanMetaDataBuilder addUninstall(String methodName, String bean)
+   
+   @SuppressWarnings("unchecked")
+   public Set<ValueMetaData> createSet(String setType, String elementType)
    {
-      return addUninstall(methodName, bean, new String[]{}, new Object[]{});
+      AbstractSetMetaData collection = new AbstractSetMetaData();
+      if (setType != null)
+         collection.setType(setType);
+      if (elementType != null)
+         collection.setElementType(elementType);
+      return (Set) collection;
    }
-
-   public BeanMetaDataBuilder addUninstall(String methodName, String bean, String type, Object value)
+   
+   @SuppressWarnings("unchecked")
+   public List<ValueMetaData> createArray(String arrayType, String elementType)
    {
-      return addUninstall(methodName, bean, new String[]{type}, new Object[]{value});
+      AbstractArrayMetaData collection = new AbstractArrayMetaData();
+      if (arrayType != null)
+         collection.setType(arrayType);
+      if (elementType != null)
+         collection.setElementType(elementType);
+      return (List) collection;
    }
-
-   public BeanMetaDataBuilder addUninstall(String methodName, String bean, String[] types, Object[] values)
+   
+   @SuppressWarnings("unchecked")
+   public Map<ValueMetaData, ValueMetaData> createMap(String mapType, String keyType, String valueType)
    {
-      AbstractInstallMetaData uninstall = (AbstractInstallMetaData)uninstallBuilder.createLifecycleMetaData(methodName);
-      uninstall.setBean(bean);
-      for(int i = 0; i < types.length; i++)
-      {
-         uninstallBuilder.addParameter(uninstall, types[i], values[i]);
-      }
-      return this;
+      AbstractMapMetaData map = new AbstractMapMetaData();
+      if (mapType != null)
+         map.setType(mapType);
+      if (keyType != null)
+         map.setKeyType(keyType);
+      if (valueType != null)
+         map.setValue(valueType);
+      return (Map) map;
    }
-
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/LifecycleMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/LifecycleMetaDataBuilder.java	2008-02-15 14:10:54 UTC (rev 69861)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/LifecycleMetaDataBuilder.java	2008-02-15 14:11:55 UTC (rev 69862)
@@ -25,17 +25,18 @@
 import org.jboss.beans.metadata.plugins.AbstractLifecycleMetaData;
 import org.jboss.beans.metadata.spi.LifecycleMetaData;
 import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.beans.metadata.spi.builder.ParameterMetaDataBuilder;
 
 /**
  * Helper class.
  * @see BeanMetaDataBuilderImpl
- * @see ParameterMetaDataBuilder
+ * @see ParameterMetaDataBuilderImpl
  *
  * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
  */
 public abstract class LifecycleMetaDataBuilder extends StateMetaDataBuilder
 {
-   protected ParameterMetaDataBuilder<AbstractLifecycleMetaData> builder;
+   protected ParameterMetaDataBuilderImpl<AbstractLifecycleMetaData> builder;
 
    public LifecycleMetaDataBuilder(AbstractBeanMetaData beanMetaData)
    {
@@ -51,7 +52,7 @@
 
    protected void applyAfterSet(AbstractLifecycleMetaData lifecycle)
    {
-      builder = new ParameterMetaDataBuilder<AbstractLifecycleMetaData>(lifecycle);
+      builder = new ParameterMetaDataBuilderImpl<AbstractLifecycleMetaData>(lifecycle);
    }
 
    protected void checkLlifecycle()
@@ -63,13 +64,13 @@
       }
    }
 
-   public LifecycleMetaData addParameterMetaData(String type, Object value)
+   public ParameterMetaDataBuilder addParameterMetaData(String type, Object value)
    {
       checkLlifecycle();
       return builder.addParameterMetaData(type, value);
    }
 
-   public LifecycleMetaData addParameterMetaData(String type, ValueMetaData value)
+   public ParameterMetaDataBuilder addParameterMetaData(String type, ValueMetaData value)
    {
       checkLlifecycle();
       return builder.addParameterMetaData(type, value);

Deleted: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/ParameterMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/ParameterMetaDataBuilder.java	2008-02-15 14:10:54 UTC (rev 69861)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/ParameterMetaDataBuilder.java	2008-02-15 14:11:55 UTC (rev 69862)
@@ -1,83 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2006, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt 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.beans.metadata.plugins.builder;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.jboss.beans.metadata.plugins.AbstractParameterMetaData;
-import org.jboss.beans.metadata.spi.ParameterMetaData;
-import org.jboss.beans.metadata.spi.ValueMetaData;
-
-/**
- * Helper class.
- *
- * @param <T> the parameter holder type
- * @see BeanMetaDataBuilderImpl
- * @see LifecycleMetaDataBuilder
- * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
- */
-public class ParameterMetaDataBuilder<T extends MutableParameterizedMetaData>
-{
-   private T parameterHolder;
-
-   public ParameterMetaDataBuilder(T parameterHolder) throws IllegalArgumentException
-   {
-      this.parameterHolder = parameterHolder;
-   }
-
-   private List<ParameterMetaData> getParameters()
-   {
-      return parameterHolder.getParameters();
-   }
-
-   private void setParameters(List<ParameterMetaData> parameters)
-   {
-      parameterHolder.setParameters(parameters);
-   }
-
-   private List<ParameterMetaData> checkParameters()
-   {
-      List<ParameterMetaData> parameters = getParameters();
-      if (parameters == null)
-      {
-         parameters = new ArrayList<ParameterMetaData>();
-         setParameters(parameters);
-      }
-      return parameters;
-   }
-
-   public T addParameterMetaData(String type, Object value)
-   {
-      List<ParameterMetaData> parameters = checkParameters();
-      parameters.add(new AbstractParameterMetaData(type, value));
-      return parameterHolder;
-   }
-
-   public T addParameterMetaData(String type, ValueMetaData value)
-   {
-      List<ParameterMetaData> parameters = checkParameters();
-      parameters.add(new AbstractParameterMetaData(type, value));
-      return parameterHolder;
-   }
-
-}

Copied: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/ParameterMetaDataBuilderImpl.java (from rev 69811, projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/ParameterMetaDataBuilder.java)
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/ParameterMetaDataBuilderImpl.java	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/ParameterMetaDataBuilderImpl.java	2008-02-15 14:11:55 UTC (rev 69862)
@@ -0,0 +1,128 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.beans.metadata.plugins.builder;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.beans.metadata.plugins.AbstractParameterMetaData;
+import org.jboss.beans.metadata.spi.ParameterMetaData;
+import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.beans.metadata.spi.builder.ParameterMetaDataBuilder;
+
+/**
+ * Helper class.
+ *
+ * @param <T> the parameter holder type
+ * @see LifecycleMetaDataBuilder
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ * @author <a href="mailto:adrian at jboss.org">Adrian Brock</a>
+ */
+public class ParameterMetaDataBuilderImpl<T extends MutableParameterizedMetaData> implements ParameterMetaDataBuilder
+{
+   /** The parameter holder */
+   private T parameterHolder;
+
+   /**
+    * Create a new ParameterMetaDataBuilder.
+    * 
+    * @param parameterHolder the parameter holder
+    * @throws IllegalArgumentException for a null parameter
+    */
+   public ParameterMetaDataBuilderImpl(T parameterHolder)
+   {
+      if (parameterHolder == null)
+         throw new IllegalArgumentException("Null parameter holder");
+      this.parameterHolder = parameterHolder;
+   }
+
+   /**
+    * Get the parameters
+    * 
+    * @return the parameters
+    */
+   private List<ParameterMetaData> getParameters()
+   {
+      return parameterHolder.getParameters();
+   }
+
+   /**
+    * Set the parameters
+    * 
+    * @param parameters the parameters
+    */
+   private void setParameters(List<ParameterMetaData> parameters)
+   {
+      parameterHolder.setParameters(parameters);
+   }
+
+   /**
+    * Check the parameters
+    * 
+    * @return the parameters
+    */
+   private List<ParameterMetaData> checkParameters()
+   {
+      List<ParameterMetaData> parameters = getParameters();
+      if (parameters == null)
+      {
+         parameters = new ArrayList<ParameterMetaData>();
+         setParameters(parameters);
+      }
+      return parameters;
+   }
+
+   /**
+    * Add a parameter
+    * 
+    * @param type the type
+    * @param value the value
+    * @return the parameter
+    */
+   public ParameterMetaDataBuilder addParameterMetaData(String type, Object value)
+   {
+      List<ParameterMetaData> parameters = checkParameters();
+      parameters.add(new AbstractParameterMetaData(type, value));
+      return this;
+   }
+
+   /**
+    * Add a parameter
+    * 
+    * @param type the type
+    * @param value the value
+    * @return the parameter
+    */
+   public ParameterMetaDataBuilder addParameterMetaData(String type, String value)
+   {
+      List<ParameterMetaData> parameters = checkParameters();
+      parameters.add(new AbstractParameterMetaData(type, value));
+      return this;
+   }
+
+   public ParameterMetaDataBuilder addParameterMetaData(String type, ValueMetaData value)
+   {
+      List<ParameterMetaData> parameters = checkParameters();
+      parameters.add(new AbstractParameterMetaData(type, value));
+      return this;
+   }
+}

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/StateMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/StateMetaDataBuilder.java	2008-02-15 14:10:54 UTC (rev 69861)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/StateMetaDataBuilder.java	2008-02-15 14:11:55 UTC (rev 69862)
@@ -28,7 +28,7 @@
 /**
  * Helper class.
  * @see BeanMetaDataBuilderImpl
- * @see org.jboss.beans.metadata.plugins.builder.ParameterMetaDataBuilder
+ * @see org.jboss.beans.metadata.plugins.builder.ParameterMetaDataBuilderImpl
  *
  * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
  */

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java	2008-02-15 14:10:54 UTC (rev 69861)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java	2008-02-15 14:11:55 UTC (rev 69862)
@@ -21,99 +21,1155 @@
 */
 package org.jboss.beans.metadata.spi.builder;
 
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.builder.BeanMetaDataBuilderFactory;
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.beans.metadata.spi.ValueMetaData;
 import org.jboss.dependency.spi.ControllerMode;
+import org.jboss.dependency.spi.ControllerState;
 
 /**
  * BeanMetaDataBuilder contract.
- * TODO - javadocs
  *
  * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ * @author <a href="mailto:adrian at jboss.org">Adrian Brock</a>
  */
-public interface BeanMetaDataBuilder
+public abstract class BeanMetaDataBuilder
 {
-   BeanMetaData getBeanMetaData();
+   /**
+    * Create builder from bean.
+    *
+    * @param bean bean class name
+    * @return new Builder
+    */
+   public static BeanMetaDataBuilder createBuilder(String bean)
+   {
+      return BeanMetaDataBuilderFactory.createBuilder(bean);
+   }
 
-   BeanMetaDataBuilder setAliases(Set<Object> aliases);
+   /**
+    * Create builder from name and bean.
+    *
+    * @param name bean name
+    * @param bean bean class name
+    * @return new Builder
+    */
+   public static BeanMetaDataBuilder createBuilder(String name, String bean)
+   {
+      return BeanMetaDataBuilderFactory.createBuilder(name, bean);
+   }
 
-   BeanMetaDataBuilder setMode(String modeString);
+   /**
+    * Create builder from BeanMetaData.
+    *
+    * @param beanMetaData bean meta data
+    * @return new builder
+    */
+   public static BeanMetaDataBuilder createBuilder(AbstractBeanMetaData beanMetaData)
+   {
+      return BeanMetaDataBuilderFactory.createBuilder(beanMetaData);
+   }
 
-   BeanMetaDataBuilder setMode(ControllerMode mode);
+   /**
+    * Get the constructed bean metadata 
+    * 
+    * @return the bean metadata
+    */
+   public abstract BeanMetaData getBeanMetaData();
 
-   BeanMetaDataBuilder setClassLoader(Object classLoader);
+   /**
+    * Set the aliases
+    * 
+    * @param aliases the aliases
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder setAliases(Set<Object> aliases);
 
-   BeanMetaDataBuilder setConstructorValue(Object value);
+   /**
+    * Set the mode
+    * 
+    * @param modeString the mode
+    * @return the builder
+    */
+   public BeanMetaDataBuilder setMode(String modeString)
+   {
+      return setMode(new ControllerMode(modeString));
+   }
 
-   BeanMetaDataBuilder setConstructorValue(ValueMetaData value);
+   /**
+    * Set the mode
+    * 
+    * @param mode the mode
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder setMode(ControllerMode mode);
 
-   BeanMetaDataBuilder addConstructorParameter(String type, Object value);
+   /**
+    * Set that we don't want to use the deployment classloader
+    * 
+    * @return the builder
+    */
 
-   BeanMetaDataBuilder addConstructorParameter(String type, ValueMetaData value);
+   public BeanMetaDataBuilder setNoClassLoader()
+   {
+      return setClassLoader(createNull());
+   }
 
-   BeanMetaDataBuilder addPropertyMetaData(String name, Object value);
+   /**
+    * Set the classloader
+    * 
+    * @param classLoader the classloader
+    * @return the builder
+    */
 
-   BeanMetaDataBuilder addPropertyMetaData(String name, String value);
+   public BeanMetaDataBuilder setClassLoader(Object classLoader)
+   {
+      return setClassLoader(createValue(classLoader));
+   }
 
-   BeanMetaDataBuilder addPropertyMetaData(String name, ValueMetaData value);
+   /**
+    * Set the classloader
+    * 
+    * @param classLoader the classloader
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder setClassLoader(ValueMetaData classLoader);
 
-   BeanMetaDataBuilder setCreate(String methodName);
+   /**
+    * Set the factory
+    * 
+    * @param factory the factory
+    * @return the builder
+    */
+   public BeanMetaDataBuilder setFactory(Object factory)
+   {
+      return setFactory(createValue(factory));
+   }
 
-   BeanMetaDataBuilder addCreateParameter(String type, Object value);
+   /**
+    * Set the factory
+    * 
+    * @param bean the bean name
+    * @return the builder
+    */
+   public BeanMetaDataBuilder setFactory(String bean)
+   {
+      return setFactory(bean, null);
+   }
 
-   BeanMetaDataBuilder addCreateParameter(String type, ValueMetaData value);
+   /**
+    * Set the factory
+    * 
+    * @param bean the bean name
+    * @param property the property name for the factory
+    * @return the builder
+    */
+   public BeanMetaDataBuilder setFactory(String bean, String property)
+   {
+      return setFactory(createInject(bean, property));
+   }
 
-   BeanMetaDataBuilder setStart(String methodName);
+   /**
+    * Set the factory
+    * 
+    * @param factory the factory
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder setFactory(ValueMetaData factory);
 
-   BeanMetaDataBuilder addStartParameter(String type, Object value);
+   /**
+    * Set the factory class
+    * 
+    * @param factoryClass the factory class
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder setFactoryClass(String factoryClass);
 
-   BeanMetaDataBuilder addStartParameter(String type, ValueMetaData value);
+   /**
+    * Set the factory method
+    * 
+    * @param factoryMethod the factory method
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder setFactoryMethod(String factoryMethod);
 
-   BeanMetaDataBuilder setStop(String methodName);
+   /**
+    * Set the constructor value
+    * 
+    * @param value the object "constructed"
+    * @return the builder
+    */
+   
+   public BeanMetaDataBuilder setConstructorValue(Object value)
+   {
+      return setConstructorValue(createValue(value));
+   }
 
-   BeanMetaDataBuilder addStopParameter(String type, Object value);
+   /**
+    * Set the constructor value
+    * 
+    * @param type the type
+    * @param value the object "constructed"
+    * @return the builder
+    */
+   
+   public BeanMetaDataBuilder setConstructorValue(String type, String value)
+   {
+      return setConstructorValue(createString(type, value));
+   }
 
-   BeanMetaDataBuilder addStopParameter(String type, ValueMetaData value);
+   /**
+    * Set the constructor value
+    * 
+    * @param value the object "constructed"
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder setConstructorValue(ValueMetaData value);
 
-   BeanMetaDataBuilder setDestroy(String methodName);
+   /**
+    * Add a constructor parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addConstructorParameter(String type, Object value);
 
-   BeanMetaDataBuilder addDestroyParameter(String type, Object value);
+   /**
+    * Add a constructor parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addConstructorParameter(String type, String value);
 
-   BeanMetaDataBuilder addDestroyParameter(String type, ValueMetaData value);
+   /**
+    * Add a constructor parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addConstructorParameter(String type, ValueMetaData value);
 
-   BeanMetaDataBuilder addSupply(Object supply);
+   /**
+    * Add a property
+    * 
+    * @param name the property name
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addPropertyMetaData(String name, Object value);
 
-   BeanMetaDataBuilder addSupply(Object supply, String type);
+   /**
+    * Add a property
+    * 
+    * @param name the property name
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addPropertyMetaData(String name, String value);
 
-   BeanMetaDataBuilder addDemand(Object demand);
+   /**
+    * Add a property
+    * 
+    * @param name the property name
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addPropertyMetaData(String name, ValueMetaData value);
 
-   BeanMetaDataBuilder addDemand(Object demand, String whenRequired, String transformer);
+   /**
+    * Set the create method
+    * 
+    * @param methodName the method name
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder setCreate(String methodName);
 
-   BeanMetaDataBuilder addDependency(Object dependency);
+   /**
+    * Add a create parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addCreateParameter(String type, Object value);
 
-   BeanMetaDataBuilder addInstall(String methodName);
+   /**
+    * Add a create parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addCreateParameter(String type, String value);
 
-   BeanMetaDataBuilder addInstall(String methodName, String bean);
+   /**
+    * Add a create parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addCreateParameter(String type, ValueMetaData value);
 
-   BeanMetaDataBuilder addInstall(String methodName, String type, Object value);
+   /**
+    * Set the start method
+    * 
+    * @param methodName the method name
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder setStart(String methodName);
 
-   BeanMetaDataBuilder addInstall(String methodName, String bean, String type, Object value);
+   /**
+    * Add a start parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addStartParameter(String type, Object value);
 
-   BeanMetaDataBuilder addInstall(String methodName, String[] types, Object[] values);
+   /**
+    * Add a start parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addStartParameter(String type, String value);
 
-   BeanMetaDataBuilder addInstall(String methodName, String bean, String[] types, Object[] values);
+   /**
+    * Add a start parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addStartParameter(String type, ValueMetaData value);
 
-   BeanMetaDataBuilder addUninstall(String methodName);
+   /**
+    * Set the stop method
+    * 
+    * @param methodName the method name
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder setStop(String methodName);
 
-   BeanMetaDataBuilder addUninstall(String methodName, String type, Object value);
+   /**
+    * Add a stop parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addStopParameter(String type, Object value);
 
-   BeanMetaDataBuilder addUninstall(String methodName, String[] types, Object[] values);
+   /**
+    * Add a stop parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addStopParameter(String type, String value);
 
-   BeanMetaDataBuilder addUninstall(String methodName, String bean);
+   /**
+    * Add a stop parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addStopParameter(String type, ValueMetaData value);
 
-   BeanMetaDataBuilder addUninstall(String methodName, String bean, String type, Object value);
+   /**
+    * Set the destroy method
+    * 
+    * @param methodName the method name
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder setDestroy(String methodName);
 
-   BeanMetaDataBuilder addUninstall(String methodName, String bean, String[] types, Object[] values);
+   /**
+    * Add a destroy parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addDestroyParameter(String type, Object value);
+
+   /**
+    * Add a destroy parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addDestroyParameter(String type, String value);
+
+   /**
+    * Add a destroy parameter
+    * 
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addDestroyParameter(String type, ValueMetaData value);
+
+   /**
+    * Add a supply
+    * 
+    * @param supply the supply
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addSupply(Object supply)
+   {
+      return addSupply(supply, null);
+   }
+
+   /**
+    * Add a supply
+    * 
+    * @param supply the supply
+    * @param type the supply type
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addSupply(Object supply, String type);
+
+   /**
+    * Add a demand
+    * 
+    * @param demand the demand
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addDemand(Object demand)
+   {
+      return addDemand(demand, (ControllerState) null, null);
+   }
+
+   /**
+    * Add a demand
+    * 
+    * @param demand the demand
+    * @param whenRequired when the demand is required
+    * @param transformer the transformer
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addDemand(Object demand, String whenRequired, String transformer)
+   {
+      ControllerState whenRequiredState = null;
+      if (whenRequired != null)
+         whenRequiredState = new ControllerState(whenRequired);
+      return addDemand(demand, whenRequiredState, transformer);
+   }
+
+   /**
+    * Add a demand
+    * 
+    * @param demand the demand
+    * @param whenRequired when the demand is required
+    * @param transformer the transformer
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addDemand(Object demand, ControllerState whenRequired, String transformer);
+
+   /**
+    * Add a dependency
+    * 
+    * @param dependency the dependency
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder addDependency(Object dependency);
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstall(String methodName)
+   {
+      return addInstall(methodName, null);
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstall(String methodName, String type, Object value)
+   {
+      return addInstall(methodName, null, type, value);
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstall(String methodName, String type, String value)
+   {
+      return addInstall(methodName, null, type, value);
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstall(String methodName, String type, ValueMetaData value)
+   {
+      return addInstall(methodName, null, type, value);
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param types the parameter types
+    * @param values the values
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstall(String methodName, String[] types, Object[] values)
+   {
+      return addInstall(methodName, null, types, values);
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param types the parameter types
+    * @param values the values
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstall(String methodName, String[] types, String[] values)
+   {
+      return addInstall(methodName, null, types, values);
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param types the parameter types
+    * @param values the values
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstall(String methodName, String[] types, ValueMetaData[] values)
+   {
+      return addInstall(methodName, null, types, values);
+   }
+
+   /**
+    * Add an install with a this parameter
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstallWithThis(String methodName, String bean)
+   {
+      return addInstallWithThis(methodName, bean, null);
+   }
+
+   /**
+    * Add an install with a this parameter
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param state the state when to install
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstallWithThis(String methodName, String bean, ControllerState state)
+   {
+      ParameterMetaDataBuilder parameters = addInstallWithParameters(methodName, bean, state);
+      parameters.addParameterMetaData(null, createThis());
+      return this;
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstall(String methodName, String bean)
+   {
+      addInstallWithParameters(methodName, bean);
+      return this;
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstall(String methodName, String bean, String type, Object value)
+   {
+      ParameterMetaDataBuilder parameters = addInstallWithParameters(methodName, bean);
+      parameters.addParameterMetaData(type, value);
+      return this;
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstall(String methodName, String bean, String type, String value)
+   {
+      ParameterMetaDataBuilder parameters = addInstallWithParameters(methodName, bean);
+      parameters.addParameterMetaData(type, value);
+      return this;
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstall(String methodName, String bean, String type, ValueMetaData value)
+   {
+      ParameterMetaDataBuilder parameters = addInstallWithParameters(methodName, bean);
+      parameters.addParameterMetaData(type, value);
+      return this;
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param types the parameter types
+    * @param values the values
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstall(String methodName, String bean, String[] types, Object[] values)
+   {
+      ParameterMetaDataBuilder parameters = addInstallWithParameters(methodName, bean);
+      for (int i = 0; i < types.length; i++)
+         parameters.addParameterMetaData(types[i], values[i]);
+      return this;
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param types the parameter types
+    * @param values the values
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstall(String methodName, String bean, String[] types, String[] values)
+   {
+      ParameterMetaDataBuilder parameters = addInstallWithParameters(methodName, bean);
+      for (int i = 0; i < types.length; i++)
+         parameters.addParameterMetaData(types[i], values[i]);
+      return this;
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param types the parameter types
+    * @param values the values
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addInstall(String methodName, String bean, String[] types, ValueMetaData[] values)
+   {
+      ParameterMetaDataBuilder parameters = addInstallWithParameters(methodName, bean);
+      for (int i = 0; i < types.length; i++)
+         parameters.addParameterMetaData(types[i], values[i]);
+      return this;
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @return the builder
+    */
+   public ParameterMetaDataBuilder addInstallWithParameters(String methodName)
+   {
+      return addInstallWithParameters(methodName, null);
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @return the builder
+    */
+   public ParameterMetaDataBuilder addInstallWithParameters(String methodName, String bean)
+   {
+      return addInstallWithParameters(methodName, bean, null);
+   }
+
+   /**
+    * Add an install
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param state the state when to install
+    * @return the parameter builder
+    */
+   public abstract ParameterMetaDataBuilder addInstallWithParameters(String methodName, String bean, ControllerState state);
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstall(String methodName)
+   {
+      return addUninstall(methodName, null);
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstall(String methodName, String type, Object value)
+   {
+      return addUninstall(methodName, null, type, value);
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstall(String methodName, String type, String value)
+   {
+      return addUninstall(methodName, null, type, value);
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstall(String methodName, String type, ValueMetaData value)
+   {
+      return addUninstall(methodName, null, type, value);
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param types the parameter types
+    * @param values the values
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstall(String methodName, String[] types, Object[] values)
+   {
+      return addUninstall(methodName, null, types, values);
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param types the parameter types
+    * @param values the values
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstall(String methodName, String[] types, String[] values)
+   {
+      return addUninstall(methodName, null, types, values);
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param types the parameter types
+    * @param values the values
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstall(String methodName, String[] types, ValueMetaData[] values)
+   {
+      return addUninstall(methodName, null, types, values);
+   }
+
+   /**
+    * Add an uninstall with a this parameter
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstallWithThis(String methodName, String bean)
+   {
+      return addUninstallWithThis(methodName, bean, null);
+   }
+
+   /**
+    * Add an uninstall with a this parameter
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param state the state when to uninstall
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstallWithThis(String methodName, String bean, ControllerState state)
+   {
+      ParameterMetaDataBuilder parameters = addUninstallWithParameters(methodName, bean, state);
+      parameters.addParameterMetaData(null, createThis());
+      return this;
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstall(String methodName, String bean)
+   {
+      addUninstallWithParameters(methodName, bean);
+      return this;
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstall(String methodName, String bean, String type, Object value)
+   {
+      ParameterMetaDataBuilder parameters = addUninstallWithParameters(methodName, bean);
+      parameters.addParameterMetaData(type, value);
+      return this;
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstall(String methodName, String bean, String type, String value)
+   {
+      ParameterMetaDataBuilder parameters = addUninstallWithParameters(methodName, bean);
+      parameters.addParameterMetaData(type, value);
+      return this;
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param type the parameter type
+    * @param value the value
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstall(String methodName, String bean, String type, ValueMetaData value)
+   {
+      ParameterMetaDataBuilder parameters = addUninstallWithParameters(methodName, bean);
+      parameters.addParameterMetaData(type, value);
+      return this;
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param types the parameter types
+    * @param values the values
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstall(String methodName, String bean, String[] types, Object[] values)
+   {
+      ParameterMetaDataBuilder parameters = addUninstallWithParameters(methodName, bean);
+      for (int i = 0; i < types.length; ++i)
+         parameters.addParameterMetaData(types[i], values[i]);
+      return this;
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param types the parameter types
+    * @param values the values
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstall(String methodName, String bean, String[] types, String[] values)
+   {
+      ParameterMetaDataBuilder parameters = addUninstallWithParameters(methodName, bean);
+      for (int i = 0; i < types.length; ++i)
+         parameters.addParameterMetaData(types[i], values[i]);
+      return this;
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param types the parameter types
+    * @param values the values
+    * @return the builder
+    */
+   public BeanMetaDataBuilder addUninstall(String methodName, String bean, String[] types, ValueMetaData[] values)
+   {
+      ParameterMetaDataBuilder parameters = addUninstallWithParameters(methodName, bean);
+      for (int i = 0; i < types.length; ++i)
+         parameters.addParameterMetaData(types[i], values[i]);
+      return this;
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @return the builder
+    */
+   public ParameterMetaDataBuilder addUninstallWithParameters(String methodName)
+   {
+      return addUninstallWithParameters(methodName, null);
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @return the builder
+    */
+   public ParameterMetaDataBuilder addUninstallWithParameters(String methodName, String bean)
+   {
+      return addUninstallWithParameters(methodName, bean, null);
+   }
+
+   /**
+    * Add an uninstall
+    * 
+    * @param methodName the method name
+    * @param bean the bean name
+    * @param state the state when to install
+    * @return the parameter builder
+    */
+   public abstract ParameterMetaDataBuilder addUninstallWithParameters(String methodName, String bean, ControllerState state);
+   
+   /**
+    * Create a null value
+    * 
+    * @return the null value
+    */
+   public abstract ValueMetaData createNull();
+   
+   /**
+    * Create a this value
+    * 
+    * @return the this value
+    */
+   public abstract ValueMetaData createThis();
+   
+   /**
+    * Create a value
+    * 
+    * @param value the already constructed value
+    * @return the value
+    */
+   public abstract ValueMetaData createValue(Object value);
+   
+   /**
+    * Create a string value
+    * 
+    * @param type the type to be converted into
+    * @param value the value 
+    * @return the string value
+    */
+   public abstract ValueMetaData createString(String type, String value);
+   
+   /**
+    * Create an injection
+    * 
+    * @param bean the bean to inject
+    * @return the injection
+    */
+   public ValueMetaData createInject(Object bean)
+   {
+      return createInject(bean, null, null, null);
+   }
+   
+   /**
+    * Create an injection
+    * 
+    * @param bean the bean to inject
+    * @param property the property of the bean
+    * @return the injection
+    */
+   public ValueMetaData createInject(Object bean, String property)
+   {
+      return createInject(bean, property, null, null);
+   }
+   
+   /**
+    * Create an injection
+    * 
+    * @param bean the bean to inject
+    * @param property the property of the bean
+    * @param whenRequired when the injection is required
+    * @param dependentState the state of the injected bean
+    * @return the injection
+    */
+   public abstract ValueMetaData createInject(Object bean, String property, ControllerState whenRequired, ControllerState dependentState);
+   
+   /**
+    * Create a new collection
+    * 
+    * @return the collection
+    */
+   public Collection<ValueMetaData> createCollection()
+   {
+      return createCollection(null, null);
+   }
+   
+   /**
+    * Create a new collection
+    * 
+    * @param collectionType the collection type
+    * @param elementType the element type
+    * @return the collection
+    */
+   public abstract Collection<ValueMetaData> createCollection(String collectionType, String elementType);
+   
+   /**
+    * Create a new list
+    * 
+    * @return the list
+    */
+   public List<ValueMetaData> createList()
+   {
+      return createList(null, null);
+   }
+   
+   /**
+    * Create a new list
+    * 
+    * @param listType the list type
+    * @param elementType the element type
+    * @return the list
+    */
+   public abstract List<ValueMetaData> createList(String listType, String elementType);
+   
+   /**
+    * Create a new set
+    * 
+    * @return the set
+    */
+   public Set<ValueMetaData> createSet()
+   {
+      return createSet(null, null);
+   }
+   
+   /**
+    * Create a new set
+    * 
+    * @param setType the set type
+    * @param elementType the element type
+    * @return the set
+    */
+   public abstract Set<ValueMetaData> createSet(String setType, String elementType);
+   
+   /**
+    * Create a new array
+    * 
+    * @return the array
+    */
+   public List<ValueMetaData> createArray()
+   {
+      return createArray(null, null);
+   }
+   
+   /**
+    * Create a new array
+    * 
+    * @param arrayType the array type
+    * @param elementType the element type
+    * @return the set
+    */
+   public abstract List<ValueMetaData> createArray(String arrayType, String elementType);
+   
+   /**
+    * Create a new map
+    * 
+    * @return the map
+    */
+   public Map<ValueMetaData, ValueMetaData> createMap()
+   {
+      return createMap(null, null, null);
+   }
+   
+   /**
+    * Create a new map
+    * 
+    * @param mapType the map type
+    * @param keyType the key type
+    * @param valueType the value type
+    * @return the map
+    */
+   public abstract Map<ValueMetaData, ValueMetaData> createMap(String mapType, String keyType, String valueType);
 }

Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/ParameterMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/ParameterMetaDataBuilder.java	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/ParameterMetaDataBuilder.java	2008-02-15 14:11:55 UTC (rev 69862)
@@ -0,0 +1,60 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.beans.metadata.spi.builder;
+
+import org.jboss.beans.metadata.spi.ValueMetaData;
+
+/**
+ * ParameterMetaDataBuilder.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ParameterMetaDataBuilder
+{
+   /**
+    * Add a parameter
+    * 
+    * @param type the type
+    * @param value the value
+    * @return the parameter
+    */
+   ParameterMetaDataBuilder addParameterMetaData(String type, Object value);
+
+   /**
+    * Add a parameter
+    * 
+    * @param type the type
+    * @param value the value
+    * @return the builder
+    */
+   ParameterMetaDataBuilder addParameterMetaData(String type, String value);
+
+   /**
+    * Add a parameter
+    * 
+    * @param type the type
+    * @param value the value
+    * @return the builder
+    */
+   ParameterMetaDataBuilder addParameterMetaData(String type, ValueMetaData value);
+}

Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/dependency/test/MatcherDemandSupplyTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/dependency/test/MatcherDemandSupplyTestCase.java	2008-02-15 14:10:54 UTC (rev 69861)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/dependency/test/MatcherDemandSupplyTestCase.java	2008-02-15 14:11:55 UTC (rev 69862)
@@ -78,17 +78,17 @@
    protected void setBeanMetaDatas() throws Throwable
    {
       BeanMetaDataBuilder b0 = BeanMetaDataBuilderFactory.createBuilder("regexpDemander", Object.class.getName());
-      b0.addDemand("^[a-zA-Z0-9._%+-]+ at acme\\.((org)|(com))$", null, "regexp");
+      b0.addDemand("^[a-zA-Z0-9._%+-]+ at acme\\.((org)|(com))$", (String) null, "regexp");
       BeanMetaDataBuilder b1 = BeanMetaDataBuilderFactory.createBuilder("regexpSupplier", Object.class.getName());
       b1.addSupply("aj at acme.org");
 
       BeanMetaDataBuilder b2 = BeanMetaDataBuilderFactory.createBuilder("intervalDemander", Object.class.getName());
-      b2.addDemand("(1,10]", null, "interval");
+      b2.addDemand("(1,10]", (String) null, "interval");
       BeanMetaDataBuilder b3 = BeanMetaDataBuilderFactory.createBuilder("intervalSupplier", Object.class.getName());
       b3.addSupply("5", "java.lang.Integer");
 
       BeanMetaDataBuilder b4 = BeanMetaDataBuilderFactory.createBuilder("customDemander", Object.class.getName());
-      b4.addDemand("fragment", null, CustomMatcherTransfomer.class.getName());
+      b4.addDemand("fragment", (String) null, CustomMatcherTransfomer.class.getName());
       BeanMetaDataBuilder b5 = BeanMetaDataBuilderFactory.createBuilder("customSupplier", Object.class.getName());
       b5.addSupply("i supply fragment word");
 




More information about the jboss-cvs-commits mailing list