[187576] updated plugin creation for the tutorials
|
@ -12,14 +12,14 @@
|
||||||
<body>
|
<body>
|
||||||
<h1>RSESamplesPlugin Class</h1>
|
<h1>RSESamplesPlugin Class</h1>
|
||||||
<pre><samp>
|
<pre><samp>
|
||||||
package samples;
|
<pre><code>
|
||||||
|
package rsesamples;
|
||||||
|
|
||||||
import java.util.MissingResourceException;
|
import java.util.MissingResourceException;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
import org.eclipse.core.resources.IWorkspace;
|
import org.eclipse.core.resources.IWorkspace;
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.Platform;
|
|
||||||
import org.eclipse.rse.services.clientserver.messages.SystemMessage;
|
import org.eclipse.rse.services.clientserver.messages.SystemMessage;
|
||||||
import org.eclipse.rse.services.clientserver.messages.SystemMessageFile;
|
import org.eclipse.rse.services.clientserver.messages.SystemMessageFile;
|
||||||
import org.eclipse.rse.ui.SystemBasePlugin;
|
import org.eclipse.rse.ui.SystemBasePlugin;
|
||||||
|
@ -28,114 +28,146 @@ import org.osgi.framework.BundleContext;
|
||||||
/**
|
/**
|
||||||
* The activator class controls the plug-in life cycle
|
* The activator class controls the plug-in life cycle
|
||||||
*/
|
*/
|
||||||
public class RSESamplesPlugin extends SystemBasePlugin {
|
public class RSESamplesPlugin extends SystemBasePlugin {
|
||||||
|
|
||||||
//The shared instance.
|
// The plug-in ID
|
||||||
|
public static final String PLUGIN_ID = "RSESamples";
|
||||||
|
|
||||||
|
// The shared instance
|
||||||
private static RSESamplesPlugin plugin;
|
private static RSESamplesPlugin plugin;
|
||||||
|
|
||||||
//Resource bundle.
|
// ResourceBundle
|
||||||
private ResourceBundle resourceBundle = null;
|
private ResourceBundle resourceBundle = null;
|
||||||
private static SystemMessageFile messageFile = null;
|
|
||||||
|
// Message file
|
||||||
|
private SystemMessageFile messageFile = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The constructor.
|
* The constructor
|
||||||
*/
|
*/
|
||||||
public RSESamplesPlugin() {
|
public RSESamplesPlugin() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* This method is called upon plug-in activation
|
* (non-Javadoc)
|
||||||
|
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
|
||||||
*/
|
*/
|
||||||
public void start(BundleContext context) throws Exception {
|
public void start(BundleContext context) throws Exception {
|
||||||
super.start(context);
|
super.start(context);
|
||||||
<strong>plugin = this;
|
plugin = this;
|
||||||
messageFile = getMessageFile("rseSamplesMessages.xml");</strong>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* This method is called when the plug-in is stopped
|
* (non-Javadoc)
|
||||||
|
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
|
||||||
*/
|
*/
|
||||||
public void stop(BundleContext context) throws Exception {
|
public void stop(BundleContext context) throws Exception {
|
||||||
<strong>plugin = null;
|
plugin = null;
|
||||||
resourceBundle = null;</strong>
|
|
||||||
super.stop(context);
|
super.stop(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/* (non-Javadoc)
|
||||||
* Returns the shared instance.
|
* @see org.eclipse.rse.ui.SystemBasePlugin#initializeImageRegistry()
|
||||||
*/
|
*/
|
||||||
<strong>public static RSESamplesPlugin getDefault() {
|
protected void initializeImageRegistry() {
|
||||||
return plugin;
|
|
||||||
}</strong>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the workspace instance.
|
|
||||||
*/
|
|
||||||
<strong>public static IWorkspace getWorkspace() {
|
|
||||||
return ResourcesPlugin.getWorkspace();
|
|
||||||
}</strong>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the string from the plugin's resource bundle,
|
|
||||||
* or 'key' if not found.
|
|
||||||
*/
|
|
||||||
<strong>public static String getResourceString(String key) {
|
|
||||||
ResourceBundle bundle= RSESamplesPlugin.getDefault().getResourceBundle();
|
|
||||||
try {
|
|
||||||
return (bundle != null) ? bundle.getString(key) : key;
|
|
||||||
} catch (MissingResourceException e) {
|
|
||||||
return key;
|
|
||||||
}
|
|
||||||
}</strong>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the plugin's resource bundle,
|
|
||||||
*/
|
|
||||||
<strong>public ResourceBundle getResourceBundle() {
|
|
||||||
try {
|
|
||||||
if (resourceBundle == null)
|
|
||||||
resourceBundle = ResourceBundle.getBundle("samples.rseSamplesResources");
|
|
||||||
} catch (MissingResourceException x) {
|
|
||||||
resourceBundle = null;
|
|
||||||
}
|
|
||||||
return resourceBundle;
|
|
||||||
}</strong>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize the image registry by declaring all of the required graphics.
|
|
||||||
*/
|
|
||||||
protected void initializeImageRegistry()
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load a message file for this plugin.
|
* Retrieves the string resource bundle associated with this plugin.
|
||||||
* @param messageFileName - the name of the message xml file. Will look for it in this plugin's install folder.
|
* @return the ResourceBundle or null if the bundle could not be loaded.
|
||||||
* @return a message file object containing the parsed contents of the message file, or null if not found.
|
|
||||||
*/
|
*/
|
||||||
<strong>public SystemMessageFile getMessageFile(String messageFileName)
|
public ResourceBundle getResourceBundle() {
|
||||||
{
|
try {
|
||||||
return loadMessageFile(getBundle(), messageFileName);
|
if (resourceBundle == null) {
|
||||||
}</strong>
|
resourceBundle = ResourceBundle.getBundle("rseSamplesResources.properties");
|
||||||
|
}
|
||||||
|
} catch (MissingResourceException e) {
|
||||||
|
SystemBasePlugin.logError("Missing rseSamplesResources.properties", e);
|
||||||
|
}
|
||||||
|
return resourceBundle;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return our message file
|
* Retrieves the SystemMessageFile associated with this plugin.
|
||||||
|
* @return the SystemMessageFile or null if the message file
|
||||||
|
* could not be loaded.
|
||||||
*/
|
*/
|
||||||
<strong>public static SystemMessageFile getPluginMessageFile()
|
public SystemMessageFile getMessageFile() {
|
||||||
{
|
if (messageFile == null) {
|
||||||
|
messageFile = loadMessageFile(this.getBundle(), "rseSamplesMessages.xml"); //$NON-NLS-1$
|
||||||
|
}
|
||||||
return messageFile;
|
return messageFile;
|
||||||
}</strong>
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve a message from this plugin's message file
|
* Retrieves the singleton workspace for this workbench.
|
||||||
|
* This is a convenience method, fully equivalent to
|
||||||
|
* ResourcesPlugin.getWorkspace().
|
||||||
|
* @return the singleton workspace
|
||||||
*/
|
*/
|
||||||
<strong>public static SystemMessage getPluginMessage(String msgId)
|
public static IWorkspace getWorkspace() {
|
||||||
{
|
return ResourcesPlugin.getWorkspace();
|
||||||
return getMessage(messageFile, msgId);
|
}
|
||||||
}</strong>
|
|
||||||
|
/**
|
||||||
|
* Retrieve a string from the plugin's resource bundle.
|
||||||
|
* @param key the key to the string
|
||||||
|
* @return the retrieved string or the key if the string could not be
|
||||||
|
* found or the bundle could not be loaded.
|
||||||
|
*/
|
||||||
|
public static String getResourceString(String key) {
|
||||||
|
String result = null;
|
||||||
|
ResourceBundle bundle = RSESamplesPlugin.getDefault().getResourceBundle();
|
||||||
|
if (bundle != null) {
|
||||||
|
try {
|
||||||
|
result = bundle.getString(key);
|
||||||
|
} catch (MissingResourceException e) {
|
||||||
|
SystemBasePlugin.logError("Missing key in bundle", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (result == null) {
|
||||||
|
result = key;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the SystemMessageFile for this plugin.
|
||||||
|
* @return the SystemMessageFile or null if the message file
|
||||||
|
* could not be loaded.
|
||||||
|
*/
|
||||||
|
public static SystemMessageFile getPluginMessageFile() {
|
||||||
|
return RSESamplesPlugin.getDefault().getMessageFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve a SystemMessage from the message file for this
|
||||||
|
* plugin given its message id.
|
||||||
|
* @param messageId the message id to retrieve
|
||||||
|
* @return the retrieved SystemMessage or null if the message
|
||||||
|
* was not found in the message file or the message file
|
||||||
|
* could not be loaded.
|
||||||
|
*/
|
||||||
|
public static SystemMessage getPluginMessage(String messageId) {
|
||||||
|
SystemMessage message = null;
|
||||||
|
SystemMessageFile messageFile = getPluginMessageFile();
|
||||||
|
if (messageFile != null) {
|
||||||
|
message = messageFile.getMessage(messageId);
|
||||||
|
}
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the shared instance
|
||||||
|
*
|
||||||
|
* @return the shared instance
|
||||||
|
*/
|
||||||
|
public static RSESamplesPlugin getDefault() {
|
||||||
|
return plugin;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
</samp></pre>
|
</code></pre></samp></pre>
|
||||||
</p>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
Before Width: | Height: | Size: 11 KiB |
BIN
rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/pdeProj_1.png
Executable file
After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 11 KiB |
BIN
rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/pdeProj_wiz_page1.png
Executable file
After Width: | Height: | Size: 32 KiB |
BIN
rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/pdeProj_wiz_page2.png
Executable file
After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 15 KiB |
BIN
rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/pdeProj_wiz_page3.png
Executable file
After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 12 KiB |
|
@ -1,45 +1,66 @@
|
||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
||||||
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
|
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
|
||||||
<meta name="copyright" content="Copyright (c) IBM Corporation and others 2002, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
|
<meta name="copyright" content="Copyright (c) IBM Corporation and others 2002, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
|
||||||
<LINK REL="STYLESHEET" HREF="../../book.css" TYPE="text/css">
|
<LINK REL="STYLESHEET" HREF="../../book.css" TYPE="text/css">
|
||||||
<title>Creating a Plug-in Project</title>
|
<title>Creating a Plug-in Project</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body bgcolor="#ffffff">
|
<body>
|
||||||
<h1>Creating a Plug-in Project</h1>
|
<h1>Creating a Plug-in Project</h1>
|
||||||
<p>To use any Eclipse extension point, including those defined by the Remote System Explorer, you must first create a plug-in project using the plug-in development environment (PDE), which you will do shortly. At its simplest, a plug-in project requires a <tt>MANIFEST.MF</tt> file describing the plugin and its dependencies and, if extending the workbench a <samp>plugin.xml</samp> file identifying the extension points being implemented, and a set of Java classes implementing those extension points. There is usually also a plug-in class file that is used as the overall manager of the project, and point of integration that other classes can rely on.</p>
|
<p>To use any Eclipse extension point, including those defined by the Remote System Explorer, you must first create a plug-in project using the plug-in development environment (PDE), which you will do shortly. At its simplest, a plug-in project requires a <tt>MANIFEST.MF</tt> file describing the plugin and its dependencies and, if extending the workbench a <samp>plugin.xml</samp> file identifying the extension points being implemented, and a set of Java classes implementing those extension points. There is usually also a plug-in class file that is used as the overall manager of the project, and point of integration that other classes can rely on.</p>
|
||||||
<p><i>If you already have a plugin project, you will need to update it slightly to make it extend SystemBasePlugin and add the few methods it requires. You may wish to examine these steps to see what methods to add. The Eclipse environment will keep your classpaths and plugin dependecies in sync for you.</i></p>
|
<p><i>If you already have a plugin project, you will need to update it slightly to make it extend SystemBasePlugin and add the few methods it requires. You may wish to examine these steps to see what methods to add. The Eclipse environment will keep your classpaths and plugin dependecies in sync for you.</i></p>
|
||||||
<p>Eclipse supplies a number of plug-in project templates, which generate a number of project files that illustrate examples of various Eclipse extension points. While you are free to pick one of these, or indeed start with any existing plug-in project if you have one, in the RSE tutorials everything is created by hand so as to keep focused on the RSE-required classes and files.</p>
|
<p>Eclipse supplies a number of plug-in project templates, which generate a number of project files that illustrate examples of various Eclipse extension points. While you are free to pick one of these, or indeed start with any existing plug-in project if you have one, in the RSE tutorials everything is created by hand so as to keep focused on the RSE-required classes and files.</p>
|
||||||
<p>The following tutorial uses numbered steps to indicate where you are required to do something as you follow along.</p>
|
<p>The following tutorial uses numbered steps to indicate where you are required to do something as you follow along.</p>
|
||||||
<h2>Step By Step: Creating an RSE Plug-in Project</h2>
|
<h2>Step By Step: Creating an RSE Plug-in Project</h2>
|
||||||
<ol>
|
<ol>
|
||||||
<li>Select <b>File->New->Project.</b>
|
<li>Select <b>File->New->Project.</b></li>
|
||||||
<li>On the left of the dialog box, select <b>Plug-in Development</b> category, and on the right, select the <b><a href="pdeProj_1.gif">Plug-in Project</a></b> wizard. Press <b>Next ></b>.
|
<li>In the dialog box select the <b>Plug-in Project</b> wizard. Click <b>Next ></b>.
|
||||||
<li>In the <a href="pdeProj_wiz_page1.gif">first page</a> of the wizard (Plug-in Project Name), enter <b>"RSESamples"</b> for the project name (without the quotes). Press <b>Next ></b>.
|
<br /><img src="pdeProj_1.png">
|
||||||
<li>In the second page of the wizard (Plug-in Project Structure), just take the defaults, and press <b>Next ></b>.
|
</li>
|
||||||
<li>In the <a href="pdeProj_wiz_page3.gif">third page</a> of the wizard (Plug-in Code Generators), select <b>"Default Plug-in Structure"</b>, and press <b>Next ></b>.
|
<li>In the first page of the wizard enter <b>"RSESamples"</b> for the project name (without the quotes). Click <b>Next ></b>.
|
||||||
<li>In the <a href="pdeProj_wiz_page4.gif">fourth page</a> of the wizard (Simple Plug-in Content), enter your company for the <b>Provider Name</b>, and press <b>Finish</b>.
|
<br /><img src="pdeProj_wiz_page1.png">
|
||||||
<li>Your new plugin project is created and visible in the Package Explorer of the Plug-in Development perspective. Your new <samp>plugin.xml</samp> file is also open in the <a href="pdeProj_wiz_after.gif">plug-in editor</a>. <i>Close this editor</i>, as you will not be using it in this tutorial.
|
</li>
|
||||||
|
<li>In the second page of the wizard enter your company for the <b>Plug-in Provider</b>, change the <b>Activator</b> to be "rsesamples.RSESamplesPlugin", and click <b>Next ></b>.
|
||||||
<li>Select the <samp>plugin.xml</samp> file, right click and select <b>Open</b>. Go to the dependencies tab and add the following plugins to the list:
|
<br /><img src="pdeProj_wiz_page2.png">
|
||||||
<ul>
|
</li>
|
||||||
<li>org.eclipse.rse.ui
|
<li>In the third page of the wizard uncheck the "Create a plug-in using one of the templates" checkbox and click <b>Finish</b>.
|
||||||
<li>org.eclipse.rse.services
|
<br /><img src="pdeProj_wiz_page3.png">
|
||||||
<li>org.eclipse.rse.files.ui
|
</li>
|
||||||
<li>org.eclipse.rse.shells.ui
|
<li>Your new plugin project is created and visible in the Package Explorer of the Plug-in Development perspective. Your new <samp>plugin.xml</samp> file is also open in the plug-in editor.</li>
|
||||||
<li>org.rse.eclipse.subsystems.files.core
|
<li>Go to the dependencies tab of the plug-in editor and add the following plugins to the list:
|
||||||
<li>org.rse.subsystems.shells.core
|
<ul>
|
||||||
</ul>
|
<li>org.eclipse.core.resources</li>
|
||||||
<li>Expand the <b>src</b> folder, then the <b>RSESamples</b> package folder, and double-click on <samp><b>RSESamplesPlugin.java</b></samp> to edit this class to make it look like <a href="RSESamplesPlugin.html">this</a>.
|
<li>org.eclipse.rse.ui</li>
|
||||||
|
<li>org.eclipse.rse.services</li>
|
||||||
<li>Create the project's resources file for translatable strings: right-click on the <b>RSESamples</b> project and select <b>New->File</b> to open the <b>New File</b> wizard. Enter <samp><b>rseSamplesResources.properties</b></samp> for the file name, as was specified in the call to <samp>loadResourceBundle</samp> in the plug-in class's constructor. Press <b>Finish</b> to create the file. You will populate as you go through the tutorials, so for now just <i>close</i> the editor opened for the file.
|
<li>org.eclipse.rse.files.ui</li>
|
||||||
|
<li>org.eclipse.rse.shells.ui</li>
|
||||||
<li>Create the project's RSE-style messages file for translatable messages: right-click on the <b>RSESamples</b> project and select <b>New->File</b> to get the <b>New File</b> wizard. Enter <samp><b>rseSamplesMessages.xml</b></samp> for the file name, as was specified in the call to <samp>loadMessageFile</samp> in the plug-in class's constructor. Press <b>Finish</b> to create the file. You will see the XML editor open for the new file. Press the <b>Source</b> tab at the bottom of the editor, and enter the following lines (so that you can add messages to the file later on):
|
<li>org.eclipse.rse.subsystems.files.core</li>
|
||||||
<pre><code>
|
<li>org.eclipse.rse.subsystems.shells.core</li>
|
||||||
|
</ul>
|
||||||
|
Save the plugin.xml file.</li>
|
||||||
|
<li>Expand the <b>src</b> folder, then the <b>rsesamples</b> package folder, and double-click on <samp><b>RSESamplesPlugin.java</b></samp> to edit this class.
|
||||||
|
Change it as described below. Reference the source <a href="RSESamplesPlugin.html">here</a> for the details.
|
||||||
|
<ul>
|
||||||
|
<li>Extend SystemBasePlugin instead of AbstractUIPlugin</li>
|
||||||
|
<li>Add the declaration for resourceBundle</li>
|
||||||
|
<li>Add the declaration for messageFile</li>
|
||||||
|
<li>Invoke the superclass constructor from this constructor</li>
|
||||||
|
<li>Add the initializeImageRegistry() method</li>
|
||||||
|
<li>Add the getMessageFile() method</li>
|
||||||
|
<li>Add the getResourceBundle() method</li>
|
||||||
|
<li>Add the static getWorkspace() method</li>
|
||||||
|
<li>Add the static getResourceString(String) method</li>
|
||||||
|
<li>Add the static getPluginMessageFile() method</li>
|
||||||
|
<li>Add the static getPluginMessage(String) method</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Create the project's resources file for translatable strings: right-click on the <b>RSESamples</b> project and select <b>New->File</b> to open the <b>New File</b> wizard. Enter <samp><b>rseSamplesResources.properties</b></samp> for the file name, as was specified in the call to <samp>loadResourceBundle</samp> in the plug-in class's constructor. Press <b>Finish</b> to create the file. You will populate as you go through the tutorials, so for now just <i>close</i> the editor opened for the file.</li>
|
||||||
|
<li>Create the project's RSE-style messages file for translatable messages: right-click on the <b>RSESamples</b> project and select <b>New->File</b> to get the <b>New File</b> wizard. Enter <samp><b>rseSamplesMessages.xml</b></samp> for the file name, as was specified in the call to <samp>loadMessageFile</samp> in the plug-in class's constructor. Press <b>Finish</b> to create the file. You will see the XML editor open for the new file. Press the <b>Source</b> tab at the bottom of the editor, and enter the following lines (so that you can add messages to the file later on):
|
||||||
|
<pre><code>
|
||||||
<?xml version="1.0" encoding='UTF-8'?>
|
<?xml version="1.0" encoding='UTF-8'?>
|
||||||
<!DOCTYPE MessageFile SYSTEM "../org.eclipse.rse.ui/messageFile.dtd">
|
<!DOCTYPE MessageFile SYSTEM "../org.eclipse.rse.ui/messageFile.dtd">
|
||||||
<!-- This is a message file used by SystemMessage and SystemMessageDialog -->
|
<!-- This is a message file used by SystemMessage and SystemMessageDialog -->
|
||||||
|
@ -49,16 +70,17 @@
|
||||||
<<b>MessageList</b>>
|
<<b>MessageList</b>>
|
||||||
<<b>Message</b> ID="1001" Indicator="E">
|
<<b>Message</b> ID="1001" Indicator="E">
|
||||||
<<b>LevelOne</b>>Sample message</<b>LevelOne</b>>
|
<<b>LevelOne</b>>Sample message</<b>LevelOne</b>>
|
||||||
<<b>LevelTwo</b>>This is a sample with one substution variable: %1</<b>LevelTwo</b>>
|
<<b>LevelTwo</b>>This is a sample with one substitution variable: %1</<b>LevelTwo</b>>
|
||||||
</<b>Message</b>>
|
</<b>Message</b>>
|
||||||
</<b>MessageList</b>>
|
</<b>MessageList</b>>
|
||||||
</<b>Subcomponent</b>>
|
</<b>Subcomponent</b>>
|
||||||
</<b>Component</b>>
|
</<b>Component</b>>
|
||||||
</<b>MessageFile</b>>
|
</<b>MessageFile</b>>
|
||||||
</code></pre>
|
</code></pre>
|
||||||
Save and close the file.
|
Save and close the file.
|
||||||
<li>That's it! Your plugin is created and you are ready to go. Now you only need to add code, to implement the extension points.
|
</li>
|
||||||
</ol>
|
<li>Your plugin is created and you are ready to go. Now you only need to add the code to implement the extension points.
|
||||||
</body>
|
</li>
|
||||||
|
</ol>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|