[jboss-cvs] JBossAS SVN: r59524 - in projects/microcontainer/trunk: kernel/src/main/org/jboss/beans/metadata/plugins and 4 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jan 11 08:23:05 EST 2007


Author: adrian at jboss.org
Date: 2007-01-11 08:22:49 -0500 (Thu, 11 Jan 2007)
New Revision: 59524

Added:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/CreateLifecycleMetaDataBuilder.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/DestroyLifecycleMetaDataBuilder.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/MutableParameterizedMetaData.java
   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/StartLifecycleMetaDataBuilder.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/StopLifecycleMetaDataBuilder.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/ParameterizedMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java
Removed:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/BeanMetaDataBuilder.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/LifecycleMetaDataBuilder.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/ParameterMetaDataBuilder.java
Modified:
   projects/microcontainer/trunk/container/src/main/org/jboss/reflect/plugins/ProgressionConvertor.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractLifecycleMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/ConstructorMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/LifecycleMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/config/Configurator.java
Log:
Fix the MC testsuite.
Refactor the new builder.
Some sourcecode tidyup.

Modified: projects/microcontainer/trunk/container/src/main/org/jboss/reflect/plugins/ProgressionConvertor.java
===================================================================
--- projects/microcontainer/trunk/container/src/main/org/jboss/reflect/plugins/ProgressionConvertor.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/container/src/main/org/jboss/reflect/plugins/ProgressionConvertor.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -45,6 +45,7 @@
     * @param target class type
     * @param value to progress
     * @return progressed value - it's class type now equals to target
+    * @throws Throwable for any error
     */
    Object doProgression(Class<? extends Object> target, Object value) throws Throwable;
 

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -25,6 +25,7 @@
 import java.util.*;
 
 import org.jboss.beans.info.spi.BeanInfo;
+import org.jboss.beans.metadata.plugins.builder.MutableParameterizedMetaData;
 import org.jboss.beans.metadata.spi.*;
 import org.jboss.kernel.plugins.config.Configurator;
 import org.jboss.kernel.spi.config.KernelConfigurator;
@@ -42,7 +43,7 @@
  * @version $Revision$
  */
 public class AbstractConstructorMetaData extends AbstractFeatureMetaData
