Release Notes for XWiki 12.9

Last modified by Manuel Leduc on 2023/04/12

This is the release notes for XWiki Commons, XWiki Rendering and XWiki Platform. They share the same release notes as they are released together and have the same version.

This release brings improved display of liked pages and users who like pages, usability improvements when changing page syntax, finer configuration options for skipping the recycle bin and a new and improved Ratings API.

Some important bugs have been discovered since XWiki 12.9 has been released:

If one or several of these bugs impact you, then you should wait for the next version to been released.

New and Noteworthy (since XWiki 12.8)

Full list of issues fixed and Dashboard for 12.9.

For Users

Like information are displayed in a live table

 
People liking a page are now displayed in a live table.

Liked pages are displayed in a LiveTable

 
Liked pages are now displayed in a live table in the user profile.

Changing Page Syntax from Wiki Editor

 
Changing the page syntax from the Wiki Editor has suffered some updates:

  • the style of the syntax conversion confirmation modal has been improved to be consistent with the other modals we use in XWiki
  • the syntax conversion is not saved right away anymore but when you save the Wiki Editor; canceling the Wiki Editor will also cancel any unsaved syntax change
  • XWiki will warn you when the syntax conversion is not supported

Checkout the Page Editing documentation for additional information.

Changing Page Syntax from WYSIWYG Editor

 
Changing the page syntax from the WYSIWYG Editor has suffered some updates:

  • we don't reload the entire page anymore but only the WYSIWYG editor instance (in order to take into account the new syntax); the WYSIWYG editor has to be reloaded because the page syntax affects core editor configuration that cannot be changed on the fly (see the CKEditor Integration documentation for more information);
  • the WYSIWYG editor is always reloaded when changing the syntax, no matter whether you choose to convert the content or not (for the reason mentioned above)
  • the editing mode (Source vs. WYSIWYG) is preserved on reload
  • if the new syntax doesn't support WYSIWYG editing (e.g. because it doesn't have a renderer) then the WYSIWYG editor will force the Source mode after the reload and disable the WYSIWYG mode, warning the user about the current limitation.

Checkout the Page Editing documentation for additional information.

Changing Page Syntax from View

 
Changing the page syntax from the Information tab, while viewing the page, has suffered some updates:

  • XWiki will now propose to convert the page content and meta data to the new syntax, if the conversion is supported, but note that the changes will be saved only after saving the syntax
  • if the syntax conversion is not supported then XWiki will warn the user about the limitation
  • the page title and content are reloaded in order to allow the user to preview the effect of the syntax change before saving the new syntax
  • canceling the syntax change will also reload the page title and content

For Admins

Finer configuration of the "can skip the recycle bin" feature

 
Allowing Advanced user to skip the recycle bin can now be configured on three locations:

  • In the global administration of the current wiki
  • In the global administration of the main wiki
  • In xwiki.properties (see the property details below)

If the default value is found on one location, the next one is tried. If no value is found, the recycle bin skipping is not activated.

Details of the configuration on xwiki.properties:

#-# [Since 12.9RC1]
#-# Indicates whether skipping the recycle bin when deleting pages is allowed for Advanced users.
#-# It is disabled by default.
#-# This setting is only used if the wiki has a recycle bin activated (xwiki.recyclebin=1 in xwiki.cfg).
#-# This setting can be overloaded:
#-# * By the main wiki in the Refactoring.Code.RefactoringConfigurationClass class of the
#-#   Refactoring.Code.RefactoringConfiguration document of the main wiki.
#-# * By sub-wikis in the Refactoring.Code.RefactoringConfigurationClass class of the
#-#   Refactoring.Code.RefactoringConfiguration document of the sub-wikis (itself overloading the main wiki's
#-#   configuration).
#-#
#-# The default value is:
# refactoring.isRecycleBinSkippingActivated = false

Miscellaneous

For Developers

Async Rendering improvements

 
When the context document is selected in an asynchronous rendering execution it's also added to "used" entities. That means that if that document is modified the cache result will be invalidated automatically. 

Provide a new API for Ratings

 
The Ratings API has been rewritten in order to support new use-cases, such as performing rates on different kinds of elements (not only pages) but also using different scales for ratings. This works leads to breaking the existing Ratings API: the Rating Application is automatically supported (you just have to update the extension) but if you used directly the Ratings API for some custom extensions you might be interested about this small guide for migrating it.

Miscellaneous

  • URLTool improvement: A new toURL(String) has been added to the Velocity $urltool to convert a String to an URL object.

Upgrades

The following runtime dependencies have been upgraded (they have a different release cycle than XWiki Commons, XWiki Rendering and XWiki Platform):

Translations

The following translations have been updated:

Tested Browsers & Databases

Here is the list of browsers we support and how they have been tested for this release:

 BrowserTested on:
Chrome30.pngGoogle Chrome 86Not Tested
Firefox30.pngMozilla Firefox 81Jira Tickets Marked as Fixed in the Release Notes
Edge30.pngMicrosoft Edge 86Not Tested
IE30.pngInternet Explorer 11Not Tested
Safari30.pngSafari 14Not Tested

