eXo Platform 3.5

## Chapter 3. Configuration

This chapter describes configurations used in Content. It consists of the following main sections:

- Component

  Description of the services which provide low-level functionality for UI components.

- External Component Plugins

  Description of the main external component plugins used in the Content function. Each part supplies an example configuration with the explanation about init-params so you can know how to use these plugins.

- CMIS configuration

  Description of CMIS configuration and other additional information.

## 3.1. Components

- ActionServiceContainer

  Manage actions (adding, removing, or executing actions, and more) in the system.

- ApplicationTemplateManagerService

  Manage dynamic Groovy templates for WCM-based products.

- FragmentCacheService

  Cache the response fragments which are sent to end-users.

- JodConverterService

  Convert documents into different office formats.

- LiveLinkManagerService

  Check broken links, updates links when the links are edited and extracts links to return a list of all links.

- LockService

  Manage all locked nodes and allows unlocking the locked nodes in the system. It is also used to assign the Lock right to a user or a user group or a membership.

- NewsletterInitializationService

  Initiate some data for the newsletter portlet.

- NewsletterManagerService

  Send newsletters to subscribers.

- SiteSearchService

  Allow finding all information matching with your given keyword.

- SEOService

  Help users manage SEO data of a page or a content, so their websites can achieve higher rankings on search engines.

- QueryService

  Manage many queries, including adding, removing or executing a query.

- TaxonomyService

  Sort documents to ease searches when browsing documents online.

- ThumbnailService

  Resize all images into different sizes. Besides the default sizes, it also allows users to customize the images into the desired sizes.

- TimelineService

  Allow documents to be displayed by days, months and years.

- WatchDocumentService

  Allow watching/unwatching a document. If you are watching the document, you will receive a notification mail when there are any changes on the document.

- WCMService

  Allow setting expiration cache of portlets and checking given portals if they are shared portals or not. It also gets reference contents basing on item identifiers.

This section describes services which provide low-level functionality for UI components.

`See also`

- External Component Plugins

- CMIS configuration

### 3.1.1. ActionServiceContainer

The ActionServiceContainer component is used to manage actions (adding, removing, or executing actions, and more) in the system. The configuration of this component is found in /core/core-configuration/src/main/webapp/WEB-INF/conf/wcm-core/core-services-configuration.xml.

    <component>

        <key>org.exoplatform.services.cms.actions.ActionServiceContainer</key>

        <type>org.exoplatform.services.cms.actions.impl.ActionServiceContainerImpl</type>

        <init-params>

            <value-param>

                <name>workspace</name>

                <value>system</value>

            </value-param>

            <value-param>

                <name>repository</name>

                <value>repository</value>

            </value-param>

        </init-params>

    </component>

Details:

- Value-param:

Name | Type | Value | Description
--- | --- | --- | ---
workspace | `string` | `system` | The workspace name.
repository | `string` | `repository` | The repository name.

### 3.1.2. ApplicationTemplateManagerService

The ApplicationTemplateManagerService component is used to manage dynamic Groovy templates for WCM-based products. The configuration of this component is found in /core/core-configuration/src/main/webapp/WEB-INF/conf/wcm-core/core-services-configuration.xml.

    <component>

        <key>org.exoplatform.services.cms.views.ApplicationTemplateManagerService</key>

        <type>org.exoplatform.services.cms.views.impl.ApplicationTemplateManagerServiceImpl</type>

        <init-params>

            <properties-param>

                <name>storedLocations</name>

                <property name="repository" value="system"/>

            </properties-param>

        </init-params>

    </component>

Details:

- Properties-param:

Name | Property name | Type | Value | Description
--- | --- | --- | --- | ---
storedLocations | `repository` | `string` | `system` | The repository name.

### 3.1.3. FragmentCacheService

The FragmentCacheService component is used to cache the response fragments which are sent to end-users.

The configuration of this component is found in core/core-configuration/src/main/webapp/WEB-INF/conf/wcm-core/wcm-configuration.xml.

    <component>

        <key>org.exoplatform.services.portletcache.FragmentCacheService</key>

        <type>org.exoplatform.services.portletcache.FragmentCacheService</type>

        <init-params>

            <value-param>

                <name>cleanup-cache</name>

                <description>The cleanup cache period in seconds</description>

                <value>300</value>

            </value-param>

        </init-params>

    </component>

Details

- Value-param:

Name | Type | Value | Description
--- | --- | --- | ---
cleanup-cache | `integer` | `300` | The time period over which cache items are expired.

### 3.1.4. JodConverterService

The JodConverterServices component is used to convert documents into different office formats. This component is enabled by default. The configuration of this component is found in /core/core-configuration/src/main/webapp/WEB-INF/conf/wcm-core/core-services-configuration.xml.

    <component>

       <key>org.exoplatform.services.cms.jodconverter.JodConverterService</key>

       <type>org.exoplatform.services.cms.jodconverter.impl.JodConverterServiceImpl</type>

       <init-params>

         <value-param>

           <name>port</name>

           <value>${jodconverter.portNumbers}</value>

         </value-param>

         <value-param>

           <name>officeHome</name>

           <value>${jodconverter.officeHome}</value>

         </value-param>

         <value-param>

           <name>taskQueueTimeout</name>

           <value>${jodconverter.taskQueueTimeout}</value>

         </value-param>

         <value-param>

           <name>taskExecutionTimeout</name>

           <value>${jodconverter.taskExecutionTimeout}</value>

         </value-param>

         <value-param>

           <name>maxTasksPerProcess</name>

           <value>${jodconverter.maxTasksPerProcess}</value>

         </value-param>

         <value-param>

           <name>retryTimeout</name>

           <value>${jodconverter.retryTimeout}</value>

         </value-param>

       </init-params>

    </component>

Details:

- Value-param:

Name | Type | Value | Description
--- | --- | --- | ---
port | `Integer` | ${jodconverter.portNumbers} | The number of ports to connect with the office server.
officeHome | `String` | ${jodconverter.officeHome} | The absolute path to the office home on the current local computer.
taskQueueTimeout | `Long` | ${jodconverter.taskExecutionTimeout} | The maximum living time of a task in the conversation queue.
taskExecutionTimeout | `Long` | ${jodconverter.taskExecutionTimeout} | The maximum time to process a task.
maxTasksPerProcess | `Integer` | ${jodconverter.maxTasksPerProcess} | The maximum number of tasks are processed.
retryTimeout | `Long` | ${jodconverter.retryTimeout} | The interval time to try to restart the office services in case they unexpectedly stop.

### 3.1.5. LiveLinkManagerService

The LiveLinkManagerService component is used to check broken links, update links when the links are edited and extract links to return a list of all links. The configuration of this component is found in /core/core-configuration/src/main/webapp/WEB-INF/conf/wcm-core/wcm-configuration.xml.

    <component>

        <key>org.exoplatform.services.wcm.link.LiveLinkManagerService</key>

        <type>org.exoplatform.services.wcm.link.LiveLinkManagerServiceImpl</type>

        <init-params>

            <properties-param>

                <name>server.config</name>

                <description>server.address</description>

                <property name="scheme" value="http"/>

                <property name="hostName" value="localhost"/>

                <property name="port" value="8080"/>

            </properties-param>

        </init-params>

    </component>

Details:

Properties-param | Property name | Type | Value | Description
--- | --- | --- | --- | ---
server.config | `scheme` `hostName` `port` | `http/https` `String` `The port number` | `http` `localhost` `8080` | All the property names are used together to configure the server. Here is an example about the server configuration: http//:localhost:8080.

### 3.1.6. LockService

The LockService component is used to manage all locked nodes and allows unlocking the locked nodes in the system. It is also used to assign the Lock right to a user or a user group or a membership. The configuration of this component is found in /core/core-configuration/src/main/webapp/WEB-INF/conf/wcm-core/core-services-configuration.xml.

    <component>

      <key>org.exoplatform.services.cms.lock.LockService</key>

      <type>org.exoplatform.services.cms.lock.impl.LockServiceImpl</type>

    </component>

### 3.1.7. NewsletterInitializationService

The NewsletterInitializationService component is used to initiate some data for the newsletter portlet. The configuration of this component is found in packaging/ecmdemo/webapp/src/main/webapp/WEB-INF/conf/sample-portal/wcm/newsletter-configuration.xml.

### Note

The Newsletter portlet and its services are deprecated. It remains fully supported for eXo customers, however it will not receive any enhancement and will be removed from the product scope in the future.

    <component>

        <type>org.exoplatform.services.wcm.newsletter.NewsletterInitializationService</type>

        <init-params>

            <values-param>

                <name>portalNames</name>

                <value>classic</value>

                <value>acme</value>

            </values-param>

            <values-param>

                <name>administrators</name>

                <value>root</value>

                <value>john</value>

            </values-param>

            <object-param>

                <name>marketing</name>

                <description>marketing</description>

                <object type="org.exoplatform.services.wcm.newsletter.NewsletterCategoryConfig">

                    <field name="name">

                        <string>marketing</string>

                    </field>

                    <field name="title">

                        <string>Marketing</string>

                    </field>

                    <field name="description">

                        <string>You want to know where we are, where we go ?</string>

                    </field>

                    <field name="moderator">

                        <string>*:/platform/web-contributors</string>

                    </field>

                </object>

            </object-param>

            <object-param>

                <name>general</name>

                <description>general</description>

                <object type="org.exoplatform.services.wcm.newsletter.NewsletterCategoryConfig">

                    <field name="name">

                        <string>general</string>

                    </field>

                    <field name="title">

                        <string>General</string>

                    </field>

                    <field name="description">

                        <string>General information about us</string>

                    </field>

                    <field name="moderator">

                        <string>*:/platform/web-contributors</string>

                    </field>

                </object>

            </object-param>

            <object-param>

                <name>subscription2</name>

                <description>subscription2</description>

                <object type="org.exoplatform.services.wcm.newsletter.NewsletterSubscriptionConfig">

                    <field name="name">

                        <string>results</string>

                    </field>

                    <field name="title">

                        <string>Results</string>

                    </field>

                    <field name="description">

                        <string>Monthly newsletter about our results and forecasts</string>

                    </field>

                    <field name="categoryName">

                        <string>general</string>

                    </field>

                    <field name="redactor">

                        <string>*:/platform/web-contributors</string>

                    </field>

                </object>

            </object-param>

            <object-param>

                <name>subscription1</name>

                <description>subscription1</description>

                <object type="org.exoplatform.services.wcm.newsletter.NewsletterSubscriptionConfig">

                    <field name="name">

                        <string>checklist</string>

                    </field>

                    <field name="title">

                        <string>Check-List</string>

                    </field>

                    <field name="description">

                        <string>Weekly newsletter with general topics</string>

                    </field>

                    <field name="categoryName">

                        <string>general</string>

                    </field>

                    <field name="redactor">

                        <string>*:/platform/web-contributors</string>

                    </field>

                </object>

            </object-param>

            <object-param>

                <name>subscription3</name>

                <description>subscription3</description>

                <object type="org.exoplatform.services.wcm.newsletter.NewsletterSubscriptionConfig">

                    <field name="name">

                        <string>market</string>

                    </field>

                    <field name="title">

                        <string>The market</string>

                    </field>

                    <field name="description">

                        <string>What's on the market today ?</string>

                    </field>

                    <field name="categoryName">

                        <string>marketing</string>

                    </field>

                    <field name="redactor">

                        <string>*:/platform/web-contributors</string>

                    </field>

                </object>

            </object-param>

            <object-param>

                <name>user1@gmail.com</name>

                <description>user1@gmail.com</description>

                <object type="org.exoplatform.services.wcm.newsletter.config.NewsletterUserConfig">

                    <field name="mail">

                        <string>user1@gmail.com</string>

                    </field>

                </object>

            </object-param>

            <object-param>

                <name>user2@gmail.com</name>

                <description>user2@gmail.com</description>

                <object type="org.exoplatform.services.wcm.newsletter.config.NewsletterUserConfig">

                    <field name="mail">

                        <string>user2@gmail.com</string>

                    </field>

                </object>

            </object-param>

        </init-params>

    </component>

Details:

- Value-param

Name | Type | Value | Description
--- | --- | --- | ---
portalNames | `string` | `classic, acme` | The portal names.
administrators | `string` | `root` | The administrator who manages the newsletter portlet.

- Object-param:

  - object type: `org.exoplatform.services.wcm.newsletter.NewsletterCategoryConfig`

Field | Type | Description
--- | --- | ---
name | `string` | The name of categories or subscriptions.
title | `string` | The title of categories or subscriptions.
description | `string` | The description of categories or subscriptions.
moderator | `string` | The users or groups that can moderate the newsletter portlet.
categoryName | `string` | The categories name.
redactor | `string` | The users or groups that are newsletter redactor.
mail | `string` | The email that user uses to subscribe.

### 3.1.8. NewsletterManagerService

The NewsletterManagerService component is used to send newsletters to subscribers. The configuration of this component is found in core/core-configuration/src/main/webapp/WEB-INF/conf/wcm-core/ext-newsletter-configuration.xml.

### Note

The Newsletter Manager portlet and its services are deprecated. It remains fully supported for eXo customers, however it will not receive any enhancement and will be removed from the product scope in the future.

    <component>

        <type>org.exoplatform.services.wcm.newsletter.NewsletterManagerService</type>

        <init-params>

            <value-param>

                <name>repository</name>

                <value>repository</value>

            </value-param>

            <value-param>

                <name>workspace</name>

                <value>collaboration</value>

            </value-param>

        </init-params>

    </component>

Details:

- Value-param:

