[jboss-cvs] JBossAS SVN: r61047 - in trunk/profileservice/src/main/org/jboss/profileservice/management: builders and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Mar 2 04:16:09 EST 2007


Author: scott.stark at jboss.org
Date: 2007-03-02 04:16:09 -0500 (Fri, 02 Mar 2007)
New Revision: 61047

Modified:
   trunk/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java
   trunk/profileservice/src/main/org/jboss/profileservice/management/builders/ConnectionFactoryDeployerManagedObjectBuilder.java
   trunk/profileservice/src/main/org/jboss/profileservice/management/builders/DomDataSourceManagedObject.java
   trunk/profileservice/src/main/org/jboss/profileservice/management/builders/DomFields.java
Log:
Update the handling of the datasource elements

Modified: trunk/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java
===================================================================
--- trunk/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java	2007-03-02 09:15:01 UTC (rev 61046)
+++ trunk/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java	2007-03-02 09:16:09 UTC (rev 61047)
@@ -404,8 +404,6 @@
       log.debug("updateComponentType, unit="+unit.getName()+", type="+type);
       ctxToCompType.put(ctx, type);
       DeploymentContext topCtx = ctx.getTopLevel();
-      if( type.getSubtype().equals("Topic") )
-         log.info("Saw Topic");
       if( ctxToDeployment.containsKey(ctx) == false )
       {
          // This deployment unit has not been indexed yet

Modified: trunk/profileservice/src/main/org/jboss/profileservice/management/builders/ConnectionFactoryDeployerManagedObjectBuilder.java
===================================================================
--- trunk/profileservice/src/main/org/jboss/profileservice/management/builders/ConnectionFactoryDeployerManagedObjectBuilder.java	2007-03-02 09:15:01 UTC (rev 61046)
+++ trunk/profileservice/src/main/org/jboss/profileservice/management/builders/ConnectionFactoryDeployerManagedObjectBuilder.java	2007-03-02 09:16:09 UTC (rev 61047)
@@ -51,7 +51,8 @@
          Map<String, Object> attachments = unit.getTransientManagedObjects().getAttachments();
          log.debug(name+" attachments: "+attachments);
          String attachName = Document.class.getName();
-         ManagedObject mo = new DomDataSourceManagedObject(attachName);
+         Document document = unit.getAttachment(attachName, Document.class);
+         ManagedObject mo = new DomDataSourceManagedObject(attachName, document);
          ManagedObject wrapMO = WrapperAdvice.wrapManagedObject(mo);
          map.put(attachName, wrapMO);
       }

Modified: trunk/profileservice/src/main/org/jboss/profileservice/management/builders/DomDataSourceManagedObject.java
===================================================================
--- trunk/profileservice/src/main/org/jboss/profileservice/management/builders/DomDataSourceManagedObject.java	2007-03-02 09:15:01 UTC (rev 61046)
+++ trunk/profileservice/src/main/org/jboss/profileservice/management/builders/DomDataSourceManagedObject.java	2007-03-02 09:16:09 UTC (rev 61047)
@@ -38,6 +38,7 @@
 import org.w3c.dom.DOMImplementation;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
 /**
  * A ManagedObject impl that manages a jaxp Document attachment.
@@ -49,6 +50,7 @@
 {
    /** The serialVersionUID */
    private static final long serialVersionUID = 1L;
+   private static String[] dsTypes = {"local-tx-datasource", "no-tx-datasource", "xa-datasource"};
 
    /** The document */
    private Document document;
@@ -56,31 +58,72 @@
    /**
     * DomDataSourceManagedObject ctor
     */
