[jboss-svn-commits] JBL Code SVN: r8384 - in labs/jbossesb/trunk/product: core/listeners/src/org/jboss/soa/esb/listeners/config core/listeners/src/org/jboss/soa/esb/listeners/config/mappers core/listeners/tests/src/org/jboss/soa/esb/listeners/config etc/schemas/xml

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Dec 18 12:05:27 EST 2006


Author: tfennelly
Date: 2006-12-18 12:05:19 -0500 (Mon, 18 Dec 2006)
New Revision: 8384

Added:
   labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/MapperUtil.java
   labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/UntypedListenerMapper.java
Modified:
   labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/ESBAwareGenerator.java
   labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/GatewayGenerator.java
   labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapper.java
   labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/GeneratorUnitTest.java
   labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/jbossesb_config_01.xml
   labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.xsd
Log:
Added support for generic listener/bus/provider types.  This is to support people adding their own listener + bus + provider impleemntations.

Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/ESBAwareGenerator.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/ESBAwareGenerator.java	2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/ESBAwareGenerator.java	2006-12-18 17:05:19 UTC (rev 8384)
@@ -30,6 +30,7 @@
 import org.jboss.soa.esb.listeners.config.mappers.ActionMapper;
 import org.jboss.soa.esb.listeners.config.mappers.JmsListenerMapper;
 import org.jboss.soa.esb.listeners.config.mappers.NotificationMapper;
+import org.jboss.soa.esb.listeners.config.mappers.UntypedListenerMapper;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -88,7 +89,7 @@
 		if(listener instanceof JmsListener) {
 			listenerConfigTree = JmsListenerMapper.map(root, (JmsListener)listener, model);
 		} else {
-			throw new ConfigurationException("Unsupported ESB Aware listener type [" + listener.getClass().getName() + "].  No mapper class configured.");
+			listenerConfigTree = UntypedListenerMapper.map(root, listener, model);
 		}
 		
 		// Locate the Service to which the listener is bound...

Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/GatewayGenerator.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/GatewayGenerator.java	2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/GatewayGenerator.java	2006-12-18 17:05:19 UTC (rev 8384)
@@ -27,6 +27,7 @@
 import org.jboss.soa.esb.listeners.config.Generator.XMLBeansModel;
 import org.jboss.soa.esb.listeners.config.JmsListenerDocument.JmsListener;
 import org.jboss.soa.esb.listeners.config.mappers.JmsListenerMapper;
+import org.jboss.soa.esb.listeners.config.mappers.UntypedListenerMapper;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -82,7 +83,7 @@
 		if(gateway instanceof JmsListener) {
 			JmsListenerMapper.map(root, (JmsListener)gateway, model);
 		} else {
-			throw new ConfigurationException("Unsupported Gateway listener type [" + gateway.getClass().getName() + "].  No mapper class configured.");
+			UntypedListenerMapper.map(root, gateway, model);
 		}
 	}
 }

Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapper.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapper.java	2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapper.java	2006-12-18 17:05:19 UTC (rev 8384)
@@ -52,8 +52,7 @@
 	 * @throws ConfigurationException Invalid listener configuration.
 	 */
 	public static Element map(Element root, JmsListener listener, XMLBeansModel model) throws ConfigurationException {
-		Element listenerNode = YADOMUtil.addElement(root, "listener-config");
-		Service service = model.getService(listener);
+		Element listenerNode = YADOMUtil.addElement(root, "jms-listener-config");
 		JmsBus bus;
 		JmsProvider provider;
 		
@@ -68,16 +67,15 @@
 			throw new ConfigurationException("Invalid bus config [" + listener.getBusidref() + "].  Should be contained within a <jms-provider> instance.  Unexpected exception - this should have caused a validation error!");
 		}
 		
