package org.maltparser.core.plugin;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import org.maltparser.core.exception.MaltChainedException;
/**
* The class Plugin contains information about a plug-in that comply to the the
* MaltParser Plugin Standard.
*
*
* @author Johan Hall
*
* @since 1.0
*/
public class Plugin {
private JarFile archive;
private URL url;
private String pluginName;
/**
* Creates a plug-in container.
*
* @param filename The file name that contains the plugin
* @throws MaltChainedException
*/
public Plugin(String filename) throws MaltChainedException {
this(new File(filename));
}
/**
* Creates a plug-in container.
*
* @param file The jar file that contains the plugin
* @throws MaltChainedException
*/
public Plugin(File file) throws MaltChainedException {
try {
setArchive(new JarFile(file));
setUrl(new URL("file", null, file.getAbsolutePath()));
register();
} catch (FileNotFoundException e) {
throw new PluginException("The file '" + file.getPath() + File.separator + file.getName() + "' cannot be found. ", e);
} catch (MalformedURLException e) {
throw new PluginException("Malformed URL to the jar file '" + archive.getName() + "'. ", e);
} catch (IOException e) {
throw new PluginException("The jar file '" + file.getPath() + File.separator + file.getName() + "' cannot be initialized. ", e);
}
}
/**
* @throws MaltChainedException
*/
private void register() throws MaltChainedException {
try {
Attributes atts = archive.getManifest().getMainAttributes();
pluginName = atts.getValue("Plugin-Name");
if (pluginName == null) {
pluginName = archive.getName();
}
} catch (IOException e) {
throw new PluginException("Could not get the 'Plugin-Name' in the manifest for the plugin (jar-file). ", e);
}
}
/**
* Returns the archive.
*
* @return the jar archive.
*/
public JarFile getArchive() {
return archive;
}
/**
* Sets the archive to set.
*
* @param archive The archive to set.
*/
public void setArchive(JarFile archive) {
this.archive = archive;
}
/**
* Returns the plug-in name.
*
* @return the plug-in name.
*/
public String getPluginName() {
return pluginName;
}
/**
* Sets the plug-in name
*
* @param pluginName the plug-in name
*/
public void setPluginName(String pluginName) {
this.pluginName = pluginName;
}
/**
* Returns the URL
*
* @return the URL
*/
public URL getUrl() {
return url;
}
/**
* Sets the URL.
*
* @param url the URL
*/
public void setUrl(URL url) {
this.url = url;
}
/*
* (non-Javadoc) @see java.lang.Object#toString()
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(pluginName).append(" : ").append(url.toString());
return sb.toString();
}
}