1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.filters;
35
36 import info.magnolia.cms.util.DispatcherType;
37
38 import java.util.Collections;
39 import java.util.List;
40 import java.util.concurrent.CopyOnWriteArrayList;
41
42
43
44
45
46
47 public class DispatchRules {
48
49 private final SimpleConcurrentEnumMap<DispatcherType, DispatchRule> dispatchRules = new SimpleConcurrentEnumMap<DispatcherType, DispatchRule>(
50 DispatcherType.class);
51
52 public DispatchRules() {
53 dispatchRules.put(DispatcherType.REQUEST, new DispatchRule(true, true));
54 dispatchRules.put(DispatcherType.FORWARD, new DispatchRule(true, false));
55 dispatchRules.put(DispatcherType.INCLUDE, new DispatchRule(false, false));
56 dispatchRules.put(DispatcherType.ERROR, new DispatchRule(true, false));
57 }
58
59 public void setRequest(DispatchRule rule) {
60 this.dispatchRules.put(DispatcherType.REQUEST, rule);
61 }
62
63 public void setForward(DispatchRule rule) {
64 this.dispatchRules.put(DispatcherType.FORWARD, rule);
65 }
66
67 public void setInclude(DispatchRule rule) {
68 this.dispatchRules.put(DispatcherType.INCLUDE, rule);
69 }
70
71 public void setError(DispatchRule rule) {
72 this.dispatchRules.put(DispatcherType.ERROR, rule);
73 }
74
75 public DispatchRule getDispatchRule(DispatcherType dispatcherType) {
76 return dispatchRules.get(dispatcherType);
77 }
78
79
80
81
82
83
84 private static class SimpleConcurrentEnumMap<K extends Enum, V> {
85
86 private final List<V> values = new CopyOnWriteArrayList<V>();
87
88 private SimpleConcurrentEnumMap(Class<K> keyType) {
89 this(keyType, null);
90 }
91
92 public SimpleConcurrentEnumMap(Class<K> keyType, V defaultValue) {
93
94 values.addAll(Collections.nCopies(keyType.getEnumConstants().length, defaultValue));
95 }
96
97 public void put(K key, V value) {
98 values.set(key.ordinal(), value);
99 }
100
101 public V get(K key) {
102 return values.get(key.ordinal());
103 }
104 }
105
106 }