-   implements ConstructorMetaData, Serializable
+   implements ConstructorMetaData, MutableParameterizedMetaData, Serializable
 {
    private static final long serialVersionUID = 1L;
 

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractLifecycleMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractLifecycleMetaData.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractLifecycleMetaData.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -25,6 +25,7 @@
 import java.util.List;
 import java.util.Set;
 
+import org.jboss.beans.metadata.plugins.builder.MutableParameterizedMetaData;
 import org.jboss.beans.metadata.spi.LifecycleMetaData;
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
@@ -44,7 +45,7 @@
  * @version $Revision$
  */
 public class AbstractLifecycleMetaData extends AbstractFeatureMetaData
-   implements LifecycleMetaData, Serializable
+   implements LifecycleMetaData, MutableParameterizedMetaData, Serializable
 {
    private static final long serialVersionUID = 1L;
 

Deleted: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/BeanMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/BeanMetaDataBuilder.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/BeanMetaDataBuilder.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -1,231 +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;
-
-import java.util.Set;
-import java.util.HashSet;
-import java.util.List;
-import java.util.ArrayList;
-
-import org.jboss.beans.metadata.spi.*;
-import org.jboss.dependency.spi.ControllerMode;
-
-/**
- * Helper class.
- * Similar to StringBuffer, methods return current instance of BeanMetaDataBuilder.
- *
- * TODO - add on demand, when building OSGi, Spring, ...
- *
- * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
- */
-public class BeanMetaDataBuilder
-{
-   private AbstractBeanMetaData beanMetaData;
-   // parameter builders
-   private ParameterMetaDataBuilder<ConstructorMetaData> constructorBuilder;
-   private LifecycleMetaDataBuilder createBuilder;
-   private LifecycleMetaDataBuilder startBuilder;
-   private LifecycleMetaDataBuilder stopBuilder;
-   private LifecycleMetaDataBuilder destroyBuilder;
-//   private ParameterMetaDataBuilder<InstallMetaData> installBuilder;
-//   private ParameterMetaDataBuilder<InstallMetaData> uninstallBuilder;
-
-   public BeanMetaDataBuilder(String bean)
-   {
-      this(new AbstractBeanMetaData(bean));
-   }
-
-   public BeanMetaDataBuilder(String name, String bean)
-   {
-      this(new AbstractBeanMetaData(name, bean));
-   }
-
-   public BeanMetaDataBuilder(AbstractBeanMetaData beanMetaData)
-   {
-      this.beanMetaData = beanMetaData;
-      // lifecycle builders
-      createBuilder = new LifecycleMetaDataBuilder(beanMetaData, LifecycleMetaDataBuilder.LifecycleType.CREATE);
-      startBuilder = new LifecycleMetaDataBuilder(beanMetaData, LifecycleMetaDataBuilder.LifecycleType.START);
-      stopBuilder = new LifecycleMetaDataBuilder(beanMetaData, LifecycleMetaDataBuilder.LifecycleType.STOP);
-      destroyBuilder = new LifecycleMetaDataBuilder(beanMetaData, LifecycleMetaDataBuilder.LifecycleType.DESTROY);
-   }
-
-   public BeanMetaData getBeanMetaData()
-   {
-      return beanMetaData;
-   }
-
-   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)
-   {
-      beanMetaData.setClassLoader(new AbstractClassLoaderMetaData(new AbstractValueMetaData(classLoader)));
-      return this;
-   }
-
-   public BeanMetaDataBuilder addConstructorParameter(String type, Object value)
-   {
-      ConstructorMetaData constructor = beanMetaData.getConstructor();
-      if (constructor == null)
-      {
-         constructor = new AbstractConstructorMetaData();
-         beanMetaData.setConstructor(constructor);
-         constructorBuilder = new ParameterMetaDataBuilder<ConstructorMetaData>(constructor);
-      }
-      constructorBuilder.addParameterMetaData(type, value);
-      return this;
-   }
-
-   public BeanMetaDataBuilder addPropertyMetaData(String name, Object value)
-   {
-      Set<PropertyMetaData> properties = beanMetaData.getProperties();
-      if (properties == null)
-      {
-         properties = new HashSet<PropertyMetaData>();
-         beanMetaData.setProperties(properties);
-      }
-      properties.add(new AbstractPropertyMetaData(name, value));
-      return this;
-   }
-
-   public BeanMetaDataBuilder setCreate(String methodName)
-   {
-      createBuilder.createLifecycleMetaData(methodName);
-      return this;
-   }
-
-   public BeanMetaDataBuilder addCreateParameter(String type, Object value)
-   {
-      createBuilder.addParameterMetaData(type, value);
-      return this;
-   }
-
-   public BeanMetaDataBuilder setStart(String methodName)
-   {
-      startBuilder.createLifecycleMetaData(methodName);
-      return this;
-   }
-
-   public BeanMetaDataBuilder addStartParameter(String type, Object value)
-   {
-      startBuilder.addParameterMetaData(type, value);
-      return this;
-   }
-
-   public BeanMetaDataBuilder setStop(String methodName)
-   {
-      stopBuilder.createLifecycleMetaData(methodName);
-      return this;
-   }
-
-   public BeanMetaDataBuilder addStopParameter(String type, Object value)
-   {
-      stopBuilder.addParameterMetaData(type, value);
-      return this;
-   }
-
-   public BeanMetaDataBuilder setDestroy(String methodName)
-   {
-      destroyBuilder.createLifecycleMetaData(methodName);
-      return this;
-   }
-
-   public BeanMetaDataBuilder addDestroyParameter(String type, Object value)
-   {
-      destroyBuilder.addParameterMetaData(type, value);
-      return this;
-   }
-
-   public BeanMetaDataBuilder addSupply(Object supply)
-   {
-      Set<SupplyMetaData> supplies = beanMetaData.getSupplies();
-      if (supplies == null)
-      {
-         supplies = new HashSet<SupplyMetaData>();
-         beanMetaData.setSupplies(supplies);
-      }
-      supplies.add(new AbstractSupplyMetaData(supply));
-      return this;
-   }
-
-   public BeanMetaDataBuilder addDemand(Object demand)
-   {
-      Set<DemandMetaData> demands = beanMetaData.getDemands();
-      if (demands == null)
-      {
-         demands = new HashSet<DemandMetaData>();
-         beanMetaData.setDemands(demands);
-      }
-      demands.add(new AbstractDemandMetaData(demand));
-      return this;
-   }
-
-   public BeanMetaDataBuilder addDependency(Object dependency)
-   {
-      Set<DependencyMetaData> dependencies = beanMetaData.getDepends();
-      if (dependencies == null)
-      {
-         dependencies = new HashSet<DependencyMetaData>();
-         beanMetaData.setDepends(dependencies);
-      }
-      dependencies.add(new AbstractDependencyMetaData(dependency));
-      return this;
-   }
-
-   public BeanMetaDataBuilder addInstall(String methodName)
-   {
-      List<InstallMetaData> installs = beanMetaData.getInstalls();
-      if (installs == null)
-      {
-         installs = new ArrayList<InstallMetaData>();
-         beanMetaData.setInstalls(installs);
-      }
-      AbstractInstallMetaData installMetaData = new AbstractInstallMetaData();
-      installMetaData.setMethodName(methodName);
-      installs.add(installMetaData);
-      return this;
-   }
-
-   public BeanMetaDataBuilder addUninstall(String methodName)
-   {
-      List<InstallMetaData> uninstalls = beanMetaData.getUninstalls();
-      if (uninstalls == null)
-      {
-         uninstalls = new ArrayList<InstallMetaData>();
-         beanMetaData.setUninstalls(uninstalls);
-      }
-      AbstractInstallMetaData uninstallMetaData = new AbstractInstallMetaData();
-      uninstallMetaData.setMethodName(methodName);
-      uninstalls.add(uninstallMetaData);
-      return this;
-   }
-
-}

Deleted: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/LifecycleMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/LifecycleMetaDataBuilder.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/LifecycleMetaDataBuilder.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -1,122 +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;
-
-import java.lang.reflect.Method;
-
-import org.jboss.beans.metadata.spi.LifecycleMetaData;
-
-/**
- * Helper class.
- * @see BeanMetaDataBuilder
- * @see ParameterMetaDataBuilder
- *
- * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
- */
-public class LifecycleMetaDataBuilder
-{
-   private AbstractBeanMetaData beanMetaData;
-   private Method GET_METHOD;
-   private Method SET_METHOD;
-   private ParameterMetaDataBuilder<LifecycleMetaData> builder;
-
-   public enum LifecycleType
-   {
-      CREATE("Create"),
-      START("Start"),
-      STOP("Stop"),
-      DESTROY("Destroy");
-
-      private String type;
-
-      LifecycleType(String type)
-      {
-         this.type = type;
-      }
-
-      public String toString()
-      {
-         return type;
-      }
-   }
-
-   public LifecycleMetaDataBuilder(AbstractBeanMetaData beanMetaData, LifecycleType type) throws IllegalArgumentException
-   {
-      this.beanMetaData = beanMetaData;
-      try
-      {
-         GET_METHOD = AbstractBeanMetaData.class.getMethod("get" + type);
-         SET_METHOD = AbstractBeanMetaData.class.getMethod("set" + type, LifecycleMetaData.class);
-      }
-      catch (NoSuchMethodException e)
-      {
-         throw new IllegalArgumentException("Holder MetaData object doesn't implement get or set " + type + " method: " + e);
-      }
-   }
-
-   private LifecycleMetaData getLifecycle()
-   {
-      try
-      {
-         return (LifecycleMetaData) GET_METHOD.invoke(beanMetaData);
-      }
-      catch (Exception e)
-      {
-         throw new IllegalArgumentException(e);
-      }
-   }
-
-   private void setLifecycle(LifecycleMetaData lifecycle)
-   {
-      try
-      {
-         SET_METHOD.invoke(beanMetaData, lifecycle);
-      }
-      catch (Exception e)
-      {
-         throw new IllegalArgumentException(e);
-      }
-   }
-
-   public LifecycleMetaData createLifecycleMetaData(String methodName)
-   {
-      AbstractLifecycleMetaData lifecycle = new AbstractLifecycleMetaData();
-      if (methodName != null)
-      {
-         lifecycle.setMethodName(methodName);
-      }
-      setLifecycle(lifecycle);
-      builder = new ParameterMetaDataBuilder<LifecycleMetaData>(lifecycle);
-      return lifecycle;
-   }
-
-   public LifecycleMetaData addParameterMetaData(String type, Object value)
-   {
-      LifecycleMetaData lifecycle = getLifecycle();
-      if (lifecycle == null)
-      {
-         createLifecycleMetaData(null);
-      }
-      return builder.addParameterMetaData(type, value);
-   }
-
-}

Deleted: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/ParameterMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/ParameterMetaDataBuilder.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/ParameterMetaDataBuilder.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -1,93 +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;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.jboss.beans.metadata.spi.ParameterMetaData;
-
-/**
- * Helper class.
- * @see BeanMetaDataBuilder
- * @see LifecycleMetaDataBuilder
- *
- * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
- */
-public class ParameterMetaDataBuilder<T>
-{
-   private T parameterHolder;
-   private Method GET_PARAMETERS;
-   private Method SET_PARAMETERS;
-
-   public ParameterMetaDataBuilder(T parameterHolder) throws IllegalArgumentException
-   {
-      this.parameterHolder = parameterHolder;
-      try
-      {
-         GET_PARAMETERS = parameterHolder.getClass().getMethod("getParameters");
-         SET_PARAMETERS = parameterHolder.getClass().getMethod("setParameters", List.class);
-      }
-      catch (NoSuchMethodException e)
-      {
-         throw new IllegalArgumentException("Holder MetaData object doesn't implement get or set parameters method: " + e);
-      }
-   }
-
-   private List<ParameterMetaData> getParameters()
-   {
-      try
-      {
-         return (List<ParameterMetaData>) GET_PARAMETERS.invoke(parameterHolder);
-      }
-      catch (Exception e)
-      {
-         throw new IllegalArgumentException(e);
-      }
-   }
-
-   private void setParameters(List<ParameterMetaData> parameters)
-   {
-      try
-      {
-         SET_PARAMETERS.invoke(parameterHolder, parameters);
-      }
-      catch (Exception e)
-      {
-         throw new IllegalArgumentException(e);
-      }
-   }
-
-   public T addParameterMetaData(String type, Object value)
-   {
-      List<ParameterMetaData> parameters = getParameters();
-      if (parameters == null)
-      {
-         parameters = new ArrayList<ParameterMetaData>();
-         setParameters(parameters);
-      }
-      parameters.add(new AbstractParameterMetaData(type, value));
-      return parameterHolder;
-   }
-
-}

Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/CreateLifecycleMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/CreateLifecycleMetaDataBuilder.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/CreateLifecycleMetaDataBuilder.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -0,0 +1,56 @@
+/*
+* 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 org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.spi.LifecycleMetaData;
+
+/**
+ * CreateLifecycleMetaDataBuilder.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class CreateLifecycleMetaDataBuilder extends LifecycleMetaDataBuilder
+{
+   /**
+    * Create a new CreateLifecycleMetaDataBuilder.
+    * 
+    * @param beanMetaData
+    * @throws IllegalArgumentException
+    */
+   public CreateLifecycleMetaDataBuilder(AbstractBeanMetaData beanMetaData) throws IllegalArgumentException
+   {
+      super(beanMetaData);
+   }
+
+   LifecycleMetaData getLifecycle(AbstractBeanMetaData beanMetaData)
+   {
+      return beanMetaData.getCreate();
+   }
+
+   void setLifecycle(AbstractBeanMetaData beanMetaData, LifecycleMetaData lifecycle)
+   {
+      beanMetaData.setCreate(lifecycle);
+   }
+
+}
\ No newline at end of file

Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/DestroyLifecycleMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/DestroyLifecycleMetaDataBuilder.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/DestroyLifecycleMetaDataBuilder.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -0,0 +1,56 @@
+/*
+* 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 org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.spi.LifecycleMetaData;
+
+/**
+ * DestroyLifecycleMetaDataBuilder.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class DestroyLifecycleMetaDataBuilder extends LifecycleMetaDataBuilder
+{
+   /**
+    * Create a new DestroyLifecycleMetaDataBuilder.
+    * 
+    * @param beanMetaData
+    * @throws IllegalArgumentException
+    */
+   public DestroyLifecycleMetaDataBuilder(AbstractBeanMetaData beanMetaData) throws IllegalArgumentException
+   {
+      super(beanMetaData);
+   }
+
+   LifecycleMetaData getLifecycle(AbstractBeanMetaData beanMetaData)
+   {
+      return beanMetaData.getDestroy();
+   }
+
+   void setLifecycle(AbstractBeanMetaData beanMetaData, LifecycleMetaData lifecycle)
+   {
+      beanMetaData.setDestroy(lifecycle);
+   }
+
+}
\ No newline at end of file

