Clover Coverage Report - XWiki Rendering - Parent POM 4.0-SNAPSHOT (Aggregated)
Coverage timestamp: Mon Mar 12 2012 18:03:13 CET
../../../../../../img/srcFileCovDistChart10.png 0% of files have more coverage
30   125   10   15
16   65   0.33   2
2     5  
1    
 
  DefaultListenerDescriptorManager       Line # 40 30 0% 10 3 93.8% 0.9375
 
  (12)
 
1    /*
2    * See the NOTICE file distributed with this work for additional
3    * information regarding copyright ownership.
4    *
5    * This is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU Lesser General Public License as
7    * published by the Free Software Foundation; either version 2.1 of
8    * the License, or (at your option) any later version.
9    *
10    * This software is distributed in the hope that it will be useful,
11    * but WITHOUT ANY WARRANTY; without even the implied warranty of
12    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13    * Lesser General Public License for more details.
14    *
15    * You should have received a copy of the GNU Lesser General Public
16    * License along with this software; if not, write to the Free
17    * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
18    * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
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 org.xwiki.component.annotation.Component;
28    import org.xwiki.rendering.listener.Listener;
29    import org.xwiki.rendering.listener.descriptor.ListenerDescriptor;
30    import org.xwiki.rendering.listener.descriptor.ListenerDescriptorManager;
31    import org.xwiki.rendering.listener.descriptor.ListenerElement;
32   
33    /**
34    * Default implementation of {@link ListenerDescriptorManager}.
35    *
36    * @version $Id: 8f200e0e9a602b2dca5c6e61ac4f8251cddf242b $
37    * @since 3.3M1
38    */
39    @Component
 
40    public class DefaultListenerDescriptorManager implements ListenerDescriptorManager
41    {
42    /**
43    * The prefix of the begin events.
44    */
45    private static final String PREFIX_BEGIN = "begin";
46   
47    /**
48    * The prefix of the end events.
49    */
50    private static final String PREFIX_END = "end";
51   
52    /**
53    * The prefix of the on events.
54    */
55    private static final String PREFIX_ON = "on";
56   
57    /**
58    * The descriptors.
59    */
60    private Map<Class< ? >, ListenerDescriptor> descriptors = new ConcurrentHashMap<Class< ? >, ListenerDescriptor>();
61   
 
62  120 toggle @Override
63    public ListenerDescriptor getListenerDescriptor(Class< ? > type)
64    {
65  120 ListenerDescriptor descriptor = this.descriptors.get(type);
66  120 if (descriptor == null) {
67  12 descriptor = createDescriptor(type);
68  12 this.descriptors.put(type, descriptor);
69    }
70   
71  120 return descriptor;
72    }
73   
74    /**
75    * @param type the class of the listener
76    * @return the descriptor of the listener
77    */
 
78  12 toggle public ListenerDescriptor createDescriptor(Class< ? > type)
79    {
80  12 ListenerDescriptor descriptor = new ListenerDescriptor();
81   
82  12 for (Method method : Listener.class.getMethods()) {
83  612 String methodName = method.getName();
84   
85  612 String elementName;
86  612 if (methodName.startsWith(PREFIX_BEGIN)) {
87  240 elementName = methodName.substring(PREFIX_BEGIN.length(), methodName.length());
88  372 } else if (methodName.startsWith(PREFIX_END)) {
89  240 elementName = methodName.substring(PREFIX_END.length(), methodName.length());
90  132 } else if (methodName.startsWith(PREFIX_ON)) {
91  132 elementName = methodName.substring(PREFIX_ON.length(), methodName.length());
92    } else {
93  0 elementName = null;
94    }
95   
96  612 if (elementName != null) {
97  612 elementName =
98    Character.toLowerCase(elementName.charAt(0)) + elementName.substring(1, elementName.length());
99   
100  612 ListenerElement element = descriptor.getElements().get(elementName.toLowerCase());
101   
102  612 if (element == null) {
103  372 element = new ListenerElement(elementName);
104   
105  372 for (Type parameterType : method.getGenericParameterTypes()) {
106  504 element.getParameters().add(parameterType);
107    }
108   
109  372 descriptor.getElements().put(elementName.toLowerCase(), element);
110    }
111   
112  612 if (methodName.startsWith(PREFIX_BEGIN)) {
113  240 element.setBeginMethod(method);
114  372 } else if (methodName.startsWith(PREFIX_END)) {
115  240 element.setEndMethod(method);
116    } else {
117  132 element.setOnMethod(method);
118    }
119    }
120   
121    }
122   
123  12 return descriptor;
124    }
125    }