/* * Plugin.java 25 oct. 2008 * * Sweet Home 3D, Copyright (c) 2008 Emmanuel PUYBARET / eTeks <info@eteks.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package com.eteks.sweethome3d.plugin; import javax.swing.undo.UndoableEditSupport; import com.eteks.sweethome3d.model.Home; import com.eteks.sweethome3d.model.UserPreferences; import com.eteks.sweethome3d.viewcontroller.HomeController; /** * The super class of a plug-in. * Subclasses should implement {@link #getActions() getActions} method * to return the actions that will be available to user. * This class should be packed in a JAR file with a family of properties file named * <code>ApplicationPlugin.properties</code> at its root or in one of its subfolders. * This file describes a plug-in with the following keys (all of them are mandatory * except <code>id</code>): * <ul><li>The <code>id</code> key gives an optional id to the plug-in, * which can be useful to determine if an update for this plug-in is available * during libraries updates checking.</li> * <li>The <code>name</code> key specifies the name of the plug-in.</li> * <li>The <code>class</code> key specifies the fully qualified class name * of the plug-in.</li> * <li>The <code>description</code> key specifies the description of * the plug-in.</li> * <li>The <code>version</code> key specifies the version of the plug-in. * <li>The <code>license</code> key specifies the license under which * the plug-in is distributed.</li> * <li>The <code>provider</code> key specifies the provider, the developer * and/or the editor of the plug-in.</li> * <li>The <code>applicationMinimumVersion</code> key specifies the * minimum application version under which this plug-in may work. Note that * only the first two groups of digits will be used for the comparison * with current JVM version, and that plug-ins were available from * version 1.5.</li> * <li>The <code>javaMinimumVersion</code> key specifies the * minimum Java version under which this plug-in may work. Note that * only the first two groups of digits will be used for the comparison * with current JVM version.</li></ul> * <br>For example, a plug-in class named <code>com.mycompany.mypackage.MyPlugin</code> * will become a plug-in if it's packed in a JAR file with the following * <code>ApplicationPlugin.properties</code> file: * <pre> name=My plug-in * class=com.mycompany.mypackage.MyPlugin * description=This plug-in rocks! * version=1.0 * license=GNU GPL * provider=MyCompany * applicationMinimumVersion=1.5 * javaMinimumVersion=1.5</pre> * @author Emmanuel Puybaret */ public abstract class Plugin { private ClassLoader pluginClassLoader; private String name; private String description; private String version; private String license; private String provider; private UserPreferences userPreferences; private Home home; private HomeController homeController; private UndoableEditSupport undoableEditSupport; /** * Sets the class loader used to load this plug-in. */ final void setPluginClassLoader(ClassLoader pluginClassLoader) { this.pluginClassLoader = pluginClassLoader; } /** * Returns the class loader used to load this plug-in. */ public final ClassLoader getPluginClassLoader() { return this.pluginClassLoader; } /** * Sets the name of this plug-in. */ final void setName(String name) { this.name = name; } /** * Returns the name of this plug-in. */ public final String getName() { return this.name; } /** * Sets the description of this plug-in. */ final void setDescription(String description) { this.description = description; } /** * Returns the description of this plug-in. */ public final String getDescription() { return this.description; } /** * Sets the version of this plug-in. */ final void setVersion(String version) { this.version = version; } /** * Returns the version of this plug-in. */ public final String getVersion() { return this.version; } /** * Sets the license of this plug-in. */ final void setLicense(String license) { this.license = license; } /** * Returns the license of this plug-in. */ public final String getLicense() { return this.license; } /** * Sets the provider of this plug-in. */ final void setProvider(String provider) { this.provider = provider; } /** * Returns the provider of this plug-in. */ public String getProvider() { return this.provider; } /** * Sets the user preferences of the current application. */ final void setUserPreferences(UserPreferences userPreferences) { this.userPreferences = userPreferences; } /** * Returns the user preferences of the current application. */ public final UserPreferences getUserPreferences() { return this.userPreferences; } /** * Sets the home associated to this plug-in instance. */ final void setHome(Home home) { this.home = home; } /** * Returns the home associated to this plug-in instance. */ public final Home getHome() { return this.home; } /** * Sets the controller of the home. * @since 3.5 */ final void setHomeController(HomeController homeController) { this.homeController = homeController; } /** * Returns the controller of the home of this plug-in. * @since 3.5 */ public HomeController getHomeController() { return this.homeController; } /** * Sets the undoable edit support that records undoable modifications made on a home. */ final void setUndoableEditSupport(UndoableEditSupport undoableEditSupport) { this.undoableEditSupport = undoableEditSupport; } /** * Returns the undoable edit support that records undoable modifications made on a home. */ public final UndoableEditSupport getUndoableEditSupport() { return this.undoableEditSupport; } /** * This method will be called when the home referenced by this plug-in will be deleted. * Subclasses may override it to free resources associated to this plug-in. */ public void destroy() { } /** * Returns the actions available on this plug-in. * These actions may define the properties defined by * {@link PluginAction.Property PluginAction.Property} enumeration. */ public abstract PluginAction [] getActions(); }