+		// Map the standard listener attributes - common across all listener types...
+		MapperUtil.mapDefaultAttributes(listener, listenerNode, model);
+		// Map the <property> elements targeted at the listener.
+		MapperUtil.mapProperties(listener, listenerNode, model);
+		
 		if(listener.getIsGateway()) {
-			listenerNode.setAttribute(ListenerTagNames.TARGET_SERVICE_CATEGORY_TAG, service.getCategory());			
-			listenerNode.setAttribute(ListenerTagNames.TARGET_SERVICE_NAME_TAG, service.getName());			
 			listenerNode.setAttribute("gatewayClass", JmsGatewayListener.class.getName());			
 		} else {
-			listenerNode.setAttribute(ListenerTagNames.SERVICE_CATEGORY_NAME_TAG, service.getCategory());			
-			listenerNode.setAttribute(ListenerTagNames.SERVICE_NAME_TAG, service.getName());			
-			listenerNode.setAttribute(ListenerTagNames.SERVICE_DESCRIPTION_TAG, service.getDescription());			
 			listenerNode.setAttribute("listenerClass", JmsQueueListener.class.getName());			
-			listenerNode.setAttribute(ListenerTagNames.EPR_DESCRIPTION_TAG, listener.getName());			
 		}
 
 		JmsMessageFilter messageFilter = listener.getJmsMessageFilter();

Added: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/MapperUtil.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/MapperUtil.java	2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/MapperUtil.java	2006-12-18 17:05:19 UTC (rev 8384)
@@ -0,0 +1,96 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated 
+ * by the @authors tag. All rights reserved. 
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors. 
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A 
+ * 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,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+
+package org.jboss.soa.esb.listeners.config.mappers;
+
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.listeners.ListenerTagNames;
+import org.jboss.soa.esb.listeners.config.Bus;
+import org.jboss.soa.esb.listeners.config.Listener;
+import org.jboss.soa.esb.listeners.config.Provider;
+import org.jboss.soa.esb.listeners.config.YADOMUtil;
+import org.jboss.soa.esb.listeners.config.Generator.XMLBeansModel;
+import org.jboss.soa.esb.listeners.config.PropertyDocument.Property;
+import org.jboss.soa.esb.listeners.config.ServiceDocument.Service;
+import org.w3c.dom.Element;
+
+/**
+ * Mapper utility methods.
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+abstract class MapperUtil {
+
+	/**
+	 * Map all default listener attributes onto the target listener ConfigTree.
+	 * @param listener The listener configuration instance.
+	 * @param target The target DOM ConfigTree listener element.
+	 * @param model The model.
+	 */
+	protected static void mapDefaultAttributes(Listener listener, Element target, XMLBeansModel model) {
+		Service service = model.getService(listener);
+		
+		if(listener.getIsGateway()) {
+			target.setAttribute(ListenerTagNames.TARGET_SERVICE_CATEGORY_TAG, service.getCategory());			
+			target.setAttribute(ListenerTagNames.TARGET_SERVICE_NAME_TAG, service.getName());			
+		} else {
+			target.setAttribute(ListenerTagNames.SERVICE_CATEGORY_NAME_TAG, service.getCategory());			
+			target.setAttribute(ListenerTagNames.SERVICE_NAME_TAG, service.getName());			
+			target.setAttribute(ListenerTagNames.SERVICE_DESCRIPTION_TAG, service.getDescription());			
+			target.setAttribute(ListenerTagNames.EPR_DESCRIPTION_TAG, listener.getName());			
+		}
+	}
+	
+	/**
+	 * Map all the properties targeted at the supplied listener onto the target element.
+	 * <p/>
+	 * This involves copying the properties from the associated bus and provider nodes.
+	 * @param listener The listener config instance.
+	 * @param target The target DOM ConfigTree listener element.
+	 * @param model The model.
+	 * @throws ConfigurationException Bad bis configuration. 
+	 */
+	protected static void mapProperties(Listener listener, Element target, XMLBeansModel model) throws ConfigurationException {
+		Bus bus = model.getBus(listener.getBusidref());
+		Provider provider = model.getProvider(bus);
+		
+		// Map the properties from the provider config...
+		mapProperties(provider.getPropertyArray(), target);
+		// Map the properties from the bus config...
+		mapProperties(bus.getPropertyArray(), target);
+		// Map the properties from the listener config...
+		mapProperties(listener.getPropertyArray(), target);		
+	}
+	
+	/**
+	 * Map all the supplied properties onto the target element.
+	 * @param target The target DOM element.
+	 * @param properties The properties to be mapped.
+	 */
+	private static void mapProperties(Property[] properties, Element target) {
+		// Map the property elements to actions attributes...
+		for(Property property : properties) {
+			target.setAttribute(property.getName(), property.getValue());
+		}
+		
+		// Remove any empty attributes set on the action config...
+		YADOMUtil.removeEmptyAttributes(target);
+	}
+}

