This chapter supplies you with the basic knowledge of templates, UI extension, APIs in Content. Throughout this chapter, you can build your own content. Also, with the step-by-step instructions, you can create UI extension, deploy a workflow in Content and do many different actions.

This chapter consists of the main following contents:

  • WCM Templates

    Information about Content types and a list of Contents used in the Content function.

  • WCM Explorer

    Introduction to the CSS files and CKEditor applied into the Content function.

  • Extensions

    Knowledge of extensions in the Content function, such as REST services, UI extensions, authoring extensions and more.

  • CMIS Usage code examples

    Examples of the CMIS usage code which may be useful for developers who need to access a repository.

  • Public REST APIs

    Information (such as name, service URL, parameter, and description) of Public REST APIs used in the Content function.

  • Public Java APIs

    Information about public Java APIs used in the Content function.

  • Deprecated portlets

    A list of deprecated portlets in the Content function.

  • Miscellaneous and Tips

    A list of reference links for xCMIS project and CMIS.

  • FAQs

    A list of FAQs related to the product.

  • Content types

    Details of 2 template types (dialog and view) applied to a node type or a metadata mixin type.

  • List of Contents

    Description about Content List and Category Navigation templates which are commonly used in Content.

See also

Overview

The templates are applied to a node type or a metadata mixin type. There are two types of templates:

From the ECM admin portlet, the Manage Template lists existing node types associated to Dialog and/or View templates. These templates can be attached to permissions (in the usual membership:group form), so that a specific one is displayed according to the rights of the user (very useful in a content validation workflow activity).

Document Type

The checkbox defines if the node type should be considered as the Document type or not. Sites Explorer considers such nodes as user content and applies the following behavior:

Templates are written by using Groovy Templates that requires some experiences with JCR API and HTML notions.

Dialogs are Groovy templates that generate forms by mixing static HTML fragments and Groovy calls to the components responsible for building the UI at runtime. The result is a simple but powerful syntax.

These following parameters are common and can be used for all input fields.

Parameter Type Required Example Description
jcrPath string
jcrPath=/node/exo:title The relative path inside the current node.
mixintype string with the commas (,) character.

mixintype=mix:i18n

mixintype=mix:votable,mix:commentable,mix:i18n

The list of mixin types you want to initialize when creating the content.
validate string with the comma (,) character

validate=empty

validate=empty,name

validate=org.exoplatform.webui.form.validator.StringLengthValidator

The list of validators you want to apply to the input. Possible values are: name, email, number, empty, null, datetime, length OR validator classes. To know how to pass parameters to validators, refer here
editable string
editable=if-null The input will be editable only if the value of this parameter is if-null and the value of this input is null or blank.
multiValues boolean
multiValues=true Show a multi-valued component if true and must be used only with corresponding multi-valued properties. The default value of this parameter is false.
visible boolean
visible=true The input is visible if this value is true.
options String separated by the commas (,) character.
"options=toolbar:CompleteWCM,height:'410px',noSanitization" A list of parameters which are input while the content templates are initialized.

Pass parameters to validators

For a maximum length of 50 characters:

For a minimum length of 6 characters and maximum length of 50 characters:

See also

Note

The mixintype can be used only in the root node field (commonly known as the name field).

Parameter Type Required Description Example
rows Number The initial text area's number of rows. The value is 10 by default. rows=20
cols Number The initial text area's number of cols. The value is 30 by default . cols=50

See also: Common parameters

  • Example

Parameter Type Required Description Example
options string with the semicolon (;) character
Some options for CKEditor field: toolbar, width and height. options=CompleteWCM;width:'100%';height:'200px';
toolbar string
The predefined toolbar for CKEditor. The value can be: Default, Basic, CompleteWCM, BasicWCM, SuperBasicWCM. options=CompleteWCM
width string
The width of CKEditor. Its value can be the percent of pixel. options=width:'100%'
height string
The height of CKEditor. Its value can be the percent of pixel. options=height:'200px'

See also: Common parameters

  • Example

See also: Common parameters

  • Example

When you create an upload form, you can store an image by two main ways:

<%

    def image = "image";
    // If you're trying to edit the document
    if(uicomponent.isEditing()) {
        def curNode = uicomponent.getNode();
        // If the image existed
        if (curNode.hasNode("exo:image")) {
            def imageNode = curNode.getNode("exo:image") ;
            // If the image existed and available
            if (imageNode.getProperty("jcr:data").getStream().available() > 0 && (uicomponent.findComponentById(image) == null)) {
                def imgSrc = uicomponent.getImage(curNode, "exo:image");
                def actionLink = uicomponent.event("RemoveData", "/exo:image");
                %>
                    <div>
                        <img src="$imgSrc" width="100px" height="80px"/>
                        <a href="$actionLink">
                            <img src="/eXoResources/skin/DefaultSkin/background/Blank.gif" alt="" class="ActionIcon Remove16x16Icon"/>
                        </a>
                    </div>
                <%
            } else {
                String[] fieldImage = ["jcrPath=/node/exo:image/jcr:data"] ;
                uicomponent.addUploadField(image, fieldImage) ;
            }
        } else {
                String[] fieldImage = ["jcrPath=/node/exo:image/jcr:data"] ;
                uicomponent.addUploadField(image, fieldImage) ;
        }
    }  else if(uicomponent.dataRemoved()) {
        String[] fieldImage = ["jcrPath=/node/exo:image/jcr:data"] ;
        uicomponent.addUploadField(image, fieldImage) ;
    } else {
        String[] fieldImage = ["jcrPath=/node/exo:image/jcr:data"] ;
        uicomponent.addUploadField(image, fieldImage) ;
    }
%>

To avoid refreshing the first tab for every action execution, add a new private function to the template with tabs. In the template, you must insert a new piece of code like the following:

Changing in every event of onClick must be done like the following:

Finally, to display the selected tab, simply add it to the style of UITabContent class.

Content List Template

The Content List Template allows you to view the content list with various templates. eXo Platform supports the following content list templates:

Template Description
BigHotNewsTemplateCLV.gtmpl Display contents under one column with a content list. The illustration of each content is displayed above the content.
ContentListViewerDefault.gtmpl Its function is similar to BigHotNewsTemplateCLV.gtmpl. The illustration of each content is bigger.
DocumentsTemplate.gtmpl Display contents under a content list with a NodeType icon or the illustration on the left of the corresponding content.
EventsTemplateCLV.gtmpl Its function is similar to BigHotNewsTemplateCLV.gtmpl, but the illustration of each content is smaller.
OneColumnCLVTemplate.gtmpl Display contents under one column. The illustration of each content is displayed on its left.
TwoColumnsCLVTemplate.gtmpl Display contents under two columns. The illustration of each content is displayed on its left.
UIContentListPresentationBigImage.gtmpl Its function is similar to BigHotNewsTemplateCLV.gtmpl, but the illustration of each content is bigger than the image displayed with ContentListViewerDefault.gtmpl and the text font is different.
UIContentListPresentationDefault.gtmpl Its function is similar to BigHotNewsTemplateCLV.gtmpl, but the illustration of each content is smaller and the text font is different.
UIContentListPresentationSmall.gtmpl Display contents under one column with a content list. The images are displayed on the left of the corresponding content and smaller than the images of the other templates.

Category Navigation Template

The Category Navigation Template displays all contents under the categories.

Template Description
CategoryList.gtmpl Display categories as a navigation bar.
CategoryTree.gtmpl Display categories as a tree.
TagsCloud.gtmpl Display all tags of the contents.

CSS

CKEditor

Basically, if you want to add a rich text area to your dialogs, you can use the addRichtextField method. However, in case you want to add the rich text editor manually, you first need to use the addTextAreaField method and some additional Javascripts as shown below:

<%

    String[] fieldDescription = ["jcrPath=/node/exo:description"] ;
    uicomponent.addTextAreaField("description", fieldDescription)
%>
<script>
  var instances = CKEDITOR.instances['description'];
  if (instances) instances.destroy(true);
  CKEDITOR.replace('description', {
    toolbar : 'CompleteWCM',
    uiColor : '#9AB8F3'
  });
</script>

See also

  • REST Services

    Introduction to Rest Services, and details (including HTTP Methods, formats, data format, REST configuration) of Restful Web Service, and how to create a REST service.

  • How to make your own ECMS UI Extensions

    Instructions on how to make your own UI extension by creating the new action and its corresponding listener, registering with UIExtensionManager and running your UI extension sample. This section also provides information on filtering action with exsiting filters or creating your new filter.

  • Authoring Extension

    Information about the extended publication plugin and publication manager.

  • Auxiliary attributes for documents

    Details of how to create the DocumentContext which stores some auxiliary attributes of the document and helps document listeners make decision based on these attributes.

See also

REST-style architectures consist of clients and servers. Clients initiate requests to servers; servers process requests and return appropriate responses. Requests and responses are built around the transfer of "representations" of "resources". A resource can be essentially any coherent and meaningful concept that may be addressed. A representation of a resource is typically a document that captures the current or intended state of a resource.