Name | Type | Value | Description
--- | --- | --- | ---
repository | `string` | `repository` | The repository name.
workspace | `string` | `collaboration` | The workspace name.

### 3.1.9. SiteSearchService

The SiteSearchService component is used in the Search portlet that allows users to find all information matching with your given keyword.

It is configured in the core/core-configuration/src/main/webapp/WEB-INF/conf/configuration.xml file as follows:

    <import>war:/conf/wcm-core/core-search-configuration.xml</import>

The component configuration maps the SiteSearchService component with its own implementation: SiteSearchServiceImpl.

    <component>

      <key>org.exoplatform.services.wcm.search.SiteSearchService</key>

      <type>org.exoplatform.services.wcm.search.SiteSearchServiceImpl</type>

      <component-plugins>

        ...

      </component-plugins>

      <init-params>

        <value-param>

          <name>isEnabledFuzzySearch</name>

          <value>true</value>

        </value-param>

        <value-param>

          <name>fuzzySearchIndex</name>

          <value/>

        </value-param>

      </init-params>

    </component>

Detail:

- Value-param:

Name | Type | Value | Description
--- | --- | --- | ---
isEnabledFuzzySearch | `boolean` | `true` | Allow administrators to enable/disable the fuzzy search mechanism.
fuzzySearchIndex | `N/A` | `N/A` | Allow the approximate level between the input keyword and the found key results. In case of the invalid configuration, the default value is set to 0.8.

To have more information about the fuzzy search, please refer to Fuzzy Search.

### 3.1.10. SEOService

The SEOService component is used to help users manage SEO data of a page or a content, so their websites can achieve higher rankings on search engines. The configuration of this component is found in /packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/wcm-extension/wcm/seo-configuration.xml.

    <component>

        <key>org.exoplatform.services.seo.SEOService</key>

        <type>org.exoplatform.services.seo.impl.SEOServiceImpl</type>

        <init-params>

            <object-param>

                <name>seo.config</name>

                <object type="org.exoplatform.services.seo.SEOConfig">

                    <field name="robotsindex">

                        <collection type="java.util.ArrayList">

                            <value>

                                <string>INDEX</string>

                            </value>

                            <value>

                                <string>NOINDEX</string>

                            </value>

                        </collection>

                    </field>

                    <field name="robotsfollow">

                        <collection type="java.util.ArrayList">

                            <value>

                                <string>FOLLOW</string>

                            </value>

                            <value>

                                <string>NOFOLLOW</string>

                            </value>

                        </collection>

                    </field>

                    <field name="frequency">

                        <collection type="java.util.ArrayList">

                            <value>

                                <string>Always</string>

                            </value>

                            <value>

                                <string>Hourly</string>

                            </value>

                            <value>

                                <string>Daily</string>

                            </value>

                            <value>

                                <string>Weekly</string>

                            </value>

                            <value>

                                <string>Monthly</string>

                            </value>

                            <value>

                                <string>Yearly</string>

                            </value>

                            <value>

                                <string>Never</string>

                            </value>

                        </collection>

                    </field>

                </object>

            </object-param>

        </init-params>

    </component>

Details:

- Object-param:

  - Object type: `org.exoplatform.services.seo.SEOConfig`

Field | Type | Value | Description
--- | --- | --- | ---
robotsindex | `ArrayList` | `INDEX` `NOINDEX` | Allow search engines to index a particular page or not.
robotsfollow | `ArrayList` | `FOLLOW` `NOFOLLOW` | Allow search engines to follow links from a particular page to find other pages or not.
frequency | `ArrayList` | `Always` `Hourly` `Daily` `Weekly` `Monthly` `Yearly` `Never` | Define how often a particular page is updated.

### 3.1.11. QueryService

The QueryService component is used to manage many queries, including adding, removing or executing a query. The configuration of this component is found in /core/core-configuration/src/main/webapp/WEB-INF/conf/wcm-core/core-services-configuration.xml.

    <component>

        <key>org.exoplatform.services.cms.queries.QueryService</key>

        <type>org.exoplatform.services.cms.queries.impl.QueryServiceImpl</type>

        <init-params>

            <value-param>

                <name>workspace</name>

                <value>system</value>

            </value-param>

            <value-param>

                <name>relativePath</name>

                <value>Private/Queries</value>

            </value-param>

            <value-param>

                <name>group</name>

                <value>*:/admin</value>

            </value-param>

        </init-params>

    </component>

Details:

- Value-param:

Name | Type | Value | Description
--- | --- | --- | ---
workspace | `string` | `system` | The workspace name.
relativePath | `Private/Queries` | `Private/Queries` | The path to the query location.
group | `string` | *:/admin | The group is allowed to access the query folder.

### 3.1.12. TaxonomyService

The TaxonomyService component is used to sort documents to ease searches when browsing documents online. It provides a multi-dimensional set of paths to find a document. In many cases, you can get your content by using different category paths. Therefore, after creating a document somewhere in the repository, it is possible to categorize it by adding several taxonomy references. By browsing the taxonomy tree, it will be possible to find the referencing article and display them as if they were children of the taxonomy nodes. Taxonomies are stored in the JCR itself and the JCR Reference functionality is used to provide that advanced WCM feature. The tree of taxonomies can be managed simply, such as copying/cutting/pasting nodes, or adding and removing taxonomies from the tree. Once a taxonomy has been added, any user who has access to the "Manage Categories" icon from his/her view can then browse the taxonomy tree and refer one of its nodes to the created documents.

    <component>

        <key>org.exoplatform.services.cms.taxonomy.TaxonomyService</key>

        <type>org.exoplatform.services.cms.taxonomy.impl.TaxonomyServiceImpl</type>

        <init-params>

            <object-param>

                <name>defaultPermission.configuration</name>

                <object type="org.exoplatform.services.cms.taxonomy.impl.TaxonomyTreeDefaultUserPermission">

                    <field name="permissions">

                        <collection type="java.util.ArrayList">

                            <value>

                                <object type="org.exoplatform.services.cms.taxonomy.impl.TaxonomyTreeDefaultUserPermission$Permission">

                                    <field name="identity">

                                        <string>*:/platform/administrators</string>

                                    </field>

                                    <field name="read">

                                        <string>true</string>

                                    </field>

                                    <field name="addNode">

                                        <string>true</string>

                                    </field>

                                    <field name="setProperty">

                                        <string>true</string>

                                    </field>

                                    <field name="remove">

                                        <string>true</string>

                                    </field>

                                </object>

                            </value>

                            <value>

                                <object type="org.exoplatform.services.cms.taxonomy.impl.TaxonomyTreeDefaultUserPermission$Permission">

                                    <field name="identity">

                                        <string>*:/platform/users</string>

                                    </field>

                                    <field name="read">

                                        <string>true</string>

                                    </field>

                                    <field name="addNode">

                                        <string>true</string>

                                    </field>

                                    <field name="setProperty">

                                        <string>true</string>

                                    </field>

                                    <field name="remove">

                                        <string>false</string>

                                    </field>

                                </object>

                            </value>

                        </collection>

                    </field>

                </object>

            </object-param>

        </init-params>

    </component>

Details:

- Object type: org.exoplatform.services.cms.taxonomy.impl.TaxonomyTreeDefaultUserPermission

Field | Type | Value | Description
--- | --- | --- | ---
permissions | `ArrayList` | {java.util.ArrayList} | The list of the default user permissions to access the taxonomy tree.

- Object type: org.exoplatform.services.cms.taxonomy.impl.TaxonomyTreeDefaultUserPermission$Permission

Field | Type | Description
--- | --- | ---
identity | `string` | The name of user, group or membership.
read | `boolean` | The permission to read the taxonomy tree.
addNode | `boolean` | The permission to add a node to the taxonomy tree.
setProperty | `boolean` | The permission to set properties for a node in the taxonomy tree.
remove | `boolean` | The permission to remove a node from the taxonomy tree.

### 3.1.13. ThumbnailService

The ThumbnailService component is used to resize all the images into different sizes. Besides the default sizes, it also allows users to customize the images into the desired sizes. The configuration of this component is found in /core/core-configuration/src/main/webapp/WEB-INF/conf/wcm-core/core-services-configuration.xml.

    <component>

        <key>org.exoplatform.services.cms.thumbnail.ThumbnailService</key>

        <type>org.exoplatform.services.cms.thumbnail.impl.ThumbnailServiceImpl</type>

        <init-params>

            <value-param>

                <name>smallSize</name>

                <value>32x32</value>

            </value-param>

            <value-param>

                <name>mediumSize</name>

                <value>64x64</value>

            </value-param>

            <value-param>

                <name>largeSize</name>

                <value>300x300</value>

            </value-param>

            <value-param>

                <name>enable</name>

                <value>false</value>

            </value-param>

            <value-param>

                <name>mimetypes</name>

                <value>image/jpeg;image/png;image/gif;image/bmp</value>

            </value-param>

        </init-params>

    </component>

Details:

- Value-param:

Name | Type | Value | Description
--- | --- | --- | ---
smallSize | `integer x integer` | `32x32` | The small thumbnail size.
mediumSize | `integer x integer` | `64x64` | The medium thumbnail size.
largeSize | `integer x integer` | `300x300` | The large thumbnail size.
enable | `boolean` | `false` | Specify if the thumbnail is displayed or not.
mimetypes | `Images formats` | `image/jpeg;image/png;image/gif;image/bmp` | The image formats are supported.

### 3.1.14. TimelineService

The TimelineService component allows documents to be displayed by days, months and years. The configuration of this component is found in /core/core-configuration/src/main/webapp/WEB-INF/conf/wcm-core/core-services-configuration.xml.

    <component>

        <key>org.exoplatform.services.cms.timeline.TimelineService</key>

        <type>org.exoplatform.services.cms.timeline.impl.TimelineServiceImpl</type>

        <init-params>

            <value-param>

                <name>itemPerTimeline</name>

                <value>5</value>

            </value-param>

        </init-params>

    </component>

Details:

- Value-param

Name | Type | Value | Description
--- | --- | --- | ---
itemPerTimeline | `integer` | `5` | The number of documents are displayed.

### 3.1.15. WatchDocumentService

The WatchDocumentService component allows users to watch/unwatch a document. If they are watching the document, they will receive a notification mail when there are any changes on the document. The configuration of this component is found in /core/core-configuration/src/main/webapp/WEB-INF/conf/wcm-core/core-services-configuration.xml.

    <component>

        <key>org.exoplatform.services.cms.watch.WatchDocumentService</key>

        <type>org.exoplatform.services.cms.watch.impl.WatchDocumentServiceImpl</type>

        <init-params>

            <object-param>

                <name>messageConfig</name>

                <description>description</description>

                <object type="org.exoplatform.services.cms.watch.impl.MessageConfig">

                    <field name="sender">

                        <string>support@exoplatform.com</string>

                    </field>

                    <field name="subject">

                        <string>Your watching document is changed</string>

                    </field>

                    <field name="content">

                        <string>The document that you are watching is changed.

                            Please go to ecm to see this change

                        </string>

                    </field>

                </object>

            </object-param>

        </init-params>

    </component>

Details:

- object-param:

  - Object type: org.exoplatform.services.cms.watch.impl.MessageConfig

Field | Type | Value | Description
--- | --- | --- | ---
sender | `string` | `support@exoplatform.com` | The sender who sends the notification mail.
subject | `string` | `Your watching document is changed.` | The subject of the notification mail.
content | `string` | `The document that you are watching is changed. Please go to ecm to see this change.` | The content of the notification mail.

### 3.1.16. WCMService

The WCMService component allows setting expiration cache of portlets and checking given portals if they are shared portals or not. It also gets reference contents basing on item identifiers. The configuration of this component is found in /core/core-configuration/src/main/webapp/WEB-INF/conf/wcm-core/core-services-configuration.xml.

    <component>

      <key>org.exoplatform.services.wcm.core.WCMService</key>

      <type>org.exoplatform.services.wcm.core.impl.WCMServiceImpl</type>

      <init-params>

        <properties-param>

          <name>server.config</name>

          <description>server.config</description>

          <property name="expirationCache" value="30"/>

        </properties-param>

      </init-params>

    </component>

Details:

Properties-param | Property name | Type | Value | Description
--- | --- | --- | --- | ---
server.config | `expirationCache` | `integer` | `30` | The period in which the cache is clear in second. By default, the cache is cleared every 30 seconds.

## 3.2. External Component Plugins

- AuthoringPublicationPlugin

  Manage the publication lifecycle of web contents and DMS document on a portal page with more states and versions.

- BPActionPlugin

  Define the business process action in Workflow.

- ContentTypeFilterPlugin

  Filter the WCM node types.

- ContextPlugin

  Store the context configuration of a publication lifecycle.

- ExcludeIncludeDataTypePlugin

  Filter the search results before these results are presented on the search page.

- FriendlyPlugin

  Refine URLs in Content.

- ImageThumnailPlugin

  Configure the file types and get thumbnail for images.

- IgnorePortalPlugin

  Avoid deploying data to the existing portals during a new portal creation.

- InitialWebcontentPlugin

  Deploy initial web-contents as the site artifact into the Site Artifact folder of a newly created portal.

- LinkDeploymentPlugin

  Create predefined Symlinks into the system.

- LockGroupsOrUsersPlugin

  Configure predefined groups or users for lock administration.

- ManageDrivePlugin

  Create a predefined drive into a repository.

- ManageViewPlugin

  Create a predefined View into a repository.

- PDFThumnailPlugin

  Set the supported file types of PDF thumbnail.

- PortetTemplatePlugin

  Import the view templates into Content List Viewer.

