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 java.util.Collections;
37 import java.util.List;
38 import java.util.concurrent.CopyOnWriteArrayList;
39
40 import info.magnolia.cms.util.DispatcherType;
41
42
43
44
45
46
47
48
49 public class DispatchRules {
50
51 private final SimpleConcurrentEnumMap<DispatcherType, DispatchRule> dispatchRules = new SimpleConcurrentEnumMap<DispatcherType, DispatchRule>(
52 DispatcherType.class);
53
54 public DispatchRules() {
55 dispatchRules.put(DispatcherType.REQUEST, new DispatchRule(true, true));
56 dispatchRules.put(DispatcherType.FORWARD, new DispatchRule(true, false));
57 dispatchRules.put(DispatcherType.INCLUDE, new DispatchRule(false, false));
58 dispatchRules.put(DispatcherType.ERROR, new DispatchRule(true, false));
59 }
60
61 public void setRequest(DispatchRule rule) {
62 this.dispatchRules.put(DispatcherType.REQUEST, rule);
63 }
64
65 public void setForward(DispatchRule rule) {
66 this.dispatchRules.put(DispatcherType.FORWARD, rule);
67 }
68
69 public void setInclude(DispatchRule rule) {
70 this.dispatchRules.put(DispatcherType.INCLUDE, rule);
71 }
72
73 public void setError(DispatchRule rule) {
74 this.dispatchRules.put(DispatcherType.ERROR, rule);
75 }
76
77 public DispatchRule getDispatchRule(DispatcherType dispatcherType) {
78 return dispatchRules.get(dispatcherType);
79 }
80
81
82
83
84
85
86 private static class SimpleConcurrentEnumMap<K extends Enum, V> {
87
88 private final List<V> values = new CopyOnWriteArrayList<V>();
89
90 private SimpleConcurrentEnumMap(Class<K> keyType) {
91 this(keyType, null);
92 }
93
94 public SimpleConcurrentEnumMap(Class<K> keyType, V defaultValue) {
95
96 values.addAll(Collections.nCopies(keyType.getEnumConstants().length, defaultValue));
97 }
98
99 public void put(K key, V value) {
100 values.set(key.ordinal(), value);
101 }
102
103 public V get(K key) {
104 return values.get(key.ordinal());
105 }
106 }
107
108 }