<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to 8_-_Creating_a_plugin</title><link>https://sourceforge.net/p/xena/wiki/8_-_Creating_a_plugin/</link><description>Recent changes to 8_-_Creating_a_plugin</description><atom:link href="https://sourceforge.net/p/xena/wiki/8_-_Creating_a_plugin/feed" rel="self"/><language>en</language><lastBuildDate>Thu, 13 Jun 2013 11:05:15 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/xena/wiki/8_-_Creating_a_plugin/feed" rel="self" type="application/rss+xml"/><item><title>8_-_Creating_a_plugin modified by Allan Cunliffe</title><link>https://sourceforge.net/p/xena/wiki/8_-_Creating_a_plugin/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Organisation X needs a repository to be set up to manage their digital records, and in doing so they will be using Xena to preserve them for the ages. Organisation X will be storing office documents and Foo records, so they will be using the Foo plugin developed in the first part of the tutorial, and the office plugin, developed by the National Archives of Australia. The Office plugin is available from SourceForge, along with Xena. &lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#background"&gt;Background&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#create-an-outline-of-the-plugin"&gt;Create an outline of the plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#create-the-source-folder"&gt;Create the source folder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#create-an-ant-build-file"&gt;Create an Ant build file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#create-the-orgxplugin-class"&gt;Create the OrgXPlugin class&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#build-the-orgx-plugin"&gt;Build the OrgX plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id="background"&gt;Background&lt;/h2&gt;
&lt;p&gt;Unfortunately, things are rarely as simple as they first sound. Records coming into the repository need to be named appropriately, and during preservation, meta data specific to the record and Organisation X needs to be added. To make this possible, Organisation X is creating its very own FileNamer and MetaDataWrapper plugin, to be used with Xena. These components will live in the Organisation X plugin - which will be called, &lt;em&gt;orgx&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;To create the orgx plugin, we are going perform the same process that we did to create the &lt;em&gt;foo&lt;/em&gt; plugin. The following steps are identical to those for the creation of the foo plugin, excepting that the name has changed from &lt;em&gt;foo&lt;/em&gt; to &lt;em&gt;orgx&lt;/em&gt;. &lt;/p&gt;
&lt;h2 id="create-an-outline-of-the-plugin"&gt;Create an outline of the plugin&lt;/h2&gt;
&lt;p&gt;The very first step we will undertake is to create an outline of the plugin that will be loaded by Xena. Xena expects plugins to be loaded as JAR files, laid out in a specific way. To aid in this, the Apache Ant build tool will be used. To set up our plugin development directory, we will create a new folder, called orgx_plugin, at an arbitrary place in the filesystem. This folder will be called the home folder, and designated by "~/" so our plugin will be contained in &lt;em&gt;~/orgx_plugin&lt;/em&gt;. For Windows users, switch the "/" to "\", and the "~" to something like &lt;em&gt;C:\Documents and Settings\UserName\My Documents&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;So to start off with, we get all the components we need to make a plugin. The first is the "name.properties" file. This file should be loaded in the base directory of the JAR file, and should contain the fully qualified name of the plugin loader class, which is the class that will load all the components of the plugin. In this example, we will be putting all our classes in the package: &lt;/p&gt;
&lt;p&gt;au.gov.naa.digipres.xena.demo.orgx &lt;/p&gt;
&lt;p&gt;The plugin class loader will be called OrgXPlugin. So here is the content of our name.properties file: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;classname&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;au&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gov&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;naa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;digipres&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xena&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;demo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;orgx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OrgXPlugin&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="create-the-source-folder"&gt;Create the source folder&lt;/h2&gt;
&lt;p&gt;The next thing we have to do is create the source folder for the package, and put the name.properties file inside that. &lt;/p&gt;
&lt;p&gt;In this example, the source will be created in the folder named 'src', and the output of any compiling will go to 'bin', and a dist folder will contain the built JAR file. Any configuration files will be put into a folder named 'etc', and finally, any required external libraries (probably in JAR form) will be stored in the 'ext' folder. At the end of setting up our folder structure, we should have the following entries in the "~/orgx_plugin" folder: &lt;/p&gt;
&lt;p&gt;- /bin &lt;/p&gt;
&lt;p&gt;- /dist &lt;/p&gt;
&lt;p&gt;- /etc &lt;/p&gt;
&lt;p&gt;- /src &lt;/p&gt;
&lt;p&gt;- name.properties &lt;/p&gt;
&lt;h2 id="create-an-ant-build-file"&gt;Create an Ant build file&lt;/h2&gt;
&lt;p&gt;We will create an Ant build file to do it all automatically. &lt;/p&gt;
&lt;p&gt;1. First up, we will set up a bunch of properties to set the name of the plugin, and match the folder structure used in our project. &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;pluginname&amp;quot;&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;orgx&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;/&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;srcdir&amp;quot;&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;src&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;/&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;etcdir&amp;quot;&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;etc&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;/&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;builddir&amp;quot;&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;bin&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;/&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;distdir&amp;quot;&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;dist&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;/&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;2. Set the location of the &lt;em&gt;xena.jar&lt;/em&gt; file in a property named, &lt;em&gt;xenajarlocation&lt;/em&gt;. This is the most likely property to need changing, unless you happen to have the xena file in the same relative location. This guide assumes that you have already built the &lt;em&gt;xena.jar&lt;/em&gt; file. If this is not the case, please follow the build guide on the &lt;a class="" href="http://sourceforge.net/apps/mediawiki/xena/index.php"&gt;Xena SourceForge wiki&lt;/a&gt;. The default location for the &lt;em&gt;xena.jar&lt;/em&gt; file is the &lt;em&gt;xena&lt;/em&gt; directory of the root &lt;em&gt;plugin-howto&lt;/em&gt; directory. &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;xenajarlocation&amp;quot;&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;../../xena/xena.jar&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;/&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;3. Create the compile path to be used when compiling our plugins: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;path id=&amp;quot;compile.path&amp;quot;&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
        &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;pathelement location=&amp;quot;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;xenajar&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;&amp;quot;/&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/path&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;4. Create the compile job, broken into a couple of lines: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;target name=&amp;quot;compile&amp;quot; description=&amp;quot;--&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;Compile the .java sources&amp;quot;&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
                &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;javac srcdir=&amp;quot;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;srcdir&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;&amp;quot; destdir=&amp;quot;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;builddir&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;&amp;quot; debug=&amp;quot;on&amp;quot;
                        verbose=&amp;quot;on&amp;quot; classpathref=&amp;quot;compile.path&amp;quot;/&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/target&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;5. Create the &lt;em&gt;makejar&lt;/em&gt; job: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;target name=&amp;quot;makejar&amp;quot; description=&amp;quot;--&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;Make the jar file&amp;quot; depends=&amp;quot;compile&amp;quot;&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
        &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;delete &lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
                &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;fileset file=&amp;quot;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;distdir&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;/&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;pluginname&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;.jar&amp;quot;/&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
        &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/delete&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
        &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;jar jarfile=&amp;quot;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;distdir&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;/&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;pluginname&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;.jar&amp;quot; manifest=&amp;quot;etc/MANIFEST.MF&amp;quot;&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
                &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;fileset dir=&amp;quot;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;builddir&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;&amp;quot; &lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;include name=&amp;quot;**/*.class&amp;quot;/ &lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/fileset&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
                &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;fileset dir=&amp;quot;.&amp;quot; &lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;include name = &amp;quot;name.properties&amp;quot;/&lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/fileset&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
                &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;fileset dir=&amp;quot;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;srcdir&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;&amp;quot;&lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;include name = &amp;quot;**/*.properties&amp;quot;/&lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/fileset&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
        &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/jar&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/target&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;It turns out we have almost the whole Ant build file here. Inside the Ant file is also a &lt;em&gt;clean&lt;/em&gt; job and an &lt;em&gt;init&lt;/em&gt; job, which delete and recreate the &lt;em&gt;bin&lt;/em&gt; and &lt;em&gt;dist&lt;/em&gt; folders, respectively. &lt;/p&gt;