- predifinedProcessesPlugin

  Import the predefined processes into the system.

- QueryPlugin

  Store predefined queries into the repositories of the system.

- RemoveTaxonomyPlugin

  Invalidate taxonomy trees in categories folder of a portal when the portal is removed.

- ScriptActionPlugin

  Import the predefined script actions into the system.

- ScriptPlugin

  Add groovy scripts into the system.

- StageAndVersionPublicationPlugin

  Control the state life cycle of a content.

- StatesLifecyclePlugin

  Control the state life cycle of a content.

- TagPermissionPlugin

  Configure the predefined permission for tags to inject in JCR.

- TagStylePlugin

  Configure the predefined styles for tags to inject in JCR.

- TaxonomyPlugin

  Configure the predefined taxonomies to inject into JCR.

- TemplatePlugin

  Create templates into the system. A template is a presentation to display the saved information.

- XMLdeploymentPlugin

  Deploy some "default" contents, such as Banner, Footer, Navigation, and Breadcrumb of a website.

- BaseActionPlugin/CreatePortalPlugin/PublicationPlugin/RemovePortalPlugin

  Create a link from the plugin to its children.

This section describes the main component plugins used in Content. Each part supplies an example configuration with the explanation about ini-params so you can know how to use these plugins.

`See also`

- Components

- CMIS configuration

### 3.2.1. AuthoringPublicationPlugin

This plugin is used to manage the publication lifecycle of web contents and DMS document on a portal page with more states and versions. The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/content-extended/authoring/configuration.xml.

Sample configuration:

    <component-plugin>

         <name>Authoring publication</name>

         <set-method>addPublicationPlugin</set-method>

         <type>org.exoplatform.services.wcm.extensions.publication.lifecycle.authoring.AuthoringPublicationPlugin

         </type>

         <description>This publication lifecycle publish a web content or DMS document to a portal page with more

            states and version.

         </description>

    </component-plugin>

In which:

- Name: Authoring publication

- Set-method: addPublicationPlugin

- Type: org.exoplatform.services.wcm.extensions.publication.lifecycle.authoring.AuthoringPublicationPlugin

### 3.2.2. BPActionPlugin

This plugin is used to define the business process action in Workflow.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.actions.ActionServiceContainer</target-component>

The configuration is applied mainly in packaging/workflow/webapp/src/main/webapp/WEB-INF/workflow-extension/workflow/workflow-system-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.actions.ActionServiceContainer</target-component>

        <component-plugin>

            <name>exo:businessProcessAction</name>

            <set-method>addPlugin</set-method>

            <type>org.exoplatform.services.plugin.actions.impl.BPActionPlugin</type>

            <priority>112</priority>

            <init-params>

                <object-param>

                    <name>predefined.actions</name>

                    <description>description</description>

                    <object type="org.exoplatform.services.cms.actions.impl.ActionConfig">

                        <field name="repository">

                            <string>repository</string>

                        </field>

                        <field name="workspace">

                            <string>collaboration</string>

                        </field>

                        <field name="actions">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <object type="org.exoplatform.services.cms.actions.impl.ActionConfig$Action">

                                        <field name="type">

                                            <string>exo:publishingProcess</string>

                                        </field>

                                        <field name="name">

                                            <string>content publishing</string>

                                        </field>

                                        <field name="description">

                                            <string>content publishing workflow</string>

                                        </field>

                                        <field name="srcWorkspace">

                                            <string>collaboration</string>

                                        </field>

                                        <field name="srcPath">

                                            <string>/Documents/Validation Requests</string>

                                        </field>

                                        <field name="isDeep">

                                            <boolean>true</boolean>

                                        </field>

                                        <field name="lifecyclePhase">

                                            <collection type="java.util.ArrayList">

                                                <value>

                                                    <string>node_added</string>

                                                </value>

                                            </collection>

                                        </field>

                                        <field name="roles">

                                            <string>*:/platform/users</string>

                                        </field>

                                        <field name="variables">

                                            <string>

                                                exo:supervisor=*:/organization/management/executive-board;exo:validator=*:/platform/administrators

                                            </string>

                                        </field>

                                        <field name="mixins">

                                            <collection type="java.util.ArrayList">

                                                <value>

                                                    <object type="org.exoplatform.services.cms.actions.impl.ActionConfig$Mixin">

                                                        <field name="name">

                                                            <string>exo:publishLocation</string>

                                                        </field>

                                                        <field name="properties">

                                                            <string>

                                                                exo:publishWorkspace=collaboration;exo:publishPath=/Documents/Live;exo:validator=*:/platform/administrators

                                                            </string>

                                                        </field>

                                                    </object>

                                                </value>

                                                <value>

                                                    <object type="org.exoplatform.services.cms.actions.impl.ActionConfig$Mixin">

                                                        <field name="name">

                                                            <string>exo:pendingLocation</string>

                                                        </field>

                                                        <field name="properties">

                                                            <string>

                                                                exo:pendingWorkspace=collaboration;exo:pendingPath=/Documents/Pending

                                                            </string>

                                                        </field>

                                                    </object>

                                                </value>

                                                <value>

                                                    <object type="org.exoplatform.services.cms.actions.impl.ActionConfig$Mixin">

                                                        <field name="name">

                                                            <string>exo:backupLocation</string>

                                                        </field>

                                                        <field name="properties">

                                                            <string>exo:backupWorkspace=backup;exo:backupPath=/Expired

                                                                Documents

                                                            </string>

                                                        </field>

                                                    </object>

                                                </value>

                                                <value>

                                                    <object type="org.exoplatform.services.cms.actions.impl.ActionConfig$Mixin">

                                                        <field name="name">

                                                            <string>exo:trashLocation</string>

                                                        </field>

                                                        <field name="properties">

                                                            <string>

                                                                exo:trashWorkspace=collaboration;exo:trashPath=/Documents/Trash

                                                            </string>

                                                        </field>

                                                    </object>

                                                </value>

                                                <value>

                                                    <object type="org.exoplatform.services.cms.actions.impl.ActionConfig$Mixin">

                                                        <field name="name">

                                                            <string>mix:affectedNodeTypes</string>

                                                        </field>

                                                        <field name="properties">

                                                            <string>

                                                                exo:affectedNodeTypeNames=exo:article,exo:podcast,exo:sample,kfx:document,nt:file,rma:filePlan

                                                            </string>

                                                        </field>

                                                    </object>

                                                </value>

                                            </collection>

                                        </field>

                                    </object>

                                </value>

                            </collection>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: `exo:businessProcessAction`

- Set-method: `addPlugin`

- Type: `org.exoplatform.services.plugin.actions.impl.BPActionPlugin`

- Object type: `org.exoplatform.services.cms.actions.impl.ActionConfig`

Field | Type | Value | Description
--- | --- | --- | ---
repository | `string` | `repository` | The repository name.
workspace | `string` | `collaboration` | The workspace name.
action | `ArrayList` | {java.util.ArrayList} | The action name.

### 3.2.3. ContentTypeFilterPlugin

This plugin is used to filter WCM node types.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.templates.TemplateService</target-component>

The configuration is applied mainly in /packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/dms-extension/dms/dms-templates-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.templates.TemplateService</target-component>

        <component-plugin>

            <name>FilterContentTypeForWCMSpecificFolder</name>

            <set-method>addContentTypeFilterPlugin</set-method>

            <type>org.exoplatform.services.cms.templates.ContentTypeFilterPlugin</type>

            <description>this plugin is used to filter wcm nodetype</description>

            <init-params>

                <object-param>

                    <name>cssFolderFilter</name>

                    <description>only exo:cssFile can be created in exo:cssFolder</description>

                    <object type="org.exoplatform.services.cms.templates.ContentTypeFilterPlugin$FolderFilterConfig">

                        <field name="folderType">

                            <string>exo:cssFolder</string>

                        </field>

                        <field name="contentTypes">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <string>exo:cssFile</string>

                                </value>

                            </collection>

                        </field>

                    </object>

                </object-param>

                <object-param>

                    ...

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: FilterContentTypeForWCMSpecificFolder

- Set-method: addContentTypeFilterPlugin

- Type: org.exoplatform.services.cms.templates.ContentTypeFilterPlugin

- Object type: org.exoplatform.services.cms.templates.ContentTypeFilterPlugin$FolderFilterConfig

Field | Type | Value | Description
--- | --- | --- | ---
folderType | `string` | `exo:cssFolder` | The folder type.
contentTypes | `ArrayList` | {java.util.ArrayList} | The content type.

### 3.2.4. ContextPlugin

This plugin is used to store the context configuration of a publication lifecycle. To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.wcm.extensions.publication.PublicationManager</target-component>

The configuration is applied mainly in packaging/ecmdemo/webapp/src/main/webapp/WEB-INF/conf/sample-portal/wcm/content-configuration.xml or packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/content-extended/authoring/configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.wcm.extensions.publication.PublicationManager</target-component>

        <component-plugin>

            <name>AddContext</name>

            <set-method>addContext</set-method>

            <type>org.exoplatform.services.wcm.extensions.publication.context.ContextPlugin</type>

            <init-params>

                <object-param>

                    <name>contexts</name>

                    <object type="org.exoplatform.services.wcm.extensions.publication.context.impl.ContextConfig">

                        <field name="contexts">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <object type="org.exoplatform.services.wcm.extensions.publication.context.impl.ContextConfig$Context">

                                        <field name="name">

                                            <string>context2</string>

                                        </field>

                                        <field name="priority">

                                            <string>100</string>

                                        </field>

                                        <field name="lifecycle">

                                            <string>lifecycle2</string>

                                        </field>

                                        <field name="site">

                                            <string>acme</string>

                                        </field>

                                    </object>

                                </value>

                            </collection>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: AddContext

- Set-method: addContext

- Type: org.exoplatform.services.wcm.extensions.publication.context.ContextPlugin

- Object type: org.exoplatform.services.wcm.extensions.publication.context.impl.ContextConfig

Field | Type | Value | Description
--- | --- | --- | ---
name | `string` | `context2` | The name of the context.
priority | `string` | `100` | The context priority, the higher number indicates higher priority. Because a site may have several lifecycles, the lifecycle with higher priority will be executed sooner.
lifecycle | `string` | `lifecycle2` | The name of the lifecycle.
site | `string` | `acme` | The site that will apply the context configuration.

### 3.2.5. ExcludeIncludeDataTypePlugin

This plugin is used in the SiteSearchService component to filter the search results before these results are presented on the search page.

The configuration is applied mainly in core/core-configuration/src/main/webapp/WEB-INF/conf/wcm-core/core-search-configuration.xml.

Sample configuration:

    <component-plugins>

      <component-plugin>

        <name>ExcludeMimeTypes</name>

        <set-method>addExcludeIncludeDataTypePlugin</set-method>

        <type>org.exoplatform.services.wcm.search.ExcludeIncludeDataTypePlugin</type>

        <init-params>

          <properties-param>

            <name>search.exclude.datatypes</name>

            <description>exclude some data type when search</description>

            <property name="mimetypes" value="text/css,text/javascript,application/x-javascript,text/ecmascript"/>

          </properties-param>

        </init-params>

      </component-plugin>

    </component-plugins>

In which:

- Name: `ExcludeMimeTypes`

- Set-method: `addExcludeIncludeDataTypePlugin`

- Type: `org.exoplatform.services.wcm.search.ExcludeIncludeDataTypePlugin`

- The plugin has the following parameter:

Properties-param | Description
--- | ---
search.exclude.datatype | Exclude some data types when doing search.

- The `search.exclude.datatype` property includes two attributes:

Attribute | Value | Description
--- | --- | ---
name | `mimetypes` | The name of the property param.
value | `text/css,text/javascript,application/x-javascript,text/ecmascript` | The list of mimetypes which will be excluded from the search results.

### 3.2.6. FriendlyPlugin

This plugin is used to refine URLs in Content.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.wcm.friendly.FriendlyService</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/content-extended/friendly/configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.wcm.friendly.FriendlyService</target-component>

        <component-plugin>

            <name>FriendlyService.addConfiguration</name>

            <set-method>addConfiguration</set-method>

            <type>org.exoplatform.services.wcm.friendly.impl.FriendlyPlugin</type>

            <description>Configures</description>

            <priority>100</priority>

            <init-params>

                <value-param>

                    <name>enabled</name>

                    <value>true</value>

                </value-param>

                <object-param>

                    <name>friendlies.configuration</name>

                    <object type="org.exoplatform.services.wcm.friendly.impl.FriendlyConfig">

                        <field name="friendlies">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <object type="org.exoplatform.services.wcm.friendly.impl.FriendlyConfig$Friendly">

                                        <field name="friendlyUri">

                                            <string>documents</string>

                                        </field>

                                        <field name="unfriendlyUri">

                                            <string>/public/acme/detail?content-id=/repository/collaboration</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.wcm.friendly.impl.FriendlyConfig$Friendly">

                                        <field name="friendlyUri">

                                            <string>files</string>

                                        </field>

                                        <field name="unfriendlyUri">

                                            <string>/rest-ecmdemo/jcr/repository/collaboration</string>

                                        </field>

                                    </object>

                                </value>

                            </collection>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: FriendlyService.addConfiguration

- Set-method: addConfiguration

- Type: org.exoplatform.services.wcm.friendly.impl.FriendlyPlugin

- Object type: `org.exoplatform.services.wcm.friendly.impl.FriendlyConfig`

