001package org.maltparser.core.plugin; 002 003import java.io.File; 004import java.io.FileNotFoundException; 005import java.io.IOException; 006import java.net.MalformedURLException; 007import java.net.URL; 008import java.util.jar.Attributes; 009import java.util.jar.JarFile; 010 011import org.maltparser.core.exception.MaltChainedException; 012 013/** 014The class Plugin contains information about a plug-in that comply to the the MaltParser Plugin Standard. 015 016 017@author Johan Hall 018 019@since 1.0 020 */ 021public class Plugin { 022 private JarFile archive; 023 private URL url; 024 private String pluginName; 025 026 027 /** 028 * Creates a plug-in container. 029 * 030 * @param filename The file name that contains the plugin 031 * @throws MaltChainedException 032 */ 033 public Plugin(String filename) throws MaltChainedException { 034 this(new File(filename)); 035 } 036 037 /** 038 * Creates a plug-in container. 039 * 040 * @param file The jar file that contains the plugin 041 * @throws MaltChainedException 042 */ 043 public Plugin(File file) throws MaltChainedException { 044 try { 045 setArchive(new JarFile(file)); 046 setUrl(new URL("file", null, file.getAbsolutePath())); 047 register(); 048 } catch (FileNotFoundException e) { 049 throw new PluginException("The file '"+file.getPath()+File.separator+file.getName()+"' cannot be found. ", e); 050 } catch (MalformedURLException e) { 051 throw new PluginException("Malformed URL to the jar file '"+archive.getName()+"'. ", e); 052 } catch (IOException e) { 053 throw new PluginException("The jar file '"+file.getPath()+File.separator+file.getName()+"' cannot be initialized. ", e); 054 } 055 } 056 057 /** 058 * @throws MaltChainedException 059 */ 060 private void register() throws MaltChainedException { 061 try { 062 Attributes atts = archive.getManifest().getMainAttributes(); 063 pluginName = atts.getValue("Plugin-Name"); 064 if (pluginName == null) { 065 pluginName = archive.getName(); 066 } 067 } catch (IOException e) { 068 throw new PluginException("Could not get the 'Plugin-Name' in the manifest for the plugin (jar-file). ", e); 069 } 070 } 071 072 /** 073 * Returns the archive. 074 * 075 * @return the jar archive. 076 */ 077 public JarFile getArchive() { 078 return archive; 079 } 080 /** 081 * Sets the archive to set. 082 * 083 * @param archive The archive to set. 084 */ 085 public void setArchive(JarFile archive) { 086 this.archive = archive; 087 } 088 /** 089 * Returns the plug-in name. 090 * 091 * @return the plug-in name. 092 */ 093 public String getPluginName() { 094 return pluginName; 095 } 096 /** 097 * Sets the plug-in name 098 * 099 * @param pluginName the plug-in name 100 */ 101 public void setPluginName(String pluginName) { 102 this.pluginName = pluginName; 103 } 104 105 /** 106 * Returns the URL 107 * 108 * @return the URL 109 */ 110 public URL getUrl() { 111 return url; 112 } 113 /** 114 * Sets the URL. 115 * 116 * @param url the URL 117 */ 118 public void setUrl(URL url) { 119 this.url = url; 120 } 121 122 /* (non-Javadoc) 123 * @see java.lang.Object#toString() 124 */ 125 public String toString() { 126 StringBuilder sb = new StringBuilder(); 127 128 sb.append(pluginName+" : "+url.toString()); 129 return sb.toString(); 130 } 131}