&lt;p&gt;Note the reference to the manifest for the JAR file in the makejar target. Since there will be no main class in our plugin Jar, all we will include in our manifest file will be the line: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;Manifest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Version&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The manifest file should be created and exist in the &lt;em&gt;etc&lt;/em&gt; folder, as specified in the Ant build job. Also, the &lt;em&gt;makejar&lt;/em&gt; job looks for the &lt;em&gt;name.properties&lt;/em&gt; file in the base directory, and any properties files in the &lt;em&gt;src&lt;/em&gt; directory tree. &lt;/p&gt;
&lt;h2 id="create-the-orgxplugin-class"&gt;Create the OrgXPlugin class&lt;/h2&gt;
&lt;p&gt;The OrgXPlugin class will tell Xena what it is we can expect to find in the plugin. It specifies any normalisers, types, guessers, file namers, meta data package wrappers, help sets, basically anything that can be in a normaliser. It will need to extend the XenaPlugin class, found in the &lt;em&gt;au.gov.naa.digipres.xena.kernel.plugin package&lt;/em&gt;. For the moment, we will leave it almost entirely blank, we will just override the only two abstract methods in XenaPlugin - getName and getVersion. &lt;/p&gt;
&lt;p&gt;So, our &lt;em&gt;OrgXPlugin.java&lt;/em&gt; file content will be: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;au&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gov&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;naa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;digipres&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xena&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;demo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;orgx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;import&lt;/span&gt; &lt;span class="n"&gt;au&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gov&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;naa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;digipres&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xena&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;kernel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;XenaPlugin&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;OrgXPlugin&lt;/span&gt; &lt;span class="n"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;XenaPlugin&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;final&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;ORGX_PLUGIN_NAME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;orgx&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Override&lt;/span&gt;
        &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ORGX_PLUGIN_NAME&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Override&lt;/span&gt;
        &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;getVersion&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;0.1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now this file is expected to be in the JAR at the location: &lt;em&gt;au/gov/naa/digipres/xena/demo/orgx&lt;/em&gt;. To make this happen, we will stick it into that location in the source tree. So, several make directory commands later, we now have the folder: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="o"&gt;~/&lt;/span&gt;&lt;span class="n"&gt;orgx_plugin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;au&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gov&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;naa&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;digipres&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;xena&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;demo&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;orgx&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This folder contains the single file &lt;em&gt;OrgXPlugin.java&lt;/em&gt;. &lt;/p&gt;