Field | Type | Value | Description
--- | --- | --- | ---
friendlyUrl | `string` | `documents` | The object that will be applied the friendly URL.
unfriendlyUrl | `string` | `/public/acme/detail?content-id=/repository/collaboration` | The path to the location that will be applied the friendly URL.

### 3.2.7. ImageThumbnailPlugin

This plugin is used to configure the file types and get thumbnail for images.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.thumbnail.ThumbnailService</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/dms-extension/dms/dms-thumbnail-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.thumbnail.ThumbnailService</target-component>

        <component-plugin>

            <name>ImageThumbnailPlugin</name>

            <set-method>addPlugin</set-method>

            <type>org.exoplatform.services.cms.thumbnail.impl.ImageThumbnailPlugin</type>

            <init-params>

                <object-param>

                    <name>thumbnailType</name>

                    <description>Thumbnail types</description>

                    <object type="org.exoplatform.services.cms.thumbnail.impl.ThumbnailType">

                        <field name="mimeTypes">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <string>image/jpeg</string>

                                </value>

                                <value>

                                    <string>image/png</string>

                                </value>

                                <value>

                                    <string>image/gif</string>

                                </value>

                                <value>

                                    <string>image/bmp</string>

                                </value>

                                <value>

                                    <string>image/tiff</string>

                                </value>

                            </collection>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: `ImageThumbnailPlugin`

- Set-method: `addPlugin`

- Type: `org.exoplatform.services.cms.thumbnail.impl.ImageThumbnailPlugin`

- Object type: `org.exoplatform.services.cms.thumbnail.impl.ThumbnailType`

Field | Type | Value | Description
--- | --- | --- | ---
mimeTypes | `String` | `image/jpeg` `image/png` `image/gif` `image/bmp` `image/tiff` | The list of thumbnail image types.

### 3.2.8. IgnorePortalPlugin

When a new portal is created, the configuration of IgnorePortalPlugin is used to avoid deploying data to the existing ones which are listed in the init-parameters.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.wcm.portal.artifacts.CreatePortalArtifactsService</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/wcm-extension/wcm/deployment/template-deployment-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.wcm.portal.artifacts.CreatePortalArtifactsService</target-component>

        <component-plugin>

          <name>Add ignored portals</name>

          <set-method>addIgnorePortalPlugin</set-method>

          <type>org.exoplatform.services.wcm.portal.artifacts.IgnorePortalPlugin</type>

          <description>ignored portals. the service will not deploy data to the ignored portals</description>

          <init-params>

            <values-param>

              <name>ignored.portals</name>

              <description>ignored portal list</description>

              <value>classic</value>

              <value>acme</value>

              <value>WAIPortal</value>

            </values-param>

          </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: `Add ignored portals`

- Set-method: `addIgnorePortalPlugin`

- Type: `org.exoplatform.services.wcm.portal.artifacts.IgnorePortalPlugin`

Init-params

Name | Type | Value | Description
--- | --- | --- | ---
ignored.portals | `string` | `classic, acme, WAIPortal` | The list of ignored existing portals.

### 3.2.9. InitialWebcontentPlugin

When a portal is created, this plugin will deploy initial web-contents as the site artifact into the Site Artifact folder of that portal.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.wcm.portal.artifacts.CreatePortalArtifactsService</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/wcm-extension/wcm/newsletter-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.wcm.portal.artifacts.CreatePortalArtifactsService</target-component>

        <component-plugin>

            <name>Initial webcontent artifact for each site</name>

            <set-method>addPlugin</set-method>

            <type>org.exoplatform.services.wcm.webcontent.InitialWebContentPlugin</type>

            <description>This plugin deploy some initial webcontent as site artifact to site artifact folder of portal when

                a portal is

                created

            </description>

            <init-params>

                <object-param>

                    <name>Portal logo data</name>

                    <description>Deployment Descriptor</description>

                    <object type="org.exoplatform.services.deployment.DeploymentDescriptor">

                        <field name="target">

                            <object type="org.exoplatform.services.deployment.DeploymentDescriptor$Target">

                                <field name="repository">

                                    <string>repository</string>

                                </field>

                                <field name="workspace">

                                    <string>collaboration</string>

                                </field>

                                <field name="nodePath">

                                    <string>/sites content/live/{portalName}/web contents/site artifacts</string>

                                </field>

                            </object>

                        </field>

                        <field name="sourcePath">

                            <string>war:/conf/sample-portal/wcm/artifacts/site-resources/acme-templates/Logo.xml</string>

                        </field>

                    </object>

                </object-param>

                <object-param>

                    <name>Portal signin data</name>

                    <description>Deployment Descriptor</description>

                    <object type="org.exoplatform.services.deployment.DeploymentDescriptor">

                        <field name="target">

                            <object type="org.exoplatform.services.deployment.DeploymentDescriptor$Target">

                                <field name="repository">

                                    <string>repository</string>

                                </field>

                                <field name="workspace">

                                    <string>collaboration</string>

                                </field>

                                <field name="nodePath">

                                    <string>/sites content/live/{portalName}/web contents/site artifacts</string>

                                </field>

                            </object>

                        </field>

                        <field name="sourcePath">

                            <string>war:/conf/sample-portal/wcm/artifacts/site-resources/acme-templates/Signin.xml</string>

                        </field>

                    </object>

                </object-param>

                <object-param>

                    ...

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: `AddLifecycle`

- Set-method: `addPlugin`

- Type: `org.exoplatform.services.wcm.webcontent.InitialWebContentPlugin`

- Object type: `org.exoplatform.services.deployment.DeploymentDescriptor$Target`

Name | Type | Value | Description
--- | --- | --- | ---
repository | `string` | `repository` | The repository into which the initial web contents will be deployed.
workspace | `string` | `collaboration` | The workspace into which the initial web contents will be deployed.
nodePath | `string` | `/sites content/live/{portalName}/web contents/site artifacts` | The target node where the initial web-contents will be deployed into.
sourcePath | `string` | `war:/conf/sample-portal/wcm/artifacts/site-resources/acme-templates/Logo.xml` | The path to the source that this plugin will get data.

### 3.2.10. LinkDeploymentPlugin

This plugin is used to create predefined Symlinks into the system.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.deployment.WCMContentInitializerService</target-component>

The configuration is applied mainly in packaging/ecmdemo/webapp/src/main/webapp/WEB-INF/conf/sample-portal/wcm/deployment/acme-deployment-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.deployment.WCMContentInitializerService</target-component>

        <component-plugin>

            <name>Content Initializer Service</name>

            <set-method>addPlugin</set-method>

            <type>org.exoplatform.services.deployment.plugins.LinkDeploymentPlugin</type>

            <description>Link Deployment Plugin</description>

            <init-params>

                <object-param>

                    <name>link01</name>

                    <description>Deployment Descriptor</description>

                    <object type="org.exoplatform.services.deployment.plugins.LinkDeploymentDescriptor">

                        <field name="sourcePath">

                            <string>repository:collaboration:/sites content/live/acme/web contents/News/News1</string>

                        </field>

                        <field name="targetPath">

                            <string>repository:collaboration:/sites content/live/acme/categories/acme</string>

                        </field>

                    </object>

                </object-param>

                <object-param>

                    <name>link02</name>

                    <description>Deployment Descriptor</description>

                    <object type="org.exoplatform.services.deployment.plugins.LinkDeploymentDescriptor">

                        <field name="sourcePath">

                            <string>repository:collaboration:/sites content/live/acme/web contents/News/News2</string>

                        </field>

                        <field name="targetPath">

                            <string>repository:collaboration:/sites content/live/acme/categories/acme</string>

                        </field>

                    </object>

                </object-param>

                <object-param>

                    <name>link03</name>

                    <description>Deployment Descriptor</description>

                    <object type="org.exoplatform.services.deployment.plugins.LinkDeploymentDescriptor">

                        <field name="sourcePath">

                            <string>repository:collaboration:/sites content/live/acme/web contents/News/News3</string>

                        </field>

                        <field name="targetPath">

                            <string>repository:collaboration:/sites content/live/acme/categories/acme</string>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: Content Initializer Service

- Set-method: addPlugin

- Type: org.exoplatform.services.wcm.webcontent.InitialWebContentPlugin

- Object type: org.exoplatform.services.deployment.plugins.LinkDeploymentDescriptor

Field | Type | Value | Description
--- | --- | --- | ---
sourcePath | `string` | `repository:collaboration:/sites content/live/acme/web contents/News/News1` | The path to the source where this plugin will get data.
targetPath | `string` | `repository:collaboration:/sites content/live/acme/categories/acme` | The path to the target where this plugin will deploy.

### 3.2.11. LockGroupsOrUsersPlugin

This plugin is used to configure predefined groups or users for lock administration. To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.lock.LockService</target-component>

The configuration is applied mainly in core/core-configuration/src/main/webapp/WEB-INF/conf/wcm-core/core-services-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.lock.LockService</target-component>

        <component-plugin>

            <name>predefinedLockGroupsOrUsersPlugin</name>

            <set-method>addLockGroupsOrUsersPlugin</set-method>

            <type>org.exoplatform.services.cms.lock.impl.LockGroupsOrUsersPlugin</type>

            <init-params>

                <object-param>

                    <name>LockGroupsOrUsers.configuration</name>

                    <description>configuration predefined groups or users for lock administrator</description>

                    <object type="org.exoplatform.services.cms.lock.impl.LockGroupsOrUsersConfig">

                        <field name="settingLockList">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <string>*:/platform/administrators</string>

                                </value>

                            </collection>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: predefinedLockGroupsOrUsersPlugin

- Set-method: addLockGroupsOrUsersPlugin

- Type: org.exoplatform.services.cms.lock.impl.LockGroupsOrUsersPlugin

- Object type: `org.exoplatform.services.cms.lock.impl.LockGroupsOrUsersConfig`

Field | Type | Value | Description
--- | --- | --- | ---
settingLockList | `ArrayList` | {java.util.ArrayList} | The list of the groups or user to be locked.

### 3.2.12. ManageDrivePlugin

This plugin is used to create a predefined drive into a repository. A drive can be considered as a shortcut in the content repository, a quick access to some places for users. You can restrict the visibility of this drive to a group/user and apply a specific view depending on the content you have in this area.

A drive is the combination of:

- Path: the root folder of the drive.

- View: how we can see contents, such as by list, thumbnails, coverflow.

- Role: the visibility to every users, a group or a single user.

- Options: allow you to specify whether to see hidden nodes or not and to create folders in this drive or not.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.drives.ManageDriveService</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/dms-extension/dms/dms-drives-configuration.xml.

The following structure is used for drives configuration.

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.drives.ManageDriveService</target-component>

        <component-plugin>

            <name>manage.drive.plugin</name>

            <set-method>setManageDrivePlugin</set-method>

            <type>org.exoplatform.services.cms.drives.impl.ManageDrivePlugin</type>

            <description>Nothing</description>

            <init-params>

                <object-param>

                    There are initializing attributes of org.exoplatform.services.cms.drives.DriveData object

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

The file that contains the structure above will be configured in the configuration.xml file as the following:

    <import>war:/conf/wcm-extension/dms/drives-configuration.xml</import>

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.drives.ManageDriveService</target-component>

        <component-plugin>

            <name>manage.drive.plugin</name>

            <set-method>setManageDrivePlugin</set-method>

            <type>org.exoplatform.services.cms.drives.impl.ManageDrivePlugin</type>

            <description>Nothing</description>

            <init-params>

                <object-param>

                    <name>Managed Sites</name>

                    <description>Managed Sites</description>

                    <object type="org.exoplatform.services.cms.drives.DriveData">

                        <field name="name">

                            <string>Managed Sites</string>

                        </field>

                        <field name="repository">

                            <string>repository</string>

                        </field>

                        <field name="workspace">

                            <string>collaboration</string>

                        </field>

                        <field name="permissions">

                            <string>*:/platform/administrators</string>

                        </field>

                        <field name="homePath">

                            <string>/sites content/live</string>

                        </field>

                        <field name="icon">

                            <string/>

                        </field>

                        <field name="views">

                            <string>wcm-view</string>

                        </field>

                        <field name="viewPreferences">

                            <boolean>false</boolean>

                        </field>

                        <field name="viewNonDocument">

                            <boolean>true</boolean>

                        </field>

                        <field name="viewSideBar">

                            <boolean>true</boolean>

                        </field>

                        <field name="showHiddenNode">

                            <boolean>false</boolean>

                        </field>

                        <field name="allowCreateFolders">

                            <string>nt:folder,nt:unstructured</string>

                        </field>

                        <field name="allowNodeTypesOnTree">

                            <string>*</string>

                        </field>

                    </object>

                </object-param>

                <object-param>

                    <name>Public</name>

                    <description>Public drive</description>

                    <object type="org.exoplatform.services.cms.drives.DriveData">

                        <field name="name">

                            <string>Public</string>

                        </field>

                        <field name="repository">

                            <string>repository</string>

                        </field>

                        <field name="workspace">

                            <string>collaboration</string>

                        </field>

                        <field name="permissions">

                            <string>*:/platform/users</string>

                        </field>

                        <field name="homePath">

                            <string>/Users/${userId}/Public</string>

                        </field>

                        <field name="icon">

                            <string/>

                        </field>

                        <field name="views">

                            <string>simple-view, admin-view</string>

                        </field>

                        <field name="viewPreferences">

                            <boolean>false</boolean>

                        </field>

                        <field name="viewNonDocument">

                            <boolean>false</boolean>

                        </field>

                        <field name="viewSideBar">

                            <boolean>true</boolean>

                        </field>

                        <field name="showHiddenNode">

                            <boolean>false</boolean>

                        </field>

                        <field name="allowCreateFolders">

                            <string>nt:folder,nt:unstructured</string>

                        </field>

                        <field name="allowNodeTypesOnTree">

                            <string>*</string>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: `manage.drive.plugin`

