[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