Here is the list of databases we support and how they have been tested for this release:

 DatabaseTested on:
hypersql.pngHyperSQL 2.5.1Not Tested
mysql.pngMySQL 8Not Tested
oracle.pngOracle 19cJira Tickets Marked as Fixed in the Release Notes
postgresql.pngPostgreSQL 12Not Tested
mariadb.pngMariaDB 10.5Not Tested

Here is the list of Servlet Containers we support and how they have been tested for this release:

 Servlet ContainerTested on:
tomcat-icon.pngTomcat 9.0.39Jira Tickets Marked as Fixed in the Release Notes
jetty-icon.pngJetty 9.4.29 (XWiki Standalone packaging)Not Tested 
jetty-icon.pngJetty 9.4.29Not Tested

Known issues

Backward Compatibility and Migration Notes

General Notes

  • When upgrading make sure you compare and merge the following XWiki configuration files since some parameters may have been modified, removed or added:
    • xwiki.cfg
    • xwiki.properties
    • web.xml
    • hibernate.cfg.xml
  • Add xwiki.store.migration=1 in xwiki.cfg so that XWiki will attempt to automatically migrate your current database to any new schema. Make sure you backup your Database before doing anything.

Issues specific to XWiki 12.9

Ratings API

The Ratings API have been rewritten in order to support more usecases, but we voluntarily broke the backward compatibility when doing so. If you are upgrading from XWiki 12.7RC1 or after, or from an XWiki version on which Ratings Application is installed, you might see some logs like that at first restart:

2020-10-16 17:39:53,897 [main] WARN  ltInstalledExtensionRepository - Invalid extension [org.xwiki.platform:xwiki-platform-distribution-flavor-mainwiki/12.8] on namespace [wiki:xwiki] (InvalidExtensionException: Dependency [org.xwiki.platform:xwiki-platform-oldcore-[12.8]] is incompatible with the core extension [org.xwiki.platform:xwiki-platform-oldcore/12.9-SNAPSHOT])
2020-10-16 17:39:53,897 [main] WARN  ltInstalledExtensionRepository - Invalid extension [org.xwiki.platform:xwiki-platform-ratings-api/12.8] (InvalidExtensionException: Extension [org.xwiki.platform:xwiki-platform-ratings-api/12.8] already exists as a core extension)
2020-10-16 17:39:54,486 [main] ERROR .i.DefaultExtensionInitializer - Failed to initialize local extension [org.xwiki.platform:xwiki-platform-like-api/12.8]
java.lang.NoClassDefFoundError: org/xwiki/ratings/internal/SeparatePageRatingsManager
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
 at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
 at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
 at org.xwiki.component.annotation.ComponentAnnotationLoader.getComponentsDescriptors(ComponentAnnotationLoader.java:161)
 at org.xwiki.component.annotation.ComponentAnnotationLoader.register(ComponentAnnotationLoader.java:217)
 at org.xwiki.component.annotation.ComponentAnnotationLoader.initialize(ComponentAnnotationLoader.java:138)
 at org.xwiki.extension.jar.internal.handler.JarExtensionHandler.loadComponents(JarExtensionHandler.java:251)
 at org.xwiki.extension.jar.internal.handler.JarExtensionHandler.install(JarExtensionHandler.java:183)
 at org.xwiki.extension.jar.internal.handler.JarExtensionHandler.initialize(JarExtensionHandler.java:144)
 at org.xwiki.extension.handler.internal.DefaultExtensionHandlerManager.initialize(DefaultExtensionHandlerManager.java:154)
 at org.xwiki.extension.handler.internal.DefaultExtensionInitializer.initializeExtensionInNamespace(DefaultExtensionInitializer.java:178)
 at org.xwiki.extension.handler.internal.DefaultExtensionInitializer.initializeExtensionInNamespace(DefaultExtensionInitializer.java:151)
 at org.xwiki.extension.handler.internal.DefaultExtensionInitializer.initializeExtension(DefaultExtensionInitializer.java:126)
 at org.xwiki.extension.handler.internal.DefaultExtensionInitializer.initialize(DefaultExtensionInitializer.java:104)
 at org.xwiki.extension.handler.internal.DefaultExtensionInitializer.initialize(DefaultExtensionInitializer.java:80)
 at org.xwiki.component.embed.InitializableLifecycleHandler.handle(InitializableLifecycleHandler.java:39)
 at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:365)
 at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)
 at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)
 at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:189)
 at org.xwiki.container.servlet.XWikiServletContextListener.contextInitialized(XWikiServletContextListener.java:115)
 at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:1002)
 at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:553)
 at org.eclipse.jetty.server.handler.ContextHandler.contextInitialized(ContextHandler.java:931)
 at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:764)
 at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:360)
 at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1445)
 at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1409)
 at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:844)
 at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:275)
 at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:524)
 at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72)
 at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:46)
 at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:188)
 at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:513)
 at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:154)
 at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:173)
 at org.eclipse.jetty.deploy.providers.WebAppProvider.fileAdded(WebAppProvider.java:447)
 at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:66)
 at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:784)
 at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:753)
 at org.eclipse.jetty.util.Scanner.scan(Scanner.java:641)
 at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:540)
 at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72)
 at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:146)
 at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72)
 at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:599)
 at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:249)
 at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72)
 at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169)
 at org.eclipse.jetty.server.Server.start(Server.java:408)
 at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:117)
 at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:97)
 at org.eclipse.jetty.server.Server.doStart(Server.java:372)
 at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72)
 at org.eclipse.jetty.xml.XmlConfiguration.lambda$main$1(XmlConfiguration.java:1929)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1878)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.eclipse.jetty.start.Main.invokeMain(Main.java:218)
 at org.eclipse.jetty.start.Main.start(Main.java:491)
 at org.eclipse.jetty.start.Main.main(Main.java:77)