Added: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/UntypedListenerMapper.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/UntypedListenerMapper.java	2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/UntypedListenerMapper.java	2006-12-18 17:05:19 UTC (rev 8384)
@@ -0,0 +1,59 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated 
+ * by the @authors tag. All rights reserved. 
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors. 
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A 
+ * 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,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+
+package org.jboss.soa.esb.listeners.config.mappers;
+
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.listeners.config.Listener;
+import org.jboss.soa.esb.listeners.config.YADOMUtil;
+import org.jboss.soa.esb.listeners.config.Generator.XMLBeansModel;
+import org.w3c.dom.Element;
+
+/**
+ * Perform a mapping for an "untyped" listener configuration.
+ * <p/>
+ * By "untyped" we mean that the listener type is not defined in the XSD, but instead is being
+ * defined using the base &lt;listener&gt; type, mapping all it's associated
+ * &lt;property&gt; values (including those of the associated bus and provider) onto the listener
+ * ConfigTree as attributes.
+ * 
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+public class UntypedListenerMapper {
+
+	/**
+	 * @param root
+	 * @param listener
+	 * @param model
+	 * @return
+	 * @throws ConfigurationException 
+	 */
+	public static Element map(Element root, Listener listener, XMLBeansModel model) throws ConfigurationException {
+		Element listenerNode = YADOMUtil.addElement(root, "listener-config");
+		
+		// Map the standard listener attributes - common across all listener types...
+		MapperUtil.mapDefaultAttributes(listener, listenerNode, model);
+		// Map the <property> elements targeted at the listener.
+		MapperUtil.mapProperties(listener, listenerNode, model);
+		
+		return listenerNode;
+	}
+}

Modified: labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/GeneratorUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/GeneratorUnitTest.java	2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/GeneratorUnitTest.java	2006-12-18 17:05:19 UTC (rev 8384)
@@ -99,7 +99,7 @@
 		assertEquals(1, gatewayListener.getMaxThreads());
 
 		List<Listener> awareListeners = model.getESBAwareListeners();
-		assertEquals(1, awareListeners.size());
+		assertEquals(2, awareListeners.size());
 		JmsListener awareListener = (JmsListener)awareListeners.get(0);
 		assertEquals("Bank-Listener", awareListener.getName());
 		assertEquals("local-jms", awareListener.getBusidref());
@@ -110,6 +110,11 @@
 		assertEquals(JmsMessageFilter.DestType.TOPIC, listenerDestination.getDestType());
 		assertEquals("service='Reconciliation'", listenerDestination.getSelector());
 		
+		Listener untypedAwareListener = awareListeners.get(1);
+		assertEquals("Bank-Listener-Generic", untypedAwareListener.getName());
+		assertEquals("my-generic-bus", untypedAwareListener.getBusidref());
+		assertTrue(!untypedAwareListener.getIsGateway());
+		
 		Service gatewayService = model.getService(gatewayListener);
 		Service awareService = model.getService(awareListener);
 		assertEquals(gatewayService, awareService);

Modified: labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/jbossesb_config_01.xml
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/jbossesb_config_01.xml	2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/jbossesb_config_01.xml	2006-12-18 17:05:19 UTC (rev 8384)
@@ -14,6 +14,15 @@
 				<jms-message-filter dest-type="QUEUE" dest-name="queue/A" selector="service='Reconciliation'" />
 			</jms-bus>
 		</jms-provider>
+
+		<provider>
+			<property name="my-generic-provider" value="my-generic-provider#someattribvalue" />
+			
+			<bus busid="my-generic-bus">
+				<property name="my-generic-bus" value="my-generic-bus#someattribvalue" />
+			</bus>
+		</provider>
+
 	</providers>
 	<services>    
 		<service category="Bank" name="Reconciliation" description="Bank Reconciliation Service">
