1 /**
2 *
3 * Copyright 2005 The Apache Software Foundation
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.geronimo.kernel.classloader;
18
19 import java.util.Enumeration;
20 import java.util.Iterator;
21 import java.util.Collection;
22 import java.util.NoSuchElementException;
23
24 /**
25 * @version $Rev: 410741 $ $Date: 2006-05-31 21:35:48 -0700 (Wed, 31 May 2006) $
26 */
27 public class ResourceEnumeration implements Enumeration {
28 private Iterator iterator;
29 private final String resourceName;
30 private Object next;
31
32 public ResourceEnumeration(Collection resourceLocations, String resourceName) {
33 this.iterator = resourceLocations.iterator();
34 this.resourceName = resourceName;
35 }
36
37 public boolean hasMoreElements() {
38 fetchNext();
39 return (next != null);
40 }
41
42 public Object nextElement() {
43 fetchNext();
44
45
46 Object next = this.next;
47 this.next = null;
48
49
50 if (next == null) {
51 throw new NoSuchElementException();
52 }
53 return next;
54 }
55
56 private void fetchNext() {
57 if (iterator == null) {
58 return;
59 }
60 if (next != null) {
61 return;
62 }
63
64 try {
65 while (iterator.hasNext()) {
66 ResourceLocation resourceLocation = (ResourceLocation) iterator.next();
67 ResourceHandle resourceHandle = resourceLocation.getResourceHandle(resourceName);
68 if (resourceHandle != null) {
69 next = resourceHandle.getUrl();
70 return;
71 }
72 }
73
74
75 iterator = null;
76 } catch (IllegalStateException e) {
77
78
79 iterator = null;
80 throw e;
81 }
82 }
83 }