- Set-method: `setManageDrivePlugin`

- Type: `org.exoplatform.services.cms.drives.impl.ManageDrivePlugin`

- Object type: `org.exoplatform.services.cms.drives.DriveData`

Field | Type | Value | Description
--- | --- | --- | ---
name | `String` | `Public` | The name of drive which must be unique.
repository | `String` | `repository` | Content Repository where to find the root path.
workspace | `String` | `collaboration` | Workspace in the Content Repository.
homePath | `String` | `/sites content/live` | Root path in the Content Repository. `userId` can be used to use the userId at runtime in the path.
permissions | `String` | *:/platform/administrators | Visibility of the drive based on eXo rights. For example: `*:/platform/users`
icon | `String` | N/A | The Url to the icon.
views | `String` | `wcm-view` | The list of views you want to use, separated by commas. For example: `simple-view,admin-view`
viewPreferences | `Boolean` | `false` | The User Preference icon will be visible if true.
viewNonDocument | `Boolean` | `true` | Non-document types will be visible in the user view if true.
viewSideBar | `Boolean` | `true` | Show/Hide the left bar (with navigation and filters).
showHiddenNode | `Boolean` | `false` | Hidden nodes will be visible if true.
allowCreateFolders | `String` | `nt:folder,nt:unstructured` | List of node types that you can create as folders. For example: `nt:folder,nt:unstructured`.
allowNodeTypesOnTree | `String` | * | Allow you to filter node types in the navigation tree. For example, the default value is "*" to show all content types.

### 3.2.13. ManageViewPlugin

This plugin is used to create a predefined View into a repository. A View can include many object parameters. Parameters are used to create default Views, Templates and Actions of Manage View service. View enables administrators to customize View classification that can impact on users in exploring workspace. Each object-param has a type that is a class representing all properties of a View.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.views.ManageViewService</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/dms-extension/dms/dms-views-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.views.ManageViewService</target-component>

        <component-plugin>

            <name>manage.view.plugin</name>

            <set-method>setManageViewPlugin</set-method>

            <type>org.exoplatform.services.cms.views.impl.ManageViewPlugin</type>

            <description>this plugin manage user view</description>

            <init-params>

                <value-param>

                    <name>autoCreateInNewRepository</name>

                    <value>true</value>

                </value-param>

                <value-param>

                    <name>predefinedViewsLocation</name>

                    <value>war:/conf/dms-extension/dms/artifacts</value>

                </value-param>

                <value-param>

                    <name>repository</name>

                    <value>repository</value>

                </value-param>

                <object-param>

                    <name>System-View</name>

                    <description>View configuration for System workspace</description>

                    <object type="org.exoplatform.services.cms.views.ViewConfig">

                        <field name="name">

                            <string>system-view</string>

                        </field>

                        <field name="permissions">

                            <string>*:/platform/administrators</string>

                        </field>

                        <field name="template">

                            <string>/exo:ecm/views/templates/ecm-explorer/SystemView</string>

                        </field>

                        <field name="tabList">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <object type="org.exoplatform.services.cms.views.ViewConfig$Tab">

                                        <field name="tabName">

                                            <string>Info</string>

                                        </field>

                                        <field name="buttons">

                                            <string>viewNodeType; viewPermissions; viewProperties; showJCRStructure</string>

                                        </field>

                                    </object>

                                </value>

                            </collection>

                        </field>

                    </object>

                </object-param>

                <object-param>

                    <name>System Template</name>

                    <description>Template for display documents in list style</description>

                    <object type="org.exoplatform.services.cms.views.TemplateConfig">

                        <field name="type">

                            <string>ecmExplorerTemplate</string>

                        </field>

                        <field name="name">

                            <string>SystemView</string>

                        </field>

                        <field name="warPath">

                            <string>/ecm-explorer/SystemView.gtmpl</string>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: manage.view.plugin

- Set-method: setManageViewPlugin

- Type: org.exoplatform.services.cms.views.impl.ManageViewPlugin

- Init-param:

value-param | Type | Value | Description
--- | --- | --- | ---
autoCreateInNewRepository | `boolean` | `true` | Allow creating a predefined View in this repository if the value is "true".
predefinedViewsLocation | `string` | war:/conf/dms-extension/dms/artifacts | The location of the View node in the repository.
repository | `string` | `repository` | The repository name.

- Object type: org.exoplatform.services.cms.views.ViewConfig

Field | Type | Value | Description
--- | --- | --- | ---
name | `string` | `system-view` | The name of view which must be unique inside WCM.
permissions | `string` | *:/platform/administrators | Visibility of the view based on eXo rights.
template | `string` | `/exo:ecm/views/templates/ecm-explorer/SystemView` | Specify path to the template location.
tabList | `ArrayList` | {java.util.ArrayList} | Include a set of view names.

- Object type: org.exoplatform.services.cms.views.ViewConfig$Tab

Field | Type | Value | Description
--- | --- | --- | ---
tabName | `string` | `Info` | The name of tab which must be unique.
button | `string` | `viewNodeType; viewPermissions; viewProperties; showJCRStructure` | Specify a set of view component names.

- Object type: org.exoplatform.services.cms.views.TemplateConfig

Field | Type | Vsalue | Description
--- | --- | --- | ---
type | `string` | `ecmExplorerTemplate` | Specify if a name is truly a class representing all properties of a view.
name | `string` | `system-view` | Specify a set of view component names.
warPath | `string` | `/ecm-explorer/SystemView.gtmpl` | Specify a template location to view.

### 3.2.14. PDFThumbnailPlugin

This plugin is to set the supported file types of PDF thumbnail. See also ImageThumbnailPlugin .

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.thumbnail.ThumbnailService</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/dms-extension/dms/dms-thumbnail-configuration.xml.

Sample configuration:

    <component-plugin>

        <name>PDFThumbnailPlugin</name>

        <set-method>addPlugin</set-method>

        <type>org.exoplatform.services.cms.thumbnail.impl.PDFThumbnailPlugin</type>

        <init-params>

            <object-param>

                <name>thumbnailType</name>

                <description>Thumbnail types</description>

                <object type="org.exoplatform.services.cms.thumbnail.impl.ThumbnailType">

                    <field name="mimeTypes">

                        <collection type="java.util.ArrayList">

                            <value>

                                <string>application/pdf</string>

                            </value>

                        </collection>

                    </field>

                </object>

            </object-param>

        </init-params>

    </component-plugin>

In which:

- Name: PDFThumbnailPlugin

- Set-method: addPlugin

- Type: org.exoplatform.services.cms.thumbnail.impl.PDFThumbnailPlugin

- Object type: org.exoplatform.services.cms.thumbnail.impl.ThumbnailType

Field | Type | Value | Description
--- | --- | --- | ---
mimeTypes | `String` | `application/pdf` | The MIME type of the pdf thumbnail.

### 3.2.15. PorletTemplatePlugin

This plugin is used to import the view templates into Content List Viewer.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.views.ApplicationTemplateManagerService</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/wcm-extension/dms/application-templates-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.views.ApplicationTemplateManagerService</target-component>

        <component-plugin>

            <name>clv.templates.plugin</name>

            <set-method>addPlugin</set-method>

            <type>org.exoplatform.services.cms.views.PortletTemplatePlugin</type>

            <description>This plugin is used to import views templates for Content List Viewer</description>

            <init-params>

                <value-param>

                    <name>portletName</name>

                    <value>content-list-viewer</value>

                </value-param>

                <value-param>

                    <name>portlet.template.path</name>

                    <value>war:/conf/wcm-artifacts/application-templates/content-list-viewer</value>

                </value-param>

                <object-param>

                    <name>default.folder.list.viewer</name>

                    <description>Default folder list viewer groovy template</description>

                    <object type="org.exoplatform.services.cms.views.PortletTemplatePlugin$PortletTemplateConfig">

                        <field name="templateName">

                            <string>UIContentListPresentationDefault.gtmpl</string>

                        </field>

                        <field name="category">

                            <string>list</string>

                        </field>

                    </object>

                </object-param>

                <object-param>

                    ....

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: clv.templates.plugin

- Set-method: addPlugin

- Type: org.exoplatform.services.cms.views.PortletTemplatePlugin

- Init-param:

Value-param | Type | Value | Description
--- | --- | --- | ---
portletName | `string` | `content-list-viewer` | The name of the portlet.
portlet.template.path | `string` | `war:/conf/wcm-artifacts/application-templates/content-list-viewer` | The path to the configuration of the portlet.

- Object type: org.exoplatform.services.cms.views.PortletTemplatePlugin$PortletTemplateConfig

Field | Type | Description
--- | --- | ---
templateName | `string` | The name of the GROOVY template.
category | `string` | The category name.

### 3.2.16. PredefinedProcessesPlugin

This plugin is used to import the predefined processes into the system.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.workflow.WorkflowServiceContainer</target-component>

The configuration is applied mainly in packaging/workflow/webapp/src/main/webapp/WEB-INF/workflow-extension/workflow/bonita-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.workflow.WorkflowServiceContainer</target-component>

        <component-plugin>

            <name>deploy.predefined.processes</name>

            <set-method>addPlugin</set-method>

            <type>org.exoplatform.services.workflow.PredefinedProcessesPlugin</type>

            <init-params>

                <object-param>

                    <name>predefined.processes</name>

                    <description>load of default business processes</description>

                    <object type="org.exoplatform.services.workflow.ProcessesConfig">

                        <field name="processLocation">

                            <string>war:/conf/bp</string>

                        </field>

                        <field name="predefinedProcess">

                            <collection type="java.util.HashSet">

                                <value>

                                    <string>/exo-ecms-ext-workflow-bp-bonita-content-${project.version}.jar</string>

                                </value>

                                <value>

                                    <string>/exo-ecms-ext-workflow-bp-bonita-payraise-${project.version}.jar</string>

                                </value>

                                <value>

                                    <string>/exo-ecms-ext-workflow-bp-bonita-holiday-${project.version}.jar</string>

                                </value>

                            </collection>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- name: deploy.predefined.processes

- set-method: addPlugin

- type: org.exoplatform.services.workflow.PredefinedProcessesPlugin

- Object type: `org.exoplatform.services.workflow.ProcessesConfig`

Field | Type | Value | Description
--- | --- | --- | ---
processLocation | `string` | `war:/conf/bp` | The path to the process.
predefinedProcess | `HashSet` | `java.util.HashSet` | The list of the processes.

### 3.2.17. QueryPlugin

This plugin is used to store predefined queries into the repositories of the system.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.queries.QueryService</target-component>

The configuration is applied mainly in /packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/dms-extension/dms/dms-queries-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.queries.QueryService</target-component>

        <component-plugin>

            <name>query.plugin</name>

            <set-method>setQueryPlugin</set-method>

            <type>org.exoplatform.services.cms.queries.impl.QueryPlugin</type>

            <description>Nothing</description>

            <init-params>

                <value-param>

                    <name>autoCreateInNewRepository</name>

                    <value>true</value>

                </value-param>

                <value-param>

                    <name>repository</name>

                    <value>repository</value>

                </value-param>

                <object-param>

                    <name>CreatedDocuments</name>

                    <description>documents created by the current user</description>

                    <object type="org.exoplatform.services.cms.queries.impl.QueryData">

                        <field name="name">

                            <string>Created Documents</string>

                        </field>

                        <field name="language">

                            <string>xpath</string>

                        </field>

                        <field name="statement">

                            <string>//*[(@jcr:primaryType = 'exo:article' or @jcr:primaryType = 'nt:file') and

                                @exo:owner='${UserId}$'] order by @exo:dateCreated descending

                            </string>

                        </field>

                        <field name="permissions">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <string>*:/platform/users</string>

                                </value>

                            </collection>

                        </field>

                        <field name="cachedResult">

                            <boolean>false</boolean>

                        </field>

                    </object>

                </object-param>

                <object-param>

                    <name>CreatedDocumentsDayBefore</name>

                    <description>documents created the day before</description>

                    <object type="org.exoplatform.services.cms.queries.impl.QueryData">

                        <field name="name">

                            <string>CreatedDocumentDayBefore</string>

                        </field>

                        <field name="language">

                            <string>xpath</string>

                        </field>

                        <field name="statement">

                            <string>//element(*,exo:article)[@exo:dateCreated &lt; xs:dateTime('${Date}$')] order by

                                @exo:dateCreated descending

                            </string>

                        </field>

                        <field name="permissions">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <string>*:/platform/users</string>

                                </value>

                            </collection>

                        </field>

                        <field name="cachedResult">

                            <boolean>true</boolean>

                        </field>

                    </object>

                </object-param>

                <object-param>

                    <name>AllArticles</name>

                    <description>All articles</description>

                    <object type="org.exoplatform.services.cms.queries.impl.QueryData">

                        <field name="name">

                            <string>All Articles</string>

                        </field>

                        <field name="language">

                            <string>xpath</string>

                        </field>

                        <field name="statement">

                            <string>//element(*,exo:article) order by @exo:dateCreated descending</string>

                        </field>

                        <field name="permissions">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <string>*:/platform/users</string>

                                </value>

                            </collection>

                        </field>

                        <field name="cachedResult">

                            <boolean>true</boolean>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: `predefinedTaxonomyPlugin`

- Set-method: `setQueryPlugin`

- Type: `org.exoplatform.services.cms.queries.impl.QueryPlugin`

- Init-param:

