 | This plugin is more of a platform for development and showing what is possible – with some better documentation / examples, I'm sure the reports could be enhanced to provide improved stats. |
Description/Features
Primarily as a proof of concept, this plugin shows what I've found you can do with FishEye plugins – hopefully this will help and encourage more developers to dive in and see what they can do.
I am writing up my experiences as a Diary of a FishEye Hacker (and part 2), which includes suggestions to the FishEye developers and 3rd party developers alike.
Here's the general summary:
- Be prepared to be frustrated, very frustrated. There is no documentation or source and the 2 examples won't be much use. FishEye is so not ready for you to plugin to.
- If your a little crazy and very persistent, you can plugin your own XWork actions.
- I did not find a clean way to change the classloading for JSPs or Velocity files - so resources should go into somewhere unique in $FISHEYE_INST/content
- If you're careful, you can build your own ContainerManager / ComponentManager (as found in Confluence / JIRA)
- There is no decoration and JSP tags & includes are used heavily - I've not found it practical to try to reuse these components.
- There are no UI hooks outside of the Admin area, so if you're hoping to add a tab, or add a widget, or add a block somewhere from a plugin - think again.
- While the StateAware interface exists for plugins to use, no plugin module respects it.
Moral of this adventure?
If at first you don't succeed, grab a few beers. It helps prevent the throwing of laptop in anger effect.
I hope my code serves as a useful example and platform for bigger & better things, and my write up serves as a nudge (or kick up the ass) for the FishEye developers to make the API & plugin subsystem properly usable.
Why not just use Servlets?
Well, as anyone who is used to writing plugin actions in Confluence / JIRA should tell you, writing raw servlets is laborious. WebWork/XWork gives you a lot for free:
- You get a command pattern implementation.
- You can build your own actions & results, just like xwork/webwork1 plugins in Confluence/JIRA.
- Your actions are wired and incoming parameters converted.
- You get an OGNL stack for use, almost transparently.
- You get a validation framework at your disposal.
- You can add your own interceptors and result types in addition to the given ones.
- You can build you actions in an openly testable way.
In short, you can build your plugins smaller, simpler and quicker, leading to more testable and maintainable code.
Usage
Simply navigate to /devreport/home.do, where / is the root of your FishEye installation.
Using /fisheye/ as your context is pretty standard, so you may need to use http://www.domain.dom/fisheye/devreport/home.do.
Installation
- Copy the developer-report-plugin-xxx.jar to the var/plugins folder
- Restart FishEye (you might get away with reloading the plugins in the Admin UI, but I wouldn't recommend it)
Uninstallation
Please note that this plugin does some fairly hefty things, such as:
- It burrows it's way through Spring
- It tinkers with class loaders
- It rewrites the XWork/WebWork configuration
- It hijacks XWork object creation
- It extracts it's resources into $FISHEYE_INST/content/devreport
All of theses will be reverted by simply removing the plugin and restarting FishEye, with the notable exception of:
- You may wish to delete the $FISHEYE_INST/content/devreport folder
TODO List
| State |
Task |
|
Fix up the report (it needs sorting and limiting) |
|
Write some tests (model + action tested) |
|
Find some Valium |
Version History
1.0 - Initial Version
Screenshots
Screenshots
|
|
|
|
Example Report
|
Setup Form
|
Other Adaptavist Entries
Attachment Download Plugin
— Adds a servlet so you can download attachments from a page without needing to know the ID.
|
Custom News
— An alternative to Confluence's blog posts macro to aid with customisation
|
Developer Report Plugin
— Primarily as a proof of concept, this plugin shows what I've found you can do with FishEye plugins – hopefully this will help and encourage more developers to dive in and see what they can do.
|
Insert Picture Plugin
— A in-place image management widget for Confluence to help with image attachment manipulation
|
JIRA Visitor Plugin
— If you've ever found yourself commenting simultaneously as someone else with the same information, or been faced with the dreaded "workflow has already changed" message, or just thought "I wonder if anyone else is viewing this issue right now" - then this is for you.
|
Plugin Message Client
— A library which when included as an extracted dependancy will allow java communication between the classloaders of the installed plugins
|
Ranking Macro
— Yet another macro for voting/rating/ranking pages, this one is uniquely different to the others by providing a macro for ranking pages with a 'was this page useful' style approach, tracking only positive answers
|
Statistical Analysis Plugin
— Confluence has lacked a cluster-ready, enterprise scaleable, remotely accessible statistically gathering and analysis plugin ... not any more!
|
Synonym Plugin
— A search extractor for Confluence to inject synonyms for acronyms, words or phrases into the index to aid with searching
|
User Security Management Plugin
— An enhancement for the Confluence user management system, to prompt better security practices - including email verification and admin vetting of signups
|
Comments (5)
May 08
Ferenc Kiss says:
Hi Dan! Nice stuff. I'd love to read more about your FE plugin dev experience, b...Hi Dan! Nice stuff. I'd love to read more about your FE plugin dev experience, but the links to your blog posts require signing in. Is it possible to open those to the public?
May 08
Dan Hardiker says:
Done! Sorry about that. It should have been public.Done! Sorry about that. It should have been public.
May 08
Dan Hardiker says:
I've added some tests, but they are in trunk rather than v1.0 (as the resulting ...I've added some tests, but they are in trunk rather than v1.0 (as the resulting jar hasn't changed I've not released a new version).
Jun 02
Matt Quail says:
Hi Dan, great plugin! It looks like you are using a couple of method calls in F...Hi Dan, great plugin!
It looks like you are using a couple of method calls in FishEye that changed between 1.5.1 and 1.5.2.
For example, the AppConfig.getInstanceHome() call moved to AppConfig.getInstanceDir();
=Matt Quail
FishEye Tech Lead
Jun 20
Bruno Blaise says:
Hi, I'm trying to use this plugin with FishEye 1.5.2 and it fails with the foll...Hi,
I'm trying to use this plugin with FishEye 1.5.2 and it fails with the following message.
Can you help me?
Bruno
Add Comment