01: /*
02:
03: Licensed to the Apache Software Foundation (ASF) under one or more
04: contributor license agreements. See the NOTICE file distributed with
05: this work for additional information regarding copyright ownership.
06: The ASF licenses this file to You under the Apache License, Version 2.0
07: (the "License"); you may not use this file except in compliance with
08: the License. You may obtain a copy of the License at
09:
10: http://www.apache.org/licenses/LICENSE-2.0
11:
12: Unless required by applicable law or agreed to in writing, software
13: distributed under the License is distributed on an "AS IS" BASIS,
14: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15: See the License for the specific language governing permissions and
16: limitations under the License.
17:
18: */
19: package org.apache.batik.util;
20:
21: import java.net.MalformedURLException;
22: import java.net.URL;
23:
24: /**
25: * Protocol Handler for the 'jar' protocol.
26: * This appears to have the format:
27: * jar:<URL for jar file>!<path in jar file>
28: *
29: * @author <a href="mailto:deweese@apache.org">Thomas DeWeese</a>
30: * @version $Id: ParsedURLJarProtocolHandler.java 475477 2006-11-15 22:44:28Z cam $
31: */
32: public class ParsedURLJarProtocolHandler extends
33: ParsedURLDefaultProtocolHandler {
34:
35: public static final String JAR = "jar";
36:
37: public ParsedURLJarProtocolHandler() {
38: super (JAR);
39: }
40:
41: // We mostly use the base class parse methods (that leverage
42: // java.net.URL. But we take care to ignore the baseURL if urlStr
43: // is an absolute URL.
44: public ParsedURLData parseURL(ParsedURL baseURL, String urlStr) {
45: String start = urlStr.substring(0, JAR.length() + 1)
46: .toLowerCase();
47:
48: // urlStr is absolute...
49: if (start.equals(JAR + ":"))
50: return parseURL(urlStr);
51:
52: // It's relative so base it off baseURL.
53: try {
54: URL context = new URL(baseURL.toString());
55: URL url = new URL(context, urlStr);
56: return constructParsedURLData(url);
57: } catch (MalformedURLException mue) {
58: return super.parseURL(baseURL, urlStr);
59: }
60: }
61: }
|