1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
|
15 |
|
|
16 |
|
|
17 |
|
|
18 |
|
|
19 |
|
|
20 |
|
package org.xwiki.resource.internal; |
21 |
|
|
22 |
|
import java.util.List; |
23 |
|
import java.util.Set; |
24 |
|
import java.util.TreeSet; |
25 |
|
|
26 |
|
import javax.inject.Inject; |
27 |
|
import javax.inject.Named; |
28 |
|
|
29 |
|
import org.apache.commons.lang3.exception.ExceptionUtils; |
30 |
|
import org.slf4j.Logger; |
31 |
|
import org.xwiki.component.manager.ComponentLookupException; |
32 |
|
import org.xwiki.component.manager.ComponentManager; |
33 |
|
import org.xwiki.component.util.DefaultParameterizedType; |
34 |
|
import org.xwiki.resource.NotFoundResourceHandlerException; |
35 |
|
import org.xwiki.resource.ResourceReference; |
36 |
|
import org.xwiki.resource.ResourceReferenceHandler; |
37 |
|
import org.xwiki.resource.ResourceReferenceHandlerChain; |
38 |
|
import org.xwiki.resource.ResourceReferenceHandlerException; |
39 |
|
import org.xwiki.resource.ResourceReferenceHandlerManager; |
40 |
|
|
41 |
|
|
42 |
|
@link |
43 |
|
|
44 |
|
@param |
45 |
|
@version |
46 |
|
@since |
47 |
|
|
|
|
| 88.9% |
Uncovered Elements: 3 (27) |
Complexity: 8 |
Complexity Density: 0.42 |
|
48 |
|
public abstract class AbstractResourceReferenceHandlerManager<T> implements ResourceReferenceHandlerManager<T> |
49 |
|
{ |
50 |
|
|
51 |
|
|
52 |
|
|
53 |
|
|
54 |
|
@Inject |
55 |
|
@Named("context") |
56 |
|
private ComponentManager contextComponentManager; |
57 |
|
|
58 |
|
@Inject |
59 |
|
private Logger logger; |
60 |
|
|
61 |
|
protected abstract boolean matches(ResourceReferenceHandler handler, T resourceReferenceQualifier); |
62 |
|
|
63 |
|
protected abstract T extractResourceReferenceQualifier(ResourceReference reference); |
64 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (7) |
Complexity: 2 |
Complexity Density: 0.4 |
|
65 |
11225 |
@Override... |
66 |
|
public void handle(ResourceReference reference) throws ResourceReferenceHandlerException |
67 |
|
{ |
68 |
|
|
69 |
11223 |
Set<ResourceReferenceHandler> orderedHandlers = |
70 |
|
getMatchingHandlers(extractResourceReferenceQualifier(reference)); |
71 |
|
|
72 |
11220 |
if (!orderedHandlers.isEmpty()) { |
73 |
|
|
74 |
1715 |
ResourceReferenceHandlerChain chain = new DefaultResourceReferenceHandlerChain(orderedHandlers); |
75 |
|
|
76 |
|
|
77 |
1709 |
chain.handleNext(reference); |
78 |
|
} else { |
79 |
|
|
80 |
9499 |
throw new NotFoundResourceHandlerException(reference); |
81 |
|
} |
82 |
|
} |
83 |
|
|
|
|
| 66.7% |
Uncovered Elements: 2 (6) |
Complexity: 2 |
Complexity Density: 0.33 |
|
84 |
13010 |
@Override... |
85 |
|
public boolean canHandle(T resourceReferenceQualifier) |
86 |
|
{ |
87 |
13012 |
boolean result; |
88 |
13011 |
try { |
89 |
13002 |
result = !getMatchingHandlers(resourceReferenceQualifier).isEmpty(); |
90 |
|
} catch (ResourceReferenceHandlerException e) { |
91 |
0 |
this.logger.warn("Failed to list Resource Reference Handers. Error [{}]", |
92 |
|
ExceptionUtils.getRootCauseMessage(e)); |
93 |
0 |
result = false; |
94 |
|
} |
95 |
12980 |
return result; |
96 |
|
} |
97 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (7) |
Complexity: 2 |
Complexity Density: 0.4 |
|
98 |
24116 |
private Set<ResourceReferenceHandler> getMatchingHandlers(T resourceReferenceQualifier)... |
99 |
|
throws ResourceReferenceHandlerException |
100 |
|
{ |
101 |
|
|
102 |
|
|
103 |
24136 |
Set<ResourceReferenceHandler> orderedHandlers = new TreeSet<>(); |
104 |
24197 |
for (ResourceReferenceHandler handler : getHandlers(resourceReferenceQualifier.getClass())) { |
105 |
29479 |
if (matches(handler, resourceReferenceQualifier)) { |
106 |
3428 |
orderedHandlers.add(handler); |
107 |
|
} |
108 |
|
} |
109 |
|
|
110 |
24234 |
return orderedHandlers; |
111 |
|
} |
112 |
|
|
|
|
| 66.7% |
Uncovered Elements: 1 (3) |
Complexity: 2 |
Complexity Density: 0.67 |
|
113 |
24125 |
private List<ResourceReferenceHandler> getHandlers(Class typeClass) throws ResourceReferenceHandlerException... |
114 |
|
{ |
115 |
24177 |
try { |
116 |
24200 |
return this.contextComponentManager.getInstanceList( |
117 |
|
new DefaultParameterizedType(null, ResourceReferenceHandler.class, typeClass)); |
118 |
|
} catch (ComponentLookupException e) { |
119 |
0 |
throw new ResourceReferenceHandlerException("Failed to locate Resource Reference Handler components", e); |
120 |
|
} |
121 |
|
} |
122 |
|
} |