1 10 11 package org.mule.routing.outbound; 12 13 import edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArrayList; 14 15 import org.mule.impl.MuleMessage; 16 import org.mule.umo.UMOMessage; 17 import org.mule.umo.endpoint.UMOEndpoint; 18 19 import java.util.HashMap ; 20 import java.util.List ; 21 import java.util.Map ; 22 import java.util.Iterator ; 23 24 32 public class FilteringListMessageSplitter extends AbstractMessageSplitter 33 { 34 private static ThreadLocal payloads = new ThreadLocal (); 35 private static ThreadLocal properties = new ThreadLocal (); 36 37 43 protected void initialise(UMOMessage message) 44 { 45 if (message.getPayload() instanceof List) 46 { 47 CopyOnWriteArrayList payload = new CopyOnWriteArrayList((List)message.getPayload()); 49 payloads.set(payload); 50 if (enableCorrelation != ENABLE_CORRELATION_NEVER) 51 { 52 final int groupSize = payload.size(); 56 message.setCorrelationGroupSize(groupSize); 57 if (logger.isDebugEnabled()) 58 { 59 logger.debug("java.util.List payload detected, setting correlation group size to " 60 + groupSize); 61 } 62 } 63 } 64 else 65 { 66 throw new IllegalArgumentException ("The payload for this router must be of type java.util.List"); 67 } 68 Map props = new HashMap (); 71 for (Iterator iterator = message.getPropertyNames().iterator(); iterator.hasNext();) 72 { 73 String propertyKey = (String )iterator.next(); 74 props.put(propertyKey, message.getProperty(propertyKey)); 75 } 76 properties.set(props); 77 } 78 79 82 protected UMOMessage getMessagePart(UMOMessage message, UMOEndpoint endpoint) 83 { 84 CopyOnWriteArrayList payload = (CopyOnWriteArrayList)payloads.get(); 85 for (int i = 0; i < payload.size(); i++) 86 { 87 Object object = payload.get(i); 88 UMOMessage result = new MuleMessage(object, (Map )properties.get()); 89 if (endpoint.getFilter() == null || endpoint.getFilter().accept(result)) 93 { 94 if (logger.isDebugEnabled()) 95 { 96 logger.debug("Endpoint filter matched. Routing message over: " 97 + endpoint.getEndpointURI().toString()); 98 } 99 payload.remove(i); 100 return result; 101 } 102 } 103 return null; 104 } 105 } 106 | Popular Tags |