At any particular time, a client can either be in transition between application states or "at rest". A client in a REST state is able to interact with its users, but creates no load and consumes no per-client storage on the set of servers or on the network.

The client begins sending requests when it is ready to make the transition to a new state. While one or more requests are outstanding, the client is considered to be in transition. The representation of each application state contains links that may be used the next time, the client chooses to initiate a new state transition.

REST is initially described in the context of HTTP, but is not limited to that protocol. RESTful architectures can be based on other Application Layer protocols if they already provide a rich and uniform vocabulary for applications based on the transfer of meaningful representational state. RESTful applications maximize the use of the pre-existing, well-defined interface and other built-in capabilities provided by the chosen network protocol, and minimize the addition of new application-specific features on its top.

This section provides you the following topics:

HTTP Methods

Here is the convention you should follow:

Method Definition
GET Get a Resource. Its state should not be modified.
POST Create a Resource (or anything that does not fit elsewhere).
PUT Update a Resource.
DELETE Delete a Resource.

Formats

The followings are formats which need to be supported for all your APIs:

  • JSON: This format makes developers easy to parse in a lot of languages, such as JavaScript, Python or Ruby.

  • XML: Most of Java developers like using this format.

  • ATOM: This is a standard format which can be used by many applications.

Data Format

The default format is JSON.

The response format can be specified by a parameter in the request: "format". You need to specify the format requested.

REST configuration

First, you need to register the REST service class to the configuration file in the package named conf.portal.

Create a REST service

You can start creating GetEditedDocumentRESTService that implements from the ResourceContainer interface as follows:

Parameters Definition
@Path("/presentation/document/edit/") Specify the URI path which a resource or class method will serve requests for.
@PathParam("repository") Bind the value repository of a URI parameter or a path segment containing the template parameter to a resource method parameter, resource class field, or resource class bean property.
@QueryParam("showItems") Bind the value showItems of a HTTP query parameter to a resource method parameter, resource class field, or resource class bean property.

There are many places inside ECMS which are built basing on the UI Extensions framework as described in Extend eXo applications, so you can add your own actions packaged in external jars to them. They are:

  • Action bar

  • Side bar

  • Admin control panel

  • Context menu in the main working area

  • File viewer

This section shows you how to add own actions to the ECMS. In the following example, you are going to add a new action on the ECMS action toolbar to view the node path.

Follow the below process to add a new action to the action toolbar:

Create a new project for action extension

Create a Maven project which has the following directory structure:

Navigating in the project's folder, you will see the following structure:

Here is the content of the pom.xml file:


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>com.acme</groupId>
 <artifactId>example</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>jar</packaging>

 <name>example</name>
 <url>ECMS action example</url>

 <properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 </properties>
 <dependencies>
   <dependency>
     <groupId>org.exoplatform.portal</groupId>
     <artifactId>exo.portal.webui.core</artifactId>
     <version>3.2.5-PLF-SNAPSHOT</version>
     <scope>provided</scope>
   </dependency>
   <dependency>
     <groupId>org.exoplatform.commons</groupId>
     <artifactId>exo.platform.commons.webui.ext</artifactId>
     <version>1.1.9-SNAPSHOT</version>
     <scope>provided</scope>
   </dependency>
   <dependency>
     <groupId>org.exoplatform.ecms</groupId>
     <artifactId>exo-ecms-core-webui-explorer</artifactId>
     <version>2.3.8-SNAPSHOT</version>
   </dependency>
 </dependencies>
 <build>
   <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-compiler-plugin</artifactId>
       <configuration>
         <source>1.5</source>
         <target>1.5</target>
       </configuration>
     </plugin>
   </plugins>
 </build>
</project>

Create new action and its corresponding listener

Edit the ExampleActionComponent class as below:

Register new action with UIExtensionManager

Edit the configuration.xml file as below:

With the UI Extension framework, you can use internal and external (existing) filters. The internal filters are parts of the business logic of your component. For example, if your component is only dedicated to articles, you will add an internal filter to your component that will check the type of the current document. The external filters are mainly used to add new filters that are not related to the business logic, to your component. A good example is the UserACLFilter which allows you to filter by access permissions.

It is very simple to apply a filter in an UI component:

There are many useful built-in filters in ECMS:

Filters Description
CanAddCategoryFilter Filter nodes to which it is impossible to add categories.
CanCutNodeFilter Filter nodes which cannot be cut.
CanAddNodeFilter Filter nodes to which it is impossible to add nodes.
CanDeleteNodeFilter Filter nodes that cannot be deleted.
CanRemoveNodeFilter Filter nodes that cannot be removed.
CanEnableVersionFilter Filter nodes which do not allow versioning.
CanSetPropertyFilter Filter nodes that cannot be modified.
HasMetadataTemplatesFilter Filter nodes that do not have metadata templates.
HasPublicationLifecycleFilter Filter all nodes that do not have the publication plugins.
HasRemovePermissionFilter Filter nodes that do not have the Remove permission.
IsFavouriteFilter Filter nodes that are not favorite.
IsNotFavouriteFilter Filter nodes that are favorite.
IsNotNtFileFilter Filter nodes that are of nt:file.
IsHoldsLockFilter Filter nodes which do not hold lock.
IsNotHoldsLockFilter Filter nodes which are holding lock.
IsNotRootNodeFilter Filter the root node.
IsInTrashFilter Filter nodes that are not in the trash node.
IsNotInTrashFilter Filter nodes that are in the trash node.
IsNotSameNameSiblingFilter Filter nodes that allow the same name siblings.
IsMixCommentable Filter nodes that do not allow commenting.
IsMixVotable Filter nodes that do not allow voting.
IsNotSimpleLockedFilter Filter nodes that are locked.
IsNotSymlinkFilter Filter nodes that are symlinks.
IsNotCategoryFilter Filter nodes that are of the category type.
IsNotSystemWorkspaceFilter Filter actions of the system-typed workspace.
IsNotCheckedOutFilter Filter nodes that are checked out.
IsTrashHomeNodeFilter Filter nodes that are not trash ones.
IsNotTrashHomeNodeFilter Filter a node that is the trash one.
IsNotEditingDocumentFilter Filter nodes that are being edited.
IsPasteableFilter Filter nodes where the paste action is not allowed.
IsReferenceableNodeFilter Filter nodes that do not allow adding references.
IsNotFolderFilter Filter nodes that are folders.
IsCheckedOutFilter Filter nodes that are not checked out.
IsVersionableFilter Filter nodes which do not allow versioning.
IsVersionableOrAncestorFilter Filter nodes and ancestor nodes which do not allow versioning.
IsDocumentFilter Filter nodes that are not documents.
IsEditableFilter Filter nodes that are not editable.

Working with other toolbars is quite similar to UIActionbar, except configurations and resources.

Side bar

Resources are located at $TOMCAT-HOME/webapps/ecmexplorer/WEB-INF/classes/locale/portlet/explorer/JCRExplorerPortlet_en.xml (for English which is also the default language):

Admin control panel

The "category" field specifies the category where your extension action is performed. There are 4 options:

Resources are located at $TOMCAT-HOME/webapps/ecmadmin/WEB-INF/classes/locale/portlet/administration/ECMAdminPortlet_en.xml (for English which is also the default language):

Context menu

The "category" field specifies the category where your extension action is performed. There are many options:

Resources are located at $TOMCAT-HOME/webapps/ecmexplorer/WEB-INF/classes/locale/portlet/explorer/JCRExplorerPortlet_en.xml (for English which is also the default language):

File Viewer

Resources are located at $TOMCAT-HOME/webapps/ecm-wcm-extension/WEB-INF/classes/locale/ecm/views_en.xml (for English which is also the default language):

  • Extended Publication Plugin

    Details of an extended Publication plugin used to manage the lifecycles of documents in Content, including:

    • States

      Information about new states and new profiles of the extended publication that are enabled in Content.

    • Start/End publication dates

      Introduction to new properties added to the new publication plugin that allows you to manage the content publication in a defined period.

    • New Publication Mixin

      Introduction to the new authoring mixin that supplies more information about the document creator.

  • Publication Manager

    Introduction to Publication Manager which manages lifecycles and contexts in Content and its details, including:

    • Lifecycle

      Sample code of lifecycle, information about 3 lifecycles, and instructions on how to listen to a lifecycle and to perform tasks when a content's state is updated.

    • Context

      Details of context, its sample code and rules.

    • New Authoring Mixin

      Introduction to the new authoring mixin that supplies more information about the document creator, its sample code and details of querying based on publication status.

This section covers the following topics:

States

This extended publication has new states and new profiles that are enabled in Content.

Start/End publication datess

In most cases, you do not want to publish a content directly, but at a defined date and you can also want the content to be unpublished automatically after that. New properties are added to the new publication plugin, that allows you to manage this:

The Content rendering engine does not know anything about publication dates, so another service needs to manage that. When the publisher sets start/end publication dates, he can "stage" the content. The content will go automatically to the "published" state when the start date arrives and to the "unpublished" state after end date. A cron job checks every hour (or less) all contents which need to be published (the start date in the past and the "staged" state) or unpublished (the end date in the past and the "published" state).