Value-param | Type | Value | Description
--- | --- | --- | ---
`autoCreateInNewRepository` | `boolean` | `true` | Store queries in a new repository if the value is "true".
`repository` | `string` | `repository` | The repository to the target node.

- Object type: `org.exoplatform.services.cms.queries.impl.QueryData`

Field | Type | Description
--- | --- | ---
name | `string` | The name of the query.
language | `string` | The language of the query (Xpath, SQL).
statement | `string` | The query statement.
permissions | `ArrayList` | The permission which users must have to use this query.
cachedResult | `boolean` | Specify if the query is cached or not.

### 3.2.18. RemoveTaxonomyPlugin

This plugin is used to invalidate taxonomy trees in categories folder of a portal when the portal is removed.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.wcm.portal.artifacts.RemovePortalArtifactsService</target-component>

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.wcm.portal.artifacts.RemovePortalArtifactsService</target-component>

        <component-plugin>

            <name>Remove taxonomy tree</name>

            <set-method>addPlugin</set-method>

            <type>org.exoplatform.services.wcm.category.RemoveTaxonomyPlugin</type>

            <description>This plugin invalidate taxonomy tree to categories folder of portal when a portal is removed

            </description>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: `Remove taxonomy tree`

- Set-method: `addPlugin`

- Type: `org.exoplatform.services.wcm.category.RemoveTaxonomyPlugin`

### 3.2.19. ScriptActionPlugin

This plugin is used to import the predefined script actions into the system.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.actions.ActionServiceContainer</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/dms-extension/dms/dms-actions-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.actions.ActionServiceContainer</target-component>

        <component-plugin>

            <name>exo:scriptAction</name>

            <set-method>addPlugin</set-method>

            <type>org.exoplatform.services.cms.actions.impl.ScriptActionPlugin</type>

            <init-params>

                <object-param>

                    <name>predefined.actions</name>

                    <description>description</description>

                    <object type="org.exoplatform.services.cms.actions.impl.ActionConfig">

                        <field name="repository">

                            <string>repository</string>

                        </field>

                        <field name="workspace">

                            <string>collaboration</string>

                        </field>

                        <field name="actions">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <object type="org.exoplatform.services.cms.actions.impl.ActionConfig$Action">

                                        <field name="type">

                                            <string>exo:sendMailAction</string>

                                        </field>

                                        <field name="name">

                                            <string>sendMail</string>

                                        </field>

                                        <field name="description">

                                            <string>send a notification mail</string>

                                        </field>

                                        <field name="srcWorkspace">

                                            <string>collaboration</string>

                                        </field>

                                        <field name="srcPath">

                                            <string>/Documents/Validation Requests</string>

                                        </field>

                                        <field name="isDeep">

                                            <boolean>true</boolean>

                                        </field>

                                        <field name="lifecyclePhase">

                                            <collection type="java.util.ArrayList">

                                                <value>

                                                    <string>read</string>

                                                </value>

                                            </collection>

                                        </field>

                                        <field name="roles">

                                            <string>*:/platform/administrators</string>

                                        </field>

                                        <field name="variables">

                                            <string>exo:to=benjamin.mestrallet@exoplatform.com</string>

                                        </field>

                                        <field name="mixins">

                                            <collection type="java.util.ArrayList">

                                                <value>

                                                    <object type="org.exoplatform.services.cms.actions.impl.ActionConfig$Mixin">

                                                        <field name="name">

                                                            <string>mix:affectedNodeTypes</string>

                                                        </field>

                                                        <field name="properties">

                                                            <string>

                                                                exo:affectedNodeTypeNames=exo:article,exo:podcast,exo:sample,kfx:document,nt:file,rma:filePlan

                                                            </string>

                                                        </field>

                                                    </object>

                                                </value>

                                            </collection>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.actions.impl.ActionConfig$Action">

                                        <field name="type">

                                            <string>exo:trashFolderAction</string>

                                        </field>

                                        <field name="name">

                                            <string>trashFolder</string>

                                        </field>

                                        <field name="description">

                                            <string>trigger actions for items in trash</string>

                                        </field>

                                        <field name="srcWorkspace">

                                            <string>collaboration</string>

                                        </field>

                                        <field name="srcPath">

                                            <string>/Trash</string>

                                        </field>

                                        <field name="isDeep">

                                            <boolean>false</boolean>

                                        </field>

                                        <field name="lifecyclePhase">

                                            <collection type="java.util.ArrayList">

                                                <value>

                                                    <string>node_added</string>

                                                </value>

                                                <value>

                                                    <string>node_removed</string>

                                                </value>

                                            </collection>

                                        </field>

                                    </object>

                                </value>

                            </collection>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- name: exo:scriptAction_

- set-method : addPlugin

- type: org.exoplatform.services.cms.actions.impl.ScriptActionPlugin

- Object type: `org.exoplatform.services.cms.actions.impl.ActionConfig`

Name | Type | Default Value | Description
--- | --- | --- | ---
repository | `string` | `repository` | The name of the repository.
workspace | `string` | `collaboration` | The name of the workspace.
actions | `ArrayList` | {java.util.ArrayList} | The list of the actions.

- Object type: `org.exoplatform.services.cms.actions.impl.ActionConfig$Action`

Name | Type | Default Value | Description
--- | --- | --- | ---
type | `string` | `exo:sendMailAction` | The type of the action.
name | `string` | `sendMail` | The name of the action.
description | `string` | `send a notification mail` | The description of the action.
srcWorkspace | `string` | `collaboration` | The source workspace of the action.
isDeep | `boolean` | `false` | Specify the depth of node that the action script will affect.
srcPath | `string` | `trash` | The path to the source.
lifecyclePhase | `ArrayList` | {java.util.ArrayList} | Specify the lifecycle phase that the action will take place.

### 3.2.20. ScriptPlugin

This plugin is used to add groovy scripts into the system.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.scripts.ScriptService</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/dms-extension/dms/dms-scripts-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.scripts.ScriptService</target-component>

        <component-plugin>

            <name>manage.script.plugin</name>

            <set-method>addScriptPlugin</set-method>

            <type>org.exoplatform.services.cms.scripts.impl.ScriptPlugin</type>

            <description>Nothing</description>

            <init-params>

                <value-param>

                    <name>autoCreateInNewRepository</name>

                    <value>true</value>

                </value-param>

                <value-param>

                    <name>repository</name>

                    <value>repository</value>

                </value-param>

                <value-param>

                    <name>predefinedScriptsLocation</name>

                    <value>war:/conf/dms-extension/dms/artifacts</value>

                </value-param>

                <object-param>

                    <name>predefined.scripts</name>

                    <description>description</description>

                    <object type="org.exoplatform.services.cms.impl.ResourceConfig">

                        <field name="resources">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/action/RSSScript.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/action/SendMailScript.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/action/TrashFolderScript.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/action/EnableVersioningScript.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/action/AutoVersioningScript.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/action/AddMetadataScript.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/action/TransformBinaryChildrenToTextScript.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/action/GetMailScript.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/action/ProcessRecordsScript.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/action/PublishingRequestScript.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/action/AddTaxonomyActionScript.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/widget/FillSelectBoxWithCalendarCategories.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/widget/FillSelectBoxWithMetadatas.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/widget/FillSelectBoxWithWorkspaces.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/widget/FillSelectBoxWithNodeChildren.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/widget/FillSelectBoxWithLanguage.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/interceptor/PreNodeSaveInterceptor.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/interceptor/PostNodeSaveInterceptor.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>ecm-explorer/interceptor/PostFilePlanInterceptor.groovy</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.impl.ResourceConfig$Resource">

                                        <field name="name">

                                            <string>content-browser/GetDocuments.groovy</string>

                                        </field>

                                    </object>

                                </value>

                            </collection>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: `manage.script.plugin`

- Set-method: `addScriptPlugin`

- Type: `org.exoplatform.services.cms.scripts.impl.ScriptPlugin`

- Init-param:

Value-param | Type | Value | Description
--- | --- | --- | ---
autoCreateInNewRepository | `Boolean` | `true` | Enable/Disable the creation of the scripts in the newly created repository.
repository | `String` | `repository` | The repository name.
predefinedScriptsLocation | `String` | `war:/conf/dms-extension/dms/artifacts` | The location where the scripts are created.

- Object type: `org.exoplatform.services.cms.impl.ResourceConfig`

Field | Type | Value | Description
--- | --- | --- | ---
resource | `ArrayList` | {java.util.ArrayList} | The resource name.

### 3.2.21. StageAndVersionPublicationPlugin

This plugin is used to control the state life cycle of a content.

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/content-extended/authoring/configuration.xml.

Sample configuration:

    <component-plugin>

        <name>States and versions based publication</name>

        <set-method>addPublicationPlugin</set-method>

        <type>org.exoplatform.services.wcm.publication.lifecycle.stageversion.StageAndVersionPublicationPlugin</type>

        <description>This publication lifecycle publish a web content or DMS document to a portal page with more state

            and version.

        </description>

    </component-plugin>

In which:

- name: States and versions based publication

- set method: addPublicationPlugin

- type: org.exoplatform.services.wcm.publication.lifecycle.stageversion.StageAndVersionPublicationPlugin

### 3.2.22. StatesLifecyclePlugin

This plugin is used to control the state life cycle of a content.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.wcm.extensions.publication.PublicationManager</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/content-extended/authoring/configuration.xml.

Sample configuration:

    <component-plugin>

        <name>AddLifecycle</name>

        <set-method>addLifecycle</set-method>

        <type>org.exoplatform.services.wcm.extensions.publication.lifecycle.StatesLifecyclePlugin</type>

        <description>Configures</description>

        <priority>1</priority>

        <init-params>

            <object-param>

                <name>lifecycles</name>

                <object type="org.exoplatform.services.wcm.extensions.publication.lifecycle.impl.LifecyclesConfig">

                    <field name="lifecycles">

                        <collection type="java.util.ArrayList">

                            <value>

                                <object type="org.exoplatform.services.wcm.extensions.publication.lifecycle.impl.LifecyclesConfig$Lifecycle">

                                    <field name="name">

                                        <string>lifecycle1</string>

                                    </field>

                                    <field name="publicationPlugin">

                                        <string>Authoring publication</string>

                                    </field>

                                    <field name="states">

                                        <collection type="java.util.ArrayList">

                                            <value>

                                                <object type="org.exoplatform.services.wcm.extensions.publication.lifecycle.impl.LifecyclesConfig$State">

                                                    <field name="state">

                                                        <string>draft</string>

                                                    </field>

                                                    <field name="membership">

                                                        <string>author:/platform/web-contributors</string>

                                                    </field>

                                                </object>

                                            </value>

                                            <value>

                                                <object type="org.exoplatform.services.wcm.extensions.publication.lifecycle.impl.LifecyclesConfig$State">

                                                    <field name="state">

                                                        <string>pending</string>

                                                    </field>

                                                    <field name="membership">

                                                        <string>author:/platform/web-contributors</string>

                                                    </field>

                                                </object>

                                            </value>

                                            <value>

                                                <object type="org.exoplatform.services.wcm.extensions.publication.lifecycle.impl.LifecyclesConfig$State">

                                                    <field name="state">

                                                        <string>approved</string>

                                                    </field>

                                                    <field name="membership">

                                                        <string>manager:/platform/web-contributors</string>

                                                    </field>

                                                </object>

                                            </value>

                                            <value>

                                                <object type="org.exoplatform.services.wcm.extensions.publication.lifecycle.impl.LifecyclesConfig$State">

                                                    <field name="state">

                                                        <string>staged</string>

                                                    </field>

                                                    <field name="membership">

                                                        <string>publisher:/platform/web-contributors</string>

                                                    </field>

                                                </object>

                                            </value>

                                            <value>

                                                <object type="org.exoplatform.services.wcm.extensions.publication.lifecycle.impl.LifecyclesConfig$State">

                                                    <field name="state">

                                                        <string>published</string>

                                                    </field>

                                                    <field name="membership">

                                                        <string>publisher:/platform/web-contributors</string>

                                                    </field>

                                                </object>

                                            </value>

                                        </collection>

                                    </field>

                                </object>

                            </value>

                        </collection>

                    </field>

                </object>

            </object-param>

        </init-params>

    </component-plugin>

In which:

- Name: AddLifecycle

- Set-method: addLifecycle

- Type: org.exoplatform.services.wcm.extensions.publication.lifecycle.StatesLifecyclePlugin

- Object type: org.exoplatform.services.wcm.extensions.publication.lifecycle.impl.LifecyclesConfig$Lifecycle

Field | Type | Value | Description
--- | --- | --- | ---
name | `string` | `lifecycle1` | The name of the lifecycle.
publicationPlugin | `string` | `Authoring publication` | The publication plugin name.
states | `ArrayList` | {java.util.ArrayList} | The list of the publication states.

- Object type: org.exoplatform.services.wcm.extensions.publication.lifecycle.impl.LifecyclesConfig$State

Field | Type | Description
--- | --- | ---
state | `string` | The publication states: draft, pending, staged, approved or published.
membership | `string` | The user or group.

### 3.2.23. TagPermissionPlugin

This plugin is used to configure the predefined permission for tag to inject in JCR.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.folksonomy.NewFolksonomyService</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/dms-extension/dms/dms-folksonomy-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.folksonomy.NewFolksonomyService</target-component>

        <component-plugin>

            <name>predefinedTagPermissionPlugin</name>

            <set-method>addTagPermissionPlugin</set-method>

            <type>org.exoplatform.services.cms.folksonomy.impl.TagPermissionPlugin</type>

            <init-params>

                <object-param>

                    <name>TagPermission.configuration</name>

                    <description>configuration predefined permission for tag to inject in jcr</description>

                    <object type="org.exoplatform.services.cms.folksonomy.impl.TagPermissionConfig">

                        <field name="tagPermissionList">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <string>*:/platform/administrators</string>

                                </value>

                            </collection>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: predefinedTagPermissionPlugin

