1 package org.scannotation.archiveiterator;
3 import java.io.IOException;
5 import java.util.concurrent.ConcurrentHashMap;
8 * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
9 * @version $Revision: 1 $
11 public class IteratorFactory
13 private static final ConcurrentHashMap<String, DirectoryIteratorFactory> registry = new ConcurrentHashMap<String, DirectoryIteratorFactory>();
17 registry.put("file", new FileProtocolIteratorFactory());
21 public static StreamIterator create(URL url, Filter filter) throws IOException
23 String urlString = url.toString();
24 if (urlString.endsWith("!/"))
26 urlString = urlString.substring(4);
27 urlString = urlString.substring(0, urlString.length() - 2);
28 url = new URL(urlString);
32 if (!urlString.endsWith("/"))
34 return new JarIterator(url.openStream(), filter);
38 DirectoryIteratorFactory factory = registry.get(url.getProtocol());
39 if (factory == null) throw new IOException("Unable to scan directory of protocol: " + url.getProtocol());
40 return factory.create(url, filter);