Caused by: java.lang.ClassNotFoundException: org.xwiki.ratings.internal.SeparatePageRatingsManager
 at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
 ... 73 common frames omitted

If not nice, those errors are expected: they are showing that our internal Extension Manager found that the Ratings API compatibility was broken. This error will prevent using the Ratings Application or the Like Application until you have completely performed the upgrade. 

During the upgrade, you will be proposed to remove the old Ratings API extension: keep the default value for it (it should be checked) to avoid any inconsistency. 

Also note that at first start, a data migration of Ratings and Likes will be performed, you might see some logs like that:

2020-10-16 17:40:31,319 [XWiki initialization] INFO  .HibernateDataMigrationManager -   R120901000XWIKI17761 - Move old Ratings XObject to the default Solr rating store.
2020-10-16 17:40:31,319 [XWiki initialization] INFO  .HibernateDataMigrationManager - Checking Hibernate mapping and updating schema if needed for wiki [xwiki]
2020-10-16 17:40:31,508 [XWiki initialization] INFO  .HibernateDataMigrationManager - Starting data migration [R120901000XWIKI17761] with version [120901000] on database [xwiki]
2020-10-16 17:40:31,633 [XWiki initialization] INFO  0901000XWIKI17761DataMigration - [5] pages containing ratings xobjects have been found: those objects will be migrated to the new storage system and will be removed. The pages holding those xobjects will remain
2020-10-16 17:40:35,869 [XWiki Solr index thread] INFO  .HibernateDataMigrationManager - Storage schema updates and data migrations are enabled
2020-10-16 17:40:36,415 [XWiki initialization] INFO  0901000XWIKI17761DataMigration - All pages have been handled to migrate their Ratings xobject. Total: [5] pages handled and [5] xobjects migrated.
2020-10-16 17:40:36,415 [XWiki initialization] INFO  0901000XWIKI17761DataMigration - Starting recomputation of average ratings on rated pages for consistency of data.
2020-10-16 17:40:37,088 [XWiki initialization] INFO  0901000XWIKI17761DataMigration - Average ratings have been recomputed on all [4] pages.
2020-10-16 17:40:37,089 [XWiki initialization] INFO  0901000XWIKI17761DataMigration - Starting migration of Likes information to the Ratings Solr Core.
2020-10-16 17:40:37,100 [XWiki initialization] INFO  SolrDocumentMigration120900000 - [2] like information migrated.
2020-10-16 17:40:37,175 [XWiki initialization] INFO  0901000XWIKI17761DataMigration - The migration is now finished.
2020-10-16 17:40:37,178 [XWiki initialization] INFO  .HibernateDataMigrationManager - Data migration [R120901000XWIKI17761] applied successfully, database [xwiki] upgraded to version [120901000] 

Finally if you have a custom extension or custom scripts using the Ratings API, you will be interested about this migration guide.

API Breakages