Thus, the publication dates are not mandatory and a content can go to:

New Publication Mixin

Publication plugin UI:

Note that some labels containing special or non-ASCII characters could not be well displayed in the publication UI. You can extend the width of the current UI State button by adding:

Also, for the publication date inputs, UIPublicationPanel should not initialize the dates to any default value. The publishing and unpublish CRON jobs will do this:

See the export section for more information about the CRON jobs.

The Publication Manager manages lifecycles and contexts in the Content platform. It allows managing different lifecycles based on different publication plugin in the platform.

In which:

A lifecycle is defined by a simple vertical workflow with steps (states) and profiles (membership). Each lifecycle is related to a Publication plugin (compliant with the JBPM or Bonita business processes).

A lifecycle in eXo Platform is defined basing on:

Note: eXo Platform allows defining more than one membership which can reach each state by using memberships field.

Lifecycle prototype:


<external-component-plugins>
<target-component>org.exoplatform.services.wcm.extensions.publication.PublicationManager</target-component>
 <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>$Lifecycle_name</string></field>
                 <field name="publicationPlugin"><string>$Publication_plugin</string></field>
                 <field name="states">
                   <collection type="java.util.ArrayList">
                     <!-- list of states -->
                     <value>
                       <object type="org.exoplatform.services.wcm.extensions.publication.lifecycle.impl.LifecyclesConfig$State">
                         <field name="state"><string>$State</string></field>
                         <field name="membership"><string>$Membership</string></field>
                         <!-- <field name="memberships">Memberships collection</field> -->
                       </object>
                     </value>
                   </collection>
                 </field>
               </object>
             </value>
           </collection>
         </field>
       </object>
     </object-param>
   </init-params>
 </component-plugin>
</external-component-plugins>

For example: Two lifecycles with/without states


<external-component-plugins>
    <target-component>org.exoplatform.services.wcm.extensions.publication.PublicationManager</target-component>
    <component-plugin>
        <name>AddLifecycle</name>
        <set-method>addLifecycle</set-method>
        <type>org.exoplatform.services.wcm.extensions.publication.lifecycle.StatesLifecyclePlugin</type>
        <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>States and versions based publication</string>
                                    </field>
                                </object>
                            </value>
                            <value>
                                <object type="org.exoplatform.services.wcm.extensions.publication.lifecycle.impl.LifecyclesConfig$Lifecycle">
                                    <field name="name">
                                        <string>lifecycle2</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="memberships">
                                                        <collection type="java.util.ArrayList">
                                                            <value>
                                                                <string>author:/communication</string>
                                                            </value>
                                                            <value>
                                                                <string>author:/sanitaryAlert</string>
                                                            </value>
                                                            <value>
                                                                <string>author:/informations</string>
                                                            </value>
                                                        </collection>
                                                    </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>automatic</string>
                                                    </field>
                                                </object>
                                            </value>
                                        </collection>
                                    </field>
                                </object>
                            </value>
                            <value>
                                <object type="org.exoplatform.services.wcm.extensions.publication.lifecycle.impl.LifecyclesConfig$Lifecycle">
                                    <field name="name">
                                        <string>lifecycle3</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>published</string>
                                                    </field>
                                                    <field name="memberships">
                                                        <collection type="java.util.ArrayList">
                                                            <value>
                                                                <string>publisher:/communication</string>
                                                            </value>
                                                            <value>
                                                                <string>publisher:/sanitaryAlert</string>
                                                            </value>
                                                            <value>
                                                                <string>publisher:/informations</string>
                                                            </value>
                                                        </collection>
                                                    </field>
                                                </object>
                                            </value>
                                        </collection>
                                    </field>
                                </object>
                            </value>
                        </collection>
                    </field>
                </object>
            </object-param>
        </init-params>
    </component-plugin>
</external-component-plugins>

In the last example, there are three lifecycles:

  • Lifecycle 1: Based on StatesAndVersionsPublicationPlugin .

    • This allows to be backward compliant with older Content releases. If all your site contents are using an existing plugin, you can create a lifecycle for it and it will work.

    • For new instances, you should use the new plugin with dynamic states capabilities.

  • Lifecycle 2: Based on AuthoringPublicationPlugin .

    • Visibility: Define only the "visible" steps. In this example, there is no step for "enrolled". Even if this step exists, it will not be displayed in the UI.

    • Automatic: Set a step as "automatic". In this mode, the step will be visible in the UI but it will be managed by the system (e.g. a cron job).No user is allowed to reach this step.

  • Lifecycle 3: Simulates the StatesAndVersionsPublicationPlugin plugin. Note that this simple lifecycle will work in a single server configuration.

To perform some tasks when a content's state is updated, you need to create a listener that handles the task and configure it. Following is the general configuration:

With this configuration, your listener my.package.MyListener will be executed each time a content's state is changed.

For example, eXo provides a listener which automatically sends email notifications about the new state to all users of defined groups: org.exoplatform.wcm.authoring.listener.PostUpdateStateEventListener. So, the configuration will be:

A context is defined by simple rules. In Content, you can select to enroll the content in a specific lifecycle (for example, publication plugin) based on context parameters. There are three parameters used to define contexts:

From these parameters, you can easily connect and define contexts based on:

Because each site has a content storage (categories + physical storage), you can select the right lifecycle for the right storage/site. To avoid conflicts on contexts, you can set a priority (the less is the best).

Context prototype

For example, Different Contexts:


<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>contextdefault</string>
                                    </field>
                                    <field name="priority">
                                        <string>200</string>
                                    </field>
                                    <field name="lifecycle">
                                        <string>lifecycle1</string>
                                    </field>
                                </object>
                                <object type="org.exoplatform.services.wcm.extensions.publication.context.impl.ContextConfig$Context">
                                    <field name="name">
                                        <string>context1</string>
                                    </field>
                                    <field name="priority">
                                        <string>100</string>
                                    </field>
                                    <field name="lifecycle">
                                        <string>lifecycle1</string>
                                    </field>
                                    <field name="membership">
                                        <string>*:/platform/web-contributors</string>
                                    </field>
                                    <field name="site">
                                        <string>acme</string>
                                    </field>
                                    <field name="path">
                                        <string>repository:collaboration:/sites content/live/acme/categories</string>
                                    </field>
                                </object>
                                <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>lifecycle1</string>
                                    </field>
                                    <field name="site">
                                        <string>default</string>
                                    </field>
                                </object>
                                <object type="org.exoplatform.services.wcm.extensions.publication.context.impl.ContextConfig$Context">
                                    <field name="name">
                                        <string>context3</string>
                                    </field>
                                    <field name="priority">
                                        <string>80</string>
                                    </field>
                                    <field name="lifecycle">
                                        <string>lifecycle3</string>
                                    </field>
                                    <field name="membership">
                                        <string>manager:/company/finances</string>
                                    </field>
                                    <field name="path">
                                        <string>repository:collaboration:/documents/company/finances</string>
                                    </field>
                                </object>
                                <object type="org.exoplatform.services.wcm.extensions.publication.context.impl.ContextConfig$Context">
                                    <field name="name">
                                        <string>context4</string>
                                    </field>
                                    <field name="priority">
                                        <string>50</string>
                                    </field>
                                    <field name="lifecycle">
                                        <string>lifecycle4</string>
                                    </field>
                                    <field name="memberships">
                                      <collection type="java.util.ArrayList">
                                        <value>
                                            <string>manager:/communication</string>
                                        </value>
                                        <value>
                                            <string>manager:/sanitaryAlert</string>
                                        </value>
                                        <value>
                                            <string>manager:/informations</string>
                                        </value>
                                      </collection>
                                    </field>
                                    <field name="path">
                                        <string>repository:collaboration:/documents/company/finances</string>
                                    </field>
                                    <field name="nodetype">
                                        <string>exo:article</string>
                                    </field>
                                </object>
                            </value>
                        </collection>
                    </field>
                </object>
            </object-param>
        </init-params>
    </component-plugin>
</external-component-plugins>

The logic is very simple. When creating a content, it should be attached a lifecycle with the lifecycle priority:

When adding the content in a lifecycle, set the publication:lifecycle_ property with the corresponding lifecycle.

Each time you change from one state to another, set the user who changed the state in publication:lastUser.

Querying based on publication status:

By adding this mixin to contents, you can access contents by simple queries based on the current user profile. For example:

By default, your activities, such as writing a document, and uploading a file, are published on the activity stream. However, you can decide to publish these activities or not by creating a context named DocumentContext for a specific document. This context stores some auxiliary attributes of the document and helps document listeners make decision based on these attributes.

This context looks like:

For example:

When you upload a document to a drive by using ManageDocumentService, but do not want to publish this activity on the activity stream, you can do as follows:

Then, this activity is skipped at:

The examples of the CMIS usage may be useful for developers who need to access a repository. CMIS access code snippets are built using Apache HTTP Client for Java, or using Google gadgets (gadgets.io) for JavaScript examples. For examples of CURL, visit http://code.google.com/p/xcmis/wiki/xCMISusesWithCurl.

See also