Added: 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	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/LifecycleMetaDataBuilder.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -0,0 +1,72 @@
+/*
+* 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 org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.AbstractLifecycleMetaData;
+import org.jboss.beans.metadata.spi.LifecycleMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+
+/**
+ * Helper class.
+ * @see BeanMetaDataBuilder
+ * @see ParameterMetaDataBuilder
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public abstract class LifecycleMetaDataBuilder
+{
+   private AbstractBeanMetaData beanMetaData;
+   private ParameterMetaDataBuilder<AbstractLifecycleMetaData> builder;
+
+   public LifecycleMetaDataBuilder(AbstractBeanMetaData beanMetaData) throws IllegalArgumentException
+   {
+      this.beanMetaData = beanMetaData;
+   }
+
+   abstract LifecycleMetaData getLifecycle(AbstractBeanMetaData beanMetaData);
+
+   abstract void setLifecycle(AbstractBeanMetaData beanMetaData, LifecycleMetaData lifecycle);
+
+   public LifecycleMetaData createLifecycleMetaData(String methodName)
+   {
+      AbstractLifecycleMetaData lifecycle = new AbstractLifecycleMetaData();
+      if (methodName != null)
+      {
+         lifecycle.setMethodName(methodName);
+      }
+      setLifecycle(beanMetaData, lifecycle);
+      builder = new ParameterMetaDataBuilder<AbstractLifecycleMetaData>(lifecycle);
+      return lifecycle;
+   }
+
+   public LifecycleMetaData addParameterMetaData(String type, Object value)
+   {
+      LifecycleMetaData lifecycle = getLifecycle(beanMetaData);
+      if (lifecycle == null)
+      {
+         createLifecycleMetaData(null);
+      }
+      return builder.addParameterMetaData(type, value);
+   }
+
+}

Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/MutableParameterizedMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/MutableParameterizedMetaData.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/MutableParameterizedMetaData.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -0,0 +1,43 @@
+/*
+* 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.List;
+
+import org.jboss.beans.metadata.spi.ParameterMetaData;
+import org.jboss.beans.metadata.spi.ParameterizedMetaData;
+
+/**
+ * MutableParameterizedMetaData.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public interface MutableParameterizedMetaData extends ParameterizedMetaData
+{
+   /**
+    * Set the parameters.
+    *
+    * @param parameters the parameters
+    */
+   void setParameters(List<ParameterMetaData> parameters);
+}

