[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