There are several methods to get the documents lists, such as getChildren(), getFolderTree() and getDescentants(), their usage will be described below. The difference between them is the usage of different URL segments to get data ("/children" for getChildren(), "/foldertree" for getFolderTree(), "/descendants" for getDescentants()), and a different kind of results (getChildren() returns a flat structure, while a getFolderTree() and getDescentants() have a tree of items in response).

Use Java

Use JavaScript

Creating an URL to make a request (consists of repository name, the method name, for example "/children/", and folderID to get children from):

Performing request:

Processing results (the code is located in the handler is specified while making a request, the same way it might be used for all examples in this chapter):

Reading the Document properties and content stream are two separate operations. Getting the content stream is possible after the properties set have been read and the content stream ID was extracted from it.

Use Java

Get document properties.

Get document content-stream.

To get the Document's content stream, an URL must contain "/file" part, object ID, and optionally the content stream ID, which can be used, for example, to obtain renditions. If no stream ID is specified, the default stream will be returned.

Use JavaScrip

Get document properties.

Creating an URL to make a request (consists of repository name, method name, for example "/children/", and folder ID to get the children from):

Performing request:

You can also use the ContentType.DOM parameter to parse the feed in your application (Using DOMParser for example).

Get document content-stream.

CMIS supports SQL queries for more handful content search. Query service can handle both GET and POST requests. URL for query consists of repository name and method name "/query". The GET request must contain query as a parameter named "q", in case of POST request query must be located in a request body.

For more detailed instructions how to construct queries, refer to the Query examples chapter.

Use Java

Use JavaScript

The command of property update uses PUT method. The URL is the same as the one for reading properties, the difference is only in the HTTP method used. The body of the request must be an Atom document with specified properties (see spec. 2.2.4.12 for detailed constructing document).

Sending of content stream can be executed via PUT or POST requests. Content-type of the request must be an "multipart/form-data".

Use Java

Update properties:

Set content stream:

Use JavaScript

Update properties:

Set content stream:

See also

Resource Description
GET /medium/{repoName}/{workspaceName}/{nodePath:.*}/ Return an image at a medium size (64x64). For example: /portal/rest/thumbnailImage/medium/repository/collaboration/test.gif/
GET /big/{repoName}/{workspaceName}/{nodePath:.*}/ Return an image at a big size.
GET /large/{repoName}/{workspaceName}/{nodePath:.*}/ Return an image at a large size (300x300).
GET /small/{repoName}/{workspaceName}/{nodePath:.*}/ Return an image at a small size (32x32).
GET /custom/{size}/{repoName}/{workspaceName}/{nodePath:.*}/ Return an image at a custom size.
GET /origin/{repoName}/{workspaceName}/{nodePath:.*}/ Return an image at an original size.
Resource Description
GET /rss/ Generate an RSS feed.

Generate an RSS feed.

URL:

Parameters:

Parameter Description
repository The name of repository.
workspace The name of workspace.
server The server.
siteName The name of site.
title The title of the feed.
desc The description of the feed.
folderPath The folder path of the feed.
orderBy The criteria to order the content.
orderType The descending or ascending order.
lang The language of the feed.
detailPage The page used to open the content.
detailParam The parameters is the key in the URL to let CLV know which really is the path in the current URL.
recursive This param is deprecated and will be moved soon.
Resource Description
GET /getFoldersAndFiles/ Return folders and files in the current folder.
GET /createFolder/ Create a folder under the current folder.
POST /uploadFile/upload/ Upload a file with the HttpServletRequest.
GET /uploadFile/control/ Control the process of uploading a file, such as aborting, deleting or progressing the file.

Return folders and files in the current folder.

URL:

Parameters:

Parameter Description
repositoryName The name of repository.
workspaceName The name of workspace.
currentFolder The current folder.
command The command.
type The type.

Create a folder under the current folder.

URL:

Parameters:

Parameter Description
repositoryName The name of repository.
workspaceName The name of workspace.
currentFolder The current folder.
newFolderName The name of the new folder.
language The language.

Control the process of uploading a file, such as aborting, deleting or progressing the file.

URL:

Parameters:

Parameter Description
repositoryName The repository name.
workspaceName The workspace name.
currentFolder The current folder.
action The process of the upload file, such as saving or cancelling the file.
language The language of the file.
fileName The file name.
uploadId The Id of the upload.
Resource Description
GET /getBundle/ Get the bundle that is based on the key and the locale.
Resource Description
POST /star/ Set a vote value for a given content.
GET /star/ Return a vote value for a given content.
GET /postVote/ Set a vote value for a given content.
GET /getVote/ Return a vote value for a given content.

Set a vote value for a given content.

URL:

Parameters:

Parameter Description
repositoryName The name of repository.
workspaceName The name of workspace.
jcrPath The path of the content.
vote The vote value.
lang The language of the content.
Resource Description
GET /getDrivers/ Return a list of drives for the current user.
GET /getFoldersAndFiles/ Return all folders and files in a given location.
POST /uploadFile/upload/ Upload a file.
GET /uploadFile/control/ Control the process of uploading a file, such as aborting, deleting or progressing the file.

Return all folders and files in a given location.

URL:

Parameters:

Parameter Description
driverName The name of drive.
currentFolder The current folder.
currentPortal The current portal.
repositoryName The name of repository.
workspaceName The name of workspace.
filterBy The type of filter.

Control the process of uploading a file, such as aborting, deleting or progressing the file.

URL:

Parameters:

Parameter Description
repositoryName The name of repository.
workspaceName The name of workspace.
driverName The name of drive.
currentFolder The current folder.
currentPortal The current portal.
userId The user identity.
jcrPath The path of the file.
action The action.
language The language.
fileName The name of file.
uploadId The Id of upload.
Resource Description
GET /getFoldersAndFiles/ Get folders and files.
Resource Description
GET /{repository}/ Return the latest edited documents.

Return the latest edited documents.

URL:

Parameters:

Parameter Description
repository The name of repository.
Parameter Description
showItems Return the number of items in each page.
showGadgetWs Show the gadget workspace or not.
Resource Description
GET /{repository}/{workspace}/{state}/ Return a list of published documents by the default plugin. For example: /portal/rest/publication/presentation/{repository}/{workspace}/{state}?showItems={numberOfItem}
GET /{repository}/{workspace}/{publicationPluginName}/{state}/ Return a list of published documents by a specific plugin. For example: /portal/rest/publication/presentation/{repository}/{workspace}/{publicationPluginName}/{state}?showItems={numberOfItem}
Resource Description
GET /all/{repoName}/{workspaceName}/{userName} Return a list of favorite documents of a given user.
Resource Description
GET /{repositoryName}/{workspaceName}/{nodeIdentifier} Get the image binary data of a given image node.

Get the image binary data of a given image node.

URL:

Parameters:

Parameter Description
repositoryName The repository name.
workspaceName The workspace name.
nodeIdentifier The node identifier.
Parameter Description
param Check if the document is a file or not.
Resource Description
GET /bystate/ Return a list of content from a given to the last state. For example: http://localhost:8080/ecmdemo/rest-ecmdemo/authoring/bystate/?fromstate =draft&user=root&lang=en&workspace=collaboration
GET /tostate/ Return a list of content from the beginning to the last state. For example: http://localhost:8080/ecmdemo/rest-ecmdemo/authoring/tostate/?fromstate =draft&tostate=pending&user=root&lang=en&workspace=collaboration
GET /bydate/ Return a list of content from the given beginning to published state and before the given date. For example: http://localhost:8080/ecmdemo/rest-ecmdemo/authoring/bydate/?fromstate =staged&date=2&lang=en&workspace=collaboration

Return a list of content from the beginning to the last state. For example: http://localhost:8080/ecmdemo/rest-ecmdemo/authoring/tostate/?fromstate =draft&tostate=pending&user=root&lang=en&workspace=collaboration

URL:

Parameters:

Parameter Description
fromstate The beginning state of the content.
tostate The destination state of the content.
user The author of the content.
lang The language of the content.
workspace The workspace name which contains the content.
json The format of the returned data.
Resource Description
GET Return a thumbnail image for a PDF document.

Return a thumbnail image for a PDF document.

Parameters:

Parameter Description
repoName The name of repository.
workspaceName The name of workspace.
uuid The identifier of the document.
pageNumber The page number.
rotation The page rotation. The valid values are: 0.0f, 90.0f, 180.0f, 270.0f.
scale The Zoom factor which is applied to the rendered page.
Resource Description
GET /getDrives/ Get all drives by type (General, Group or Personal).
GET /getFoldersAndFiles/ Get all folders and files which can be viewed by the current user.
GET /deleteFolderOrFile/ Delete a folder/file.
GET /createFolder/ Create a new folder and return its information.
POST /uploadFile/upload/ Upload a file to the server.
GET /uploadFile/control/ Return information about the upload status of a file (upload percentage, file name, and more).

Get all drives by type (General, Group or Personal).

URL:

Parameters:

Parameter Description
driveType The types of drive (General, Group, or Personal).
showPrivate Show the Private drive or not. The default value is false.
showPersonal Show the Personal drive or not. The default value is false.

Get all folders and files which can be viewed by the current user.

