1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.discovery.resource.classes;
18
19 import org.apache.commons.discovery.ResourceClass;
20 import org.apache.commons.discovery.ResourceClassDiscover;
21 import org.apache.commons.discovery.ResourceClassIterator;
22 import org.apache.commons.discovery.ResourceIterator;
23 import org.apache.commons.discovery.ResourceNameIterator;
24 import org.apache.commons.discovery.resource.ClassLoaders;
25 import org.apache.commons.discovery.resource.ResourceDiscoverImpl;
26
27
28
29
30
31
32 public abstract class ResourceClassDiscoverImpl<T> extends ResourceDiscoverImpl implements ResourceClassDiscover<T> {
33
34
35
36
37 public ResourceClassDiscoverImpl() {
38 super();
39 }
40
41
42
43
44
45
46 public ResourceClassDiscoverImpl(ClassLoaders classLoaders) {
47 super(classLoaders);
48 }
49
50
51
52
53 @Override
54 public ResourceNameIterator findResourceNames(String resourceName) {
55 return findResourceClasses(resourceName);
56 }
57
58
59
60
61 @Override
62 public ResourceNameIterator findResourceNames(ResourceNameIterator resourceNames) {
63 return findResourceClasses(resourceNames);
64 }
65
66
67
68
69 @Override
70 public ResourceIterator findResources(String resourceName) {
71 return findResourceClasses(resourceName);
72 }
73
74
75
76
77 @Override
78 public ResourceIterator findResources(ResourceNameIterator resourceNames) {
79 return findResourceClasses(resourceNames);
80 }
81
82
83
84
85
86
87
88 public abstract ResourceClassIterator<T> findResourceClasses(String className);
89
90
91
92
93
94
95
96 public ResourceClassIterator<T> findResourceClasses(final ResourceNameIterator inputNames) {
97 return new ResourceClassIterator<T>() {
98 private ResourceClassIterator<T> classes = null;
99 private ResourceClass<T> resource = null;
100
101 public boolean hasNext() {
102 if (resource == null) {
103 resource = getNextResource();
104 }
105 return resource != null;
106 }
107
108 @Override
109 public ResourceClass<T> nextResourceClass() {
110 ResourceClass<T> rsrc = resource;
111 resource = null;
112 return rsrc;
113 }
114
115 private ResourceClass<T> getNextResource() {
116 while (inputNames.hasNext() &&
117 (classes == null || !classes.hasNext())) {
118 classes =
119 findResourceClasses(inputNames.nextResourceName());
120 }
121
122 return (classes != null && classes.hasNext())
123 ? classes.nextResourceClass()
124 : null;
125 }
126 };
127 }
128
129 }