The following APIs were modified since XWiki 12.8:

  • Should not cause any retro compatibility issue in practice
    • Violation type:
      java.class.nonFinalClassInheritsFromNewClass
    • Code:
      ## Old:
      class org.xwiki.extension.wrap.WrappingCoreExtension<T extends org.xwiki.extension.CoreExtension>

      ## New:
      class org.xwiki.extension.wrap.WrappingCoreExtension<T extends org.xwiki.extension.CoreExtension>
  • Should not cause any retro compatibility issue in practice
    • Violation type:
      java.class.nonFinalClassInheritsFromNewClass
    • Code:
      ## Old:
      class org.xwiki.extension.wrap.WrappingExtension<E extends org.xwiki.extension.Extension>

      ## New:
      class org.xwiki.extension.wrap.WrappingExtension<E extends org.xwiki.extension.Extension>
  • Should not cause any retro compatibility issue in practice
    • Violation type:
      java.class.nonFinalClassInheritsFromNewClass
    • Code:
      ## Old:
      class org.xwiki.extension.wrap.WrappingInstalledExtension<E extends org.xwiki.extension.InstalledExtension>

      ## New:
      class org.xwiki.extension.wrap.WrappingInstalledExtension<E extends org.xwiki.extension.InstalledExtension>
  • Should not cause any retro compatibility issue in practice
    • Violation type:
      java.class.nonFinalClassInheritsFromNewClass
    • Code:
      ## Old:
      class org.xwiki.extension.wrap.WrappingLocalExtension<T extends org.xwiki.extension.LocalExtension>

      ## New:
      class org.xwiki.extension.wrap.WrappingLocalExtension<T extends org.xwiki.extension.LocalExtension>
  • Should not cause any retro compatibility issue in practice
    • Violation type:
      java.class.nonFinalClassInheritsFromNewClass
    • Code:
      ## Old:
      class org.xwiki.extension.wrap.WrappingRatingExtension<T extends org.xwiki.extension.rating.RatingExtension>

      ## New:
      class org.xwiki.extension.wrap.WrappingRatingExtension<T extends org.xwiki.extension.rating.RatingExtension>
  • Should not cause any retro compatibility issue in practice
    • Violation type:
      java.class.nonFinalClassInheritsFromNewClass
    • Code:
      ## Old:
      class org.xwiki.extension.wrap.WrappingRemoteExtension<T extends org.xwiki.extension.RemoteExtension>

      ## New:
      class org.xwiki.extension.wrap.WrappingRemoteExtension<T extends org.xwiki.extension.RemoteExtension>
  • Source breakage but not a backward compatible one. We consider it's acceptable
    • Violation type:
      java.class.noLongerInheritsFromClass
    • Code:
      ## Old:
      class org.xwiki.rendering.wikimodel.xhtml.impl.LocalEntityResolver

      ## New:
      class org.xwiki.rendering.wikimodel.xhtml.impl.LocalEntityResolver
  • Source breakage but not a backward compatible one. We consider it's acceptable
    • Violation type:
      java.class.nonFinalClassInheritsFromNewClass
    • Code:
      ## Old:
      class org.xwiki.rendering.wikimodel.xhtml.impl.LocalEntityResolver

      ## New:
      class org.xwiki.rendering.wikimodel.xhtml.impl.LocalEntityResolver
  • Source breakage but not a backward compatible one. We consider it's acceptable
    • Violation type:
      java.class.nonFinalClassInheritsFromNewClass
    • Code:
      ## Old:
      class org.xwiki.rendering.wikimodel.xhtml.impl.LocalEntityResolver

      ## New:
      class org.xwiki.rendering.wikimodel.xhtml.impl.LocalEntityResolver
  • Unstable API: not breaking.
    • Violation type:
      java.method.returnTypeChanged
    • Code:
      ## Old:
      method org.xwiki.like.LikedEntity org.xwiki.like.LikeManager::getEntityLikes(org.xwiki.model.reference.EntityReference) throws org.xwiki.like.LikeException

      ## New:
      method long org.xwiki.like.LikeManager::getEntityLikes(org.xwiki.model.reference.EntityReference) throws org.xwiki.like.LikeException
  • Unstable API: not breaking.
    • Violation type:
      java.method.addedToInterface
    • Code:
      ## Old:


      ## New:
      method java.util.List<org.xwiki.user.UserReference> org.xwiki.like.LikeManager::getLikers(org.xwiki.model.reference.EntityReference, int, int) throws org.xwiki.like.LikeException
  • Unstable API: not breaking.
    • Violation type:
      java.method.numberOfParametersChanged
    • Code:
      ## Old:
      method java.util.List<org.xwiki.like.LikedEntity> org.xwiki.like.LikeManager::getUserLikes(org.xwiki.user.UserReference) throws org.xwiki.like.LikeException

      ## New:
      method java.util.List<org.xwiki.model.reference.EntityReference> org.xwiki.like.LikeManager::getUserLikes(org.xwiki.user.UserReference, int, int) throws org.xwiki.like.LikeException
  • Unstable API: not breaking.
    • Violation type:
      java.method.returnTypeChanged
    • Code:
      ## Old:
      method org.xwiki.like.LikedEntity org.xwiki.like.LikeManager::saveLike(org.xwiki.user.UserReference, org.xwiki.model.reference.EntityReference) throws org.xwiki.like.LikeException

      ## New:
      method long org.xwiki.like.LikeManager::saveLike(org.xwiki.user.UserReference, org.xwiki.model.reference.EntityReference) throws org.xwiki.like.LikeException
  • Unstable API: not breaking.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      interface org.xwiki.like.LikedEntity
  • Unstable API: not breaking.
    • Violation type:
      java.method.numberOfParametersChanged
    • Code:
      ## Old:
      method java.util.List<org.xwiki.like.LikedEntity> org.xwiki.like.script.LikeScriptService::getUserLikes(org.xwiki.user.UserReference)

      ## New:
      method java.util.List<org.xwiki.model.reference.EntityReference> org.xwiki.like.script.LikeScriptService::getUserLikes(org.xwiki.user.UserReference, int, int)
  • Redesign of Ratings API: this class has actually been moved to org.xwiki.ratings.events.AbstractRatingEvent but deeply changed internally.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      class org.xwiki.ratings.AbstractRatingEvent
  • Redesign of Ratings API: Several new methods have been added to AverageRating class.
    • Violation type:
      java.method.addedToInterface
    • Code:
      ## Old:


      ## New:
      method .+ org.xwiki.ratings.AverageRating::.+
  • Redesign of Ratings API: This method has been removed since it should be handled by a dedicated manager and not there.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method void org.xwiki.ratings.AverageRating::save() throws org.xwiki.ratings.RatingsException
  • Redesign of Ratings API: this interface now only provide getters.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method void org.xwiki.ratings.AverageRating::set.+
  • Redesign of Ratings API: this method is no longer needed with the new architecture.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method java.lang.String org.xwiki.ratings.AverageRating::getMethod()
  • Redesign of Ratings API: only the AverageRating interface should now be used.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      class org.xwiki.ratings.AverageRatingApi
  • Redesign of Ratings API: this class is useless with the new architecture.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      interface org.xwiki.ratings.ConfiguredProvider<T>
  • Redesign of Ratings API: this class is useless with the new architecture.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      class org.xwiki.ratings.ConfiguredRatingsManagerProvider
  • Redesign of Ratings API: the reputation is no longer supported by this extension.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      class org.xwiki.ratings.ConfiguredReputationAlgorithmProvider
  • Redesign of Ratings API: this method is not directly related to rating.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method java.lang.String org.xwiki.ratings.Rating::display(java.lang.String, java.lang.String)
  • Redesign of Ratings API: this method was too generic for this API.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method java.lang.Object org.xwiki.ratings.Rating::get(java.lang.String)
  • Redesign of Ratings API: this method implied that Rating were always stored as xobject which is not always true.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method com.xpn.xwiki.objects.BaseObject org.xwiki.ratings.Rating::getAsObject() throws org.xwiki.ratings.RatingsException
  • Redesign of Ratings API: Following our new User API practice, a user is represented by a UserReference.
    • Violation type:
      java.method.returnTypeChanged
    • Code:
      ## Old:
      method org.xwiki.model.reference.DocumentReference org.xwiki.ratings.Rating::getAuthor()

      ## New:
      method org.xwiki.user.UserReference org.xwiki.ratings.Rating::getAuthor()
  • Redesign of Ratings API: Rating interface expose now new data that are available through the interface.
    • Violation type:
      java.method.addedToInterface
    • Code:
      ## Old:


      ## New:
      method .+ org.xwiki.ratings.Rating::.+
  • Redesign of Ratings API: two dates are now available, the creation date and the last update date.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method java.util.Date org.xwiki.ratings.Rating::getDate()
  • Redesign of Ratings API: Rating is now not only for documents but for any entity. See Rating#getReference().
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method org.xwiki.model.reference.DocumentReference org.xwiki.ratings.Rating::getDocumentReference()
  • Redesign of Ratings API: there is now a unique ID available with Rating#getId().
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method java.lang.String org.xwiki.ratings.Rating::getGlobalRatingId()
  • Redesign of Ratings API: there is now a unique ID available with Rating#getId().
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method java.lang.String org.xwiki.ratings.Rating::getRatingId()
  • Redesign of Ratings API: this API is now handled only through the RatingsManager.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method boolean org.xwiki.ratings.Rating::remove() throws org.xwiki.ratings.RatingsException
  • Redesign of Ratings API: this API is now handled only through the RatingsManager.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method void org.xwiki.ratings.Rating::save() throws org.xwiki.ratings.RatingsException
  • Redesign of Ratings API: Only getters are now available in this interface.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method void org.xwiki.ratings.Rating::set.+
  • Redesign of Ratings API: RatingsConfiguration now defines configuration methods for Ratings. Check out the documentation.
    • Violation type:
      java.method.addedToInterface
    • Code:
      ## Old:


      ## New:
      method .+ org.xwiki.ratings.RatingsConfiguration::.+
  • Redesign of Ratings API: RatingsConfiguration now defines configuration methods for Ratings. Check out the documentation.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method com.xpn.xwiki.doc.XWikiDocument org.xwiki.ratings.RatingsConfiguration::getConfigurationDocument(org.xwiki.model.reference.DocumentReference)
  • Redesign of Ratings API: RatingsConfiguration now defines configuration methods for Ratings. Check out the documentation.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method java.lang.String org.xwiki.ratings.RatingsConfiguration::getConfigurationParameter(org.xwiki.model.reference.DocumentReference, java.lang.String, java.lang.String)
  • Redesign of Ratings API: RatingsException does not extend anymore XWikiException.
    • Violation type:
      java.field.removedWithConstant
    • Code:
      ## Old:
      field .+ @ org.xwiki.ratings.RatingsException
  • Redesign of Ratings API: Error codes have been removed from RatingsException, we only rely on meaningfull messages.
    • Violation type:
      java.field.removedWithConstant
    • Code:
      ## Old:
      field org.xwiki.ratings.RatingsException.[A-Z_]+
  • Redesign of Ratings API: Error codes have been removed from RatingsException, we only rely on meaningfull messages.
    • Violation type:
      java.method.numberOfParametersChanged
    • Code:
      ## Old:
      method void org.xwiki.ratings.RatingsException::<init>()

      ## New:
      method void org.xwiki.ratings.RatingsException::<init>(java.lang.String)
  • Redesign of Ratings API: Error codes have been removed from RatingsException, we only rely on meaningfull messages.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method .+ org.xwiki.ratings.RatingsException::.+
  • Redesign of Ratings API: RatingsException does not extend anymore XWikiException.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method .+ com.xpn.xwiki.XWikiException::.+ @ org.xwiki.ratings.RatingsException
  • Redesign of Ratings API: RatingsException does not extend anymore XWikiException.
    • Violation type:
      java.class.noLongerInheritsFromClass
    • Code:
      ## Old:
      class org.xwiki.ratings.RatingsException

      ## New:
      class org.xwiki.ratings.RatingsException
  • Redesign of Ratings API: Constants have been removed from RatingsManager since they were tightly linked to the storage representation.
    • Violation type:
      java.field.removedWithConstant
    • Code:
      ## Old:
      field org.xwiki.ratings.RatingsManager.[A-Z_]+
  • Redesign of Ratings API: Constants have been removed from RatingsManager since they were tightly linked to the storage representation.
    • Violation type:
      java.field.removed
    • Code:
      ## Old:
      field org.xwiki.ratings.RatingsManager.[A-Z_]+
  • Redesign of Ratings API: some new methods have been added because of new needs.
    • Violation type:
      java.method.addedToInterface
    • Code:
      ## Old:


      ## New:
      method .+ org.xwiki.ratings.RatingsManager::.+
  • Redesign of Ratings API: ratings now apply on entities not just documents.
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter org.xwiki.ratings.AverageRating org.xwiki.ratings.RatingsManager::getAverageRating(===org.xwiki.model.reference.DocumentReference===) throws org.xwiki.ratings.RatingsException

      ## New:
      parameter org.xwiki.ratings.AverageRating org.xwiki.ratings.RatingsManager::getAverageRating(===org.xwiki.model.reference.EntityReference===) throws org.xwiki.ratings.RatingsException
  • Redesign of Ratings API: the API of RatingsManager have been greatly simplified.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method .+ org.xwiki.ratings.RatingsManager::.+
  • Redesign of Ratings API: the method to retrieve ratings in RatingsManager have been made more generic.
    • Violation type:
      java.method.numberOfParametersChanged
    • Code:
      ## Old:
      method java.util.List<org.xwiki.ratings.Rating> org.xwiki.ratings.RatingsManager::getRatings(org.xwiki.model.reference.DocumentReference, int, int, boolean) throws org.xwiki.ratings.RatingsException

      ## New:
      method java.util.List<org.xwiki.ratings.Rating> org.xwiki.ratings.RatingsManager::getRatings(java.util.Map<org.xwiki.ratings.RatingsManager.RatingQueryField, java.lang.Object>, int, int, org.xwiki.ratings.RatingsManager.RatingQueryField, boolean) throws org.xwiki.ratings.RatingsException
  • Redesign of Ratings API: the method to remove a rating in RatingsManager now only take an identifier.
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter boolean org.xwiki.ratings.RatingsManager::removeRating(===org.xwiki.ratings.Rating===) throws org.xwiki.ratings.RatingsException

      ## New:
      parameter boolean org.xwiki.ratings.RatingsManager::removeRating(===java.lang.String===) throws org.xwiki.ratings.RatingsException
  • Redesign of Ratings API: Reputation was never finished and is no longer supported in Ratings.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      interface org.xwiki.ratings.ReputationAlgorithm
  • Redesign of Ratings API: Reputation was never finished and is no longer supported in Ratings.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      interface org.xwiki.ratings.ReputationAlgorithmGroovy
  • Redesign of Ratings API: Reputation was never finished and is no longer supported in Ratings.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      class org.xwiki.ratings.ReputationException
  • Redesign of Ratings API: this class has been refactored, an equivalent is now in org.xwiki.ratings.events.UpdatedRatingEvent.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      class org.xwiki.ratings.UpdateRatingEvent
  • Redesign of Ratings API: we removed the begin/end event for Ratings. They only exist for AverageRating for technical reasons.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      class org.xwiki.ratings.UpdateRatingFailedEvent
  • Redesign of Ratings API: we removed the begin/end event for Ratings. They only exist for AverageRating for technical reasons.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      class org.xwiki.ratings.UpdatingRatingEvent
  • Redesign of Ratings API: only the Rating interface should now be used.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      class org.xwiki.ratings.script.RatingApi
  • Redesign of Ratings API: User reputation is not supported anymore.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method org.xwiki.ratings.AverageRatingApi org.xwiki.ratings.script.RatingsScriptService::getUserReputation.*
  • Redesign of Ratings API: this method was already deprecated.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method org.xwiki.ratings.script.RatingApi org.xwiki.ratings.script.RatingsScriptService::getRating(com.xpn.xwiki.api.Document, java.lang.String)
  • Redesign of Ratings API: this method was already deprecated.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method org.xwiki.ratings.AverageRatingApi org.xwiki.ratings.script.RatingsScriptService::getAverageRating(com.xpn.xwiki.api.Document, java.lang.String)
  • Redesign of Ratings API: this method does not make sense in the new design.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method com.xpn.xwiki.api.Document org.xwiki.ratings.script.RatingsScriptService::getConfigurationDocument(org.xwiki.model.reference.DocumentReference)
  • Redesign of Ratings API: allow to retrieve average rating for any reference (not only DocumentReference).
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter org.xwiki.ratings.AverageRatingApi org.xwiki.ratings.script.RatingsScriptService::getAverageRating(===com.xpn.xwiki.api.Document===)

      ## New:
      parameter java.util.Optional<org.xwiki.ratings.AverageRating> org.xwiki.ratings.script.AbstractScriptRatingsManager::getAverageRating(===org.xwiki.model.reference.EntityReference===) @ org.xwiki.ratings.script.RatingsScriptService
  • Redesign of Ratings API: use new best practices for script service return if type is nullable.
    • Violation type:
      java.method.returnTypeChanged
    • Code:
      ## Old:
      method org.xwiki.ratings.AverageRatingApi org.xwiki.ratings.script.RatingsScriptService::getAverageRating(com.xpn.xwiki.api.Document)

      ## New:
      method java.util.Optional<org.xwiki.ratings.AverageRating> org.xwiki.ratings.script.AbstractScriptRatingsManager::getAverageRating(org.xwiki.model.reference.EntityReference) @ org.xwiki.ratings.script.RatingsScriptService
  • Redesign of Ratings API: clean up of deprecated methods or methods that are not relevant on the new design.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method org.xwiki.ratings.AverageRatingApi org.xwiki.ratings.script.RatingsScriptService::getAverageRating.*
  • Redesign of Ratings API: this change shouldn't impact using the script service.
    • Violation type:
      java.class.nonFinalClassInheritsFromNewClass
    • Code:
      ## Old:
      class org.xwiki.ratings.script.RatingsScriptService

      ## New:
      class org.xwiki.ratings.script.RatingsScriptService
  • Redesign of Ratings API: allow to retrieve average rating for any reference (not only DocumentReference)
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter org.xwiki.ratings.script.RatingApi org.xwiki.ratings.script.RatingsScriptService::getRating(===com.xpn.xwiki.api.Document===, java.lang.String)

      ## New:
      parameter java.util.Optional<org.xwiki.ratings.Rating> org.xwiki.ratings.script.AbstractScriptRatingsManager::getRating(===org.xwiki.model.reference.EntityReference===, org.xwiki.user.UserReference) @ org.xwiki.ratings.script.RatingsScriptService
  • Redesign of Ratings API: use new best practices for specifying a user by using the UserReference.
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter org.xwiki.ratings.script.RatingApi org.xwiki.ratings.script.RatingsScriptService::getRating(com.xpn.xwiki.api.Document, ===java.lang.String===)

      ## New:
      parameter java.util.Optional<org.xwiki.ratings.Rating> org.xwiki.ratings.script.AbstractScriptRatingsManager::getRating(org.xwiki.model.reference.EntityReference, ===org.xwiki.user.UserReference===) @ org.xwiki.ratings.script.RatingsScriptService
  • Redesign of Ratings API: use new best practices for script service return if type is nullable.
    • Violation type:
      java.method.returnTypeChanged
    • Code:
      ## Old:
      method org.xwiki.ratings.script.RatingApi org.xwiki.ratings.script.RatingsScriptService::getRating(com.xpn.xwiki.api.Document, java.lang.String)

      ## New:
      method java.util.Optional<org.xwiki.ratings.Rating> org.xwiki.ratings.script.AbstractScriptRatingsManager::getRating(org.xwiki.model.reference.EntityReference, org.xwiki.user.UserReference) @ org.xwiki.ratings.script.RatingsScriptService
  • Redesign of Ratings API: the changes above actually apply to that one.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method org.xwiki.ratings.script.RatingApi org.xwiki.ratings.script.RatingsScriptService::getRating(org.xwiki.model.reference.DocumentReference, org.xwiki.model.reference.DocumentReference)
  • Redesign of Ratings API: allow to retrieve rating for any reference (not only DocumentReference)
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter java.util.List<org.xwiki.ratings.script.RatingApi> org.xwiki.ratings.script.RatingsScriptService::getRatings(===com.xpn.xwiki.api.Document===, int, int)

      ## New:
      parameter java.util.List<org.xwiki.ratings.Rating> org.xwiki.ratings.script.AbstractScriptRatingsManager::getRatings(===org.xwiki.model.reference.EntityReference===, int, int) @ org.xwiki.ratings.script.RatingsScriptService
  • Redesign of Ratings API: actually the method with this number of parameter existed (see below)
    • Violation type:
      java.method.numberOfParametersChanged
    • Code:
      ## Old:
      method java.util.List<org.xwiki.ratings.script.RatingApi> org.xwiki.ratings.script.RatingsScriptService::getRatings(org.xwiki.model.reference.DocumentReference, int, int)

      ## New:
      method java.util.List<org.xwiki.ratings.Rating> org.xwiki.ratings.script.AbstractScriptRatingsManager::getRatings(org.xwiki.model.reference.EntityReference, int, int, boolean) @ org.xwiki.ratings.script.RatingsScriptService
  • Redesign of Ratings API: this method was actually not removed but we used an EntityReference instead of Document API. See above.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method java.util.List<org.xwiki.ratings.script.RatingApi> org.xwiki.ratings.script.RatingsScriptService::getRatings(org.xwiki.model.reference.DocumentReference, int, int, boolean)
  • Redesign of Ratings API: removal of deprecated methods using Document parameter.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method java.util.List<org.xwiki.ratings.script.RatingApi> org.xwiki.ratings.script.RatingsScriptService::getRatings(com.xpn.xwiki.api.Document, int, int, boolean)
  • Redesign of Ratings API: removal of deprecated methods using Document parameter. A new API has been introduced and revapi considers it replaces it.
    • Violation type:
      java.method.numberOfParametersChanged
    • Code:
      ## Old:
      method org.xwiki.ratings.script.RatingApi org.xwiki.ratings.script.RatingsScriptService::setRating(com.xpn.xwiki.api.Document, java.lang.String, int)

      ## New:
      method java.util.Optional<org.xwiki.ratings.Rating> org.xwiki.ratings.script.AbstractScriptRatingsManager::setRating(org.xwiki.model.reference.EntityReference, int) @ org.xwiki.ratings.script.RatingsScriptService
  • Redesign of Ratings API: use new best practices for script service return if type is nullable.
    • Violation type:
      java.method.returnTypeChanged
    • Code:
      ## Old:
      method org.xwiki.ratings.script.RatingApi org.xwiki.ratings.script.RatingsScriptService::setRating(com.xpn.xwiki.api.Document, java.lang.String, int)

      ## New:
      method java.util.Optional<org.xwiki.ratings.Rating> org.xwiki.ratings.script.AbstractScriptRatingsManager::setRating(org.xwiki.model.reference.EntityReference, int) @ org.xwiki.ratings.script.RatingsScriptService
  • Redesign of Ratings API: allow to set rating for any reference (not only DocumentReference)
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter org.xwiki.ratings.script.RatingApi org.xwiki.ratings.script.RatingsScriptService::setRating(===org.xwiki.model.reference.DocumentReference===, org.xwiki.model.reference.DocumentReference, int)

      ## New:
      parameter java.util.Optional<org.xwiki.ratings.Rating> org.xwiki.ratings.script.AbstractScriptRatingsManager::setRating(===org.xwiki.model.reference.EntityReference===, org.xwiki.user.UserReference, int) @ org.xwiki.ratings.script.RatingsScriptService
  • Redesign of Ratings API: use new best practices for specifying a user by using the UserReference.
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter org.xwiki.ratings.script.RatingApi org.xwiki.ratings.script.RatingsScriptService::setRating(org.xwiki.model.reference.DocumentReference, ===org.xwiki.model.reference.DocumentReference===, int)

      ## New:
      parameter java.util.Optional<org.xwiki.ratings.Rating> org.xwiki.ratings.script.AbstractScriptRatingsManager::setRating(org.xwiki.model.reference.EntityReference, ===org.xwiki.user.UserReference===, int) @ org.xwiki.ratings.script.RatingsScriptService
  • Redesign of Ratings API: use new best practices for script service return if type is nullable.
    • Violation type:
      java.method.returnTypeChanged
    • Code:
      ## Old:
      method org.xwiki.ratings.script.RatingApi org.xwiki.ratings.script.RatingsScriptService::setRating(org.xwiki.model.reference.DocumentReference, org.xwiki.model.reference.DocumentReference, int)

      ## New:
      method java.util.Optional<org.xwiki.ratings.Rating> org.xwiki.ratings.script.AbstractScriptRatingsManager::setRating(org.xwiki.model.reference.EntityReference, org.xwiki.user.UserReference, int) @ org.xwiki.ratings.script.RatingsScriptService
  • Unstable API.
    • Violation type:
      java.method.addedToInterface
    • Code:
      ## Old:


      ## New:
      method long org.xwiki.like.LikeManager::countUserLikes(org.xwiki.user.UserReference) throws org.xwiki.like.LikeException
  • Unstable API.
    • Violation type:
      java.method.addedToInterface
    • Code:
      ## Old:


      ## New:
      method void org.xwiki.like.LikeManager::clearCache()
  • Unstable API.
    • Violation type:
      java.method.addedToInterface
    • Code:
      ## Old:


      ## New:
      method void org.xwiki.like.LikeManager::clearCache(org.xwiki.model.reference.EntityReference)
  • Unstable API: it has been moved in package org.xwiki.like.events.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      class org.xwiki.like.LikeEvent
  • Unstable API: it has been moved in package org.xwiki.like.events.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      class org.xwiki.like.UnlikeEvent

Credits

The following people have contributed code and translations to this release (sorted alphabetically):

Carlos Amengual
DenisF
Eduard Moraru
Francisco GarcĂ­a Moreno
ignatescustefan
Jarle Sandmo
jason
Manuel Leduc
Marius Dumitru Florea
Simon Urli
Thomas Mortagne
Vincent Massol
xrichard

Tags:
   

Get Connected