2013-04-25 Glen Mazza (glenmazza AT apache DOT org)

       * 2.9.1-incubating-4

       * Moved ini folders from etc/ and tests/etc to 
         Mavenized locations src/[main|test]/resources/ini
         
       * Updated build.xml and pom.xml for new ini source locations

2013-04-24 Glen Mazza (glenmazza AT apache DOT org)

       * 2.9.1-incubating-3

       * Moved JSPWiki source and test source to Mavenized locations
         
       * Updated build.xml and pom.xml for new JSPWiki source locations

2013-04-23  Dirk Frederickx (brushed AT apache DOT org)

       * 2.9.1-incubating-2

       * JSPWIKI-775, fixing "null" change-notes in PageInfo.jsp.

2013-04-21  Harry Metske <metskem@apache.org>

       * 2.9.1-incubating-1

       * fixed JSPWIKI-396): UTF-8 characters in wiki pages incorrectly rendered if served by Tomcat

2013-04-14 Glen Mazza (glenmazza AT apache DOT org)

       * Start of Selenium plugin (just testing prior to it moving into its own module)
         
       * Tomcat 5.x JSP precompilation option removed from build.xml

       * Selenium TestSuite.html tests renamed to CamelCase to allow export-to-Java to work.

2013-04-07  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.1-incubating-0
       
2013-04-04 Glen Mazza (glenmazza AT apache DOT org)

       * Updated pom.xml by removing Jaxen transitive dependencies and providing
         comments on how to deploy via tomcat7:run-war and tomcat7:redeploy

2013-04-02 Glen Mazza (glenmazza AT apache DOT org)

       * Removed apparently unused stripes library from WAR created by build.xml

       * Updated Maven WAR plugin to bring in WEB-INF artifacts: classes, JARs, etc.

2013-04-01 Glen Mazza (glenmazza AT apache DOT org)

       * Added YUICompressor Maven plugin into pom.xml to do the same compression
         done by the Ant build script to CSS and JS files in webdocs/scripts and /templates

       * Updated Maven WAR plugin to bring in the webdocs/scripts and /templates files.

2013-03-24 Glen Mazza (glenmazza AT apache DOT org)

       * Removed empty src/applets folder

       * More work on Maven WAR plugin configuration

2013-03-21  Juan Pablo Santos (juanpablo AT apache DOT org)

       * JSPWIKI-651: added m2e configuration to pom.xml
       
2013-03-20  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-31

       * fixed JSPWIKI-766): quick search not working anymore
       * "unfixed"  JSPWIKI-659 : NotSerializableException on Tomcat restart , UserManager not Serializable

2013-03-17  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-30

       * fixed JSPWIKI-765): lucene search returns 3 results at max, discovered by Dave Koelmeyer

2013-03-06 Glen Mazza (glenmazza AT apache DOT org)

       * Upgraded Maven's tomcat plugin to latest version 2.1

       * Placed in a more helpful error message in RCSFileProvider.java
         to let newbies know RCS needs to be installed on their machine

       * Updated location in build.xml and pom.xml for JSTL library.

2013-02-19  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.1-svn-29
       
       * JSPWIKI-764: ChangeLog published on site
       
       * Upgraded version of maven's tomcat plugin to latest available (JSPWIKI-651 related) 
       
2013-02-19  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.1-svn-28
       
       * JSPWIKI-762: Drop TranslatorReader
       
       * JSPWIKI-763: Requirement of at least Java 6 to build 
       
2013-02-15  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-27

       * changed test email addresses from example.com to mailinator.com

2013-02-14  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-26

       * changed test email addresses testville.com to example.com (reported by Tony Stevenson from infra)

2013-02-12  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-25
       
       * JSPWIKI-759 Resin 4 Compatibility (thanks to Paul Cowan)
       
       * build.xml tweak: shut down the Jetty test server after the last webtest

2013-02-08  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.1-svn-24
       
       * Decoupled (for 2.10 scope) Preferences from WikiContext, effectively meaning that the following 
         methods are now deprecated
           - WikiContext#getBundle( String ) in favour of Preferences#getBundle( WikiContext, String )
           - WikiContext#getLocale( WikiContext ) in favour of Preferences#getLocale( WikiContext )
           - WikiContext#hasAccess( HttpServletResponse ) in favour of 
             AuthorizationManager#hasAccess( HttpServletResponse )
           - WikiContext#hasAccess( HttpServletResponse, boolean ) in favour of 
             AuthorizationManager#hasAccess( HttpServletResponse, boolean )
             
       * Decoupled (for 2.10 scope) org.apache.wiki.event from org.apache.wiki.workflow, by deprecating
           - WorkflowEvent#getWorkflow() in favour of WikiEvent#getSrc()
             
       * Added latest pom.xml from JSPWIKI-651 - Convert JSPWiki to a Maven project. Check associated
         JIRA for details