Added: 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	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/ParameterMetaDataBuilder.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -0,0 +1,70 @@
+/*
+* 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.builder.BeanMetaDataBuilder;
+
+/**
+ * Helper class.
+ *
+ * @param <T> the parameter holder type
+ * @see BeanMetaDataBuilder
+ * @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);
+   }
+
+   public T addParameterMetaData(String type, Object value)
+   {
+      List<ParameterMetaData> parameters = getParameters();
+      if (parameters == null)
+      {
+         parameters = new ArrayList<ParameterMetaData>();
+         setParameters(parameters);
+      }
+      parameters.add(new AbstractParameterMetaData(type, value));
+      return parameterHolder;
+   }
+
+}

Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/StartLifecycleMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/StartLifecycleMetaDataBuilder.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/StartLifecycleMetaDataBuilder.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -0,0 +1,56 @@
+/*
+* 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 org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.spi.LifecycleMetaData;
+
+/**
+ * StartLifecycleMetaDataBuilder.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class StartLifecycleMetaDataBuilder extends LifecycleMetaDataBuilder
+{
+   /**
+    * Create a new StartLifecycleMetaDataBuilder.
+    * 
+    * @param beanMetaData
+    * @throws IllegalArgumentException
+    */
+   public StartLifecycleMetaDataBuilder(AbstractBeanMetaData beanMetaData) throws IllegalArgumentException
+   {
+      super(beanMetaData);
+   }
+
+   LifecycleMetaData getLifecycle(AbstractBeanMetaData beanMetaData)
+   {
+      return beanMetaData.getStart();
+   }
+
+   void setLifecycle(AbstractBeanMetaData beanMetaData, LifecycleMetaData lifecycle)
+   {
+      beanMetaData.setStart(lifecycle);
+   }
+
+}
\ No newline at end of file

Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/StopLifecycleMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/StopLifecycleMetaDataBuilder.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/StopLifecycleMetaDataBuilder.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -0,0 +1,56 @@
+/*
+* 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 org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.spi.LifecycleMetaData;
+
+/**
+ * StopLifecycleMetaDataBuilder.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class StopLifecycleMetaDataBuilder extends LifecycleMetaDataBuilder
+{
+   /**
+    * Create a new StopLifecycleMetaDataBuilder.
+    * 
+    * @param beanMetaData
+    * @throws IllegalArgumentException
+    */
+   public StopLifecycleMetaDataBuilder(AbstractBeanMetaData beanMetaData) throws IllegalArgumentException
+   {
+      super(beanMetaData);
+   }
+
+   LifecycleMetaData getLifecycle(AbstractBeanMetaData beanMetaData)
+   {
+      return beanMetaData.getStop();
+   }
+
+   void setLifecycle(AbstractBeanMetaData beanMetaData, LifecycleMetaData lifecycle)
+   {
+      beanMetaData.setStop(lifecycle);
+   }
+
+}
\ No newline at end of file

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/ConstructorMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/ConstructorMetaData.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/ConstructorMetaData.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -21,7 +21,6 @@
 */
 package org.jboss.beans.metadata.spi;
 
