Coverage Report - org.mule.routing.outbound.FilteringListMessageSplitter
 
Classes in this File Line Coverage Branch Coverage Complexity
FilteringListMessageSplitter
0%
0/28
0%
0/7
5.5
 
 1  
 /*
 2  
  * $Id: FilteringListMessageSplitter.java 7976 2007-08-21 14:26:13Z dirk.olmes $
 3  
  * --------------------------------------------------------------------------------------
 4  
  * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
 5  
  *
 6  
  * The software in this package is published under the terms of the CPAL v1.0
 7  
  * license, a copy of which has been included with this distribution in the
 8  
  * LICENSE.txt file.
 9  
  */
 10  
 
 11  
 package org.mule.routing.outbound;
 12  
 
 13  
 import org.mule.impl.MuleMessage;
 14  
 import org.mule.umo.UMOMessage;
 15  
 import org.mule.umo.endpoint.UMOEndpoint;
 16  
 
 17  
 import java.util.HashMap;
 18  
 import java.util.Iterator;
 19  
 import java.util.LinkedList;
 20  
 import java.util.List;
 21  
 import java.util.Map;
 22  
 
 23  
 /**
 24  
  * <code>FilteringListMessageSplitter</code> accepts a List as a message payload
 25  
  * then routes list elements as messages over an endpoint where the endpoint's filter
 26  
  * accepts the payload.
 27  
  */
 28  0
 public class FilteringListMessageSplitter extends AbstractMessageSplitter
 29  
 {
 30  0
     private static final ThreadLocal payloadContext = new ThreadLocal();
 31  0
     private static final ThreadLocal propertiesContext = new ThreadLocal();
 32  
 
 33  
     /**
 34  
      * Template method can be used to split the message up before the getMessagePart
 35  
      * method is called .
 36  
      * 
 37  
      * @param message the message being routed
 38  
      */
 39  
     // @Override
 40  
     protected void initialise(UMOMessage message)
 41  
     {
 42  0
         if (message.getPayload() instanceof List)
 43  
         {
 44  
             // get a copy of the list
 45  0
             List payload = new LinkedList((List) message.getPayload());
 46  0
             payloadContext.set(payload);
 47  
 
 48  0
             if (enableCorrelation != ENABLE_CORRELATION_NEVER)
 49  
             {
 50  
                 // always set correlation group size, even if correlation id
 51  
                 // has already been set (usually you don't have group size yet
 52  
                 // by this point.
 53  0
                 final int groupSize = payload.size();
 54  0
                 message.setCorrelationGroupSize(groupSize);
 55  0
                 if (logger.isDebugEnabled())
 56  
                 {
 57  0
                     logger.debug("java.util.List payload detected, setting correlation group size to "
 58  
                                     + groupSize);
 59  
                 }
 60  
             }
 61  
         }
 62  
         else
 63  
         {
 64  0
             throw new IllegalArgumentException("The payload for this router must be of type java.util.List");
 65  
         }
 66  
 
 67  
         // Cache the properties here because for some message types getting the
 68  
         // properties can be expensive
 69  0
         Map props = new HashMap();
 70  0
         for (Iterator iterator = message.getPropertyNames().iterator(); iterator.hasNext();)
 71  
         {
 72  0
             String propertyKey = (String) iterator.next();
 73  0
             props.put(propertyKey, message.getProperty(propertyKey));
 74  
         }
 75  0
         propertiesContext.set(props);
 76  0
     }
 77  
 
 78  
     /**
 79  
      * @inheritDocs
 80  
      */
 81  
     protected UMOMessage getMessagePart(UMOMessage message, UMOEndpoint endpoint)
 82  
     {
 83  0
         List payloads = (List) payloadContext.get();
 84  
 
 85  0
         for (Iterator i = payloads.iterator(); i.hasNext();)
 86  
         {
 87  0
             Object payload = i.next();
 88  0
             UMOMessage result = new MuleMessage(payload, (Map) propertiesContext.get());
 89  
             // If there is no filter assume that the endpoint can accept the
 90  
             // message. Endpoints will be processed in order to only the last
 91  
             // (if any) of the the endpoints may not have a filter
 92  0
             if (endpoint.getFilter() == null || endpoint.getFilter().accept(result))
 93  
             {
 94  0
                 if (logger.isDebugEnabled())
 95  
                 {
 96  0
                     logger.debug("Endpoint filter matched. Routing message over: "
 97  
                                     + endpoint.getEndpointURI().toString());
 98  
                 }
 99  0
                 i.remove();
 100  0
                 return result;
 101  
             }
 102  
         }
 103  
 
 104  0
         return null;
 105  
     }
 106  
 }