001package org.maltparser.core.helper; 002 003 004import java.io.File; 005import java.io.IOException; 006import java.io.InputStream; 007import java.net.MalformedURLException; 008import java.net.URL; 009 010import org.maltparser.core.exception.MaltChainedException; 011import org.maltparser.core.plugin.Plugin; 012import org.maltparser.core.plugin.PluginLoader; 013 014/** 015* 016* 017* @author Johan Hall 018*/ 019public 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}