[jboss-cvs] JBossAS SVN: r59228 - projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Dec 25 13:51:55 EST 2006


Author: alesj
Date: 2006-12-25 13:51:53 -0500 (Mon, 25 Dec 2006)
New Revision: 59228

Added:
   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
Log:
JBMICROCONT-136; initial helper/builder code, more added on demand

Added: 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	2006-12-25 14:48:09 UTC (rev 59227)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/BeanMetaDataBuilder.java	2006-12-25 18:51:53 UTC (rev 59228)
@@ -0,0 +1,231 @@
+/*
+* 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;
+   }
+
+}

Added: 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	2006-12-25 14:48:09 UTC (rev 59227)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/LifecycleMetaDataBuilder.java	2006-12-25 18:51:53 UTC (rev 59228)
@@ -0,0 +1,122 @@
+/*
+* 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.
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ * @see BeanMetaDataBuilder
+ * @see ParameterMetaDataBuilder
+ */
+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);
+   }
+
+}

Added: 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	2006-12-25 14:48:09 UTC (rev 59227)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/ParameterMetaDataBuilder.java	2006-12-25 18:51:53 UTC (rev 59228)
@@ -0,0 +1,93 @@
+/*
+* 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;
+   }
+
+}




More information about the jboss-cvs-commits mailing list