Additional Services

Collections

Updated: October 16, 2020

This page explains how collections are implemented and how to define the document types that be added or not to a collection.

 

How to Use It on Your Own Project

Which Documents Can Be Added to a Collection

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.

How to Customize Your Own Collection

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

Create your own Collection type

<?xml version="1.0"?>
<component name="yourBundleName">

  <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>
</component>

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.*

Synchronizing a Collection with Nuxeo Drive

To do so you need to add the following XML contribution witheither 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.

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()}"