Author: asankha
Date: Sun Jul 30 22:50:21 2006
New Revision: 427019

URL: http://svn.apache.org/viewvc?rev=427019&view=rev
Log:
add support for Dynamic Sequences

Modified:
    
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java
    
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java
    
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/XMLConfigurationBuilder.java
    
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
    
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java
    
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/registry/AbstractRegistry.java
    
incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/base/SequenceMediatorTest.java

Modified: 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java
URL: 
http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java?rev=427019&r1=427018&r2=427019&view=diff
==============================================================================
--- 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java
 (original)
+++ 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java
 Sun Jul 30 22:50:21 2006
@@ -58,17 +58,35 @@
      * @param name the name for the sequence
      * @param m the mediator to be reffered to by the name
      */
-    public void addNamedMediator(String name, Mediator m) {
+    public void addNamedSequence(String name, Mediator m) {
         namedSequences.put(name, m);
     }
 
     /**
+     * Allow a DynamicProperty to be added as a named sequence, this will 
become
+     * a DynamicSequence
+     * @param name the name of the sequence
+     * @param dp a DynamicProperty reflecting the dynamic sequence
+     */
+    public void addNamedSequence(String name, DynamicProperty dp) {
+        namedSequences.put(name, dp);
+    }
+
+    /**
      * Return the mediator named with the given name
      * @param name the name being looked up
      * @return the mediator referenced by the name
      */
-    public Mediator getNamedMediator(String name) {
-        return (Mediator) namedSequences.get(name);
+    public Mediator getNamedSequence(String name) {
+        Object o = namedSequences.get(name);
+        if (o != null && o instanceof DynamicProperty) {
+            DynamicProperty dp = (DynamicProperty) o;
+            o = getRegistry(dp.getRegistryName()).getProperty(dp);
+            if (o == null) {
+                handleException("Invalid DynamicSequence for name : " + name);
+            }
+        }
+        return (Mediator) o;
     }
 
     /**
@@ -172,7 +190,7 @@
     }
 
     /**
-     * Get the whole list of named sequencies
+     * Get the whole list of named sequences
      * as a Map
      */
     public Map getNamedSequences() {

Modified: 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java
URL: 
http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java?rev=427019&r1=427018&r2=427019&view=diff
==============================================================================
--- 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java
 (original)
+++ 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java
 Sun Jul 30 22:50:21 2006
@@ -33,8 +33,10 @@
 
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.config.xml.MediatorFactory;
+import org.apache.synapse.config.XMLToObjectMapper;
 import org.apache.synapse.api.Mediator;
 import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMNode;
 import org.apache.ws.commons.schema.*;
 
 import sun.misc.Service;
@@ -46,7 +48,7 @@
  * http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Service%20Provider
  */
 
-public class MediatorFactoryFinder {
+public class MediatorFactoryFinder implements XMLToObjectMapper {
 
        private static final Log log = 
LogFactory.getLog(MediatorFactoryFinder.class);
 
@@ -124,6 +126,11 @@
         throw new SynapseException(msg, e);
     }
 
+    private void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
+    }
+
     /**
      * Register pluggable mediator factories from the classpath
      *
@@ -184,5 +191,20 @@
     */
     public Map getFactoryMap() {
         return factoryMap;
+    }
+
+    /**
+     * Allow the mediator factory finder to act as an XMLToObjectMapper for 
Mediators
+     * (i.e. Sequence Mediator) loaded dynamically from a Registry 
+     * @param om
+     * @return
+     */
+    public Object getObjectFromOMNode(OMNode om) {
+        if (om instanceof OMElement) {
+            return getMediator((OMElement) om);
+        } else {
+            handleException("Invalid mediator configuration XML : " + om);
+        }
+        return null;
     }
 }

Modified: 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/XMLConfigurationBuilder.java
URL: 
http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/XMLConfigurationBuilder.java?rev=427019&r1=427018&r2=427019&view=diff
==============================================================================
--- 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/XMLConfigurationBuilder.java
 (original)
+++ 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/XMLConfigurationBuilder.java
 Sun Jul 30 22:50:21 2006
@@ -188,15 +188,24 @@
 
     /**
      * <pre>
-     * &lt;sequence name="string&gt;
-     *    Mediator+
+     * &lt;sequence name="string" [key="string"]&gt;
+     *    Mediator*
      * &lt;/sequence&gt;
      * </pre>
      * @param ele
      */
     public void defineSequence(SynapseConfiguration config, OMElement ele) {
-        SequenceMediator seq = (SequenceMediator) 
MediatorFactoryFinder.getInstance().getMediator(ele);
-        config.addNamedMediator(seq.getName(), seq);
+        OMAttribute name = ele.getAttribute(new 
QName(Constants.NULL_NAMESPACE, "name"));
+        OMAttribute key  = ele.getAttribute(new 
QName(Constants.NULL_NAMESPACE, "key"));
+        if (name != null && key != null) {
+            DynamicProperty dp = new DynamicProperty(key.getAttributeValue());
+            dp.setMapper(MediatorFactoryFinder.getInstance());
+            config.addNamedSequence(name.getAttributeValue(), dp);
+        } else {
+            SequenceMediator seq = (SequenceMediator)
+                MediatorFactoryFinder.getInstance().getMediator(ele);
+            config.addNamedSequence(seq.getName(), seq);
+        }
     }
 
     /**

Modified: 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
URL: 
http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java?rev=427019&r1=427018&r2=427019&view=diff
==============================================================================
--- 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
 (original)
+++ 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
 Sun Jul 30 22:50:21 2006
@@ -108,7 +108,7 @@
 
         // if a named sequence is specified, use it for message mediation
         } else if (targetSequence != null) {
-            Mediator mediator = 
synCtx.getConfiguration().getNamedMediator(targetSequence);
+            Mediator mediator = 
synCtx.getConfiguration().getNamedSequence(targetSequence);
             if (mediator == null) {
                 // what else can/should we do instead of just logging the 
message as an error?
                 log.error("The mediator named '" + targetSequence + "' is not 
defined. Dropping current message");

Modified: 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java
URL: 
http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java?rev=427019&r1=427018&r2=427019&view=diff
==============================================================================
--- 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java
 (original)
+++ 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java
 Sun Jul 30 22:50:21 2006
@@ -62,7 +62,7 @@
                     // set exception information to message context
                     Util.setErrorInformation(synCtx, e);
 
-                    Mediator errHandler = 
synCtx.getConfiguration().getNamedMediator(errorHandler);
+                    Mediator errHandler = 
synCtx.getConfiguration().getNamedSequence(errorHandler);
                     if (errHandler == null) {
                         handleException("Error handler sequence mediator 
instance named " +
                             errorHandler + " cannot be found");
@@ -76,7 +76,7 @@
             }
 
         } else {
-            Mediator m = synCtx.getConfiguration().getNamedMediator(ref);
+            Mediator m = synCtx.getConfiguration().getNamedSequence(ref);
             if (m == null) {
                 handleException("Sequence mediator instance named " + ref + " 
cannot be found.");
             } else {

Modified: 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/registry/AbstractRegistry.java
URL: 
http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/registry/AbstractRegistry.java?rev=427019&r1=427018&r2=427019&view=diff
==============================================================================
--- 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/registry/AbstractRegistry.java
 (original)
+++ 
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/registry/AbstractRegistry.java
 Sun Jul 30 22:50:21 2006
@@ -85,18 +85,23 @@
         // if we get here, we have received the raw omNode from the
         // registry and our previous copy (if we had one) has expired or is 
not valid
 
-        // if the type of the object is known to have a mapper, create the
-        // resultant Object using the known mapper, and cache this Object
-        // else cache the raw OMNode
-        if (re != null && re.getType() != null) {
+        if (dp.getMapper() != null) {
+            dp.setCache(
+                dp.getMapper().getObjectFromOMNode(omNode));
+        } else {
+            // if the type of the object is known to have a mapper, create the
+            // resultant Object using the known mapper, and cache this Object
+            // else cache the raw OMNode
+            if (re != null && re.getType() != null) {
 
-            XMLToObjectMapper mapper = getMapper(re.getType());
-            if (mapper != null) {
-                dp.setMapper(mapper);
-                dp.setCache(mapper.getObjectFromOMNode(omNode));
+                XMLToObjectMapper mapper = getMapper(re.getType());
+                if (mapper != null) {
+                    dp.setMapper(mapper);
+                    dp.setCache(mapper.getObjectFromOMNode(omNode));
 
-            } else {
-                dp.setCache(omNode);
+                } else {
+                    dp.setCache(omNode);
+                }
             }
         }
 

Modified: 
incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/base/SequenceMediatorTest.java
URL: 
http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/base/SequenceMediatorTest.java?rev=427019&r1=427018&r2=427019&view=diff
==============================================================================
--- 
incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/base/SequenceMediatorTest.java
 (original)
+++ 
incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/base/SequenceMediatorTest.java
 Sun Jul 30 22:50:21 2006
@@ -107,7 +107,7 @@
 
         // invoke transformation, with static enveope
         MessageContext synCtx = TestUtils.getTestContext("<empty/>");
-        synCtx.getConfiguration().addNamedMediator("myErrorHandler", seqErr);
+        synCtx.getConfiguration().addNamedSequence("myErrorHandler", seqErr);
 
         seq.mediate(synCtx);
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to