01: /**
02: * JOnAS: Java(TM) Open Application Server
03: * Copyright (C) 1999 Bull S.A.
04: * Contact: jonas-team@objectweb.org
05: *
06: * This library is free software; you can redistribute it and/or
07: * modify it under the terms of the GNU Lesser General Public
08: * License as published by the Free Software Foundation; either
09: * version 2.1 of the License, or any later version.
10: *
11: * This library is distributed in the hope that it will be useful,
12: * but WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * Lesser General Public License for more details.
15: *
16: * You should have received a copy of the GNU Lesser General Public
17: * License along with this library; if not, write to the Free Software
18: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19: * USA
20: *
21: * Initial developer(s): Guillaume SAUTHIER
22: * --------------------------------------------------------------------------
23: * $Id: URLFactory.java 4622 2004-04-19 13:49:54Z sauthieg $
24: * --------------------------------------------------------------------------
25: */package org.objectweb.jonas_lib.loader.factory;
26:
27: import java.net.URL;
28: import java.io.IOException;
29:
30: /**
31: * An <code>URLFactory</code> is used to create a URL from a base URL.
32: *
33: * @author Guillaume Sauthier
34: */
35: public abstract class URLFactory {
36:
37: /**
38: * Returns a new URL basically adding path to the base URL.
39: *
40: * @param path the path to add to the URL.
41: *
42: * @return a new URL.
43: *
44: * @throws IOException when created URL is invalid.
45: */
46: public abstract URL getURL(String path) throws IOException;
47:
48: /**
49: * Return a new URLFactory in function of the URL type.
50: * an URL pointing to a jar file will return a <code>JarURLFactory</code>
51: * and an URL pointing to a directory file will return a <code>DirURLFactory</code>.
52: *
53: * @param url the base URL
54: *
55: * @return a new URLFactory in function of the URL type.
56: *
57: * @throws IOException when cannot find a specialized factory for the given URL.
58: */
59: public static URLFactory getFactory(URL url) throws IOException {
60:
61: String path = url.getPath();
62: if (path.matches(".*\\..ar")) {
63: // jar detected if path ends with .?ar (*.jar, *.war, *.ear)
64: return new JarURLFactory(url);
65: } else if (path.endsWith("/")) {
66: // directory detected if url ends with a separator /
67: return new DirURLFactory(url);
68: } else {
69: String err = "Unsupported URL '" + url + "' support "
70: + "only jar archive and directory";
71: throw new IOException(err);
72: }
73: }
74:
75: }
|