- Set-method: addTagPermissionPlugin

- Type: org.exoplatform.services.cms.folksonomy.impl.TagPermissionPlugin

- Object type: org.exoplatform.services.cms.folksonomy.impl.TagPermissionConfig

Name | Type | Value | Description
--- | --- | --- | ---
tagPermissionList | `ArrayList` | {java.util.ArrayList} | The users/groups that have the permission.

### 3.2.24. TagStylePlugin

This plugin is used to configure the predefined styles for tag to inject in JCR.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.folksonomy.NewFolksonomyService</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/dms-extension/dms/dms-folksonomy-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.folksonomy.NewFolksonomyService</target-component>

        <component-plugin>

            <name>predefinedTagStylePlugin</name>

            <set-method>addTagStylePlugin</set-method>

            <type>org.exoplatform.services.cms.folksonomy.impl.TagStylePlugin</type>

            <init-params>

                <object-param>

                    <name>htmStyleForTag.configuration</name>

                    <description>configuration predefined html style for tag to inject in jcr</description>

                    <object type="org.exoplatform.services.cms.folksonomy.impl.TagStyleConfig">

                        <field name="autoCreatedInNewRepository">

                            <boolean>true</boolean>

                        </field>

                        <field name="repository">

                            <string>repository</string>

                        </field>

                        <field name="tagStyleList">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <object type="org.exoplatform.services.cms.folksonomy.impl.TagStyleConfig$HtmlTagStyle">

                                        <field name="name">

                                            <string>normal</string>

                                        </field>

                                        <field name="tagRate">

                                            <string>0..2</string>

                                        </field>

                                        <field name="htmlStyle">

                                            <string>font-size: 12px; font-weight: bold; color: #6b6b6b; font-family:

                                                verdana; text-decoration:none;

                                            </string>

                                        </field>

                                        <field name="description">

                                            <string>Normal style for tag</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.folksonomy.impl.TagStyleConfig$HtmlTagStyle">

                                        <field name="name">

                                            <string>interesting</string>

                                        </field>

                                        <field name="tagRate">

                                            <string>2..5</string>

                                        </field>

                                        <field name="htmlStyle">

                                            <string>font-size: 13px; font-weight: bold; color: #5a66ce; font-family:

                                                verdana; text-decoration:none;

                                            </string>

                                        </field>

                                        <field name="description">

                                            <string>Interesting style for tag</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.folksonomy.impl.TagStyleConfig$HtmlTagStyle">

                                        <field name="name">

                                            <string>attractive</string>

                                        </field>

                                        <field name="tagRate">

                                            <string>5..7</string>

                                        </field>

                                        <field name="htmlStyle">

                                            <string>font-size: 15px; font-weight: bold; color: blue; font-family: Arial;

                                                text-decoration:none;

                                            </string>

                                        </field>

                                        <field name="description">

                                            <string>attractive style for tag</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.folksonomy.impl.TagStyleConfig$HtmlTagStyle">

                                        <field name="name">

                                            <string>hot</string>

                                        </field>

                                        <field name="tagRate">

                                            <string>7..10</string>

                                        </field>

                                        <field name="htmlStyle">

                                            <string>font-size: 18px; font-weight: bold; color: #ff9000; font-family: Arial;

                                                text-decoration:none;

                                            </string>

                                        </field>

                                        <field name="description">

                                            <string>hot style for tag</string>

                                        </field>

                                    </object>

                                </value>

                                <value>

                                    <object type="org.exoplatform.services.cms.folksonomy.impl.TagStyleConfig$HtmlTagStyle">

                                        <field name="name">

                                            <string>hottest</string>

                                        </field>

                                        <field name="tagRate">

                                            <string>10..*</string>

                                        </field>

                                        <field name="htmlStyle">

                                            <string>font-size: 20px; font-weight: bold; color: red; font-family:Arial;

                                                text-decoration:none;

                                            </string>

                                        </field>

                                        <field name="description">

                                            <string>hottest style for tag</string>

                                        </field>

                                    </object>

                                </value>

                            </collection>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

- Name: predefinedTagStylePlugin

- Set-method: addTagStylePlugin

- Type: org.exoplatform.services.cms.folksonomy.impl.TagStylePlugin

- Object type: org.exoplatform.services.cms.folksonomy.impl.TagStyleConfig

Name | Type | Value | Description
--- | --- | --- | ---
autoCreatedInNewRepository | `boolean` | `true` | Specify whether the tag style is added automatically in a new repository or not.
repository | `string` | `repository` | Name of the repository where the tag style is added.
tagStyleList | `ArrayList` | {java.util.ArrayList} | The list of tag styles.

- Object type: org.exoplatform.services.cms.folksonomy.impl.TagStyleConfig$HtmlTagStyle

Name | Type | Description
--- | --- | ---
name | `string` | The name of the tag.
tagRate | `string` | The number of times that a tag is used which will decide the respective tag style.
htmlStyle | `string` | The HTML code that defines the style.

### 3.2.25. TaxonomyPlugin

This plugin is used to configure the predefined taxonomies to inject into JCR.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.taxonomy.TaxonomyService</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/dms-extension/dms/dms-categories-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.taxonomy.TaxonomyService</target-component>

        <component-plugin>

            <name>predefinedTaxonomyPlugin</name>

            <set-method>addTaxonomyPlugin</set-method>

            <type>org.exoplatform.services.cms.taxonomy.impl.TaxonomyPlugin</type>

            <init-params>

                <value-param>

                    <name>autoCreateInNewRepository</name>

                    <value>true</value>

                </value-param>

                <value-param>

                    <name>repository</name>

                    <value>repository</value>

                </value-param>

                <value-param>

                    <name>workspace</name>

                    <value>dms-system</value>

                </value-param>

                <value-param>

                    <name>treeName</name>

                    <value>System</value>

                </value-param>

                <object-param>

                    <name>permission.configuration</name>

                    <object type="org.exoplatform.services.cms.taxonomy.impl.TaxonomyConfig">

                        <field name="taxonomies">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <object type="org.exoplatform.services.cms.taxonomy.impl.TaxonomyConfig$Taxonomy">

                                        <field name="permissions">

                                            <collection type="java.util.ArrayList">

                                                <value>

                                                    <object type="org.exoplatform.services.cms.taxonomy.impl.TaxonomyConfig$Permission">

                                                        <field name="identity">

                                                            <string>*:/platform/users</string>

                                                        </field>

                                                        <field name="read">

                                                            <string>true</string>

                                                        </field>

                                                        <field name="addNode">

                                                            <string>true</string>

                                                        </field>

                                                        <field name="setProperty">

                                                            <string>true</string>

                                                        </field>

                                                        <field name="remove">

                                                            <string>false</string>

                                                        </field>

                                                    </object>

                                                </value>

                                            </collection>

                                        </field>

                                    </object>

                                </value>

                            </collection>

                        </field>

                    </object>

                </object-param>

                <object-param>

                    ...

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- Name: predefinedTaxonomyPlugin

- Set-method: addTaxonomyPlugin

- Type: org.exoplatform.services.cms.taxonomy.impl.TaxonomyPlugin

- Init-param:

Value-param | Type | Value | Description
--- | --- | --- | ---
autoCreateInNewRepository | `boolean` | `true` | Enable/Disable the creation of the taxonomies in the newly created repository.
repository | `string` | `repository` | The name of the repository where taxonomies are created.
workspace | `string` | `dms-system` | The name of the workspace where taxonomies are created.
treeName | `string` | `system` | The name of the taxonomy tree created.

- Object type: org.exoplatform.services.cms.taxonomy.impl.TaxonomyConfig

Name | Type | Value | Description
--- | --- | --- | ---
taxonomies | `ArrayList` | {java.util.ArrayList} | The list of taxonomies to be configured with permission.

- Object type: org.exoplatform.services.cms.taxonomy.impl.TaxonomyConfig$Taxonomy

Name | Type | Value | Description
--- | --- | --- | ---
permissions | `ArrayList` | {java.util.ArrayList} | The list of permissions for users or groups to access the taxonomy.

- Object type: org.exoplatform.services.cms.taxonomy.impl.TaxonomyConfig$Permission

Name | Type | Value | Description
--- | --- | --- | ---
identity | `string` | *:/platform/users | The name of the user, group or membership.
read | `boolean` | `true` | The permission to read the taxonomy tree.
addNode | `boolean` | `true` | The permission to add a node to the taxonomy tree.
setProperty | `boolean` | `true` | The permission to set properties for a node in the taxonomy tree.
remove | `boolean` | `false` | The permission to remove a node from the taxonomy tree.

### 3.2.26. TemplatePlugin

This plugin is used to create templates into the system. A template is a presentation to display the saved information.

The node type template is used to edit and display the node content. Each node type has one dialog1.gtmpl file (dialog template) for editing/creating a node and one view1.gtmpl file (view template) for viewing the node content. Using the dialog template, you can specify a dialog whose fields correspond to the properties of the node you want to edit their values. When this template is rendered, each specified field will appear with a data input box for you to edit. Note that you do not have to design a dialog in which all data of the node are listed to be edited. You can just list the subset of node data you want to edit. Like the dialog template, the view template renders information of the node. You just need to create the template and specify which data fields to be displayed. With this kind of template, node information is only displayed but cannot be edited. See details at ContentType.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.cms.templates.TemplateService</target-component>

The configuration is applied mainly in packaging/wcm/webapp/src/main/webapp/WEB-INF/conf/dms-extension/dms/dms-templates-configuration.xml.

Sample configuration:

This below example is configuration for the nt:file template, any other template will be put in the same level with this template starting from the line <object type="org.exoplatform.services.cms.templates.impl.TemplateConfig$NodeType> as the another node type.

    <external-component-plugins>

        <target-component>org.exoplatform.services.cms.templates.TemplateService</target-component>

        <component-plugin>

            <name>addTemplates</name>

            <set-method>addTemplates</set-method>

            <type>org.exoplatform.services.cms.templates.impl.TemplatePlugin</type>

            <init-params>

                <value-param>

                    <name>autoCreateInNewRepository</name>

                    <value>true</value>

                </value-param>

                <value-param>

                    <name>storedLocation</name>

                    <value>war:/conf/dms-extension/dms/artifacts/templates</value>

                </value-param>

                <value-param>

                    <name>repository</name>

                    <value>repository</value>

                </value-param>

                <object-param>

                    <name>template.configuration</name>

                    <description>configuration for the localtion of templates to inject in jcr</description>

                    <object type="org.exoplatform.services.cms.templates.impl.TemplateConfig">

                        <field name="nodeTypes">

                            <collection type="java.util.ArrayList">

                                <value>

                                    <object type="org.exoplatform.services.cms.templates.impl.TemplateConfig$NodeType">

                                        <field name="nodetypeName">

                                            <string>nt:file</string>

                                        </field>

                                        <field name="documentTemplate">

                                            <boolean>true</boolean>

                                        </field>

                                        <field name="label">

                                            <string>File</string>

                                        </field>

                                        <field name="referencedView">

                                            <collection type="java.util.ArrayList">

                                                <value>

                                                    <object type="org.exoplatform.services.cms.templates.impl.TemplateConfig$Template">

                                                        <field name="templateFile">

                                                            <string>/file/views/view1.gtmpl</string>

                                                        </field>

                                                        <field name="roles">

                                                            <string>*</string>

                                                        </field>

                                                    </object>

                                                </value>

                                                <value>

                                                    <object type="org.exoplatform.services.cms.templates.impl.TemplateConfig$Template">

                                                        <field name="templateFile">

                                                            <string>/file/views/admin_view.gtmpl</string>

                                                        </field>

                                                        <field name="roles">

                                                            <string>*:/platform/administrators</string>

                                                        </field>

                                                    </object>

                                                </value>

                                            </collection>

                                        </field>

                                        <field name="referencedDialog">

                                            <collection type="java.util.ArrayList">

                                                <value>

                                                    <object type="org.exoplatform.services.cms.templates.impl.TemplateConfig$Template">

                                                        <field name="templateFile">

                                                            <string>/file/dialogs/dialog1.gtmpl</string>

                                                        </field>

                                                        <field name="roles">

                                                            <string>*</string>

                                                        </field>

                                                    </object>

                                                </value>

                                                <value>

                                                    <object type="org.exoplatform.services.cms.templates.impl.TemplateConfig$Template">

                                                        <field name="templateFile">

                                                            <string>/file/dialogs/admin_dialog.gtmpl</string>

                                                        </field>

                                                        <field name="roles">

                                                            <string>*:/platform/administrators</string>

                                                        </field>

                                                    </object>

                                                </value>

                                            </collection>

                                        </field>

                                        <field name="referencedSkin">

                                            <collection type="java.util.ArrayList">

                                                <value>

                                                    <object type="org.exoplatform.services.cms.templates.impl.TemplateConfig$Template">

                                                        <field name="templateFile">

                                                            <string>/file/skins/Stylesheet-lt.css</string>

                                                        </field>

                                                        <field name="roles">

                                                            <string>*</string>

                                                        </field>

                                                    </object>

                                                </value>

                                                <value>

                                                    <object type="org.exoplatform.services.cms.templates.impl.TemplateConfig$Template">

                                                        <field name="templateFile">

                                                            <string>/file/skins/Stylesheet-rt.css</string>

                                                        </field>

                                                        <field name="roles">

                                                            <string>*</string>

                                                        </field>

                                                    </object>

                                                </value>

                                            </collection>

                                        </field>

                                    </object>

                                </value>

                            </collection>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- name: addTemplates