-import java.util.List;
 
 /**
  * Metadata about construction.
@@ -29,16 +28,9 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
-public interface ConstructorMetaData extends FeatureMetaData
+public interface ConstructorMetaData extends ParameterizedMetaData, FeatureMetaData
 {
    /**
-    * Get the parameters.
-    *
-    * @return List<ParameterMetaData>.
-    */
-   List<ParameterMetaData> getParameters();
-   
-   /**
     * Get the value.
     *
     * @return the value.

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/LifecycleMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/LifecycleMetaData.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/LifecycleMetaData.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -21,8 +21,6 @@
 */
 package org.jboss.beans.metadata.spi;
 
-import java.util.List;
-
 import org.jboss.dependency.spi.ControllerState;
 
 /**
@@ -31,7 +29,7 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
-public interface LifecycleMetaData extends FeatureMetaData
+public interface LifecycleMetaData extends ParameterizedMetaData, FeatureMetaData
 {
    /**
     * Get the state
@@ -53,11 +51,4 @@
     * @return the method name.
     */
    String getMethodName();
-
-   /**
-    * Get the parameters.
-    *
-    * @return List<ParameterMetaData>.
-    */
-   List<ParameterMetaData> getParameters();
 }

Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/ParameterizedMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/ParameterizedMetaData.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/ParameterizedMetaData.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -0,0 +1,40 @@
+/*
+* 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.spi;
+
+import java.util.List;
+
+/**
+ * ParameterizedMetaData.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ParameterizedMetaData
+{
+   /**
+    * Get the parameters.
+    *
+    * @return List<ParameterMetaData>.
+    */
+   List<ParameterMetaData> getParameters();
+}

