1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.discovery.resource.names;
18
19 import org.apache.commons.discovery.ResourceNameDiscover;
20 import org.apache.commons.discovery.ResourceNameIterator;
21
22
23 /***
24 * Helper class for methods implementing the ResourceNameDiscover interface.
25 *
26 * @author Richard A. Sitze
27 */
28 public abstract class ResourceNameDiscoverImpl implements ResourceNameDiscover
29 {
30 /***
31 * Locate names of resources that are bound to <code>resourceName</code>.
32 *
33 * @return ResourceNameIterator
34 */
35 public abstract ResourceNameIterator findResourceNames(String resourceName);
36
37 /***
38 * Locate names of resources that are bound to <code>resourceName</code>.
39 *
40 * @return ResourceNameIterator
41 */
42 public ResourceNameIterator findResourceNames(final ResourceNameIterator inputNames) {
43 return new ResourceNameIterator() {
44 private ResourceNameIterator resourceNames = null;
45 private String resourceName = null;
46
47 public boolean hasNext() {
48 if (resourceName == null) {
49 resourceName = getNextResourceName();
50 }
51 return resourceName != null;
52 }
53
54 public String nextResourceName() {
55 String name = resourceName;
56 resourceName = null;
57 return name;
58 }
59
60 private String getNextResourceName() {
61 while (inputNames.hasNext() && (resourceNames == null || !resourceNames.hasNext())) {
62 resourceNames =
63 findResourceNames(inputNames.nextResourceName());
64 }
65
66 return (resourceNames != null && resourceNames.hasNext())
67 ? resourceNames.nextResourceName()
68 : null;
69 }
70 };
71 }
72 }