- set-method: addTemplates

- type: org.exoplatform.services.cms.templates.impl.TemplatePlugin

- Init-params:

Value-param | Type | Value | Description
--- | --- | --- | ---
autoCreateInNewRepository | `boolean` | `true` | Enable the application to import predefined templates at the start-up of template service automatically.
storedLocation | `string` | `war:/conf/dms-extension/dms/artifacts/templates` | The location of stored templates.
repository | `string` | `repository` | Location of stored templates.

- Object-type: org.exoplatform.services.cms.templates.impl.TemplateConfig that defines all available template files, using the "collection type" configuration.

- type: It is the name of each object type. It means the type of template, the further configurations for this type are defined by some specified fields.

Field | Type | Value | Description
--- | --- | --- | ---
nodeTypes | `ArrayList` | {java.util.ArrayList} | The node type of the template.

- Object-type: org.exoplatform.services.cms.templates.impl.TemplateConfig$NodeType

Field | Type | Value | Description
--- | --- | --- | ---
nodetypeName | `string` | nt:file | The name of template that is saved as a node in system.
documentTemplate | `boolean` | `true` | Determine if the node type is a document type.
label | `string` | `file` | Visual display of the title for this node.
referencedView | `ArrayList` | {java.util.ArrayList} | Determine how to display a view.
referencedDialog | `ArrayList` | {java.util.ArrayList} | Determine how to display a dialog to input information.
referencedSkin | `ArrayList` | {java.util.ArrayList} | Determine the stylesheet for display.

- Object type: org.exoplatform.services.cms.templates.impl.TemplateConfig$Template

Field | Type | Description
--- | --- | ---
templateFile | `string` | The location of the file store for the template's presentation.
roles | `string` | Determine who can access this object (View/Dialog/CSS).

### 3.2.27. XMLdeploymentPlugin

When a site is created, most of end-users want to see something in the page instead of a blank page, so you need this plugin to deploy some "default" contents, such as Banner, Footer, Navigation, Breadcrumb.

There are two main cases to use:

- The site is created only one time when the database is cleaned.

- The site is created at runtime, when a user uses the core features of the GateIn portal.

To use the plugin in the component configuration, you must use the following target-component:

    <target-component>org.exoplatform.services.deployment.WCMContentInitializerService</target-component>

The configuration is applied mainly in packaging/ecmdemo/webapp/src/main/webapp/WEB-INF/conf/sample-portal/wcm/deployment/acme-deployment-configuration.xml.

Sample configuration:

    <external-component-plugins>

        <target-component>org.exoplatform.services.deployment.WCMContentInitializerService</target-component>

        <component-plugin>

            <name>Content Initializer Service</name>

            <set-method>addPlugin</set-method>

            <type>org.exoplatform.services.deployment.plugins.XMLDeploymentPlugin</type>

            <description>XML Deployment Plugin</description>

            <init-params>

                <object-param>

                    <name>ACME Logo data</name>

                    <description>Deployment Descriptor</description>

                    <object type="org.exoplatform.services.deployment.DeploymentDescriptor">

                        <field name="target">

                            <object type="org.exoplatform.services.deployment.DeploymentDescriptor$Target">

                                <field name="repository">

                                    <string>repository</string>

                                </field>

                                <field name="workspace">

                                    <string>collaboration</string>

                                </field>

                                <field name="nodePath">

                                    <string>/sites content/live/acme/web contents/site artifacts</string>

                                </field>

                            </object>

                        </field>

                        <field name="sourcePath">

                            <string>war:/conf/sample-portal/wcm/artifacts/site-resources/acme/Logo.xml</string>

                        </field>

                        <field name="versionHistoryPath">

                            <string>war:/conf/sample-portal/wcm/artifacts/site-resources/acme/Logo_versionHistory.zip

                            </string>

                        </field>

                        <field name="cleanupPublication">

                            <boolean>true</boolean>

                        </field>

                    </object>

                </object-param>

            </init-params>

        </component-plugin>

    </external-component-plugins>

In which:

- name: Content Initializer Service

- set-method: addPlugin

- type: org.exoplatform.services.deployment.plugins.XMLDeploymentPlugin

- Object type: org.exoplatform.services.deployment.DeploymentDescriptor

Name | Type | Value | Description
--- | --- | --- | ---
target | `Object` | `org.exoplatform.services.deployment.DeploymentDescriptor$Target (*)` | The target node which will contain the imported node.
sourcePath | `string` | `war:/conf/sample-portal/wcm/artifacts/site-resources/acme/Logo.xml<` | The absolute path of the XML file.
cleanupPublication | `boolean` | `false` | Decide when the publication lifecycle is cleaned up in the target folder after importing the data. true: allow false:not allow
versionHistoryPath | `string` | `war:/conf/sample-portal/wcm/artifacts/site-resources/acme/Logo_versionHistory.zip<` | The absolute path of the version history file.

- Object type: org.exoplatform.services.deployment.DeploymentDescriptor$Target

Field | Type | Value | Description
--- | --- | --- | ---
repository | `string` | `repository` | The repository name of the target node.
workspace | `string` | `collaboration` | The collaboration name of the target node.
nodePath | `string` | `/sites content/live/acme/web contents/site artifacts` | The path of the target node.

### 3.2.28. BaseActionPlugin/CreatePortalPlugin/PublicationPlugin/RemovePortalPlugin

All these plugins allows creating a link to their children.

BaseActionPlugin

This is an abstract class and the parent of ScriptActionPlugin and BPActionPlugin .

CreatePortalPlugin

This is an abstract class and the parent of TaxonomyPlugin .

PublicationPlugin

This is an abstract class and the parent of StageAndVersionPublicationPlugin and AuthoringPublicationPlugin .

RemovePortalPlugin

This is an abstract class and the parent of RemoveTaxonomyPlugin .

## 3.3. CMIS configuration

- CMIS Configuration

  Necessary information to make a special extension of CmisRegistry.

- Required nodetypes and namespaces in JCR

  Introduction to the mandatory configuration for JCR to work correctly.

- Authenticator and organization service configuration

  Overall introduction to configuration of authenticator and organization service.

- CMIS search and index

  Full provision of CMIS and index, such as query capabilities, configuration, index atomicity and durability.

`See also`

- Components

- External Component Plugins

### 3.3.1. CMIS Configuration

To expose WCM drives to the CMIS repositories, you must make a special extension of CmisRegistry.

To make a typical component org.exoplatform.ecms.xcmis.sp.jcr.exo.DriveCmisRegistry, do as follows:

    <component>

       <type>org.exoplatform.ecms.xcmis.sp.jcr.exo.DriveCmisRegistry</type>

       <init-params>

          <!-- Disabled by default. Uncomment if you need query support in CMIS. -->

             <!-- value-param>

                <name>indexDir</name>

                <value>${gatein.jcr.index.data.dir}/cmis-index${container.name.suffix}</value>

             </value-param-->

          <value-param>

             <name>exo.cmis.renditions.persistent</name>

             <value>true</value>

          </value-param>

          <values-param>

             <name>renditionProviders</name>

             <description>Redition providers classes.</description>

             <!-- <value>org.xcmis.renditions.impl.PDFDocumentRenditionProvider</value> -->

             <value>org.xcmis.renditions.impl.ImageRenditionProvider</value>

          </values-param>

       </init-params>

    </component>

Where configuration parameters include:

- indexDir: the directory where the lucene index will be placed. It is disabled by default.

- exo.cmis.renditions.persistent: indicates if a rendition of the document (thumbnails) should be persisted in the JCR. The allowed value are true or false.

- renditionProviders: a set of FQN of classes which can be used as Rendition Providers. Classes which implement the org.xcmis.spi.RenditionProvider interface used to preview the CMIS objects (thumbnails).

### Note

In most cases, it is not required to change anything in the xCIMIS configuration. In case of any change of the indexer storage location, do not comment the indexDir value parameter and point it to the actual location.

### 3.3.2. Required nodetypes and namespaces in JCR

The following configuration is mandatory for JCR to work correctly:

    <external-component-plugins>

       <target-component>org.exoplatform.services.jcr.RepositoryService</target-component>

       <component-plugin>

          <name>add.namespaces</name>

          <set-method>addPlugin</set-method>

          <type>org.exoplatform.services.jcr.impl.AddNamespacesPlugin</type>

          <init-params>

             <properties-param>

                <name>namespaces</name>

                <property name="cmis" value="http://www.exoplatform.com/jcr/cmis/1.0"/>

                <property name="xcmis" value="http://www.exoplatform.com/jcr/xcmis/1.0"/>

             </properties-param>

          </init-params>

       </component-plugin>

       <component-plugin>

          <name>add.nodeType</name>

          <set-method>addPlugin</set-method>

          <type>org.exoplatform.services.jcr.impl.AddNodeTypePlugin</type>

          <init-params>

            <values-param>

                <name>autoCreatedInNewRepository</name>

                <description>Node types configuration file</description>

                <value>jar:/conf/cmis-nodetypes-config.xml</value>

             </values-param>

          </init-params>

       </component-plugin>

    </external-component-plugins>

### 3.3.3. Authenticator and organization service configuration

An authenticator is responsible for creating Identity Security Service Authenticator.

The eXo CMIS service is based on:

- The authentication mechanism provided by the eXo organization service.

- The JAAS configuration of eXo Platform. For example:

    gatein-domain {
      org.exoplatform.web.security.PortalLoginModule required;
      org.exoplatform.services.security.jaas.SharedStateLoginModule required;
      org.exoplatform.services.security.j2ee.TomcatLoginModule required;
    };

### 3.3.4. CMIS search and index

The CMIS standard defines a query language based on a subset of the SQL-92 grammar (ISO/IEC 9075: 1992 -- Database Language SQL), with a few extensions to enhance its filtering capability for the CMIS data model, such as existential quantification for multi-valued property, full-text search, and folder membership.

### Warning

CMIS search is disabled by default in eXo CMIS. Uncomment the indexDir parameter if you need the query support in CMIS. To discover the search capability, check the capabilityQuery property (see the table below).

CMIS Relational View

The relational view of a CMIS repository consists of a collection of virtual tables that are defined on the top of the CMIS data model. A virtual table exists for every queryable object type (content type if you prefer) in the repository. Each row in these virtual tables corresponds to an instance of the corresponding object type (or one of its subtypes). A column exists for every property that the object type has.

Query Capabilities

Capability | Value
--- | ---
capabilityQuery | `bothcombined` (if indexDir is configured, otherwise `none`)
capabilityJoin | `none`
capabilityPWCSearchable | `false`
capabilityAllVersionsSearchable | `false`

Configuration

To be able to provide full-text search capabilities, xCMIS uses its own index. The following is the configuration parameter:

Parameter | Default | Description
--- | --- | ---
indexDir | none | The location of the index directory. This parameter is mandatory for the default implementation.

This parameter is passed through the XML configuration.

For example, to set up the index directory:

    <component>

       <type>org.exoplatform.ecms.xcmis.sp.DriveCmisRegistry</type>

       <init-params>

             <!-- Disabled by default. Uncomment if you need query support in CMIS. -->

             <!-- value-param>

                <name>indexDir</name>

                <value>${gatein.jcr.index.data.dir}/cmis-index${container.name.suffix}</value>

             </value-param-->

             ..............

       </init-params>

    </component>

Index atomicity and durability

- Write-ahead logging

To be able to provide index consistency and recovery in case of unexpected crashes or damages, XCMIS uses write-ahead logging (WAL) technique. Write-ahead logging is a standard approach to transaction logging. Briefly, WAL's center concept is changes of data files (indexes) must be written only after those changes have been logged, that is, when the change log records have been flushed to permanent storage. If you follow this procedure, you do not need to flush data pages to disk on every transaction commit, because it is known in the event of a crash, and the index can be recovered by using the log: any changes that have not been applied to the data pages can be redone from the log records. (This is roll-forward recovery, also known as REDO.)

A major benefit of using WAL is a significantly reduced number of disk writes, because only the log file needs to be flushed to disk at the time of transaction commit, rather than every data file changed by the transaction.

- Recover uncommitted transaction

When you start Indexer, it will check uncommitted transaction logs. If at least one log exists, recovering process will be started. Indexer will read all logs and extract added, updated and removed UUIDs into a set. Then, indexer walks through this set and checks objects against UUID. If the object exists, the indexer will put it into the added document list. In other cases, UUID will be added to the removed documents list. After that, depending on the list of added and removed documents, changes will be applied to the index.

- Initial index population

When you run the indexer to check the number of documents in the index. If there are no documents in the index or the previous re-indexation was not successful, then re-indexation of all content will be started. The first step is cleaning old index data. Uncommitted transaction logs and old persistent data are removed. These data are useless, because re-indexation of all content will be started. Then indexer walks throw all objects and makes lucene document for each one. Then batches with less than 100 elements will be saved to the index. After re-indexation, all logs (WAL) will be removed, all data mentioned on these change logs are already indexed.

### Note

If the administrator gets an exception with the message "Can't remove reindex flag.", it means that the index restoring was finished but file-flag was not removed (see index directory, file named as "reindexProcessing"). You can manually remove this file-flag, and avoid a new reindex of repository on the JCR start.

Copyright © 2009-2012. All rights reserved. eXo Platform SAS