@@ -23,12 +32,19 @@
 							is-gateway="true" 
 							busidref="server1-jms"
 							maxThreads="1"/>
+
 				<jms-listener name="Bank-Listener" 
 							is-gateway="false"
 							busidref="local-jms"
 							maxThreads="2">
 					<jms-message-filter dest-type="TOPIC" dest-name="queue/B" selector="service='Reconciliation'" />
 				</jms-listener>
+
+				<listener name="Bank-Listener-Generic" 
+							is-gateway="false"
+							busidref="my-generic-bus">
+					<property name="my-generic-listener" value="my-generic-listener#someattribvalue" />
+				</listener>
 			</listeners>    	
 			  
 			<actions>    	    

Modified: labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.xsd
===================================================================
--- labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.xsd	2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.xsd	2006-12-18 17:05:19 UTC (rev 8384)
@@ -7,7 +7,7 @@
 	 elementFormDefault="qualified">
 	
 	<!-- 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
-			Document root.
+			Document root + some basic types.
 		 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888-->
 	
 	<xsd:element name="jbossesb" >
@@ -18,6 +18,13 @@
 			</xsd:sequence>
 		</xsd:complexType>
 	</xsd:element>
+
+	<xsd:element name="property">
+		<xsd:complexType>
+			<xsd:attribute name="name" use="required" type="xsd:string"/>
+			<xsd:attribute name="value" type="xsd:string"/>
+		</xsd:complexType>
+	</xsd:element>
 	
 	<!-- 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
 			Provider and Bus base types.
@@ -32,15 +39,19 @@
 	</xsd:element>
 	<xsd:complexType name="provider">
 		<xsd:sequence>
+			<xsd:element ref="jesb:property" minOccurs="0" maxOccurs="unbounded"/>
 			<xsd:element ref="jesb:bus" maxOccurs="unbounded" minOccurs="1"/>
 		</xsd:sequence>
 	</xsd:complexType>
-	<xsd:element name="provider" type="jesb:provider" abstract="true"/>
+	<xsd:element name="provider" type="jesb:provider"/>
 	
 	<xsd:complexType name="bus">
+		<xsd:sequence>
+			<xsd:element ref="jesb:property" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
 		<xsd:attribute name="busid" use="required" type="xsd:string" />
 	</xsd:complexType>
-	<xsd:element name="bus" type="jesb:bus" abstract="true"/>
+	<xsd:element name="bus" type="jesb:bus" />
 	
 	<!-- 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
 			Service and Action types.
@@ -82,12 +93,6 @@
 			<xsd:attribute name="process" type="xsd:string"/>
 		</xsd:complexType>
 	</xsd:element>
-	<xsd:element name="property">
-		<xsd:complexType>
-			<xsd:attribute name="name" use="required" type="xsd:string"/>
-			<xsd:attribute name="value" type="xsd:string"/>
-		</xsd:complexType>
-	</xsd:element>
 
 	<!-- 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
 			Listener base types.
@@ -101,10 +106,14 @@
 		</xsd:complexType>
 	</xsd:element>
 	<xsd:complexType name="listener">
+		<xsd:sequence>
+			<xsd:element ref="jesb:property" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
 		<xsd:attribute name="name" use="required" type="xsd:string" />
+		<xsd:attribute name="busidref" use="required" type="xsd:string" />
 		<xsd:attribute name="is-gateway" use="required" type="xsd:boolean" />
 	</xsd:complexType>
-	<xsd:element name="listener" type="jesb:listener" abstract="true"/>
+	<xsd:element name="listener" type="jesb:listener" />
 
 	<!-- 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
 			JMS Type Implementations.
@@ -154,7 +163,6 @@
 					<xsd:sequence>
 						<xsd:element ref="jesb:jms-message-filter" maxOccurs="1" minOccurs="0"/>
 					</xsd:sequence>
-					<xsd:attribute name="busidref" use="required" type="xsd:string" />
 					<xsd:attribute name="maxThreads" use="required" type="xsd:int" />
 				</xsd:extension>
 			</xsd:complexContent>




More information about the jboss-svn-commits mailing list