Wiki features implemented during Sprint Apr-11-2008

  • Developer: Uros
  • Leadership Sponsor: Roger Bly

Tasks

  • Will current MediaWiki? intergration meet our multi-tenant, multi-workspace name space requirements? (ANS: No)
  • Assess blinki wiki rendering engine, prototype wiki feature using this engine.

Reqirements

  • No seperate username and access permissions between project.net and wiki.
  • Wiki syntax required, WYSIWYG option nice to have.
  • Page name space must be unique to project workspace (e.g. Each workspace can have a wiki page named "ProjectObjective?".
  • All wiki pages can be accessed by a unique URI.

Apr-11-2008 Sprint User Stories

  1. The user clicks the "Wiki" link in the project workspace and one wiki page appears in the main Iframe (as it does now)
  2. The user clicks the "Modify" (triangle) icon on the toolbar to edit the wiki page.
  3. The user edits the wiki page by entering wikiText into an ExtJS TextArea? box (HTML TextArea? box is OK at first).
  4. When the user clicks the "Submit" button, his wikiText changes are displayed in HTML in the main Iframe.

This sprint steps performed: Integration of Bliki rendering engine

Summary

We want to provide a wiki tool within each project.net workspace. We also want to allow a wiki page to be added to any project.net object. The wiki service may be java based and tightly integrated to project.net or may be a separate product loosely integrated using web services. It would be nice if the wiki supports page-level access permission in such a way that project.net access security can be used to manage access permissions for the wiki page objects provided by the wiki. The wiki should be integrated with the project.net security and notification services. The wiki must be licensed under a mozilla-compatible open source license (LGPL, Mozilla, apache, BSD, etc.).

Sachin's Prototype using MediaWiki?

Things to Investigate

Tasks

  1. Finalize the selection of technology partner (Sachin and Roger)
  2. Implement Phase 1: Provide a traditional wiki tree as an optional tool within each workspace. Use project.net authentication and authorization. (Sachin)
  3. Phase 2: Provide the ability to link a wiki page to any object in the system.

Wiki Technologies

MediaWiki is the leading open wiki product used by wikipeadia and many others. http://www.mediawiki.org/wiki/MediaWiki Integration with the project.net application via web services may be possible. Integration with project.net authentication and authorization security needs to be investigated.

www.Alfresco.com has done some work to integrate their java CMS to MediaWiki. You might want to take at look at their approach. They have developed a PHP lib to integrate to MediaWiki. http://wiki.alfresco.com/wiki/PHP_SDK

Deki Wiki by MindTouch Open Garden http://wiki.opengarden.org/ -- is interesting for it's Web Services API.

A comparison of wiki features, markup, etc. http://www.wikimatrix.org/

Java Wikis

A list of Java based Wikis that can be a candidate for Java API-level integration. Based on the scope of work, research was done by Sachin (around Jan 2007) to identify list of Wiki candidates.

Here is the List of Wikis:

Tool nameWebsite urlLicenseTechnologyRemarks
Dekiwikihttp://wiki.mindtouch.com/Deki_Wiki
VeryQuickWikihttp://www.vqwiki.org/GNU Library or Lesser General Public License (LGPL)Works with tomcat. Written purely in jspsA lightweight application and has some plugin support also. Does not have page level access permission but I think during integration this can be enabled.
UseModjhttp://usemodj.sourceforge.net/GNU General Public License (GPL)Works with tomcat. Based on struts, velocityThis application is similar to the one discussed above
yaWikihttp://yawiki.jzonic.org/page/show.jzNone foundWorks with tomcat. Requires hibernate, spring, lucene, velocityIn addition to above this also has SOAP integration. Further it also has some inbuilt security feature. This looks more advanced than the other two.
Platypus Wikihttp://platypuswiki.sourceforge.net/GNU General Public License (GPL)Works with tomcat 5.xI am not able to view its online demo so cannot comment much.
Xwikihttp://www.xwiki.org/xwiki/bin/view/Main/WebHomeGNU Library or Lesser General Public License (LGPL)Works with tomcat 5.x, uses velocity, groovyThis looks like a rich application, it has page versioning, page level security, etc. Integration with other application does not seem easy though.
ButorWikihttp://www.butor.com/showpage.doGNU Library or Lesser General Public License (LGPL)Works with tomcat. Based on struts, uses luceneThis is a file based wiki, with no db needed. I feel this tool can be a good choice of integrating with project.net. It has access control, wiki search, versioning, statistics etc.
Elsie Wikihttp://elsie.sourceforge.net/ Apache Software License, Version 2.0. Works with tomcat 5.x, built on top of java content repository API. It uses some of the apache implementations to run wiki servicesThis again is a good application, and say it has a clean and clear architecture. This perhaps would make integration easy.
JAMWikihttp://jamwiki.org/GNU Library or Lesser General Public License (LGPL)Works with tomcat 5.x and supports db such as Oracle 10.2. Implemented using java/jspThe demo site looks OK. It does have an authentication module, but was not able to know about other features like versioning, search.
SnipSnaphttp://snipsnap.org/space/startGNU General Public License (GPL)Works with tomcatIt is a combine blog + wiki application. Has most of the required features like user management, search, versioning etc. It can act as a single application fo both wiki and blog. I am not sure on what it would take to integrate with project.net though

Experimental Integration with MediaWiki

As a proof of concept a simple integration with MediaWiki was done. What was achieved in this POC was that one could navigate any wiki site running on MediaWiki instance 1.12, using pnet application. The integration was achieved by the REST apis exposed by MediaWiki.

Important links provided by MediaWiki

1. http://www.mediawiki.org/wiki/Download_from_SVN

Since many of the REST apis used by pnet have been developed or are being developed as part of their 1.12 release only, and as this release has not been officially released, one has to download wiki from their svn servers. Above link tells you how to download and build wiki from svn. It also tells you how to upgrade the MediaWiki instances running on older releases to the new 1.12 release.

2. http://www.mediawiki.org/wiki/API

Lists the REST api's exposed by MediaWiki, which we would have to use to integrate pnet with any MediaWiki instance. Some of these apis have been used for the POC.

Integration Client

As mentioned above the integration follows the REST approach of web services, it is essential to write a java client, which would make calls to these APIs and present the result to the pnet application to be displayed on its pages. As a result an open source Java Wiki Bot Framework (http://sourceforge.net/projects/jwbf/) has been used for the java client. Since most of the apis are still under development, we have simply downloaded the source and made it available as part of pnet source. On that source we have made extensions to implement clients for some of the new APIs exposed by MediaWiki, but not implemented by the said framework.

Integration Approach

We have introduced a module wiki in the pnet application. We have also added a db property prm.project.wiki.isenabled, which if set as 1 would enable the wiki in pnet. The integration is chosen at project space. Under project space there would be a navigation link wiki, clicking on this link would navigate to the main page of the wiki as configured for that project. As for POC all project would navigate to global main page set under defaultsetting.properties. Later we would add main page field as part of project space object.

Thus every page would have its own wiki page, from where one can navigate to other wiki pages linked to that main page and at a later stage one would also be able to create new wiki pages or edit existing wiki pages using pnet console itself.

Refer: project.net wiki.JPG as the wiki page of project.net on http://en.wikipedia.org/wiki/Project.net

Default Integration Setup

As for POC we have integrated any standard pnet application to use the wikipedia http://en.wikipedia.org/ running on MediaWiki instance of version 1.12.
This is the part of defaultsettings.properties, that are needed to configure pnet to user wikipedia. One can modify these settings to connect to any other MediaWiki site.

wikiSiteHost=en.wikipedia.org
wikiSiteHost.seq=21
wikiSiteHost.example.1=localhost:8080
wikiSiteHost.example.2=en.wikipedia.org
wikiSiteHost.description=\
Specifies information for the url to be constructed to connect to third party media wiki.

wikiSiteProtocol=http
wikiSiteProtocol.seq=22
wikiSiteProtocol.example.1=http
wikiSiteProtocol.example.2=https

wikiApiSchema=w
wikiApiSchema.seq=23
wikiApiSchema.example.1=wiki
wikiApiSchema.example.2=w
wikiApiSchema.description=\
The schema name to connect to the REST apis provided by media wiki.\n\
The url constructed would be in form <wikiSiteProtocol>://<wikiSiteHost>/<wikiApiSchema>/api.php?

wikiSiteSchema=wiki
wikiSiteSchema.seq=24
wikiSiteSchema.example.1=wiki
wikiSiteSchema.description=\
The schema name to connect to the media wiki pages, hosted on the media wiki site.\
This schema name may be different from the api schema name.\n\

wikiRootPage=Project.net
wikiRootPage.seq=25
wikiRootPage.example.1=Main Page
wikiRootPage.example.2=Project.net
wikiRootPage.description=\
The page wiki should default to if enabled, for any project.\
Project would have to specify its own root page name to override this.\n\
This can be done while creating a project space or editing its properties.

All the property descriptions are explanatory to understand what has been configured and how one can use them.

Attachments