2013-01-28  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-23
       
       * Dutch localization updates in follow up on JSPWIKI-143 and JSPWIKI-150

2013-01-28  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.1-svn-22
       
       * JSPWIKI-143: Unlocalized messages in user management
       
       * JSPWIKI-150: Unlocalized content at workflow's notification for creating a new user
       
       * Minor refactor to HsqlDbUtils init checks
       
       * deprecated 
           - JSPWikiMarkupParser.getImagePatterns( WikiEngine ) in favour of 
             WikiEngine.getAllInlinedImagePatterns()
           - UserManager.SaveUserProfileTask( WikiEngine ) in favour of 
             UserManager.SaveUserProfileTask( WikiEngine, Locale )

2013-01-27  Dirk Frederickx (brushed AT apache DOT org)

       * 2.9.1-svn-21
       
       * JSPWIKI-712, fixing entities encoding in change-note, author and link fields. 
         Part 2 : more fixes when adding page comments. (as pointed out by Harry)
         
       * Improved styling of form buttons, fixing presentation issues in Chrome.       

2013-01-26  Glen Mazza
       * Removed no longer needed StressTestRCSProvider.java,
         returned StressTestVersioningProvider to JUnit tests in build.xml

2013-01-26  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-20
       
       * JSPWIKI-758 - deprecate RCS support.
       
2013-01-24 Glen Mazza

       * Minor tweak to testSerialization() in AclImplTest so it will work with both Maven and Ant 
         running the test. 