URL:

Parameters:

Parameter Description
driveName The name of drive.
workspaceName The name of workspace.
currentFolder The path to the folder to achieve its folders and files.
showHidden Show the hidden items or not. The default value is false.

Create a new folder and return its information.

URL:

Parameters:

Parameter Description
driveName The name of drive.
workspaceName The name of workspace.
currentFolder The path to the folder where a child folder is added .
folderName The name of folder.

Return information about the upload status of a file (upload percentage, file name, and more).

URL:

Parameters:

Parameter Description
workspaceName The name of workspace.
driveName The name of drive.
currentFolder The path to the current folder .
currentPortal The name of the current site.
action The action to perform (saving, processing, and more).
language The language of user.
fileName The name of file.
uploadId The Id of the uploaded resource.
Resource Description
GET /download/{workspace}/{path:.*}/ Return to browser a stream got from jcr:content/jcr:data for downloading the content of the node.
  • TaxonomyService

    Include many functions which allow adding, finding, or deleting taxonomies from a node.

  • LinkManager

    Provide APIs to work with the linked node or the link included in a node.

  • PublicationManager

    Manage the content publication.

  • WCMComposer

    Get content inside the WCM product.

  • NewFolksonomy

    Manage all the tag and tag style. Currently it just supports adding/editing/removing Private and Public tags.

  • ApplicationTemplateManager

    Manage dynamic groovy templates for WCM-based products.

  • NodeFinder

    Find a node with a given path.

  • JodConverter

    Convert documents into different office formats.

  • TimelineService

    Get all documents by time frame (day, month, year).

  • SiteSearchService

    Allow finding all information matching with a given keyword.

  • SEOService

    Provide APIs to manage SEO data of a page or a content.

  • ManageViewService

    Include many functions which allow adding, editing, deleting, and getting views.

See also

Taxonomy service is used to work with taxonomies. In this service, there are many functions which enable you to add, find, or delete taxonomies from a node.

Method Param Return Description
getTaxonomyTree(String repository, String taxonomyName, boolean system) throws ReposioryException;

repository: The name of repository.

taxonomyName: The name of the taxonomy.

system: Indicates whether the nodes must be retrieved using a session system or user session.

node Return the root node of the given taxonomy tree.
getTaxonomyTree(String repository, String taxonomyName) throws RepositoryException;

repository: The name of repository.

taxonomyName: The name of the taxonomy.

node Return the root node of the given taxonomy tree with the user session.
getAllTaxonomyTrees(String repository, boolean system) throws RepositoryException;

repository: The name of repository.

system: Indicates whether the nodes must be retrieved using a session system or user session.

List<Node> Return the list of all the root nodes of the taxonomy tree available.
getAllTaxonomyTrees(String repository) throws RepositoryException; repository: The name of repository. List<Node> Return the list of all the root nodes of the taxonomy tree available with the user session.
hasTaxonomyTree(String repository, String taxonomyName) throws RepositoryException;

repository: The name of repository.

taxonomyName: The name of the taxonomy.

boolean Check if a taxonomy tree with the given name has already been defined.
addTaxonomyTree(Node taxonomyTree) throws RepositoryException, TaxonomyAlreadyExistsException; taxonomyTree: The taxonomy tree to define. void Define a node as a new taxonomy tree.
updateTaxonomyTree(String taxonomyName, Node taxonomyTree) throws RepositoryException;

taxonomyName: The name of the taxonomy to update.

taxonomyTree: The taxonomy tree to define.

void Re-define a node as a taxonomy tree.
removeTaxonomyTree(String taxonomyName) throws RepositoryException taxonomyName: The name of the taxonomy to remove. void Remove the taxonomy tree definition.
addTaxonomyNode(String repository, String workspace, String parentPath, String taxoNodeName, String creator) throws RepositoryException, TaxonomyNodeAlreadyExistsException;

repository: The name of the repository. workspace: The name of the workspace

parentPath: The place where the taxonomy node will be added.

taxoNodeName: The name of taxonomy node.

creator: The name of the user creating this node.

void Add a new taxonomy node at the given location.
removeTaxonomyNode(String repository, String workspace, String absPath) throws RepositoryException;

repository: The name of the repository

workspace: The name of the workspace.

absPath: The absolute path of the taxonomy node to remove.

void Remove the taxonomy node located at the given absolute path.
moveTaxonomyNode(String repository, String workspace, String srcPath, String destPath, String type) throws RepositoryException;

repository: The name of the repository.

workspace: The name of the workspace.

srcPath: The source path of this taxonomy.

destPath: The destination path of the taxonomy.

type: If type is equal to cut, the process will be cut. If type is equal to copy, the process will be copied.

void Copy or cut the taxonomy node from the source path to the destination path. The parameter type indicates if the node must be cut or copied.
hasCategories(Node node, String taxonomyName) throws RepositoryException;

node: The node to check.

taxonomyName: The name of the taxonomy.

