1
2
3
4
5
6
7
8
9
10 package org.mule.model.resolvers;
11
12 import org.mule.api.MuleEventContext;
13 import org.mule.api.model.EntryPointResolver;
14 import org.mule.api.model.EntryPointResolverSet;
15 import org.mule.api.model.InvocationResult;
16 import org.mule.util.CollectionUtils;
17
18 import java.util.Iterator;
19 import java.util.LinkedHashSet;
20 import java.util.List;
21 import java.util.Set;
22
23 import edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArrayList;
24
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
27
28
29
30
31
32
33
34
35 public class DefaultEntryPointResolverSet implements EntryPointResolverSet
36 {
37
38 protected final Log logger = LogFactory.getLog(getClass());
39
40 private final Set entryPointResolvers = new LinkedHashSet(4);
41 private List exceptions = new CopyOnWriteArrayList();
42
43 public Object invoke(Object component, MuleEventContext context) throws Exception
44 {
45 try
46 {
47 for (Iterator iterator = entryPointResolvers.iterator(); iterator.hasNext();)
48 {
49 EntryPointResolver resolver = (EntryPointResolver) iterator.next();
50 InvocationResult result = resolver.invoke(component, context);
51 if (result.getState() == InvocationResult.STATE_INVOKED_SUCESSFUL)
52 {
53 return result.getResult();
54 }
55 else
56 {
57 if (result.hasError())
58 {
59 exceptions.add(result.getErrorMessage());
60 }
61 }
62 }
63 throw new EntryPointNotFoundException(CollectionUtils.toString(exceptions, true));
64 }
65 finally
66 {
67 exceptions.clear();
68 }
69
70 }
71
72 public Set getEntryPointResolvers()
73 {
74 return entryPointResolvers;
75 }
76
77 public void setEntryPointResolvers(Set entryPointResolvers)
78 {
79 this.entryPointResolvers.clear();
80 this.entryPointResolvers.addAll(entryPointResolvers);
81 }
82
83 public void addEntryPointResolver(EntryPointResolver resolver)
84 {
85 synchronized (entryPointResolvers)
86 {
87 this.entryPointResolvers.add(resolver);
88 }
89 }
90
91 public boolean removeEntryPointResolver(EntryPointResolver resolver)
92 {
93 return this.entryPointResolvers.remove(resolver);
94 }
95 }