Additional Services

Collections

Updated: July 17, 2023

Functional Overview

Installation & Configuration

The collection module has no specific installation step as it is already included in the default Nuxeo Platform distribution.

Customization

How to Implement a New Type of Collection

If you'd like to implement a new collection (for instance to have new metadata) you can simply add the Collection facet to your specific document type. You'll therefore be able to use it as a regular collection.

  <require>org.nuxeo.ecm.collections.schemas</require>

  <extension target="org.nuxeo.ecm.core.schema.TypeService" point="schema">
    <schema name="yourSchema" src="schemas/xxx.xsd" prefix="xxx" />
  </extension>
  <extension target="org.nuxeo.ecm.core.schema.TypeService" point="doctype">
    <facet name="YourFacet" >
      <schema name="yourSchema" />
    </facet>

    <doctype name="YourDocumentType" extends="Document">
      <facet name="YourFacet" />
      <facet name="Collection" />
    </doctype>

  </extension>

 

NotCollectionMember Facet

All documents can be added to a collection except:

  • Documents with the facet SystemDocument
  • Documents with the facet NotCollectionMember

By default, documents of type Collection, WorkspaceRoot, TemplateRoot, SectionRoot, Domain and Root have the facet NotCollectionMember. Please see collection-core-types-contrib.xml for more details.

Plugging Business Rules to Collection Specific Events

Several events related to collections are available:

  • beforeAddedToCollection
  • addedToCollection
  • beforeRemovedFromCollection
  • removedFromCollection

The collection reference is available in the event context map. For example, within an event listener which starts an automation chain, you can fetch the collection as described below:

- Document.Fetch:
    value: "@{Event.context.getProperty(\"collectionRef\").reference()}"

Synchronizing a Collection with Nuxeo Drive

To do so you need to add the following XML contribution with either Nuxeo Studio or a custom bundle:

<component name="org.nuxeo.drive.actions.collections">
  <require>org.nuxeo.drive.actions</require>
    <extension target="org.nuxeo.ecm.platform.actions.ActionService"
      point="filters">
      <filter id="can_sync_current_doc" append="true">
        <rule grant="true">
          <type>Collection</type>
        </rule>
      </filter>
    </extension>
</component>

Limitation

With this configuration you won't be able to unsynchronize a collection as usual using the icon as this icon will stay grey: .

Yet you can always unsynchronize the collection from the Nuxeo Drive tab in the user Home.

Notes:

  • Files or folders created in the locally synchronized collection folder will not be added to the collection server-side. For now we have no mechanism to choose their path in the hierarchy.
  • Please be aware that all the limitations applied to online editing with Nuxeo Drive apply to synchronized collections.

 

 

Core Implementation

A collection holds the list of references of the documents it contains. Conversely, a document holds the list of references of the collections it belongs to.

Collection operation are offered by the CollectionManager.java service.

Because a collection can potentially contain a large number of documents and, to a lesser extent, a document can belong to many collections, some tasks are performed asynchronously.

For instance, when deleting a collection, an asynchronous work will update the documents it contains to remove the reference of the deleted collection. In the same way, when a document is removed, an asynchronous work will update the collection it belonged to in order to remove the reference of the deleted document.

Finally, when copying a collection, an asynchronous work will also duplicate its content.