package org.maltparser.core.helper; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import org.maltparser.core.exception.MaltChainedException; import org.maltparser.core.plugin.Plugin; import org.maltparser.core.plugin.PluginLoader; /** * * * @author Johan Hall */ public class URLFinder { /** * Search for a file according the following priority: * <ol> * <li>The local file system * <li>Specified as an URL (starting with http:, file:, ftp: or jar: * <li>MaltParser distribution file (malt.jar) * <li>MaltParser plugins * </ol> * * If the file string is found, an URL object is returned, otherwise <b>null</b> * * @param fileString the file string to convert into an URL. * @return an URL object, if the file string is found, otherwise <b>null</b> * @throws MaltChainedException */ public URL findURL(String fileString) throws MaltChainedException { File specFile = new File(fileString); try { if (specFile.exists()) { // found the file in the file system return new URL("file:///"+specFile.getAbsolutePath()); } else if (fileString.startsWith("http:") || fileString.startsWith("file:") || fileString.startsWith("ftp:") || fileString.startsWith("jar:")) { // the input string is an URL string starting with http, file, ftp or jar return new URL(fileString); } else { return findURLinJars(fileString); } } catch (MalformedURLException e) { throw new MaltChainedException("Malformed URL: "+fileString, e); } } public URL findURLinJars(String fileString) throws MaltChainedException { try { // search in malt.jar and its plugins if (getClass().getResource(fileString) != null) { // found the input string in the malt.jar file return getClass().getResource(fileString); } else { for (Plugin plugin : PluginLoader.instance()) { URL url = null; if (!fileString.startsWith("/")) { url = new URL("jar:"+plugin.getUrl() + "!/" + fileString); } else { url = new URL("jar:"+plugin.getUrl() + "!" + fileString); } try { InputStream is = url.openStream(); is.close(); } catch (IOException e) { continue; } // found the input string in one of the plugins return url; } // could not convert the input string into an URL return null; } } catch (MalformedURLException e) { throw new MaltChainedException("Malformed URL: "+fileString, e); } } }