boolean Return true if the given node has categories in the given taxonomy.
hasCategories((Node node, String taxonomyName, boolean system) throws RepositoryException;

node: The node to check.

taxonomyName: The name of the taxonomy.

system: Check system provider or not.

boolean Return true if the given node has categories in the given taxonomy.
getCategories (Node node, String taxonomyName) throws RepositoryException;

node: The node for which we seek the categories.

taxonomyName: The name of the taxonomy.

List<Node> Return all the paths of the categories (relative to the root node of the given taxonomy) which have been associated to the given node for the given taxonomy.
getCategories(Node node, String taxonomyName, boolean system) throws RepositoryException;

node: The node for which we seek the categories.

taxonomyName: The name of the taxonomy.

system: Check system provider or not.

List<Node> Return all the paths of the categories(relative to the root node of the given taxonomy) which have been associated to the given node for the given taxonomy.
getAllCategories(Node node) throws RepositoryException;

node: The node for which we seek the categories

List<Node> Return all the paths of the categories which have been associated to the given node.
getAllCategories(Node node, boolean system) throws RepositoryException;

node: The node for which we seek the categories

system: Check system provider or not.

List<Node> Return all the paths of the categories which have been associated to the given node.
removeCategory(Node node, String taxonomyName, String categoryPath) throws RepositoryException;

node: The node from which the category is removed.

taxonomyName: The name of the taxonomy.

categoryPath: The path of the category relative to the root node of the given taxonomy

void Remove a category to the given node.
removeCategory(Node node, String taxonomyName, String categoryPath, boolean system) throws RepositoryException;

node: The node from which the category is removed.

taxonomyName: The name of the taxonomy.

categoryPath: The path of the category relative to the root node of the given taxonomy.

system: Check system provider or not.

void Remove a category to the given node.
addCategories(Node node, String taxonomyName, String[] categoryPaths) throws RepositoryException;

node: The node to which we add the categories.

taxonomyName: The name of the taxonomy.

categoryPaths: An array of category paths relative to the given taxonomy.

void Add several categories to the given node.
addCategories(Node node, String taxonomyName, String[] categoryPaths, boolean system) throws RepositoryException;

node: The node to which we add the categories.

taxonomyName: The name of the taxonomy.

categoryPaths: An array of category paths relative to the given taxonomy.

system: Check system provider or not.

void Add several categories to the given node.
addCategory(Node node, String taxonomyName, String categoryPath) throws RepositoryException;

node: The node to which we add the category.

taxonomyName: The name of the taxonomy.

categoryPath: The path of the category relative to the given taxonomy.

void Add a new category path to the given node.
addCategory(Node node, String taxonomyName, String categoryPath, boolean system) throws RepositoryException;

node: The node to which we add the category.

taxonomyName: The name of the taxonomy.

categoryPath: The path of the category relative to the given taxonomy.

system: Check system provider or not.

void Add a new category path to the given node.
getTaxonomyTreeDefaultUserPermission(); N/A Map<String, String[]> Get the default permission for the user in taxonomy tree.
addTaxonomyPlugin(ComponentPlugin plugin); plugin: The plugin to add. void Add a new taxonomy plugin to the service.
init(String repository) throws Exception; repository: The name of repository. void Initialize all taxonomy plugins that have been already configured in .xml files.
getCategoryNameLength(); N/A string Get the limited length of the category name.

Supply API to work with the linked node or the link included in a node.

Package org.exoplatform.services.cms.link.LinkManager

Method Param Return Description
createLink(Node parent, String linkType, Node target)throws RepositoryException;

parent: The parent node of the link.

linkType: The primary node type of the link must be a sub-type of exo:symlink, the default value is "exo:symlink"

target: The target of the link.

Node Create a new link that is added to the parent node and return the link.
createLink(Node parent, Node target)throws RepositoryException;

parent: The parent node of the link to create.

target: The target of the link.

Node Create a new node of type exo:symlink, then add it to the parent node and return the link node.
createLink(Node parent, String linkType, Node target, String linkName) throws RepositoryException;

parent: The parent node of the link.

inkType: The primary node type of the link must be a sub-type of exo:symlink, the default value is exo:symlink.

target: The target of the link.

linkName: The name of the link.

Node Create a new link that is added to the parent node and return the link.
updateLink(Node link, Node target)throws RepositoryException;

link: The link node to update.

target: The new target of the link.

Node Update the target node of the given link.
getTarget(Node link, boolean system) throws ItemNotFoundException, RepositoryException;

link: The node of type exo:symlink.

system: Indicate whether the target node must be retrieved using a session system or user session in case we cannot use the same session as the node link because the target and the link are not in the same workspace.

Node Get the target node of the given link.
getTarget(Node link)throws ItemNotFoundException, RepositoryException; link: The node of type exo:symlink. Node Get the target node of the given link using the user.
isTargetReachable(Node link) throws RepositoryException; link: The node of type exo:symlink. boolean Check if the target node of the given link can be reached using the user session.
isTargetReachable(Node link, boolean system)throws RepositoryException;

link: The node of type exo:symlink.

system

boolean Check if the target node of the given link can be reached using the user session.
isLink(Item item) throws RepositoryException; item: The item to test. boolean Indicate whether the given item is a link. @return <code>true</code>: if the node is a link, <code>false</code> otherwise.
getTargetPrimaryNodeType(Node link)throws RepositoryException; link: The node of type exo:symlink. string Return the primary node type of the target.
getAllLinks(Node targetNode, String linkType, String repoName)throws Exception

targetNode: The target node to get links.

linkType: The type of link to get.

repoName: The name of the repository.

List<Node> - the list of link of the target node with given type. Return all links of the given node. (Deprecated)
getAllLinks(Node targetNode, String linkType, SessionProvider sessionProvider) throws Exception;

targetNode: The target node to get links.

linkType: The type of the link to get.

sessionProvider: The session provider

List<Node> - the list of link of the target node with given type. Return all links of the given node.

PublicationService is to manage the publication.

Method Param Return Description
addLifecycle(ComponentPlugin plugin) plugin void Add publication plugin to the publication service.
removeLifecycle(ComponentPlugin plugin) plugin void Remove publication plugin from the publication service.
addContext(ComponentPlugin plugin) plugin void Add publication plugin context to the publication service.
removeContext(ComponentPlugin plugin) plugin void Remove publication plugin context from the publication service.
getLifecycle(String name) name - The name of the wanted lifecycle. Lifecycle Get a specific lifecycle with the given name.
getLifecycles() N/A List<Lifecycle> Get all the lifecycles which were added to service instances.
getContext(String name) name Context Get a specific context with the given names.
getContexts() N/A List<Context> Get all the contexts which were added to service instances.
getContents(String fromstate, String tostate, String date, String user, String lang , String workspace) throws Exception;

fromstate/tostate - The current range state of node.

user - The last user of node.

lang - The node's language.

workspace - The Workspace of the node's location.

List<Node> Get all the nodes.
getLifecyclesFromUser(String remoteUser, String state);

remoteUser - The current user of publication service.

state - The current state of the node.

List<Lifecycle> Get all the Lifecycle of a specific user.

This class is used to get content inside the WCM product. You should not access content directly from the JCR on the front side.

In general, this service stands between publication and cache.

Package org.exoplatform.services.wcm.publication.WCMComposer

Method Param Return Description
getContent(String workspace, String nodeIdentifier, HashMap<String, String> filters, SessionProvider sessionProvider)throws Exception;

workspace

nodeIdentifier

filters

sessionProvider: The session provider.

Node Return content at the specified path based on filters.
getContents(String workspace, String path, HashMap<String, String> filters, SessionProvider sessionProvider)throws Exception;

workspace

path

filters

sessionProvider: The session provider.

List<Node> Return content at the specified path based on filters.
updateContent(String workspace, String nodeIdentifier, HashMap<String, String> filters)throws Exception;

workspace

path

filters

boolean Update content.
updateContents(String workspace, String nodeIdentifier, HashMap<String, String> filters)throws Exception;

workspace

path

filters

boolean Update content.
getPaginatedContents(NodeLocation nodeLocation,HashMap<String, String> filters, SessionProvider sessionProvider) throws Exception;

nodeLocation: The content location.

filters

sessionProvider: The session provider.

boolean Return content at the specified path based on filters.
getAllowedStates(String mode)throws Exception; mode List<String> Return the allowed states for a specified mode.
cleanTemplates()throws Exception; N/A void Initialize the template hashmap.
isCached()throws Exception; N/A boolean Check isCache or not.
updateTemplatesSQLFilter()throws Exception; N/A String Update all document nodetypes and write a query cause. It returns a part of the query that allows to search all document nodes and taxonomy links. Return null if there is any exception.

This service is used to manage all tags and their styles. Currently, it just supports adding/editing/removing the Private & Public tags.

Package org.exoplatform.services.cms.folksonomy.NewFolksonomyService;

Method Return Prototype Description
addPrivateTag(String[] tagsName, Node documentNode, String repository, String workspace, String userName) throws Exception ;

tagNames: The array of tag name as the children of tree.

documentNode: Tag this node by creating a folksonomy link to the node in the tag.

repository: The repository name.

workspace: The workspace name.

userName: The username.

void Add a private tag to a document. A folksonomy link will be created in a tag node.
addGroupsTag(String[] tagsName, Node documentNode,String repository, String workspace, String[] roles) throws Exception ;

tagNames: The array of tag name as the children of tree.

documentNode: Tag this node by creating a folksonomy link to the node in tag.

repository: The repository name.

workspace: The workspace name.

roles: The user roles.

void Add a group tag to a document. A folksonomy link will be created in a tag node.
addPublicTag(String treePath, String[] tagsName, Node documentNode, String repository, String workspace) throws Exception ;

treePath: The path of folksonomy tree.

tagNames: The array of the tag name as the children of tree.

documentNode: Tag this node by creating a folksonomy link to the node in the tag.

repository: The repository name.

workspace: The workspace name.

void Add a public tag to a document. A folksonomy link will be created in a tag node.
addSiteTag(String siteName, String[] tagsName, Node node, String repository, String workspace) throws Exception ;

siteName: The portal name.

treePath: The path of folksonomy tree.

tagNames: The array of the tag name as the children of tree.

documentNode: Tag this node by creating a folksonomy link to the node in tag.

repository: The repository name.

workspace: The workspace name.

void Add a site tag to a document. A folksonomy link will be created in a tag node.
getAllPrivateTags(String userName, String repository, String workspace) throws Exception ;

userName: The user name.

repository: The repository name.

workspace: The workspace name.

List<Node> Get all private tags.
getAllPublicTags(String treePath, String repository, String workspace) throws Exception ;

treePath: The folksonomy tree path.

repository: The repository name.

workspace: The workspace name.

List<Node> Get all public tags.
getAllGroupTagsString[] roles, String repository, String workspace) throws Exception ;

roles: The roles of user.

repository: The repository name.

workspace: The workspace name.

List<Node> Get all tags by groups.
getAllGroupTags(String role, String repository, String workspace) throws Exception ;

role: The role of user.

repository: The repository name.

workspace: The workspace name.

List<Node> Get all tags by a group.
getAllSiteTags(String siteName, String repository, String workspace) throws Exception ;

siteName: The portal name.

treePath: Folksonomy tree path.

repository: The repository name.

workspace: The workspace name.

List<Node> Get all tags of Site.
getAllDocumentsByTag(String tagPath, String repository, String workspace, SessionProvider sessionProvider) throws Exception ;

treeName: The name of folksonomy tree.

tagName: The name of a tag.

repository: The repository name.

List<Node> Get all documents which are stored in a tag and return a list of documents in a tag.
getTagStyle(String tagPath, String repository, String workspace) throws Exception ;

tagPath

workspace: The workspace name.

repository: The repository name.

string Get HTML_STYLE_PROP property in styleName node in the repository.
addTagStyle(String styleName, String tagRange, String htmlStyle, String repository, String workspace) throws Exception ;

styleName: The style name.

tagRate: The range of tag numbers.

htmlStyle: The tag style.

repository: The repository name.

workspace: The workspace name.

void Update the properties TAG_RATE_PROP and HTML_STYLE_PROP, following the values tagRate, htmlStyle for a node in tagPath in repository.
updateTagStyle(String styleName, String tagRange, String htmlStyle, String repository, String workspace) throws Exception ;

styleName: The style name.

tagRate: The range of tag numbers.

htmlStyle: The tag style.

repository: The repository name.

workspace: The workspace name.

void Update the properties TAG_RATE_PROP and HTML_STYLE_PROP, following the value tagRate, htmlStyle for a node in tagPath in repository.
getAllTagStyle(String repository, String workspace) throws Exception ;

repository: The repository name

workspace: The workspace name.

List<Node> Get all tag style bases of a folksonomy tree.
init(String repository) throws Exception ; repository: The repository name. void Initialize all TagStylePlugin with session in repository name.
removeTagOfDocument(String tagPath, Node document, String repository, String workspace) throws Exception;

treeName: The name of a folksonomy tree.

tagName: The name of a tag.

document: The document which is added a link to tagName.

repository: The repository name.

void Remove a tag of a given document.
removeTag(String tagPath, String repository, String workspace) throws Exception;

tagPath: The path of the tag.

