001 package org.maltparser.core.helper;
002
003
004 import java.io.File;
005 import java.io.IOException;
006 import java.io.InputStream;
007 import java.net.MalformedURLException;
008 import java.net.URL;
009
010 import org.maltparser.core.exception.MaltChainedException;
011 import org.maltparser.core.plugin.Plugin;
012 import org.maltparser.core.plugin.PluginLoader;
013
014 /**
015 *
016 *
017 * @author Johan Hall
018 */
019 public class URLFinder {
020 /**
021 * Search for a file according the following priority:
022 * <ol>
023 * <li>The local file system
024 * <li>Specified as an URL (starting with http:, file:, ftp: or jar:
025 * <li>MaltParser distribution file (malt.jar)
026 * <li>MaltParser plugins
027 * </ol>
028 *
029 * If the file string is found, an URL object is returned, otherwise <b>null</b>
030 *
031 * @param fileString the file string to convert into an URL.
032 * @return an URL object, if the file string is found, otherwise <b>null</b>
033 * @throws MaltChainedException
034 */
035 public URL findURL(String fileString) throws MaltChainedException {
036 File specFile = new File(fileString);
037
038 try {
039 if (specFile.exists()) {
040 // found the file in the file system
041 return new URL("file:///"+specFile.getAbsolutePath());
042 } else if (fileString.startsWith("http:") || fileString.startsWith("file:") || fileString.startsWith("ftp:") || fileString.startsWith("jar:")) {
043 // the input string is an URL string starting with http, file, ftp or jar
044 return new URL(fileString);
045 } else {
046 return findURLinJars(fileString);
047 }
048 } catch (MalformedURLException e) {
049 throw new MaltChainedException("Malformed URL: "+fileString, e);
050 }
051 }
052
053 public URL findURLinJars(String fileString) throws MaltChainedException {
054 try {
055 // search in malt.jar and its plugins
056 if (getClass().getResource(fileString) != null) {
057 // found the input string in the malt.jar file
058 return getClass().getResource(fileString);
059 } else {
060 for (Plugin plugin : PluginLoader.instance()) {
061 URL url = null;
062 if (!fileString.startsWith("/")) {
063 url = new URL("jar:"+plugin.getUrl() + "!/" + fileString);
064 } else {
065 url = new URL("jar:"+plugin.getUrl() + "!" + fileString);
066 }
067
068 try {
069 InputStream is = url.openStream();
070 is.close();
071 } catch (IOException e) {
072 continue;
073 }
074 // found the input string in one of the plugins
075 return url;
076 }
077 // could not convert the input string into an URL
078 return null;
079 }
080 } catch (MalformedURLException e) {
081 throw new MaltChainedException("Malformed URL: "+fileString, e);
082 }
083 }
084 }