1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
|
15 |
|
|
16 |
|
|
17 |
|
|
18 |
|
|
19 |
|
|
20 |
|
package org.xwiki.rendering.internal.listener.descriptor; |
21 |
|
|
22 |
|
import java.lang.reflect.Method; |
23 |
|
import java.lang.reflect.Type; |
24 |
|
import java.util.Map; |
25 |
|
import java.util.concurrent.ConcurrentHashMap; |
26 |
|
|
27 |
|
import javax.inject.Singleton; |
28 |
|
|
29 |
|
import org.xwiki.component.annotation.Component; |
30 |
|
import org.xwiki.component.util.ReflectionUtils; |
31 |
|
import org.xwiki.rendering.listener.descriptor.ListenerDescriptor; |
32 |
|
import org.xwiki.rendering.listener.descriptor.ListenerDescriptorManager; |
33 |
|
import org.xwiki.rendering.listener.descriptor.ListenerElement; |
34 |
|
|
35 |
|
|
36 |
|
@link |
37 |
|
|
38 |
|
@version |
39 |
|
@since |
40 |
|
|
41 |
|
@Component |
42 |
|
@Singleton |
|
|
| 95.5% |
Uncovered Elements: 3 (66) |
Complexity: 19 |
Complexity Density: 0.47 |
|
43 |
|
public class DefaultListenerDescriptorManager implements ListenerDescriptorManager |
44 |
|
{ |
45 |
|
|
46 |
|
|
47 |
|
|
48 |
|
private static final String PREFIX_BEGIN = "begin"; |
49 |
|
|
50 |
|
|
51 |
|
|
52 |
|
|
53 |
|
private static final String PREFIX_END = "end"; |
54 |
|
|
55 |
|
|
56 |
|
|
57 |
|
|
58 |
|
private static final String PREFIX_ON = "on"; |
59 |
|
|
60 |
|
|
61 |
|
|
62 |
|
|
63 |
|
private Map<Class<?>, ListenerDescriptor> descriptors = new ConcurrentHashMap<Class<?>, ListenerDescriptor>(); |
64 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (7) |
Complexity: 2 |
Complexity Density: 0.4 |
|
65 |
4 |
@Override... |
66 |
|
public ListenerDescriptor getListenerDescriptor(Class<?> type) |
67 |
|
{ |
68 |
4 |
ListenerDescriptor descriptor = this.descriptors.get(type); |
69 |
4 |
if (descriptor == null) { |
70 |
2 |
descriptor = createDescriptor(type); |
71 |
2 |
this.descriptors.put(type, descriptor); |
72 |
|
} |
73 |
|
|
74 |
4 |
return descriptor; |
75 |
|
} |
76 |
|
|
77 |
|
|
78 |
|
@param |
79 |
|
@return |
80 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (23) |
Complexity: 5 |
Complexity Density: 0.33 |
|
81 |
2 |
public ListenerDescriptor createDescriptor(Class<?> type)... |
82 |
|
{ |
83 |
2 |
ListenerDescriptor descriptor = new ListenerDescriptor(); |
84 |
|
|
85 |
2 |
for (Method method : ReflectionUtils.getTypeClass(type).getMethods()) { |
86 |
122 |
String methodName = method.getName(); |
87 |
|
|
88 |
122 |
String elementName; |
89 |
122 |
if (methodName.startsWith(PREFIX_BEGIN)) { |
90 |
40 |
elementName = methodName.substring(PREFIX_BEGIN.length(), methodName.length()); |
91 |
82 |
} else if (methodName.startsWith(PREFIX_END)) { |
92 |
40 |
elementName = methodName.substring(PREFIX_END.length(), methodName.length()); |
93 |
42 |
} else if (methodName.startsWith(PREFIX_ON)) { |
94 |
22 |
elementName = methodName.substring(PREFIX_ON.length(), methodName.length()); |
95 |
|
} else { |
96 |
20 |
elementName = null; |
97 |
|
} |
98 |
|
|
99 |
122 |
if (elementName != null) { |
100 |
102 |
elementName = |
101 |
|
Character.toLowerCase(elementName.charAt(0)) + elementName.substring(1, elementName.length()); |
102 |
|
|
103 |
102 |
addElement(elementName, descriptor, method); |
104 |
|
} |
105 |
|
|
106 |
|
} |
107 |
|
|
108 |
2 |
return descriptor; |
109 |
|
} |
110 |
|
|
111 |
|
|
112 |
|
@param |
113 |
|
@param |
114 |
|
@param |
115 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (12) |
Complexity: 3 |
Complexity Density: 0.3 |
|
116 |
102 |
private void addElement(String elementName, ListenerDescriptor descriptor, Method method)... |
117 |
|
{ |
118 |
102 |
String lowerElementName = elementName.toLowerCase(); |
119 |
|
|
120 |
102 |
ListenerElement element = descriptor.getElements().get(lowerElementName); |
121 |
|
|
122 |
102 |
Type[] methodTypes = method.getGenericParameterTypes(); |
123 |
|
|
124 |
102 |
if (element == null || methodTypes.length > element.getParameters().size()) { |
125 |
62 |
element = new ListenerElement(elementName); |
126 |
|
|
127 |
62 |
element.getParameters().clear(); |
128 |
62 |
for (Type parameterType : method.getGenericParameterTypes()) { |
129 |
84 |
element.getParameters().add(parameterType); |
130 |
|
} |
131 |
|
|
132 |
62 |
descriptor.getElements().put(lowerElementName, element); |
133 |
|
} |
134 |
|
|
135 |
102 |
addMethod(element, method); |
136 |
|
} |
137 |
|
|
138 |
|
|
139 |
|
@param |
140 |
|
@param |
141 |
|
|
|
|
| 85% |
Uncovered Elements: 3 (20) |
Complexity: 9 |
Complexity Density: 0.9 |
|
142 |
102 |
private void addMethod(ListenerElement element, Method method)... |
143 |
|
{ |
144 |
102 |
String methodName = method.getName(); |
145 |
102 |
Type[] methodTypes = method.getGenericParameterTypes(); |
146 |
|
|
147 |
102 |
if (methodName.startsWith(PREFIX_BEGIN)) { |
148 |
40 |
if (element.getBeginMethod() == null |
149 |
|
|| element.getBeginMethod().getGenericParameterTypes().length < methodTypes.length) { |
150 |
40 |
element.setBeginMethod(method); |
151 |
|
} |
152 |
62 |
} else if (methodName.startsWith(PREFIX_END)) { |
153 |
40 |
if (element.getEndMethod() == null |
154 |
|
|| element.getEndMethod().getGenericParameterTypes().length < methodTypes.length) { |
155 |
40 |
element.setEndMethod(method); |
156 |
|
} |
157 |
|
} else { |
158 |
22 |
if (element.getOnMethod() == null |
159 |
|
|| element.getOnMethod().getGenericParameterTypes().length < methodTypes.length) { |
160 |
22 |
element.setOnMethod(method); |
161 |
|
} |
162 |
|
} |
163 |
|
} |
164 |
|
} |