[jboss-cvs] JBossAS SVN: r80858 - trunk/system-jmx/src/main/org/jboss/system/metadata.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Nov 12 14:31:47 EST 2008


Author: emuckenhuber
Date: 2008-11-12 14:31:47 -0500 (Wed, 12 Nov 2008)
New Revision: 80858

Added:
   trunk/system-jmx/src/main/org/jboss/system/metadata/ServiceMetaData2ElementConverter.java
Modified:
   trunk/system-jmx/src/main/org/jboss/system/metadata/ServiceValueFactoryParameterMetaData.java
Log:
[JBAS-3768] basic converter for marshalling ServiceMetaData

Added: trunk/system-jmx/src/main/org/jboss/system/metadata/ServiceMetaData2ElementConverter.java
===================================================================
--- trunk/system-jmx/src/main/org/jboss/system/metadata/ServiceMetaData2ElementConverter.java	                        (rev 0)
+++ trunk/system-jmx/src/main/org/jboss/system/metadata/ServiceMetaData2ElementConverter.java	2008-11-12 19:31:47 UTC (rev 80858)
@@ -0,0 +1,314 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.system.metadata;
+
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.jboss.dependency.spi.ControllerMode;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * Basic converter for a flattened view of ServiceMetaData to a org.w3c.dom.Element.
+ * 
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public class ServiceMetaData2ElementConverter
+{
+   /** The Document */
+   private final Document document;
+   
+   public ServiceMetaData2ElementConverter() throws Exception
+   {
+      DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
+      DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
+      this.document = documentBuilder.newDocument();      
+   }
+
+   public Element createServiceMetaDataElement(ServiceMetaData metaData) throws Exception
+   {
+      if(metaData == null)
+         throw new IllegalArgumentException("Null meta data.");
+      
+      Element mbean = this.document.createElement("mbean");
+      // ObjectName
+      setObjectName(metaData, mbean);
+      // Code
+      setCode(metaData, mbean);
+      // Mode
+      setControllerMode(metaData, mbean);
+      // Constructor
+      addConstructor(metaData, mbean);
+      // Interface 
+      setInterface(metaData, mbean);
+      // XMBean attribtues
+      setXmbeanAttributes(metaData, mbean);
+      
+      // Service Attribtues
+      List<ServiceAttributeMetaData> attributes = metaData.getAttributes();
+      if(attributes != null && ! attributes.isEmpty())
+      {
+         for(ServiceAttributeMetaData attributeMetaData : attributes)
+         {
+            addAttributes(attributeMetaData, mbean);
+         }
+      }
+      // Service dependencies
+      List<ServiceDependencyMetaData> dependencies = metaData.getDependencies();
+      if(dependencies != null && ! dependencies.isEmpty())
+      {
+         for(ServiceDependencyMetaData dependency : dependencies)
+         {
+            addDependency(dependency, mbean);
+         }
+      }
+      // Aliases
+      List<String> aliases = metaData.getAliases();
+      if(aliases != null && ! aliases.isEmpty())
+      {
+         for(String alias : aliases)
+         {
+            addAlias(alias, mbean);
+         }
+      }
+      // Annotations
+      List<ServiceAnnotationMetaData> annotations = metaData.getAnnotations();
+      if(annotations != null && ! annotations.isEmpty())
+      {
+         for(ServiceAnnotationMetaData annotation : annotations)
+         {
+            addAnnotation(annotation, mbean);
+         }
+      }
+      return mbean;
+   }
+   
+   private void setObjectName(ServiceMetaData metaData, Element mbean)
+   {
+      if(metaData.getObjectName() != null)
+         mbean.setAttribute("name", metaData.getObjectName().getCanonicalName());
+   }
+   
+   private void setCode(ServiceMetaData metaData, Element mbean)
+   {
+      if(metaData.getCode() != null)
+         mbean.setAttribute("code", metaData.getCode());
+   }
+   
+   private void setControllerMode(ServiceMetaData metaData, Element mbean)
+   {
+      ControllerMode mode = metaData.getMode();
+      if(mode != null)
+         mbean.setAttribute("mode", mode.getModeString());
+   }
+   
+   private void addConstructor(ServiceMetaData metaData, Element mbean) throws Exception
+   {
+      ServiceConstructorMetaData constructorMetaData =  metaData.getConstructor();
+      if(constructorMetaData == null)
+         return;
+      
+      Element constructor = document.createElement("constructor");
+      String[] params = constructorMetaData.getParams();
+      if(params == null || params.length == 0)
+         return;
+     
+      String[] signature = constructorMetaData.getSignature();
+      if(signature.length != params.length)
+         return; // this should actually not happen
+      
+      int i = params.length;
+      for(int j = 0; j < i; j++)
+      {
+         Element arg = document.createElement("arg");
+         arg.setAttribute("type", signature[j]);
+         arg.setAttribute("value", params[j]);
+         constructor.appendChild(arg);
+      }
+      mbean.appendChild(constructor);
+   }
+   
+   private void setInterface(ServiceMetaData metaData, Element mbean)
+   {
+      if(metaData.getInterfaceName() != null)
+         mbean.setAttribute("interface", metaData.getInterfaceName());
+   }
+   
+   private void setXmbeanAttributes(ServiceMetaData metaData, Element mbean)
+   {
+      if(metaData.getXMBeanDD() != null)
+         mbean.setAttribute("xmbean-dd", metaData.getXMBeanDD());
+      
+      if(metaData.getXMBeanCode() != null)
+         mbean.setAttribute("xmbean-code", metaData.getXMBeanCode());
+      
+      if(metaData.getXMBeanDescriptor() != null)
+         mbean.appendChild(metaData.getXMBeanDescriptor());
+   }
+   
+   private void addAttributes(ServiceAttributeMetaData attributeMetaData, Element mbean)
+   {
+      Element attribute = document.createElement("attribute");
+      
+      attribute.setAttribute("name", attributeMetaData.getName());
+      
+      ServiceValueMetaData attributeValue = attributeMetaData.getValue();
+      if(attributeValue instanceof ServiceElementValueMetaData)
+      {
+         ServiceElementValueMetaData value = (ServiceElementValueMetaData) attributeValue;
+         attribute = value.getElement();
+      }
+      else if(attributeValue instanceof ServiceTextValueMetaData)
+      {
+         ServiceTextValueMetaData value = (ServiceTextValueMetaData) attributeValue;
+         attribute.setTextContent(value.getText());
+      }
+      else if(attributeValue instanceof ServiceDependencyValueMetaData)
+      {
+         // Do not create a attribute
+         attribute = null;
+         ServiceDependencyValueMetaData dependsMetaData = (ServiceDependencyValueMetaData) attributeValue;
+         // creates <depends/>
+         addDependsValue(attributeMetaData.getName(), dependsMetaData, mbean);
+
+      }
+      else if (attributeValue instanceof ServiceDependencyListValueMetaData)
+      {
+         // Do not create an <attribute/>
+         attribute = null;
+         // Create <depends-list/>
+         Element dependsList = document.createElement("depends-list");
+         dependsList.setAttribute("optional-attribute-name", attributeMetaData.getName());
+         
+         ServiceDependencyListValueMetaData dependencyList = (ServiceDependencyListValueMetaData) attributeValue;
+         // TODO is this enough ?
+         List<String> dependencies = dependencyList.getDependencies();
+         if(dependencies != null && ! dependencies.isEmpty())
+         {
+            for(String dependency : dependencies)
+            {
+               Element dependsElement = document.createElement("depends-list-element");
+               dependsElement.setTextContent(dependency);
+               dependsList.appendChild(dependsElement);
+            }
+            mbean.appendChild(dependsList);
+         }
+      }
+      // <inject/>
+      else if (attributeValue instanceof ServiceInjectionValueMetaData)
+      {
+         Element inject = document.createElement("inject");
+         ServiceInjectionValueMetaData value = (ServiceInjectionValueMetaData) attributeValue;
+         
+         inject.setAttribute("bean", (String) value.getDependency());
+         if(value.getProperty() != null)
+            inject.setAttribute("property", value.getProperty());
+         
+         if(value.getDependentState() != null)
+            inject.setAttribute("state", value.getDependentState().getStateString());
+         
+         attribute.appendChild(inject);
+      }
+      // <value-factory/>
+      else if (attributeValue instanceof ServiceValueFactoryValueMetaData)
+      {
+         Element factory = document.createElement("value-factory");
+         ServiceValueFactoryValueMetaData value = (ServiceValueFactoryValueMetaData) attributeValue;
+         
+         factory.setAttribute("bean", (String) value.getDependency());
+         factory.setAttribute("method", value.getMethod());
+         
+         if(value.getDefaultValue() != null)
+            factory.setAttribute("default", value.getDefaultValue().getText());
+         
+         if(value.getDependentState() != null)
+            factory.setAttribute("state", value.getDependentState().getStateString());
+         
+         List<ServiceValueFactoryParameterMetaData> parameters = value.getParameterMetaData();
+         if(parameters != null && ! parameters.isEmpty())
+         {
+            for(ServiceValueFactoryParameterMetaData param : parameters)
+            {
+               Element parameter = document.createElement("parameter");
+               if(param.getParameterTypeName() != null)
+                  parameter.setAttribute("class", param.getParameterTypeName());
+               
+               if(param.getValueTypeName() != null)
+               {
+                  Element parameterValue = document.createElement("value");
+                  parameterValue.setAttribute("class", param.getValueTypeName());
+                  parameterValue.setTextContent(param.getTextValue());
+                  parameter.appendChild(parameterValue);
+               }
+               else
+               {
+                  parameter.setTextContent(param.getTextValue());
+               }
+               factory.appendChild(parameter);
+            }
+         }
+         attribute.appendChild(factory);
+      }
+      
+      if(attribute != null)
+         mbean.appendChild(attribute);
+   }
+   
+   private void addDependency(ServiceDependencyMetaData dependencyMetaData, Element mbean)
+   {
+      Element depends = document.createElement("depends");
+      depends.setTextContent(dependencyMetaData.getIDependOn());
+      mbean.appendChild(depends);
+   }
+   
+   private void addAlias(String alias, Element mbean)
+   {
+      Element a = document.createElement("alias");
+      a.setTextContent(alias);
+      mbean.appendChild(a);
+   }
+   
+   private void addAnnotation(ServiceAnnotationMetaData annotation, Element mbean)
+   {
+      Element a = document.createElement("annotation");
+      a.setTextContent(annotation.getAnnotation());
+      mbean.appendChild(a);
+   }
+   
+   private void addDependsValue(String name, ServiceDependencyValueMetaData dependsMetaData, Element mbean)
+   {
+      Element depends = document.createElement("depends");
+      depends.setAttribute("optional-attribute-name", name);
+      if(dependsMetaData.getProxyType() != null)
+         depends.setAttribute("proxy-type", dependsMetaData.getProxyType());
+      
+      depends.setTextContent(dependsMetaData.getDependency());
+      
+      mbean.appendChild(depends);
+   }
+
+}
+

Modified: trunk/system-jmx/src/main/org/jboss/system/metadata/ServiceValueFactoryParameterMetaData.java
===================================================================
--- trunk/system-jmx/src/main/org/jboss/system/metadata/ServiceValueFactoryParameterMetaData.java	2008-11-12 19:27:40 UTC (rev 80857)
+++ trunk/system-jmx/src/main/org/jboss/system/metadata/ServiceValueFactoryParameterMetaData.java	2008-11-12 19:31:47 UTC (rev 80858)
@@ -68,6 +68,16 @@
       this.parameterTypeName = parameterTypeName;
    }
    
+   public String getTextValue()
+   {
+      return this.textValue;
+   }
+   
+   public String getValueTypeName()
+   {
+      return this.valueTypeName;
+   }
+   
    public Object getValue(ServiceValueContext valueContext) throws DeploymentException
    {
       if (this.parameterTypeName == null)




More information about the jboss-cvs-commits mailing list