001    package org.maltparser.core.plugin;
002    
003    import java.io.File;
004    import java.io.FileNotFoundException;
005    import java.io.IOException;
006    import java.net.MalformedURLException;
007    import java.net.URL;
008    import java.util.jar.Attributes;
009    import java.util.jar.JarFile;
010    
011    import org.maltparser.core.exception.MaltChainedException;
012    
013    /**
014    The 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     */
021    public 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    }