-   public DomDataSourceManagedObject(String attachmentName)
+   public DomDataSourceManagedObject(String attachmentName, Document document)
    {
       super(attachmentName);
+      this.document = document;
       Element element;
-      try
+      if( document == null )
       {
-         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-         DocumentBuilder builder = factory.newDocumentBuilder();
-         DOMImplementation impl = builder.getDOMImplementation();
-         document = impl.createDocument(null, null, null);
-         
-         element = document.createElement("datasources");
-         document.appendChild(element);
+         try
+         {
+            // Create a skeleton datasources/local-tx-datasource
+            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder builder = factory.newDocumentBuilder();
+            DOMImplementation impl = builder.getDOMImplementation();
+            document = impl.createDocument(null, null, null);
+            
+            element = document.createElement("datasources");
+            document.appendChild(element);
+            // Create a local-tx-datasource
+            Element child = document.createElement("local-tx-datasource");
+            element.appendChild(child);
+            element = child;
+         }
+         catch (RuntimeException e)
+         {
+            throw e;
+         }
+         catch (Exception e)
+         {
+            throw new RuntimeException("Error creating dom", e);
+         }
       }
-      catch (RuntimeException e)
+      else
       {
-         throw e;
+         NodeList dses = document.getElementsByTagName("datasources");
+         if( dses.getLength() == 0 )
+         {
+            element = document.createElement("datasources");
+            document.appendChild(element);
+         }
+         else
+         {
+            element = (Element) dses.item(0);
+         }
+         NodeList dsType = null;
+         for(String type : dsTypes)
+         {
+            dsType = element.getElementsByTagName(type);
+            if( dsType.getLength() > 0 )
+               break;
+         }
+
+         if( dsType == null || dsType.getLength() == 0 )
+         {
+            // Create a local-tx-datasource
+            Element child = document.createElement("local-tx-datasource");
+            element.appendChild(child);
+            element = child;
+         }
+         else
+         {
+            element = (Element) dsType.item(0);
+         }
       }
-      catch (Exception e)
-      {
-         throw new RuntimeException("Error creating dom", e);
-      }
-      
+
       Set<ManagedProperty> properties = getProperties();
-      // The datasource-type
+      // The datasource-type, TODO this needs different handling since this maps to a element name, not a value
       DomFields dsType = new DomFields(element, "datasource-type");
       dsType.setField(Fields.DESCRIPTION, "The type of DataSource");
       dsType.setField(Fields.MANDATORY, Boolean.TRUE);
@@ -112,7 +155,7 @@
       user.setField(Fields.MANDATORY, Boolean.FALSE);
       user.setField(Fields.META_TYPE, SimpleMetaType.STRING);
       // The user field info
-      DomFields password = new DomFields(element, "password");
+      DomFields password = new DomFields(element, "password", false);
       password.setField(Fields.DESCRIPTION, "The password for the connection-url");
       password.setField(Fields.MANDATORY, Boolean.FALSE);
       password.setField(Fields.META_TYPE, SimpleMetaType.STRING);

Modified: trunk/profileservice/src/main/org/jboss/profileservice/management/builders/DomFields.java
===================================================================
--- trunk/profileservice/src/main/org/jboss/profileservice/management/builders/DomFields.java	2007-03-02 09:15:01 UTC (rev 61046)
+++ trunk/profileservice/src/main/org/jboss/profileservice/management/builders/DomFields.java	2007-03-02 09:16:09 UTC (rev 61047)
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
  * by the @authors tag. See the copyright.txt in the distribution for a
  * full listing of individual contributors.
  *
@@ -23,29 +23,47 @@
 
 import java.io.Serializable;
 
+import org.jboss.logging.Logger;
 import org.jboss.managed.api.Fields;
 import org.jboss.managed.plugins.DefaultFieldsImpl;
+import org.jboss.util.xml.DOMWriter;
+import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 
+/**
+ * This represents an element in a dom metadata model.
+ * 
+ * @author Scott.Stark at jboss.org
+ * @version $Revision:$
+ */
 public class DomFields extends DefaultFieldsImpl
 {
    /** The serialVersionUID */
    private static final long serialVersionUID = 1L;
+   private static final Logger log = Logger.getLogger(DomFields.class);
 
-   /** The datasource element */
-   private Element element; 
+   /** The parent datasources type element */
+   private Element element;
+   /** */
+   private boolean deleteOnEmptyValue = true;
    
    /**
     * Create a new DOMFields.
     *
-    * @param element the data source element
-    * @param elementName the element name
+    * @param element the datasources/type element
+    * @param elementName the name of the datasources/type
+    *    child element this field corresponds to
     */
    public DomFields(Element element, String elementName)
    {
+      this(element, elementName, true);
+   }
+   public DomFields(Element element, String elementName, boolean deleteOnEmptyValue)
+   {
       this.element = element;
       this.setField(Fields.NAME, elementName);
+      this.deleteOnEmptyValue = deleteOnEmptyValue;
    }
 
    public String getElementName()
@@ -69,6 +87,12 @@
       return super.getField(name);
    }
 
+   /**
+    * Sets the VALUE value to the element text content. A null or empty
+    * value removes the element.
+    * TODO: need special handling of the datasource-type field as this
+    * requires changing the name of the parent datasources/type element.
+    */
    public void setField(String name, Serializable value)
    {
       if (VALUE.equals(name))
@@ -79,9 +103,10 @@
          Element childElement = null;
          if (nodes.getLength() == 0)
          {
-            if (string == null || string.length() == 0)
+            if (string == null || (deleteOnEmptyValue && string.length() == 0))
                return;
-            childElement = element.getOwnerDocument().createElement(elementName);
+            Document doc = element.getOwnerDocument();
+            childElement = doc.createElement(elementName);
             element.appendChild(childElement);
          }
          else
@@ -94,6 +119,16 @@
             }
          }
          childElement.setTextContent(string);
+         if( log.isTraceEnabled() )
+         {
+            Document document = element.getOwnerDocument();
+            StringBuffer tmp = new StringBuffer("After update of ");
+            tmp.append(elementName);
+            tmp.append('[');
+            tmp.append(DOMWriter.printNode(document, false));
+            tmp.append(']');
+            log.trace(tmp.toString());
+         }
          return;
       }
       super.setField(name, value);




More information about the jboss-cvs-commits mailing list