2013-01-22 Glen Mazza

       * Fix for JSPWiki-396 (updated org/apache/wiki/util/UtilJ2eeCompat.java to
         use streaming instead of char array-based output to WebLogic.

2013-01-20  Dirk Frederickx (brushed AT apache DOT org)

       * 2.9.1-svn-19
       
       * JSPWIKI-712, fixing entities encoding in change-note, author and link fields. 

2013-01-15  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-18
       
       * fixed JSPWIKI-712  Entities in ChangeNote should be decoded when "keep editing"

2013-01-14  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-17
       
       * fixed JSPWIKI-659  NotSerializableException on Tomcat restart , UserManager not Serializable
         We now no longer put JSONRPCBridge in the HttpSession. Long term solution is to migrate to 
         jackson. 

2013-01-12 Glen Mazza (gmazza@apache.org)

       * Switched to a hardcoded jdbc.properties file for testing to simplify build.xml and future
         Maven conversion. Updated the developing pom.xml in JSPWIKI-651.

2013-01-10  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.1-svn-16
         
       * some additional changes regarding org.apache.wiki.api.engine.PluginManager (cfr. $SVN/trunk/doc/2.10-API.txt):
           - @Deprecated public void executeParse(PluginContent content, WikiContext context)
               + consider using PluginContent.executeParse(WikiContext) instead
           - WikiPlugin newWikiPlugin( String pluginName, ResourceBundle rb ) is now public and part 
             of the org.apache.wiki.api.engine.PluginManager API

2013-01-09  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.1-svn-15
       
       * fixed JSPWIKI-757 Have default file direction location be in relative directory instead of 
         hardcoded /p/dir1/dir2.If jspwiki.fileSystemProvider.pageDir in jspwiki.properties isn't
         provided, it will default to ${user.home}/jspwiki-files
         
       * new API package org.apache.wiki.api.engine, intended to hold WikiEngine, its managers and
         related classes. FilterManager and PluginManager moved there (cfr. JSPWIKI-155, JSPWIKI-303
         and $SVN/trunk/doc/2.10-API.txt).
       
       * org.apache.wiki.FileUtil and org.apache.wiki.TextUtil Moved to equivalent classes under 
         org.apache.wiki.util. Original classes marked with @Deprecated and forwarding to the new 
         ones until 2.10
 
       * deprecated WikiEngine.getRequiredProperty( props, key ) in favour of 
         TextUtil.getRequiredProperty( props, key ). The former will be deleted in 2.10 scope

2013-01-08 Glen Mazza (gmazza@apache.org)

       * JSPWIKI-756 removed unused Xalan, Xerces, and Custom-Rhino JARs

2013-01-06  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.1-svn-14
       
       * Global use of org.apache.wiki.api.exceptions.WikiException instead of org.apache.wiki.WikiException, 
         as part of JSPWiki API (cfr. JSPWIKI-303).
       
       * Corrected the displayed version of commons-httpclient, we are downloading 3.1, but it was 
         named 3.0.1 (it is needed to either delete commons-httpclient-3.0.1.jar or run ant 
         clean-deps to ensure that the old jar goes away)
       
       * Some minor refactors to expose generified collections at Acl and AclEntry, and adding 
         missing serialVersionUID at org.apache.wiki.workflow

2013-01-06  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-13
       
       * fixed JSPWIKI-533  proper handling of page deletes and renames for the Breadcrumb trail 

2013-01-06  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-12
       
       * fixed JSPWIKI-439 Localization of JSPWiki

2013-01-02  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-11
       
       * JSPWIKI-513 - Remove DAV support from JSPWiki

2013-01-01  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-10
       
       * webtests now also use HsqlDbUtils (just like the normal tests), also removed redundant
         hsqldb ant tasks from build.xml

2012-12-30  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-9

       * repaired broken webtests, we now have one (documented) failing webtest (RenameProfile
         for container managed auth).
         Required fixes:
           - TestContainer now binds the jdbc/UserDatabase jdbc/GroupDatabase in Jetty's namespace
           - Logout webtest checks for the specific JSPWikiAssertedName cookie
           - build.xml was missing a lot of tasks and macros, required to properly startup hsqldb (don't know how/why)
           - JDBCGroupDatabase : NamingExceptions do not have a cause, we now log the exception itself
           - removed the semicolon from the License in .ddl files (they cause syntax errors)
        
2012-12-26  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.1-svn-8
        
       * Filters API (org.apache.wiki.api.filters), as part of JSPWiki API (cfr. JSPWIKI-303). 
         Check UPGRADING document for details
         
       * Plugin API moved to its own sub-package, org.apache.wiki.api.plugin
         
       * explicit access to API interfaces to get rid of "cannot dereference error with 
         generics" errors at builds.a.o (cfr. http://stackoverflow.com/q/4144623)
       
2012-12-26  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-7
        
       * fixed JSPWIKI-663 (Christmas 2012 patch, thanks to Glen Mazza),
         Rename page - page index still shows attachment with old page name, also patched the 
         WikiPageRenameEvent handling code in PageViewPlugin 
 
2012-12-14  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.1-svn-6
        
       * initial commit for JSPWiki API (cfr. JSPWIKI-303), mostly focused on plugin API. Check
         UPGRADING document for details
        
2012-12-12  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-5
        
       * fixed JSPWIKI-742 NullPointerException in PriorityList (reported by Rakesh K. Cherukuri)
       
       * minor updates to build.xml to properly handle build failures (I am not an ant expert...)
 
 2012-12-09  Juan Pablo Santos (juanpablo AT apache DOT org)

       * Sonar Ant task executed even if there are tests failures
       
       * When building jspwiki.properties, jspwiki.baseURL defaults to http://localhost:8080/JSPWiki/
       
2012-12-08  Harry Metske <metskem@apache.org>

       * 2.9.1-svn-4
       
       * fixed JSPWIKI-754 Have PageViewPlugin work with page renames (thanks to Glen Mazza)
       
2012-12-06  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.1-svn-3
       
       * Added generics to WikiPlugin.execute( WikiContext, Map< String, String > ) 
       and propagated the change to all plugins. Cfr. with UPGRADING document for details.
       
2012-12-02   Harry Metske <metskem@apache.org>
       
       * 2.9.1-svn-2
       
       * fixed JSPWIKI-753 Consolidate TestEngine.deleteTestPage to single, non-static method (thanks to Glen Mazza)

2012-12-02   Harry Metske <metskem@apache.org>
       
       * 2.9.1-svn-1
       
       * fixed JSPWIKI-665 Page View Plugin and page renames and deletions (thanks to Glen Mazza)
       
 2012-11-22  Florian Holeczek (florianh AT apache DOT org)

       * version switch to 2.9.1-svn-0

2012-11-17  Juan Pablo Santos (juanpablo AT apache DOT org)

       * JSPWIKI-751: deleted guitests target
       
       * Upgraded Sonar Ant Tasks to 2.0

2012-11-01  Florian Holeczek (florianh AT apache DOT org)

       * 2.9.0-incubating (preparing release)
       
       * added generation of .sha1 checksum files

2012-10-30  Florian Holeczek (florianh AT apache DOT org)

       * moved doc/aaa-diagram.graffle to project management area

2012-10-28  Florian Holeczek (florianh AT apache DOT org)

       * 2.9.0-incubating-14

       * JSPWIKI-750: PageViewPluginTest is failing very often when using a JDK 7
       
       * minor documentation and logging fixes to PageViewPlugin

2012-10-22  Florian Holeczek (florianh AT apache DOT org)

       * several small fixes and improvements related to building and licensing stuff

2012-10-22  Florian Holeczek (florianh AT apache DOT org)

       * 2.9.0-incubating-13
       
       * fixed CommentedPropertiesTest, which broke because of the recent license header changes

2012-10-22  Florian Holeczek (florianh AT apache DOT org)

       * adjusted Ant target "rat-report"

       * added license headers to further files

2012-10-21  Juan Pablo Santos (juanpablo AT apache DOT org)
       
       * ensure correct information on cobertura reports.
       
2012-10-21  Florian Holeczek (florianh AT apache DOT org)

       * some further fixes to license headers

       * build improvements: checksum files in correct format, added SHA-512 hash

2012-10-20  Florian Holeczek (florianh AT apache DOT org)

       * some fixes for JSPWIKI-749 and CheckStyle version 5.6

2012-10-09  Juan Pablo Santos (juanpablo AT apache DOT org)
       
       * added Apache License Header to files which were missing it 
         (cfr. with http://s.apache.org/EDd).

2012-10-08  Juan Pablo Santos (juanpablo AT apache DOT org)
       
       * Added rat-report task. It requires at least Apache Ant 1.7.1, though.
       
       * .java files now conform strictly to Apache License Header (cfr. with 
         http://s.apache.org/EDd).

2012-09-25  Florian Holeczek (florianh AT apache DOT org)

       * no version bump

       * minor update to LICENSE file (YUI Compressor version number)

2012-09-23  Juan Pablo Santos (juanpablo AT apache DOT org)
       
       * upgraded Yui compressor to 2.4.7, 2.4.2 from Central is broken. Thanks to Peter Hormanns
         for noticing.
       
2012-09-18  Juan Pablo Santos (juanpablo AT apache DOT org)
       
       * tomcat jars downgraded to 5.5.23 so they can be downloaded from Central. Completes JSPWIKI-746
         and therefore closes JSPWIKI-744
         
       * jetty upgraded to 7.6.7.v20120910 and selenium-server downloaded from their site, to avoid 
         downloading anything from svn.apache.org during build time

2012-09-10   Harry Metske <metskem@apache.org>
       
       * 2.9.0-incubating-12
       
       * rewrote TestContainer to jetty version 7
       
       * upgraded to selenium-server-standalone-2.25.0.jar 

2012-09-06  Juan Pablo Santos (juanpablo AT apache DOT org)
       
       * 2.9.0-incubating-11
       
       * upgraded jrcs-diff to 0.4.2, as part of JSPWIKI-746
       
       * JSPWIKI-747: Dependencies currently unavailable at Central repo

2012-08-29  Juan Pablo Santos (juanpablo AT apache DOT org)
       
       * no version bump
       
       * JSPWIKI-745: Dependencies currently downloadable from Central repo
       
2012-08-09  Juan Pablo Santos (juanpablo AT apache DOT org)
       
       * 2.9.0-incubating-10
       
       * ant clean target cleans all generated files
       
       * junit reports are generated inside of ${tests.report} instead of inside ${tests.src}
       
       * dependencies are downloaded from Central repo whenever is possible, in order to avoid 
         the maintenance of a libraries' svn directory.
      
       * ${libs.opt} set to tests/libs-opt in order to avoid downloading of opt files every time a 
         clean is made
         
       * maven-ant-tasks aren't used to download opt-libs anymore
       
       * HSQL connections are handled inside the appropiate unit tests in order to ensure HSQL 
         server shutdown. Hypersonic is updated to 1.8.0.10 
      
       * added clean-deps target to remove all lib's directories. Useful to remove old jars
         if the dependencies get updated. This target needs to be run at least once to
         ensure that old jars don't remain in classpath
              
2012-07-22  Florian Holeczek (florianh AT apache DOT org)

       * 2.9.0-incubating-9
       
       * JSPWIKI-731: replaced some occurences of www.jspwiki.org by jspwiki.apache.org (XML namespaces)
       
       * some updates to release documentation

2012-07-20  Florian Holeczek (florianh AT apache DOT org)

       * 2.9.0-incubating-8
       
       * Several fixes and improvements for quite some localization resources. Special thanks go to Christophe Dupriez!

2012-07-18  Juan Pablo Santos (juanpablo AT apache DOT org)
       
       * 2.9.0-incubating-7
       
       * JSPWIKI-738: Dependencies should not be distributed with source archive
       
       * Small refactor in LuceneSearchProvider

2012-07-16  Florian Holeczek (florianh AT apache DOT org)

       * no version bump
       
       * synchronized windows to unix build files

2012-07-07  Dirk Frederickx (brushed AT apache DOT org)

       * 2.9.0-incubating-6
       
       * Fixing JSPWIKI-733 Box rounded corners missing in Firefox 13 for PlainVanilla skin elements etc.
         Add unprefixed border-radius and box-shadow to jspwiki.css. 
         (ref. https://bugzilla.mozilla.org/show_bug.cgi?id=693510   Gecko 2.0 dropped support for -moz-prefix.)
       
       * Fixing JSPWIKI-734 ShortURLConstructor causes Syntax Error when loading jspwiki-edit.js

2012-06-05  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.0-incubating-5, fixed JSPWIKI-737 IfPlugin negation doesn't work

2012-06-04  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.0-incubating-4, added support for cobertura reports and Sonar integration.

2012-06-08  Harry Metske <metskem@apache.org>

       * 2.9.0-incubating-3, fixed JSPWIKI-729 Update Lucene to current version  3.6.0

2012-06-06  Harry Metske <metskem@apache.org>

       * 2.9.0-incubating-2, fixed jsp compile error in rss.jsp ( we forgot one occurrence of com.ecyrd.jspwiki)

2012-05-02  Dirk Frederickx (brushed AT apache DOT org)

       * 2.9.0-incubating-1, fixing JSPWIKI-683 Sortable Tables.
       
       * second ASF release candidate build.

2012-04-21  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.0-incubating-0, first ASF release candidate build.

2012-04-18  Harry Metske <metskem@apache.org>

       * 2.9.0-svn-9
        
       * fixed JSPWIKI-726 drop the 2 case-sensitive tests in WikiEngineTest.testSpacedNames1
        
2012-04-14  Harry Metske <metskem@apache.org>

       * 2.9.0-svn-8
        
       * fixed JSPWIKI-725 Return to original page attachments list after deleting one attachment
        
2012-03-25  Juan Pablo Santos (juanpablo AT apache DOT org)
        
       * 2.9.0-svn-7
        
       * fixed JSPWIKI-722 Build broken under jdk 1.7

2012-02-22  Harry Metske <metskem@apache.org>

       * 2.9.0-svn-6
        
       * fixed JSPWIKI-721 Log FileNotFoundException on missing attachment

2012-02-12  Juan Pablo Santos (juanpablo AT apache DOT org)
        
       * 2.9.0-svn-5
        
       * small refactor on ClassUtil.getMappedObject: it uses varargs so we can take away 
         a couple of methods. Also /etc/ini/classmappings.xml file is fully populated with  
         all ClassUtil.getMappedObject calls 
        
2012-02-07  Juan Pablo Santos (juanpablo AT apache DOT org)
        
       * tests are now part of the main build. Also, they can be desactivated through 
         jspwiki.test.skip property (i.e.: ant clean dist -Djspwiki.test.skip=true)
        
2012-02-06  Juan Pablo Santos (juanpablo AT apache DOT org)

       * 2.9.0-svn-4
       
       * taken back <signeddist/> goal from 3.0 branch in order to be able to accomplish 
         JSPWIKI-557
       
2012-02-01  Harry Metske <metskem@apache.org>

       * 2.9.0-svn-3
       
       * fixed JSPWIKI-719 (plugin compatibility with com.ecyrd.jspwiki)
       
       * draft ReleaseNotes

2012-01-29  Florian Holeczek <florianh@apache.org>

       * 2.9.0-svn-2
       
       * corrected some minor errors which emerged from package renaming

2012-01-25  Harry Metske <metskem@apache.org>

       * 2.9.0-svn-1
       
       * release bump because of package rename
