1/*
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package com.sun.tools.internal.xjc.reader;
27
28import java.io.File;
29import java.io.IOException;
30import java.net.MalformedURLException;
31import java.net.URL;
32
33import org.xml.sax.InputSource;
34
35public class Util
36{
37    /**
38     * Parses the specified string either as an {@link URL} or as a {@link File}.
39     *
40     * @throws IOException
41     *      if the parameter is neither.
42     */
43    public static Object getFileOrURL(String fileOrURL) throws IOException {
44        try {
45            return new URL(fileOrURL);
46        } catch (MalformedURLException e) {
47            return new File(fileOrURL).getCanonicalFile();
48        }
49    }
50    /**
51     * Gets an InputSource from a string, which contains either
52     * a file name or an URL.
53     */
54    public static InputSource getInputSource(String fileOrURL) {
55        try {
56            Object o = getFileOrURL(fileOrURL);
57            if(o instanceof URL) {
58                return new InputSource(escapeSpace(((URL)o).toExternalForm()));
59            } else {
60                String url = ((File)o).toURL().toExternalForm();
61                return new InputSource(escapeSpace(url));
62            }
63        } catch (IOException e) {
64            return new InputSource(fileOrURL);
65        }
66    }
67
68    public static String escapeSpace( String url ) {
69        // URLEncoder didn't work.
70        StringBuffer buf = new StringBuffer();
71        for (int i = 0; i < url.length(); i++) {
72            // TODO: not sure if this is the only character that needs to be escaped.
73            if (url.charAt(i) == ' ')
74                buf.append("%20");
75            else
76                buf.append(url.charAt(i));
77        }
78        return buf.toString();
79    }
80}
81