&lt;h2 id="build-the-orgx-plugin"&gt;Build the OrgX plugin&lt;/h2&gt;
&lt;p&gt;It is time to build our (empty) orgx plugin for the first time. In a command shell, at the location &lt;em&gt;~/orgx_plugin&lt;/em&gt;, type &lt;strong&gt;ant&lt;/strong&gt;. If everything works, a JAR file, named &lt;em&gt;orgx.jar&lt;/em&gt; will now exist in the folder &lt;em&gt;dist&lt;/em&gt;. Running the command &lt;strong&gt;jar -tvf orgx.jar&lt;/strong&gt; reveals the contents of the JAR: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#jar -tvf orgx.jar&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;Wed&lt;/span&gt; &lt;span class="n"&gt;Nov&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;03&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt; &lt;span class="n"&gt;EST&lt;/span&gt; &lt;span class="mi"&gt;2007&lt;/span&gt; &lt;span class="n"&gt;META&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;INF&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="mi"&gt;106&lt;/span&gt; &lt;span class="n"&gt;Wed&lt;/span&gt; &lt;span class="n"&gt;Nov&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;03&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;46&lt;/span&gt; &lt;span class="n"&gt;EST&lt;/span&gt; &lt;span class="mi"&gt;2007&lt;/span&gt; &lt;span class="n"&gt;META&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;INF&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;MANIFEST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MF&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;Wed&lt;/span&gt; &lt;span class="n"&gt;Nov&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;03&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;46&lt;/span&gt; &lt;span class="n"&gt;EST&lt;/span&gt; &lt;span class="mi"&gt;2007&lt;/span&gt; &lt;span class="n"&gt;au&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;Wed&lt;/span&gt; &lt;span class="n"&gt;Nov&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;03&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;46&lt;/span&gt; &lt;span class="n"&gt;EST&lt;/span&gt; &lt;span class="mi"&gt;2007&lt;/span&gt; &lt;span class="n"&gt;au&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gov&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;Wed&lt;/span&gt; &lt;span class="n"&gt;Nov&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;03&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;46&lt;/span&gt; &lt;span class="n"&gt;EST&lt;/span&gt; &lt;span class="mi"&gt;2007&lt;/span&gt; &lt;span class="n"&gt;au&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gov&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;naa&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;Wed&lt;/span&gt; &lt;span class="n"&gt;Nov&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;03&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;46&lt;/span&gt; &lt;span class="n"&gt;EST&lt;/span&gt; &lt;span class="mi"&gt;2007&lt;/span&gt; &lt;span class="n"&gt;au&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gov&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;naa&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;digipres&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;Wed&lt;/span&gt; &lt;span class="n"&gt;Nov&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;03&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;46&lt;/span&gt; &lt;span class="n"&gt;EST&lt;/span&gt; &lt;span class="mi"&gt;2007&lt;/span&gt; &lt;span class="n"&gt;au&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gov&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;naa&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;digipres&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;xena&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;Wed&lt;/span&gt; &lt;span class="n"&gt;Nov&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;03&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;46&lt;/span&gt; &lt;span class="n"&gt;EST&lt;/span&gt; &lt;span class="mi"&gt;2007&lt;/span&gt; &lt;span class="n"&gt;au&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gov&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;naa&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;digipres&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;xena&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;demo&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;Wed&lt;/span&gt; &lt;span class="n"&gt;Nov&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;03&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;46&lt;/span&gt; &lt;span class="n"&gt;EST&lt;/span&gt; &lt;span class="mi"&gt;2007&lt;/span&gt; &lt;span class="n"&gt;au&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gov&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;naa&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;digipres&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;xena&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;demo&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;orgx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="mi"&gt;606&lt;/span&gt; &lt;span class="n"&gt;Wed&lt;/span&gt; &lt;span class="n"&gt;Nov&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;03&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;46&lt;/span&gt; &lt;span class="n"&gt;EST&lt;/span&gt; &lt;span class="mi"&gt;2007&lt;/span&gt; &lt;span class="n"&gt;au&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gov&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;naa&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;digipres&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;xena&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;demo&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;orgx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;OrgXPlugin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;
&lt;span class="mi"&gt;39&lt;/span&gt; &lt;span class="n"&gt;Wed&lt;/span&gt; &lt;span class="n"&gt;Nov&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="mi"&gt;09&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;56&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt; &lt;span class="n"&gt;EST&lt;/span&gt; &lt;span class="mi"&gt;2007&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;properties&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now it's time to write the Org X filenamer and meta data wrapper! &lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Allan Cunliffe</dc:creator><pubDate>Thu, 13 Jun 2013 11:05:15 -0000</pubDate><guid>https://sourceforge.nete8f59348d30544bb46259a9ba6b308fbfb59041e</guid></item></channel></rss>