Copied: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java (from rev 59429, projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/BeanMetaDataBuilder.java)
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/BeanMetaDataBuilder.java	2007-01-09 04:03:44 UTC (rev 59429)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -0,0 +1,250 @@
+/*
+* 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.spi.builder;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.AbstractClassLoaderMetaData;
+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.AbstractInstallMetaData;
+import org.jboss.beans.metadata.plugins.AbstractPropertyMetaData;
+import org.jboss.beans.metadata.plugins.AbstractSupplyMetaData;
+import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
+import org.jboss.beans.metadata.plugins.builder.CreateLifecycleMetaDataBuilder;
+import org.jboss.beans.metadata.plugins.builder.DestroyLifecycleMetaDataBuilder;
+import org.jboss.beans.metadata.plugins.builder.LifecycleMetaDataBuilder;
+import org.jboss.beans.metadata.plugins.builder.ParameterMetaDataBuilder;
+import org.jboss.beans.metadata.plugins.builder.StartLifecycleMetaDataBuilder;
+import org.jboss.beans.metadata.plugins.builder.StopLifecycleMetaDataBuilder;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.DemandMetaData;
+import org.jboss.beans.metadata.spi.DependencyMetaData;
+import org.jboss.beans.metadata.spi.InstallMetaData;
+import org.jboss.beans.metadata.spi.PropertyMetaData;
+import org.jboss.beans.metadata.spi.SupplyMetaData;
+import org.jboss.dependency.spi.ControllerMode;
+
+/**
+ * Helper class.
+ * Similar to StringBuffer, methods return current instance of BeanMetaDataBuilder.
+ *
+ * TODO - add on demand, when building OSGi, Spring, ...
+ * TODO - install/uninstall parametrers
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class BeanMetaDataBuilder
+{
+   private AbstractBeanMetaData beanMetaData;
+   // parameter builders
+   private ParameterMetaDataBuilder<AbstractConstructorMetaData> constructorBuilder;
+   private LifecycleMetaDataBuilder createBuilder;
+   private LifecycleMetaDataBuilder startBuilder;
+   private LifecycleMetaDataBuilder stopBuilder;
+   private LifecycleMetaDataBuilder destroyBuilder;
+
+   public BeanMetaDataBuilder(String bean)
+   {
+      this(new AbstractBeanMetaData(bean));
+   }
+
+   public BeanMetaDataBuilder(String name, String bean)
+   {
+      this(new AbstractBeanMetaData(name, bean));
+   }
+
+   public BeanMetaDataBuilder(AbstractBeanMetaData beanMetaData)
+   {
+      this.beanMetaData = beanMetaData;
+      // lifecycle builders
+      createBuilder = new CreateLifecycleMetaDataBuilder(beanMetaData);
+      startBuilder = new StartLifecycleMetaDataBuilder(beanMetaData);
+      stopBuilder = new StopLifecycleMetaDataBuilder(beanMetaData);
+      destroyBuilder = new DestroyLifecycleMetaDataBuilder(beanMetaData);
+   }
+
+   public BeanMetaData getBeanMetaData()
+   {
+      return beanMetaData;
+   }
+
+   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)
+   {
+      beanMetaData.setClassLoader(new AbstractClassLoaderMetaData(new AbstractValueMetaData(classLoader)));
+      return this;
+   }
+
+   public BeanMetaDataBuilder addConstructorParameter(String type, Object value)
+   {
+      AbstractConstructorMetaData constructor = (AbstractConstructorMetaData) beanMetaData.getConstructor();
+      if (constructor == null)
+      {
+         constructor = new AbstractConstructorMetaData();
+         beanMetaData.setConstructor(constructor);
+         constructorBuilder = new ParameterMetaDataBuilder<AbstractConstructorMetaData>(constructor);
+      }
+      constructorBuilder.addParameterMetaData(type, value);
+      return this;
+   }
+
+   public BeanMetaDataBuilder addPropertyMetaData(String name, Object value)
+   {
+      Set<PropertyMetaData> properties = beanMetaData.getProperties();
+      if (properties == null)
+      {
+         properties = new HashSet<PropertyMetaData>();
+         beanMetaData.setProperties(properties);
+      }
+      properties.add(new AbstractPropertyMetaData(name, value));
+      return this;
+   }
+
+   public BeanMetaDataBuilder setCreate(String methodName)
+   {
+      createBuilder.createLifecycleMetaData(methodName);
+      return this;
+   }
+
+   public BeanMetaDataBuilder addCreateParameter(String type, Object value)
+   {
+      createBuilder.addParameterMetaData(type, value);
+      return this;
+   }
+
+   public BeanMetaDataBuilder setStart(String methodName)
+   {
+      startBuilder.createLifecycleMetaData(methodName);
+      return this;
+   }
+
+   public BeanMetaDataBuilder addStartParameter(String type, Object value)
+   {
+      startBuilder.addParameterMetaData(type, value);
+      return this;
+   }
+
+   public BeanMetaDataBuilder setStop(String methodName)
+   {
+      stopBuilder.createLifecycleMetaData(methodName);
+      return this;
+   }
+
+   public BeanMetaDataBuilder addStopParameter(String type, Object value)
+   {
+      stopBuilder.addParameterMetaData(type, value);
+      return this;
+   }
+
+   public BeanMetaDataBuilder setDestroy(String methodName)
+   {
+      destroyBuilder.createLifecycleMetaData(methodName);
+      return this;
+   }
+
+   public BeanMetaDataBuilder addDestroyParameter(String type, Object value)
+   {
+      destroyBuilder.addParameterMetaData(type, value);
+      return this;
+   }
+
+   public BeanMetaDataBuilder addSupply(Object supply)
+   {
+      Set<SupplyMetaData> supplies = beanMetaData.getSupplies();
+      if (supplies == null)
+      {
+         supplies = new HashSet<SupplyMetaData>();
+         beanMetaData.setSupplies(supplies);
+      }
+      supplies.add(new AbstractSupplyMetaData(supply));
+      return this;
+   }
+
+   public BeanMetaDataBuilder addDemand(Object demand)
+   {
+      Set<DemandMetaData> demands = beanMetaData.getDemands();
+      if (demands == null)
+      {
+         demands = new HashSet<DemandMetaData>();
+         beanMetaData.setDemands(demands);
+      }
+      demands.add(new AbstractDemandMetaData(demand));
+      return this;
+   }
+
+   public BeanMetaDataBuilder addDependency(Object dependency)
+   {
+      Set<DependencyMetaData> dependencies = beanMetaData.getDepends();
+      if (dependencies == null)
+      {
+         dependencies = new HashSet<DependencyMetaData>();
+         beanMetaData.setDepends(dependencies);
+      }
+      dependencies.add(new AbstractDependencyMetaData(dependency));
+      return this;
+   }
+
+   public BeanMetaDataBuilder addInstall(String methodName)
+   {
+      List<InstallMetaData> installs = beanMetaData.getInstalls();
+      if (installs == null)
+      {
+         installs = new ArrayList<InstallMetaData>();
+         beanMetaData.setInstalls(installs);
+      }
+      AbstractInstallMetaData installMetaData = new AbstractInstallMetaData();
+      installMetaData.setMethodName(methodName);
+      installs.add(installMetaData);
+      return this;
+   }
+
+   public BeanMetaDataBuilder addUninstall(String methodName)
+   {
+      List<InstallMetaData> uninstalls = beanMetaData.getUninstalls();
+      if (uninstalls == null)
+      {
+         uninstalls = new ArrayList<InstallMetaData>();
+         beanMetaData.setUninstalls(uninstalls);
+      }
+      AbstractInstallMetaData uninstallMetaData = new AbstractInstallMetaData();
+      uninstallMetaData.setMethodName(methodName);
+      uninstalls.add(uninstallMetaData);
+      return this;
+   }
+
+}

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/config/Configurator.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/config/Configurator.java	2007-01-11 12:25:33 UTC (rev 59523)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/config/Configurator.java	2007-01-11 13:22:49 UTC (rev 59524)
@@ -541,6 +541,7 @@
     * Unconfigure a bean property
     * 
     * @param object the object to unconfigure
+    * @param cl the classloader
     * @param info the bean info
     * @param metaData the property metadata
     * @throws Throwable for any error
@@ -590,7 +591,6 @@
       if (metaData == null)
          throw new IllegalArgumentException("Null bean metadata");
 
-      ClassLoader cl = getClassLoader(metaData);
       Set<TargettedJoinpoint> result = new HashSet<TargettedJoinpoint>();
       Set<PropertyMetaData> propertys = metaData.getProperties();
       if (propertys != null && propertys.isEmpty() == false)
@@ -677,6 +677,7 @@
     *
     * @param trace whether trace is enabled
     * @param info the bean info
+    * @param cl the classloader
     * @param name the property name
     * @param type the property type
     * @return the property info
@@ -692,24 +693,28 @@
       if (trace)
          log.trace("Resolving property on bean info=" + info + " name=" + name);
 
-      Set properties = info.getProperties();
+      // FIXME the isAssignable and isProgression currently needs a classloader
+      //       to work properly, use the bean's classloader if there isn't one provided
+      if (cl == null)
+         cl = info.getClassInfo().getType().getClassLoader();
+      
+      Set<PropertyInfo> properties = info.getProperties();
       if (properties != null && properties.size() > 0)
       {
-         for (Iterator i = properties.iterator(); i.hasNext();)
+         for (PropertyInfo ainfo : properties)
          {
-            PropertyInfo ainfo = (PropertyInfo) i.next();
             if (name.equals(ainfo.getName()))
             {
                String[] typeNames = {type};
                TypeInfo[] typeInfos = {ainfo.getType()};
-               if (equals(typeNames, typeInfos) || assignable(cl, typeNames, typeInfos) || progression(cl, typeNames, typeInfos))
+               if (equals(typeNames, typeInfos) || isAssignable(cl, typeNames, typeInfos) || isProgression(cl, typeNames, typeInfos))
                {
                   return ainfo;
                }
             }
          }
       }
-
+      
       throw new JoinpointException("Property " + name + " not found for " + info);
    }
 
@@ -881,13 +886,18 @@
 
    /**
     * Test whether type names can be assigned to type infos
+    * 
+    * TODO isAssignableFrom should be part of the TypeInfo api
+    *      with comparisons made between TypeInfos
     *
     * @param cl bean classloader
     * @param typeNames the type names
     * @param typeInfos the type infos
     * @return true when they can be assigned
+    * @throws Throwable for any error
     */
-   public static boolean assignable(ClassLoader cl, String[] typeNames, TypeInfo[] typeInfos) throws Throwable
+   @SuppressWarnings("unchecked")
+   public static boolean isAssignable(ClassLoader cl, String[] typeNames, TypeInfo[] typeInfos) throws Throwable
    {
       if (cl == null)
          return false;
@@ -917,8 +927,9 @@
     * @param typeNames the type names
     * @param typeInfos the type infos
     * @return true when we can use progression
+    * @throws Throwable for any error
     */
-   public static boolean progression(ClassLoader cl, String[] typeNames, TypeInfo[] typeInfos) throws Throwable
+   public static boolean isProgression(ClassLoader cl, String[] typeNames, TypeInfo[] typeInfos) throws Throwable
    {
       if (cl == null)
          return false;




More information about the jboss-cvs-commits mailing list