1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.opensaml.ws.message.handler;
18
19 import java.util.ArrayList;
20 import java.util.Collections;
21 import java.util.List;
22 import java.util.Map;
23
24 import org.opensaml.xml.util.LazyList;
25 import org.opensaml.xml.util.LazyMap;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28
29
30
31
32 public class BasicPhasedHandlerChain extends BasicHandlerChain implements PhasedHandlerChain {
33
34
35 private final Logger log = LoggerFactory.getLogger(BasicPhasedHandlerChain.class);
36
37
38 private List<String> phaseOrder;
39
40
41 private Map<String, HandlerChain> phaseChains;
42
43
44 public BasicPhasedHandlerChain() {
45 super();
46 phaseOrder = new LazyList<String>();
47 phaseChains = new LazyMap<String, HandlerChain>();
48 }
49
50
51 public List<Handler> getHandlers() {
52 ArrayList<Handler> handlers = new ArrayList<Handler>();
53 for (String phaseName : getPhaseOrder()) {
54 HandlerChain phase = getPhaseChains().get(phaseName);
55 if (phase != null) {
56 List<Handler> phaseHandlers = phase.getHandlers();
57 if (!phaseHandlers.isEmpty()) {
58 handlers.addAll(phaseHandlers);
59 } else {
60 log.info("Specified phase name '{}' exists in PhasedHandlerChain, but contains no handlers",
61 phaseName);
62 }
63 } else {
64 log.warn("Specified phase name '{}' does not exist in PhasedHandlerChain: {}",
65 phaseName, getPhaseChains().keySet());
66 }
67 }
68 return Collections.unmodifiableList(handlers);
69 }
70
71
72 public Map<String, HandlerChain> getPhaseChains() {
73 return phaseChains;
74 }
75
76
77 public List<String> getPhaseOrder() {
78 return phaseOrder;
79 }
80
81
82 public void setPhaseOrder(List<String> newPhaseOrder) {
83 phaseOrder = newPhaseOrder;
84 }
85
86 }