repository: The repository name.

workspace: The workspace name.

void Remove a tag.
modifyTagName(String tagPath, String newTagName, String repository, String workspace) throws Exception;

tagPath: The name of the tag.

newTagName: The new tag name.

repository: The repository name.

workspace: The workspace name.

Node Modify the tag name.
getLinkedTagsOfDocument(Node documentNode, String repository, String workspace) throws Exception;

documentNode: The document node.

repository

workspace

List<Node> Get all tags linked to a given document.
getLinkedTagsOfDocumentByScope(int scope, String value, Node documentNode, String repository, String workspace) throws Exception;

documentNode: The document node.

repository: The repository name.

workspace: The workspace name.

List<Node> Get all tags linked to a given document by scope.
removeTagsOfNodeRecursively(Node node, String repository, String workspace, String username, String groups) throws Exception;

node

repository

workspace

void Remove all tags linked to the child nodes of a given node.
addTagPermission(String usersOrGroups); usersOrGroups void Add given users or groups to tagPermissionList.
removeTagPermission(String usersOrGroups); usersOrGroups void Remove given users or groups from tagPermissionList.
getTagPermissionList(); N/A List<String> Return tagPermissionList.
canEditTag(int scope, List<String> memberships);

scope

memberships

boolean Set the permission to edit a tag for a user.
getAllTagNames(String repository, String workspace, int scope, String value) throws Exception;

repository

workspace

scope: The scope of tags.

value: The value, according to scope, can be understood differently.

List<String> Get all tag names which start within a given scope.

This class is used to manage dynamic groovy templates for WCM-based products.

Package org.exoplatform.services.cms.views.ApplicationTemplateManager;

Method Param Return Description
addPlugin(PortletTemplatePlugin portletTemplatePlugin) throws Exception portletTemplatePlugin void Add the plugin..
getAllManagedPortletName(String repository) throws Exception repository List<String> Retrieve all the portlet names that have dynamic groovy templates managed by service.
getTemplatesByApplication(String repository, String portletName, SessionProvider provider)throws Exception;

repository

portletName

provider: The provider.

List<String> Retrieve the templates node by application.
getTemplatesByCategory(String repository, String portletName, String category, SessionProvider sessionProvider) throws Exception;

repository

portletName

category

sessionProvider

List<String> Retrieve the templates node by category.
getTemplateByName(String repository, String portletName, String category, String templateName, SessionProvider sessionProvider)throws Exception;

repository

portletName

category

templateName

sessionProvider

node Retrieve the template by name.
getTemplateByPath(String repository, String templatePath, SessionProvider sessionProvider)throws Exception ;

repository

templatePath

sessionProvider

node Get the template by path.
addTemplate(node portletTemplateHome, PortletTemplateConfig config)throws Exception;

portletTemplateHome

config

void Add the template.
removeTemplate(String repository, String portletName, String catgory, String templateName, SessionProvider sessionProvider)throws Exception;

repository

portletName

catgory

templateName

sessionProvider

void Remove the template.

NodeFinder is used to find a node with a given path. If the path to the node contains sub-paths to exo:symlink nodes, find the real link node.

Method Param Return Description
getNode(Node ancestorNode, String relativePath) throws PathNotFoundException, RepositoryException;

ancestorNode: The ancestor of the node to retrieve from which we start.

relativePath: The relative path of the node to retrieve.

node Return the node at relPath related to the ancestor node.
getNode(Node ancestorNode, String relativePath, boolean giveTarget) throws PathNotFoundException, RepositoryException;

ancestorNode: The ancestor of the node to retrieve from which we start.

relativePath: The relative path of the node to retrieve.

giveTarget: Indicate if the target must be returned in case the item is a link.

node Return the node at relPath related to the ancestor node. If the node is a link and giveTarget has been set to <code>true</code>, the target node will be returned.
getItem(String repository, String workspace, String absPath) throws PathNotFoundException, RepositoryException;

repository: The repository name.

workspace: The workspace name.

absPath: An absolute path.

item Return the item at the specified absolute path.
getItemSys(String repository, String workspace, String absPath, boolean system) throws PathNotFoundException, RepositoryException;

repository: The name of repository

workspace: The workspace name.

absPath: An absolute path.

item Return the item at the specified absolute path.
getItem(String repository, String workspace, String : absPath, boolean giveTarget) throws PathNotFoundException, RepositoryException;

repository: The repository name.

workspace: The workspace name.

absPath: An absolute path.

giveTarget: Indicate if the target must be returned in case the item is a link.

item Return the item at the specified absolute path. If the item is a link and giveTarget has been set to <code>true</code>, the target node will be returned.
getItemGiveTargetSys(String repository, String workspace, String absPath, boolean giveTarget, boolean system) throws PathNotFoundException, RepositoryException;

repository: The repository name.

workspace: The workspace name.

absPath: An absolute path.

giveTarget: Indicate if the target must be returned in case the item is a link.

system: The system provider.

Item Return the item at the specified absolute path. If the item is a link and giveTarget has been set to <code>true</code>, the target node will be returned.
getItem(Session session, String absPath) throws PathNotFoundException, RepositoryException;

session: The session is used to get the item.

absPath: An absolute path.

item Return the item at the specified absolute path.
getItem(Session session, String absPath, boolean giveTarget) throws PathNotFoundException, RepositoryException;

session: The session is used to get the item.

absPath: An absolute path.

giveTarget: Indicate if the target must be returned in case the item is a link.

item Return the item at the specified absolute path. If the item is a link and giveTarget has been set to <code>true</code>, the target node will be returned.
getItemTarget(Session session, String absPath, boolean giveTarget, boolean system) throws PathNotFoundException, RepositoryException;

session: The session is used to get the item.

absPath: An absolute path.

giveTarget: Indicate if the target must be returned in case the item is a link.

system: The system provider

item Return the item at the specified absolute path. If the item is a link and giveTarget has been set to <code>true</code>, the target node will be returned.
itemExists(Session session, String absPath) throws RepositoryException;

session: The session is used to get the item.

absPath: An absolute path.

boolean

Return <code>true</code> if an item exists at absPath; otherwise returns <code>false</code>.

Also returns <code>false</code> if the specified absPath is malformed.

JodConverter is used to convert documents into different office formats.

Package org.exoplatform.services.cms.jodconverter.JodConverterService

Method Param Return Description
convert(InputStream input, String formatInput, OutputStream out, String formatOutput) throws Exception;

input

formatInput

out

formatOutput

void Convert InputStream in the formatInput format to OutputStream with the formatOutput format. Deprecate: This method is not supported by JODConverter 3.0 anymore, please use convert(File, File, String) instead.
convert(File input, File output, String outputFormat) throws OfficeException;

input

output

outputFormat

boolean Convert input File to output File with the outputFormat.

TimelineService is used to get all documents by time frame (day, month, year).

Method Param Return Description
getDocumentsOfToday(String nodePath,String repository,String workspace, SessionProvider sessionProvider, String userName, boolean byUser) throws Exception;

nodePath

repository

workspace

sessionProvider

userName

byUser

List<Node> Get all documents of today. (Deprecated)
getDocumentsOfToday(String nodePath,String workspace, SessionProvider sessionProvider, String userName, boolean byUser) throws Exception;

nodePath

workspace

sessionProvider

userName

byUser

List<Node> Get all documents of today.
getDocumentsOfToday(String nodePath,String workspace, SessionProvider sessionProvider, String userName, boolean byUser, boolean isLimit) throws Exception;

nodePath

workspace

sessionProvider

userName

byUser

isLimit

List<Node> Get all documents of today.
getDocumentsOfYesterday(String nodePath,String repository,String workspace, SessionProvider sessionProvider, String userName, boolean byUser) throws Exception;

nodePath

repository

workspace

sessionProvider

userName

byUser

List<Node> Get all documents of yesterday. (Deprecated)
getDocumentsOfYesterday(String nodePath,String workspace, SessionProvider sessionProvider, String userName, boolean byUser) throws Exception;

nodePath

workspace

sessionProvider

userName

byUser

List<Node> Get all documents of yesterday.
getDocumentsOfYesterday(String nodePath,String workspace, SessionProvider sessionProvider, String userName, boolean byUser, boolean isLimit) throws Exception;

nodePath

workspace

sessionProvider

userName

byUser

isLimit

List<Node> Get all documents of yesterday.
getDocumentsOfEarlierThisWeek(String nodePath,String repository,String workspace, SessionProvider sessionProvider, String userName, boolean byUser) throws Exception;

nodePath

repository

workspace

sessionProvider

userName

byUser

List<Node> Get all documents from earlier this week to yesterday. (Deprecated)
getDocumentsOfEarlierThisWeek(String nodePath,String workspace, SessionProvider sessionProvider, String userName, boolean byUser) throws Exception;

nodePath

workspace

sessionProvider

userName

byUser

List<Node> Get all documents from earlier this week to yesterday.
getDocumentsOfEarlierThisWeek(String nodePath,String workspace, SessionProvider sessionProvider, String userName, boolean byUser, boolean isLimit) throws Exception;

nodePath

workspace

