<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>David Simpson &#187; plugin</title>
	<atom:link href="http://davidsimpson.me/tag/plugin/feed/" rel="self" type="application/rss+xml" />
	<link>http://davidsimpson.me</link>
	<description>Developing the web, one page at a time.</description>
	<lastBuildDate>Wed, 16 May 2012 20:14:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Staff &amp; Student Directory Search in Atlassian Confluence</title>
		<link>http://davidsimpson.me/2011/08/16/staff-student-directory-search-in-atlassian-confluence/</link>
		<comments>http://davidsimpson.me/2011/08/16/staff-student-directory-search-in-atlassian-confluence/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 13:39:33 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[atlassian]]></category>
		<category><![CDATA[confluence]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://davidsimpson.me/?p=1525</guid>
		<description><![CDATA[A quick demo of a Confluence plugin for a staff &#038; student directory at the University of Nottingham. Developed by David Simpson and Shaun Hare back in 2010.]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton1525" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fdavidsimpson.me%2F2011%2F08%2F16%2Fstaff-student-directory-search-in-atlassian-confluence%2F&amp;via=dvdsmpsn&amp;text=Staff%20%26%23038%3B%20Student%20Directory%20Search%20in%20Atlassian%20Confluence&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fdavidsimpson.me%2F2011%2F08%2F16%2Fstaff-student-directory-search-in-atlassian-confluence%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://davidsimpson.me/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;"></a></div><p><iframe width="500" height="375" src="http://www.youtube.com/embed/4vZ6d5Wuahw?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>A quick demo of a Confluence plugin for a staff &#038; student directory at the University of Nottingham.</p>
<p>Developed by David Simpson and Shaun Hare back in 2010.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://davidsimpson.me/2011/08/16/staff-student-directory-search-in-atlassian-confluence/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Analytics Plugin for Confluence 1.2 released</title>
		<link>http://davidsimpson.me/2010/06/24/analytics-plugin-for-confluence-12-released/</link>
		<comments>http://davidsimpson.me/2010/06/24/analytics-plugin-for-confluence-12-released/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 11:39:35 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[analytics]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[atlassian]]></category>
		<category><![CDATA[confluence]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[web analytics]]></category>
		<category><![CDATA[wiki]]></category>

		<guid isPermaLink="false">http://davidsimpson.me/?p=865</guid>
		<description><![CDATA[Last week I released Analytics Plugin for Confluence 1.2 on the Atlassian Plugin Exchange. It&#8217;s been 6 months since the initial release which was only tested on Confluence 3.0. This time I&#8217;ve added a new dashboard section, full support for Confluence 3.1 &#038; 3.2 and a pile of macro parameters as requested by Guy Fraser. [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton865" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fdavidsimpson.me%2F2010%2F06%2F24%2Fanalytics-plugin-for-confluence-12-released%2F&amp;text=Analytics%20Plugin%20for%20Confluence%201.2%20released&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fdavidsimpson.me%2F2010%2F06%2F24%2Fanalytics-plugin-for-confluence-12-released%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://davidsimpson.me/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;"></a></div><p><img src="/wp-content/uploads/2010/06/analytics-plugin-icon-60pc.png" alt="analytics-plugin-icon-60pc" title="analytics-plugin-icon-60pc" width="153" height="124" class="alignleft size-full wp-image-875" /> Last week I released <a href="https://plugins.atlassian.com/plugin/details/16722">Analytics Plugin for Confluence 1.2</a> on the Atlassian Plugin Exchange.  </p>
<p>It&#8217;s been  6 months since the initial release which was only tested on Confluence 3.0.  This time I&#8217;ve added a new dashboard section, full support for Confluence 3.1 &#038; 3.2 and a pile of macro parameters <a href="/2010/01/02/announcing-google-analytics-plugin-for-confluence/comment-page-1/#comment-487">as requested</a> by Guy Fraser.     The <a href="https://studio.plugins.atlassian.com/wiki/display/CGAP/Analytics+Plugin+1.2+-+Release+Notes">release notes are here</a>.   Confluence 3.3  is just around the corner, so I&#8217;ll add an update for that when it comes out.</p>
<h3>Thank you</h3>
<p>The Confluence community has shown a great deal of support and encouragement since the plugin was originally released.   For example, <a href="http://blogs.atlassian.com/confluence/2009/12/report-confluence-activity-using-google-analytics-in-the-wiki.html">Atlassian blogged about it</a> before I got a chance to.  So thanks to all for your support.  </p>
<p>The plugin was name checked by Sherif Mansour &#8211; Atlassian&#8217;s  Product Manager for Confluence in the <a href="http://www.atlassian.com/summit/2010/presentations/collaboration-and-projects/confluence-state-of-union.jsp">Confluence State of the Union</a> presentation at <a href="http://www.atlassian.com/summit/2010/">Atlassian Summit 2010</a> at the start of the month.  Watch it all, but concentrate especially around 5:10!</p>
<p>This week Google approved the plugin for their <a href="http://www.google.com/analytics/apps/">Google Analytics Application Gallery</a> &mdash;  <a href="http://www.google.com/analytics/apps/about?app_id=229002">take a look here</a>.  The Apps Gallery has only been going for about a month so I&#8217;m really excited about being a part of it.  The slight name change and new logo were done to fit in with the Application Gallery Policy.<br />
<span id="more-865"></span></p>
<h3>In the future</h3>
<p>The next release should support Confluence 3.3  and also complete tracking of all pages in a space  &mdash; not just those with a URL starting /display/spaceKey/  &mdash; based on <a href="/2010/04/09/meta-tags-are-your-friend-part-2-space-specific-tracking-in-confluence-with-google-analytics/">this hack</a> :</p>
<pre class="brush: jscript; title: ;">
// Add a page-level custom variable to record the space-key
if (typeof jQuery('meta[name=confluence-space-key]').attr(&quot;content&quot;) == 'string')
{
  pageTracker._setCustomVar(
    1, // This custom var is set to slot #1 of 5

    // The name acts as a kind of category for the user activity
    'confluence-space-key',    

    // This value of the custom variable
    jQuery('meta[name=confluence-space-key]').attr(&quot;content&quot;), 

    3 // Sets the scope to page-level
  );
}
</pre>
<p>&mdash; If you want to use this hack now, try out <a href="http://www.google.com/analytics/reporting/edit_custom_report?share=gKOvaSkBAAA.5cmZVfTgv7FSDQaf3SApcJ_A8fPPw5P0SVumf1XIBw6dZ9IfubVqvpdV97TN5wj9PYWeLHgMbDxm22PtwyLU0Q.tBCFvr4UE3alVuAccnjeMA">this custom Google Analytics report</a> which will allow you to take advantage of it now.</p>
<p>I&#8217;d also like to add full space specific tracking for attachments too.</p>
<h3>A quick demo</h3>
<p>And finally, this is what the new version looks like:</p>
<p><object height="350" width="425" class="alignleft"><param value="http://www.youtube.com/v/0JgoBwlQT_4&amp;hl=en_US&amp;fs=1&amp;" name="movie"><param value="true" name="allowFullScreen"><param value="always" name="allowscriptaccess"><embed height="350" width="425" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash" src="http://www.youtube.com/v/0JgoBwlQT_4&amp;hl=en_US&amp;fs=1&amp;"></object> &nbsp;</p>
<h3>Related Posts</h3>
<ul>
<li><a href="/2009/03/18/tracking-atlassian-confluence-usage-with-google-analytics/">Tracking Atlassian Confluence usage with Google Analytics</a></li>
<li><a href="/2009/04/16/4-useful-tips-on-google-analytics-reporting-for-confluence/">4 Useful Tips on Google Analytics Reporting for Confluence</a></li>
<li><a href="/2010/01/02/announcing-google-analytics-plugin-for-confluence/">Announcing: Google Analytics plugin for Confluence</a> &#8211; original release</li>
</ul>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://davidsimpson.me/2010/06/24/analytics-plugin-for-confluence-12-released/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Some thoughts on developing my first Confluence plugin</title>
		<link>http://davidsimpson.me/2010/01/25/some-thoughts-on-developing-my-first-confluence-plugin/</link>
		<comments>http://davidsimpson.me/2010/01/25/some-thoughts-on-developing-my-first-confluence-plugin/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 12:42:04 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Uncategorised]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[atlassian]]></category>
		<category><![CDATA[confluence]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wiki]]></category>

		<guid isPermaLink="false">http://davidsimpson.me/?p=503</guid>
		<description><![CDATA[I recently started building Confluence plugins. The first one being my Google Analytics plugin for Confluence. This post outlines my &#8220;journey&#8221; into Confluence plugin development. It documents a beginner&#8217;s pitfalls when developing with the Atlassian Plugin SDK. Hopefully others can learn from, or at least laugh at my mistakes. Where I was starting from: No [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton503" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fdavidsimpson.me%2F2010%2F01%2F25%2Fsome-thoughts-on-developing-my-first-confluence-plugin%2F&amp;text=Some%20thoughts%20on%20developing%20my%20first%20Confluence%20plugin&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fdavidsimpson.me%2F2010%2F01%2F25%2Fsome-thoughts-on-developing-my-first-confluence-plugin%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://davidsimpson.me/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;"></a></div><p><img class="alignnone" title="ga-idea" src="/wp-content/uploads/2010/01/ga-idea2.png" alt="ga-idea" /></p>
<p><!-- Some thoughts on developing my first Confluence plugin  or A bluffer's guide to developing Confluence plugins --></p>
<p>I recently started building Confluence plugins.  The first one being my <a href="/2010/01/02/announcing-google-analytics-plugin-for-confluence/">Google Analytics plugin for Confluence</a>. This post outlines my &#8220;journey&#8221; into Confluence plugin development.  It documents a beginner&#8217;s pitfalls when developing with the Atlassian Plugin SDK. Hopefully others can learn from, or at least laugh at my mistakes.</p>
<p>Where I was starting from:</p>
<ul>
<li>No experience of <a href="http://maven.apache.org/">maven</a></li>
<li>No understanding of how Confluence plugins work or how they are written</li>
<li>Some experience of Java &#8211; Mainly <a href="http://www.jasig.org/uportal">uPortal</a>/<a href="http://www.sungardhe.com/products/luminis-platform">Luminis</a> portal development for the <a href="http://my.nottingham.ac.uk/">University of Nottingham</a> and some consultancy work e.g. for Astra Zeneca, Documentum and 3Com</li>
<li>No experience of unit testing or integration testing in Java &#8211; oh dear</li>
<li>I prefer UI work to real programming</li>
</ul>
<p><span id="more-503"></span></p>
<h2>Initial failure</h2>
<p>I tried to setup a development environment for plugin development using Atlassian&#8217;s <a href="http://confluence.atlassian.com/display/DEVNET/How+to+Build+an+Atlassian+Plugin">documentation</a> a little before the beta release of version 3 of the Atlassian Plugin SDK.  It was a pain. This was no fault of the documentation — it was really just to do with my schedules and available time to experiment.</p>
<p>The problem was two-fold:</p>
<ol>
<li>I&#8217;d not done this before, so was clueless to what was involved</li>
<li>The setup was a complete ball-ache considering the time restraints</li>
</ol>
<p>I was well aware of point 1 and the pain it was likely to cause.  Point 2 seemed to be the old chestnut &#8211; install and configure the exact correct versions of the software you need in the correct sequence, then start.</p>
<p>Wait.  I don&#8217;t know what that means, see point 1. Yes, I&#8217;ve got maven installed on my MacBook! Woo! Let&#8217;s go.  Hang on, it&#8217;s not the correct version. Where do I get that from?</p>
<p>In many ways, it reminded me of my initial experience of building and installing Apache 1.x on Solaris SPARC boxes back in the day:</p>
<blockquote><p>cd /path/to/apache/source; make; make install;<br />
Oh. Wrong version of make. Where do I get that from?  Hmmm.<br />
Install correct version of make. Damn, make needs the correct version of gcc. Where do I get that from?<br />
And so on. Moving further and further away from the problem you&#8217;re trying to solve.</p></blockquote>
<p>So, I stopped there.  No shiny Confluence plugins for me.  I&#8217;ve got plenty of other things to do anyway thank you very much.</p>
<h2>Reboot</h2>
<p>Then Atlassian released the Plugin SDK beta and all this nastiness was removed.  Everything you need to build an Atlassian plugin was bundled in one place.  Refreshing. All commands have been wrapped and so are prefixed with <code>atlas-</code> to prevent conflict with whatever else you&#8217;ve got installed.</p>
<p>For the impatient, this really drives down the barriers to entry for plugin development.</p>
<p>Following the documentation for <a href="http://confluence.atlassian.com/display/DEVNET/Setting+up+your+Plugin+Development+Environment">installing the Plugin SDK</a> was a piece of cake.  It just worked.</p>
<ul>
<li>Download</li>
<li>Unzip</li>
<li>Add some environment settings. Edit <code>~/.profile</code> and add:
<pre class="brush: bash; title: ;">
PATH=$PATH:.
PATH=$PATH:$HOME/
PATH=$PATH:$HOME/bin
PATH=$PATH:$HOME/atlassian-plugin-sdk/atlassian-plugin-sdk-3.0-beta3
PATH=$PATH:$HOME/atlassian-plugin-sdk/atlassian-plugin-sdk-3.0-beta3/bin
export PATH
</pre>
</li>
<li>Start building a plugin</li>
</ul>
<p>Starting out to build your Atlassian plugin is <a href="http://confluence.atlassian.com/display/DEVNET/Developing+your+Plugin+using+the+Atlassian+Plugin+SDK">documented here</a>. It&#8217;s a fairly straightforward set of instructions.</p>
<p>You start by doing something like this:</p>
<pre class="brush: bash; title: ;">
mkdir ~/projects/davidsimpson.me/
mkdir ~/projects/davidsimpson.me/confluence
cd  ~/projects/davidsimpson.me/confluence

atlas-create-confluence-plugin
...
...
...
When prompted
Define value for groupId: : me.davdsimpson.confluence.plugins
Define value for artifactId: : googleanalytics
Define value for version:  1.0-SNAPSHOT: :
Define value for package:  me.davdsimpson.confluence.plugins: :
Confirm properties configuration:
groupId: me.davdsimpson.confluence.plugins
artifactId: googleanalytics
version: 1.0-SNAPSHOT
package: me.davdsimpson.confluence.plugins
</pre>
<p>Then type&#8230;</p>
<pre class="brush: bash; title: ;">cd googleanalytics
atlas-run</pre>
<p>&#8230;and sit back.  If maven doesn&#8217;t fall over for lack of memory at this point, you&#8217;re laughing.  Go away, have a beer or two.  This may take some time.</p>
<p><img class="aligncenter size-medium wp-image-525" title="Beer" src="/wp-content/uploads/2010/01/iStock_000009660877XSmall.jpg" alt="Beer" width="440" height="175" /></p>
<p>On your return, maven will hopefully have finished dragging all manner of nonsense from Australia and installed a working copy of Confluence, together with an empty plugin onto your computer. Nice.  Next, write some code.</p>
<p><strong>I like to run before I can walk.</strong> It seems like much more fun to attempt something that&#8217;s harder.  You do fall over a lot more often though.  So rather than some kind of silly little hello world or equivalent plugin, my first plugin was an integration of Google Analytics with Confluence using the Google Analytics API to fetch data from Google.  It requires some additional JARs from Google.</p>
<p>Google doesn&#8217;t have a public maven repository to my knowledge and I&#8217;d no idea how to get these JARs added into maven.  Luckily, people had already written about <a href="http://www.techbits.de/2009/08/06/adding-googles-gdata-java-api-to-your-maven-repository/">parts</a> of <a href="http://blog.stuartlewis.com/2009/05/29/surfacing-google-analytics-stats-in-dspace/">this</a>, so I put 2 and 2 together.</p>
<p><strong>Add Google Analytics JARs to maven:</strong></p>
<pre class="brush: bash; title: ;">
atlas-mvn install:install-file -DgroupId=com.google.gdata
    -DartifactId=gdata-core
    -Dversion=1.0
    -Dpackaging=jar
    -Dfile=/path/to/gdata-core-1.0.jar
    -DgeneratePom=true

atlas-mvn install:install-file -DgroupId=com.google.gdata
    -DartifactId=gdata-analytics
    -Dversion=2.0
    -Dpackaging=jar
    -Dfile=/path/to/gdata-analytics-2.0.jar
    -DgeneratePom=true

atlas-mvn install:install-file -DgroupId=com.google.collect
    -DartifactId=google-collect
    -Dversion=1.0
    -Dpackaging=jar
    -Dfile=/path/to/google-collect-1.0-rc3.jar
</pre>
<p><strong>Edit the Project Object Model (POM) to add the dependencies</strong></p>
<p>Edit the pom:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">vi</span> ~<span style="color: #000000; font-weight: bold;">/</span>projects<span style="color: #000000; font-weight: bold;">/</span>davidsimpson.me<span style="color: #000000; font-weight: bold;">/</span>confluence<span style="color: #000000; font-weight: bold;">/</span>googleanalytics<span style="color: #000000; font-weight: bold;">/</span>pom.xml</pre></div></div>

<p>Add this bit to the end of the dependencies node:</p>
<pre class="brush: xml; title: ;">
&lt;!-- Add Google Analytics dependencies: --&gt;

       com.google.gdata
       gdata-core
       1.0

       com.google.gdata
       gdata-analytics
       2.0

	com.google.collect
	google-collect
	1.0
</pre>
<p><strong>Next, fire up your IDE</strong></p>
<p>My chosen IDE is <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>.</p>
<ul>
<li>Open the pom.xml in IntelliJ IDEA (File | Open project)</li>
<li>Override/set the maven home directory:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>davidsimpson<span style="color: #000000; font-weight: bold;">/</span>atlassian-plugin-sdk-<span style="color: #000000;">3.0</span>-beta3<span style="color: #000000; font-weight: bold;">/</span>apache-maven</pre></div></div>

</li>
<li>Set the JDK for build as 1.5 or 1.6</li>
<li>Start editing the plugin</li>
</ul>
<h2>Hiccups</h2>
<p>It&#8217;s not all straightforward.  Here&#8217;s some of the annoyances that I came across.</p>
<h3>Maven needs more memory</h3>
<p>I needed more memory for maven.  Not really a problem &#8211; append to <code>~/.profile</code>:</p>
<pre class="brush: bash; title: ;">
MAVEN_OPTS=-Xmx512m
export MAVEN_OPTS
</pre>
<h3>Annoying warnings on <code>atlas-run</code></h3>
<p>I noticed this on running <code>atlas-run</code> &#8211; it probably shouldn&#8217;t be there:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>WARNING<span style="color: #7a0874; font-weight: bold;">&#93;</span> Using platform encoding <span style="color: #7a0874; font-weight: bold;">&#40;</span>MacRoman actually<span style="color: #7a0874; font-weight: bold;">&#41;</span> to copy filtered resources, i.e. build is platform dependent<span style="color: #000000; font-weight: bold;">!</span></pre></div></div>

<p>Of course, someone has already blogged about it — <a href="http://www.redleopard.com/2009/04/macroman-encoding-creeps-into-maven/">Red Leopard</a> — and it&#8217;s easily fixed by editing the POM to add the correct encoding.</p>
<pre class="brush: xml; title: ;">
3.0.2
    3.0

    &lt;!-- Fix for MacRoman warnings on build --&gt;
    UTF-8
    UTF-8
</pre>
<p>Now, we have no nasty warnings.</p>
<h3>The macro browser icon</h3>
<p>I love the Macro Browser in Confluence.  It&#8217;s a nice step forward in the evolution of the UI.  So as a result, I wanted my macro to have a  shiny icon in the macro browser.   That damn Macro Browser icon ate up several hours of my life.  Looking at the comments on the <a href="http://confluence.atlassian.com/display/CONFDEV/Updating+macros+for+the+Macro+Browser">documentation</a> page, several other people have had a whole load of fun getting their pretty icon to show up too.</p>
<div id="attachment_521" class="wp-caption alignnone" style="width: 450px"><a href="http://localhost/davidsimpson.me/wp-content/uploads/2010/01/macro-browser1.png" rel="lightbox[503]" title="macro-browser"><img class="size-medium wp-image-521" title="macro-browser" src="http://davidsimpson.me/wp-content/uploads/2010/01/macro-browser1.png" alt="The macro browser icon: What we're aiming for"  /></a><p class="wp-caption-text">The macro browser icon: What we</p></div>
<p>Could I get the Macro Browser to show my plugin&#8217;s icon. No.  I followed the <a href="http://confluence.atlassian.com/display/CONFDEV/Updating+macros+for+the+Macro+Browser">documentation</a>.  It did not work.  I looked again. This time I <em>really</em> paid attention.  Was it my fat fingers?  Was I just being stupid? (Probably.)  I ignored this for a while — maybe it would be better after a night&#8217;s sleep.</p>
<p>Everything <a href="http://twitter.com/dvdsmpsn/status/5796289204">seemed to work a whole lot better</a> when I dropped the beta and moved to version 3.0.2 of the Plugin SDK.<br />
<strong>Note:</strong> I had to update my <code>~/.profile</code> to point to the new version of the SDK and update the references to maven in Intelli-J at this point.</p>
<p>I also followed a different tack on getting the macro browser icon to work</p>
<ul>
<li>Find a macro that has a custom icon in the macro browser</li>
<li>Go to the Atlassian public subversion repository and browse to the source for that macro plugin.</li>
<li>Copy the exact syntax from the <code>atlassian-plugin.xml</code> and paste into your macro&#8217;s own <code>atlassian-plugin.xml</code></li>
<li>Name the icon exactly the same as in the <code>atlassian-plugin.xml</code> and put it in the correct place in the directory structure</li>
</ul>
<p>I&#8217;m not entirely sure whether it was the copy and paste approach that helped or moving away from the beta.  It works now, so I&#8217;m not going to loose sleep on why.</p>
<h3>Adding a configuring UI to the plugin</h3>
<p>My plugin needed to store Google account credentials and display a list of Google Analytics sites, so you can choose the correct profile.   How do you do that?  Hmmm. Go back to the <a href="http://confluence.atlassian.com/display/CONFDEV/Adding+a+Configuration+UI+for+your+Plugin">documentation</a>.  It wasn&#8217;t nearly detailed enough for my liking, so time to vent a <a href="http://twitter.com/dvdsmpsn/status/5719013792">little</a>.</p>
<p>Again, it seemed the best way to learn was to find a plugin that has a similar kind of configuration to that you&#8217;re hoping for and start appropriating the code.</p>
<h3>Unit testing and integration testing</h3>
<p>This is a good idea. Period. Did I have a clue how to do it for Confluence?  Of course not.</p>
<p>Again, the community helped out.  Atlassian partners at Adaptavist, Comala Technology and Customware have written about this:</p>
<ul>
<li><a href="http://www.customware.net/repository/display/GREENHOUSE/2009/03/18/Integration+Testing+of+Confluence+Plugins">Integration Testing of Confluence Plugins</a> by Bo Wang</li>
<li><a href="http://www.adaptavist.com/display/~erobertshaw/2009/08/17/Unit+testing+a+Confluence+Action">Unit testing a Confluence Action</a> by Edward Robertshaw</li>
<li><a href="http://www.adaptavist.com/display/~erobertshaw/Unit+testing+a+Confluence+Macro">Unit testing a Confluence Macro</a> by Edward Robertshaw</li>
<li><a href="http://www.mundoreves.com/display/HOME/2009/01/29/Confluence+plugin+integration+testing"> Confluence plugin integration testing </a> by Roberto Dominguez</li>
</ul>
<p>Browsing around the Atlassian public subversion repository was also a help.  I&#8217;ve got to say that I&#8217;m an easy convert to testing.  It just makes sense.</p>
<p><strong>Update (2010-05-04):</strong> A nice feature of the SDK is running or testing your plugin against different versions of the product.  This is straightforward:</p>
<pre class="brush: bash; title: ;">
# Integration tests for different versions
atlas-integration-test -v 3.0
atlas-integration-test -v 3.1
atlas-integration-test -v 3.2
# Run different versions of Confluence
atlas-run -v 3.0
atlas-run -v 3.1
atlas-run -v 3.2
</pre>
<h2>Wrapping up</h2>
<p>After a good deal of stumbling around, it turns out that I can write a Confluence plugin after all.  Everything started working a lot better after I updated from the beta version, but that could just be coincidence.  The documentation <em>could</em> be a little better to help the uninitiated  but it was equally my fault for not learning to walk first.  There is a lot of good information, but it is spread over a few different spaces.</p>
<p>My next step was to get the plugin added to Atlassian <a href="https://plugins.atlassian.com/plugin/home">Plugin Exchange</a>.  It took a little while to get this done — maybe that&#8217;s best saved for a follow up post.  The plugin is now <a href="https://plugins.atlassian.com/plugin/details/16722">available</a> on Atlassian Plugin Exchange.  I hope other people get some use out of it.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://davidsimpson.me/2010/01/25/some-thoughts-on-developing-my-first-confluence-plugin/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Announcing: Google Analytics plugin for Confluence</title>
		<link>http://davidsimpson.me/2010/01/02/announcing-google-analytics-plugin-for-confluence/</link>
		<comments>http://davidsimpson.me/2010/01/02/announcing-google-analytics-plugin-for-confluence/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 17:06:36 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[analytics]]></category>
		<category><![CDATA[atlassian]]></category>
		<category><![CDATA[confluence]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://davidsimpson.me/?p=457</guid>
		<description><![CDATA[I&#8217;m pleased to announce the release of my first Confluence plugin &#8212; Google Analytics plugin for Confluence. It lists Google Analytics reports for a particular Confluence space &#8211; from within that space. The current version has 10 reports and shows the first 20 results for each report. Top Content Depth of Visit Internal Search Browser [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton457" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fdavidsimpson.me%2F2010%2F01%2F02%2Fannouncing-google-analytics-plugin-for-confluence%2F&amp;text=Announcing%3A%20Google%20Analytics%20plugin%20for%20Confluence&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fdavidsimpson.me%2F2010%2F01%2F02%2Fannouncing-google-analytics-plugin-for-confluence%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://davidsimpson.me/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;"></a></div><p><img src="/wp-content/uploads/2010/02/ga-icon.png" alt="Google Analytics" title="Google Analytics" width="170" height="139" class="alignleft size-full wp-image-618" /></p>
<p>I&#8217;m pleased to announce the release of my first Confluence plugin &mdash; <a href="https://plugins.atlassian.com/plugin/details/16722">Google Analytics plugin for Confluence</a>. </p>
<p>It lists Google Analytics reports for a particular Confluence space &#8211; from within that space.  The current version has 10 reports and shows the first 20 results for each report.</p>
<ul>
<li>Top Content</li>
<li>Depth of Visit</li>
<li>Internal Search</li>
<li>Browser and OS</li>
<li>Browser Version</li>
<li>Screen Resolution</li>
<li>Network</li>
<li>City</li>
<li>All Traffic Sources</li>
<li>Search Engine Keywords</li>
</ul>
<p><span id="more-457"></span></p>
<p>Just before Christmas, Atlassian quietly approved the plugin on their <a href="http://plugins.atlassian.com">Plugin Exchange</a> website.  Since then, <a href="http://twitter.com/mattnhodges">Matt Hodges</a> posted a great write up about it on the Atlassian website &mdash; <a href="http://blogs.atlassian.com/confluence/2009/12/report-confluence-activity-using-google-analytics-in-the-wiki.html">Report Confluence Activity Using Google Analytics in the Wiki</a>.</p>
<h3>Screencasts and live demonstrations</h3>
<p>I&#8217;ve done a couple of screencast demos on usage and configuration:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/zbKElYFCWyk&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/zbKElYFCWyk&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/3jnWSWwRWH0&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/3jnWSWwRWH0&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>But better than that, it&#8217;s now out in the wild and you can try it for yourself on other people&#8217;s sites:</p>
<ul>
<li>Atlassian have installed it on their <a href="http://sandbox.onconfluence.com/display/SBOX/Google+Analytics">Confluence Sandbox</a></li>
<li><a href="http://twitter.com/schirmacher">Arne Schirmacher</a> has posted a <a href="http://www.schirmacher.de/display/INFO/Google+Analytics">live demo</a> on his Confluence site</li>
<li><a href="http://workspace.nottingham.ac.uk/display/~cczdas/Google+Analytics+reports">Another live demo</a> on my personal Confluence space (using 1.2-SNAPSHOT)</li>
</ul>
<h3>What next?</h3>
<ul>
<li><a href="https://plugins.atlassian.com/server/1.0/download/pluginVersion/16723">Download Google Analytics plugin for Confluence</a></li>
<li><a href="http://davidsimpson.me/2009/03/18/tracking-atlassian-confluence-usage-with-google-analytics/">Setup Google Analytics on your Confluence site</a></li>
</ul>
<p>If you&#8217;re using this plugin or have tried it out, I&#8217;d really like to know what you think of it.</p>
<ul>
<li>What improvements would you like made?</li>
<li>What reports are missing?</li>
<li>Where could the UI could be improved?</li>
</ul>
<p>Please post a comment if you&#8217;ve got it installed.</p>
<h3>Thanks</h3>
<p>I&#8217;d like to thank the Confluence community for their help mainly via <a href="http://forums.atlassian.com/">Atlassian Forums</a> and some Atlassians for helping me out when I got stuck &#8211; particularly <a href="http://twitter.com/sdh100shaun">Shaun Hare</a>, <a href="http://twitter.com/keibro">Keith Brophy</a>,  <a href="http://blogs.atlassian.com/news/jnolen/">Jonathan Nolen</a> and  <a href="http://forums.atlassian.com/profile.jspa?userID=2157">David Peterson</a>.</p>
<p>Image credit: <a href="http://www.iconspedia.com/icon/google-analytics--737.html">Google Analytics icon</a></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://davidsimpson.me/2010/01/02/announcing-google-analytics-plugin-for-confluence/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Changing boilerplate text in Confluence</title>
		<link>http://davidsimpson.me/2009/11/04/changing-boilerplate-text-in-confluence/</link>
		<comments>http://davidsimpson.me/2009/11/04/changing-boilerplate-text-in-confluence/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 20:18:47 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[confluence]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://davidsimpson.me/?p=399</guid>
		<description><![CDATA[We run Confluence with the (default) en_GB locale and language. For our purposes, some of the boilerplate text needs changing. This post describes how to solve this problem with a partial British English language pack that overrides only part of the Confluence interface text. The Atlassian website has a page on how to Modify Confluence [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton399" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fdavidsimpson.me%2F2009%2F11%2F04%2Fchanging-boilerplate-text-in-confluence%2F&amp;text=Changing%20boilerplate%20text%20in%20Confluence&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fdavidsimpson.me%2F2009%2F11%2F04%2Fchanging-boilerplate-text-in-confluence%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://davidsimpson.me/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;"></a></div><p>We run Confluence with the (default) en_GB locale and language.   For our purposes, some of the <a href="http://en.wikipedia.org/wiki/Boilerplate_(text)">boilerplate text </a>needs changing. This post describes how to solve this problem with a partial British English language pack that overrides only part of the Confluence interface text.<br />
<span id="more-399"></span><br />
The Atlassian website has a page on how to <a href="http://confluence.atlassian.com/display/DOC/Modify+Confluence+Interface+Text">Modify Confluence Interface Text</a></p>
<p><strong>The suggested steps are:</strong></p>
<ul>
<li>Get a file from the confluence-3.x.jar file</li>
<li>Place it here: <code>/confluence/WEB-INF/classes/com/atlassian/confluence/core/</code></li>
<li>Edit the text you wish to change</li>
<li>Restart Confluence</li>
</ul>
<p><strong>Some reasons I don&#8217;t think this method should not be used</strong></p>
<ul>
<li>I tried this, but couldn&#8217;t get it to work.  <em>OK, not really a proper reason.</em></li>
<li>This file will probably get wiped on upgrade. <em>I&#8217;m guessing.</em></li>
<li>You need to duplicate the whole file (7000+ lines), not just the changes.  <em>Not pretty.</em></li>
</ul>
<p>So what next?</p>
<h3>Create a partial language pack plugin</h3>
<p>Confluence uses en_GB by default. I want to use British English, but only have the overrides in my language pack.  I don&#8217;t want to do anything destructive to my Confluence installation.</p>
<p>It&#8217;s possible to create a (partial) language pack plugin for Confluence that only overrides part of the existing en_GB language.  My partial language pack will use the default terms from the confluence-3.x.jar file unless they are overridden.  My new language will be &#8220;Nottingham English&#8221; with a *two letter, uppercase* locale code &#8220;GB&#8221;.</p>
<h4>Steps</h4>
<p>Creating a <a href="http://confluence.atlassian.com/display/DOC/Language+Pack+Plugins">language pack</a> is really easy as there are only 3 files required.</p>
<p>Create the following directory structure:<br />
<img src="/wp-content/uploads/2009/11/lang-pack-structure.png" alt="Language Pack Directory Structure" title="Language Pack Directory Structure"  />	</p>
<h5>File descriptions</h5>
<p><code>atlassian-plugin.xml</code><br />
describes the language pack:</p>
<pre class="brush: xml; title: ;">&lt;atlassian-plugin name='Nottingham English language pack' key='confluence.languages.en_GB'&gt;
	&lt;plugin-info&gt;
		&lt;description&gt;&lt;![CDATA[For changes to boilerplate text that should persist after a Confluence upgrade.]]&gt;&lt;/description&gt;
        &lt;version&gt;1.0&lt;/version&gt;
        &lt;vendor name=&quot;David Simpson&quot; url=&quot;http://davidsimpson.me/&quot;/&gt;
	&lt;/plugin-info&gt;

	&lt;language name=&quot;Nottingham English&quot; key=&quot;en_GB&quot; language=&quot;en&quot; country=&quot;GB&quot;&gt;
		&lt;!-- Define a flag that will be shown for this language --&gt;
		&lt;resource name=&quot;en_GB.png&quot; type=&quot;download&quot; location=&quot;templates/languages/en_GB/en_GB.png&quot;&gt;
			&lt;property key=&quot;content-type&quot; value=&quot;image/png&quot;/&gt;
		&lt;/resource&gt;
	&lt;/language&gt;
&lt;/atlassian-plugin&gt;
</pre>
<p><code>ConfluenceActionSupport_en_GB.properties</code><br />
 is the override text for the language</p>
<pre class="brush: plain; title: ;">## Replace the Dashboard name/title
dashboard.name = Workspace Home
title.dashboard = Workspace Home

## Replace login instructions
login.instructions = Put yorn login details inta this eer form. 

## Add some Nottingham dialect (meaning hello)
default.welcome.message = Ayup Mi Duck

# Fix any accidental misinformation where Atlassian have changed features
no.favourite.pages=There are currently no pages on your favourites list.&lt;br/&gt;&lt;br/&gt;
        To add pages to this list
		&lt;ul&gt;
			&lt;li&gt;Click on &lt;b&gt;Tools&lt;/b&gt; (on the top right of the page you''re viewing)&lt;/li&gt;
			&lt;li&gt;Select &lt;b&gt;&lt;img src=&quot;{0}&quot;&gt; Watch&lt;/b&gt; from the menu&lt;/li&gt;
		&lt;/ul&gt;
</pre>
<p><code>en_GB.png</code><br />
 is the thumbnail.  Change this from the Union Jack flag so it can be distinguished from the flag for the default British English en_GB</p>
<h5>Build the plugin and install</h5>
<p>I&#8217;m developing this in <code>~/projects/confluence/language-en_GB_partial/</code> on my Mac, so to build the plugin:</p>
<pre>cd ~/projects/confluence/language-en_GB_partial/
jar cvf ../language-en_GB_partial.jar *</pre>
<p>Install the plugin in the usual way in Confluence at<br />
<strong>Confluence Admin | Plugins</strong></p>
<p>Select the new language from <strong>Confluence Admin | Language</strong></p>
<h3>Results</h3>
<p>Overall, I think it works well.  This is a pretty easy way to bundle up changes to the default Confluence text.</p>
<p><img src="/wp-content/uploads/2009/11/lang-pack-login.png" alt="Confluence Login Page" title="Confluence Login Page"  /></p>
<p><img src="/wp-content/uploads/2009/11/lang-pack-dashboard.png" alt="Confluence Dashboard" title="Confluence Dashboard" /></p>
<p>The Site Welcome Message can also easily be changed elsewhere too.<br />
Matt Hodges talks about this in his post &#8220;<a href="http://blogs.atlassian.com/confluence/2009/10/hidden-feature-bring-must-read-content-to-the-dashboard.html">Hidden Feature: Bring &#8216;Must Read&#8217; Content to the Dashboard</a>&#8220;.</p>
<h3>Upgrade path</h3>
<p>Atlassian will likely change the boilerplate text as new versions of the product are released, so it&#8217;s good to review your changes on upgrade.  </p>
<p>Steps:</p>
<ul>
<li>Revert language to British English </li>
<li>Check each item you&#8217;ve changed</li>
<li>Make any appropriate edits (if required)</li>
<li>Upload your new version of the language pack (if required)</li>
<li>Change language back to your own e.g. &#8220;Nottingham English&#8221;</li>
</ul>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://davidsimpson.me/2009/11/04/changing-boilerplate-text-in-confluence/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