sessionProvider

userName

byUser

isLimit

List<Node> Get all documents from earlier this week to yesterday.
getDocumentsOfEarlierThisMonth(String nodePath,String repository,String workspace, SessionProvider sessionProvider, String userName, boolean byUser) throws Exception;

nodePath

repository

workspace

sessionProvider

userName

byUser

List<Node> Get all documents from earlier this month to earlier this week. (Deprecated)
getDocumentsOfEarlierThisMonth(String nodePath,String workspace, SessionProvider sessionProvider, String userName, boolean byUser) throws Exception;

nodePath

workspace

sessionProvider

userName

byUser

List<Node> Get all documents from earlier this month to earlier this week.
getDocumentsOfEarlierThisMonth(String nodePath,String workspace, SessionProvider sessionProvider, String userName, boolean byUser, boolean isLimit) throws Exception;

nodePath

workspace

sessionProvider

userName

byUser

isLimit

List<Node> Get all documents since earlier this month to earlier this week.
getDocumentsOfEarlierThisYear(String nodePath,String repository,String workspace, SessionProvider sessionProvider, String userName, boolean byUser) throws Exception;

nodePath

repository

workspace

sessionProvider

userName

byUser

List<Node> Get all documents from earlier this year to earlier this month. (Deprecated)
getDocumentsOfEarlierThisYear(String nodePath,String workspace, SessionProvider sessionProvider, String userName, boolean byUser) throws Exception;

nodePath

workspace

sessionProvider

userName

byUser

List<Node> Get all documents from earlier this year to earlier this month.
getDocumentsOfEarlierThisYear(String nodePath,String workspace, SessionProvider sessionProvider, String userName, boolean byUser, boolean isLimit) throws Exception;

nodePath

workspace

sessionProvider

userName

byUser

isLimit

List<Node> Get all documents from earlier this year to earlier this month.
getItemPerTimeline() N/A int Get the number of documents per category displayed in the Timeline view.

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

Method Param Return Description
addExcludeIncludeDataTypePlugin(ExcludeIncludeDataTypePlugin plugin) plugin: The plugin. void Filter mimetypes data in the search results.
searchSiteContents(SessionProvider sessionProvider, QueryCriteria queryCriteria, int pageSize, boolean isSearchContent) throws Exception;

queryCriteria: The query criteria for SiteSearchService. Basing on search criteria, SiteSearchService can easily create the query statement to search.

sessionProvider: The session provider.

pageSize: The number of search results on a page.

AbstractPageList<ResultNode> Find all child nodes whose contents match with the given keyword. These nodes will be put in the list of search results.

SEOService supplies APIs to manage SEO data of a page or a content. This service includes some major functions which enables you to add, store, get or remove the metadata of a page or a content.

Method Param Return Description
storePageMetadata(PageMetadataModel metaModel, String portalName, boolean onContent) throws Exception

metaModel: The metadata of a page/content stored.

portalName: The name of portal.

onContent: Indicate whether the current page is the content page or the portal page.

void Store the metadata of a page/content.
getMetadata(ArrayList<String> params, String pageReference) throws Exception

params: The parameters list of a content page.

pageReference: The reference of the page.

PageMetadataModel Return the metadata of a portal page or a content page.
getPageMetadata (String pageReference) throws Exception pageReference: The reference of the page. PageMetadataModel Return the metadata of a portal page.
getContentMetadata(ArrayList<String> params) throws Exception params: The parameters list of a content page. PageMetadataModel Return the metadata of a content page.
removePageMetadata(PageMetadataModel metaModel, String portalName, boolean onContent) throws Exception

metaModel: The metadata of a page/content stored.

portalName: The name of portal.

onContent: Indicate whether the current page is the content page or the portal page.

void Remove the metadata of a page.
getContentNode(String contentPath) throws Exception contentPath: The content path. Node Return the content node by the content path.
getHash(String uri) throws Exception uri: The page reference of the UUID of a node. string Create a key from the page reference or the UUID of the node.
getSitemap(String portalName) throws Exception portalName: The portal name. string Return a sitemap's content of a specific portal.
getRobots(String portalName) throws Exception portalName: The portal name. string Return Robots' content of a specific portal.
getRobotsIndexOptions() throws Exception N/A List<String> Return a list of options (INDEX and NOINDEX) for robots to index.
getRobotsFollowOptions() throws Exception N/A List<String> Return a list of options (FOLLOW and NOFOLLOW) for robots to follow.
getFrequencyOptions() throws Exception N/A List<String> Return a list of options for frequency.

ManageViewService is used to work with views. This service has many functions which allow you to add, edit, delete, and get views.

Method Param Return Description
addView(String name, String permissions, String template, List<?> tabs, String repository) throws Exception;

name

permissions

template

tabs

repository

void Insert a new view to the system. (Deprecated)
addView(String name, String permissions, String template, List<?> tabs) throws Exception;

name

permissions

template

tabs

void Insert a new view to the system.
getViewByName(String viewName, String repository, SessionProvider provider) throws Exception;

viewName

repository

provider

node Specify a new view depending on the view name. (Deprecated)
getViewByName(String viewName, SessionProvider provider) throws Exception;

viewName

provider

node Specify a new view depending on the view name.
getButtons() throws Exception; N/A List<?> Return all strings of buttons.
removeView(String viewName, String repository) throws Exception;

viewName

repository

void Remove a view from the views list in the system. (Deprecated)
removeView(String viewName) throws Exception; viewName void Remove a view from the views list in the system.
getAllViews(String repository) throws Exception; repository List<ViewConfig> Return all views of the repository configured in the XML file. (Deprecated)
getAllViews() throws Exception; N/A List<ViewConfig> Return all views of the repository configured in the XML file.
hasView(String name, String repository) throws Exception;

name

repository

boolean Return true if the given repository has a view. (Deprecated)
hasView(String name) throws Exception; N/A boolean Return true if the given repository has a view.
getTemplateHome(String homeAlias, String repository, SessionProvider provider) throws Exception;

homeAlias

repository

provider

Node Get a template node that has the path. (Deprecated)
getTemplateHome(String homeAlias, SessionProvider provider) throws Exception;

homeAlias

provider

Node Get a template node that has the path.
getAllTemplates(String homeAlias, String repository, SessionProvider provider) throws Exception;

homeAlias

repository

provider

List<Node> Get all template nodes that have the path. (Deprecated)
getAllTemplates(String homeAlias, SessionProvider provider) throws Exception;

homeAlias

provider

List<Node> Get all template nodes that have the path.
getTemplate(String path, String repository, SessionProvider provider) throws Exception;

path

repository

provider

Node Return a node that has the path of the repository. (Deprecated)
getTemplate(String path, SessionProvider provider) throws Exception;

path

provider

Node Return a node that has the path of the repository.
addTemplate(String name, String content, String homePath, String repository) throws Exception;

name

content

homePath

repository

String Insert a new template to a node by specifying its path. (Deprecated)
addTemplate(String name, String content, String homePath) throws Exception;

name

content

homePath

String Insert a new template to a node by a specified path.
updateTemplate(String name, String content, String homePath, String repository) throws Exception;

name

content

homePath

repository

String Update a template for a node by specifying its path. (Deprecated)
updateTemplate(String name, String content, String homePath) throws Exception;

name

content

homePath

String Update a template for a node by specifying its path.
removeTemplate(String templatePath, String repository) throws Exception;

templatePath

repository

void Remove the template from the given node by specifying its path. (Deprecated)
removeTemplate(String templatePath) throws Exception; templatePath void Remove the template from the given node by specifying its path.
addTab(Node view, String name, String buttons) throws Exception ;

view

name

buttons

void Insert a new tab to the given view node.
init(String repository) throws Exception ; repository void Get all templates that are configured in the XML file of a specified repository. (Deprecated)
init() throws Exception ; N/A void Get all templates that are configured in the XML file of a specified repository.

This section provides FAQs related to the product.

Q1. How to deploy a workflow?

The addPlugin() function of WorkflowServiceContainer service is used to register a Business Process when a workflow is implemented. Thus, if you want to use a workflow, you are required to configure the workflow service to invoke the addPlugin() function by adding the external-component-plugins element to the configuration file.

You have to set values for the name and location of the workflow which you want to use. There are two ways to configure the location of the workflow.

You can use "war:(FOLDER_PATH)" to configure which .jar files contain your workflow processes inside the .war file.


<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-jbpm-content-2.1.1.jar</string>
              </value>
              <value>
                <string>/exo-ecms-ext-workflow-bp-jbpm-payraise-2.1.1.jar</string>
              </value>
              <value>
                <string>/exo-ecms-ext-workflow-bp-jbpm-holiday-2.1.1.jar</string>
              </value>
            </collection>
          </field>
        </object>
      </object-param>
    </init-params>
  </component-plugin>
</external-component-plugins>

You can use classpath: to configure which .jar files contain your workflow processes inside the .jar file.

The notification message is displayed when you deploy a workflow on Jboss. If you use classpath: to register, you must put your workflow in the .jar files inside the gatein.ear/lib folder (instead of the lib folder) to make it work.

See also

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