eXo Platform 3.5

## Chapter 3. Developer reference

This chapter supplies you with the basic knowledge of overridden components and REST APIs implemented in Collaboration via the following topics:

- Extension points

  Knowledge of some overridable components in Collaboration, including ContentDAO, ContactLifeCycle, Transport, and EventLifeCycle.

- Public REST APIs

  Details (such as name, service URL, service URL endpoint, location, parameter, and description) of Public REST APIs used in the Collaboration applications.

- JCR Structure

  Description of the JCR structure of the main applications in Collaboration.

## 3.1. Extension points

- ContentDAO

  An overridable component which is used in the Content application (or called RSS reader) of Collaboration.

- ContactLifeCycle

  An interface which extends the capabilities of eXo Platform. The ContactLifeCycle lets you be notified during the lifecycle of an address book's contact when a contact is added or modified.

- Transport

  An overridable component which is used in the Chat application of Collaboration.

- EventLifeCycle

  An extension point which is used in the Calendar application of Collaboration.

There are some overridable components in Collaboration so that you can control how these components work by implementing or extending default implementations and then reconfigure these new components in the `configuration.xml` file.

`See also`

- Public REST APIs

- JCR Structure

### 3.1.1. ContentDAO

ContentDAO is an overridable component used in the Content application (or called RSS reader) of Collaboration.

You can find the configuration file at WEB-INF/cs-extension/cs/content/content-service-configuration.xml with the declaration as below:

    <component>

      <key>org.exoplatform.content.service.ContentDAO</key>

      <type>org.exoplatform.content.service.impl.ContentDAOImpl</type>

    </component>

The example below is an example of plugin configuration:

    <external-component-plugins>

      <target-component>org.exoplatform.content.service.ContentDAO</target-component>

      <component-plugin>

        <name>rssreader.listener</name>

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

        <type>org.exoplatform.content.service.RSSContentPlugin</type>

        <description>rss reader plugin</description>

      </component-plugin>

      <component-plugin>

        <name>description.listener</name>

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

        <type>org.exoplatform.content.service.DescriptionPlugin</type>

        <description>Description plugin</description>

      </component-plugin>

    </external-component-plugins>

### 3.1.2. ContactLifeCycle

ContactLifeCycle is an interface to extend the capabilities of eXo Platform. The ContactLifeCycle lets you be notified during the lifecycle of an address book's contact when a contact is added or modified.

An example of ContactLifeCycle has been implemented to integrate the Address Book application in the eXo Social's Spaces. See the following configuration at: ext/social-integration/src/main/resources/conf/portal/configuration.xml.

See the following example:

    <external-component-plugins>

      <target-component>org.exoplatform.contact.service.ContactService</target-component>

      <component-plugin>

        <name>ContactEventListener</name>

        <set-method>addListenerPlugin</set-method>

        <type>org.exoplatform.cs.ext.impl.ContactSpaceActivityPublisher</type>

      </component-plugin>

    </external-component-plugins>

Details:

- `ContactSpaceActivityPublisher` implements `ContactLifeCycle`. This implementation publishes activities in the space activity stream to notify of new and updated contacts in the space address book.

### 3.1.3. Transport

Transport is an overridable component used in the Chat application of Collaboration.

This overridable component is used to help users add the protocol to the Chat application, such as: ICQ, YAHOO, MSN, XMPP, AIM, GTALk.

The Chat application of Collaboration only uses the XMPP protocol that is implemented in the XMPPTransport object.

### 3.1.4. EventLifeCycle

EventLifeCycle is an extension point used in the Calendar application of Collaboration. You can find the configuration file of this component at: ext/social-integration/src/main/resources/conf/portal/configuration.xml.

See the following example:

    <external-component-plugins>

      <target-component>org.exoplatform.calendar.service.CalendarService</target-component>

      <component-plugin>

        <name>CalendarEventListener</name>

        <set-method>addEventListenerPlugin</set-method>

        <type>org.exoplatform.cs.ext.impl.CalendarSpaceActivityPublisher</type>

      </component-plugin>

    </external-component-plugins>

Details:

- `CalendarSpaceActivityPublisher` implements `EventLifeCycle`. It writes activities in the space activity stream when events or tasks are added/modified.

## 3.2. Public REST APIs

- Calendar application

  Introduction to REST API of the Calendar portlet, and details of APIs (such as checkpermission, event, publicProcess) that are used to build all functions of the Calendar application.

- Mail application

  Introduction to REST API of the Mail portlet, and details of APIs (such as checkMail, synchFolders, getCheckMailJobInfo) that are used to build all functions of the Mail application.

- Chat application

  Introduction to services (RESTXMPPService and FileExchangeService), and details of APIs (such as getRoomConfigForm, declineToRoom, getRoomConfigForm) that are used for building all functions of the Chat application.

Collaboration implements and provides many public REST APIS to help built-in applications, such as Calendar, Chat and Mail to communicate and transfer data with the server. By using these public REST APIs, extended or 3rd party applications can make use of this to develop cool web applications faster without much implementation.

`See also`

- Extension points

- JCR Structure

### 3.2.1. Calendar application

The Calendar application of Collaboration uses CalendarWebservice to provide all APIs for working with calendars, such as creating personal/group calendars, sharing calendars, managing events/tasks.

The REST API of Calendar portlet is exposed by org.exoplatform.services.cs.calendar.CalendarWebservice class.

Service name | Service URL | Location | Description
--- | --- | --- | ---
CalendarWebservice | `$portalname/$restcontextname/cs/calendar` | Maven groupId: org.exoplatform.cs ArtifactId: exo.cs.web.webservice | Call extended services of the Calendar application.

Details:

- $portalname: The name of the portal.

- $restcontextname: The context name of REST web application which is configured into the "$portalname" portal.

APIs usage: Use the APIs to build all functions of the Calendar application.

Resource | Description
--- | ---
GET /checkPermission/{username}/{calendarId}/{type}/ | Check permission of the currently logged user on any calendar by the given calendar Id. The input parameters will be in the URL of the calendar.
GET /event/{username}/{eventFeedName}/ | Provide details of an event with the given username and event Id. The data returned will be in the ics format.
GET /feed/{username}/{feedname}/{filename}/ | Return the XML RSS feed data of one user's calendar.
GET /subscribe/{username}/{calendarId}/{type} | Provide an end-point to subscribe calendars from the Calendar function of eXo Platform.
GET /{username}/{calendarId}/{type} | Generate the ICalendar data from a given calendar Id. The data content will be all events inside. This service requires authentication and permission of the Users group only.
GET /events/personal/{type}/{calids}/{from}/{to}/{limit} | Get a list of personal events by their type, a list of calendar Ids, from time, to time and the size limitation. This service requires authentication and permission of the Users group only.
GET /getissues/{currentdatetime}/{type}/{limit} | List upcoming events or tasks by the current date. This service requires authentication and permission of the Users group only.
GET /updatestatus/{taskid} | Allow users to update the status of a task. This service requires authentication and permission of the Users group only.
GET /getcalendars | Retrieve all data of a private (personal) calendar of a logged-in user. It requires authentication and permission of the Users group only.
GET /getevent/{eventid} | Produce the content of a given event basing on its Id. It requires authentication and permission of the Users group only.
GET /invitation/{calendarId}/{calType}/{eventId}/{inviter}/{invitee}/{eXoId}/{answer} | Provide the end-point to answer or reply an invitation to join any given event by its Id.

#### GET /checkPermission/{username}/{calendarId}/{type}/

Check permission of the currently logged user on any calendar by the given calendar Id. The input parameters will be in the URL of the calendar.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/calendar/checkPermission/{username}/{calendarId}/{type}/

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
username | The given user's Id, or the currently logged user.
calendarId | The given calendar Id on which the permission is checked.
type | The calendar type: private, public or shared.

- Optional (query parameters): No

#### GET /event/{username}/{eventFeedName}/

Provide details of an event with the given username and event Id. The data returned will be in the ics format.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/calendar/event/{username}/{eventFeedName}/

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
username | The requested username.
eventFeedName | Contain eventId and CalType.

- Optional (query parameters): No

#### GET /feed/{username}/{feedname}/{filename}/

Return the XML RSS feed data of one user's calendar.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/calendar/feed/{username}/{feedname}/{filename}/

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
username | The requested username.
feedname | The name of the RSS feed.
filename | The file name.

- Optional (query parameters): No

#### GET /subscribe/{username}/{calendarId}/{type}

Provide an end-point to subscribe calendars from the Calendar function of eXo Platform.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/calendar/subscribe/{username}/{calendarId}/{type}

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
username | The given Id of the user who wants to get data.
calendarId | The given calendar Id.
type | The calendar type, such as personal, shared, and public.

- Optional (query parameters): No

#### GET /{username}/{calendarId}/{type}

Generate the ICalendar data from a given calendar Id. The data content will be all events inside. This service requires authentication and permission of the Users group only.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/calendar/{username}/{calendarId}/{type}

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
username | Require the user Id for authentication and look up the personal calendar.
calendarId | The given calendar Id to look up.
type | The calendar type, such as private, shared, public.

- Optional (query parameters): No

#### GET /events/personal/{type}/{calids}/{from}/{to}/{limit}

Get a list of personal events by their type, a list of calendar Ids, from time, to time and the size limitation. This service requires authentication and permission of the Users group only.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/calendar/events/personal/{type}/{calids}/{from}/{to}/{limit}

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
type | The type of the events. The possible values are "Event" and "Task".
calids | A string of calendar Ids separated by commas (,).
from | A value of period (in miliseconds) during which the events are started.
to | A value of period (in miliseconds) during which the events are ended.
limit | The maximum number of returned events.

- Optional (query parameters): No

#### GET /getissues/{currentdatetime}/{type}/{limit}

List upcoming events or tasks by the current date. This service requires authentication and permission of the Users group only.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/calendar/getissues/{currentdatetime}/{type}/{limit}

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
currentdatetime | The current date using the ISO 8601 format (yyyyMMdd).
type | The event or task.
limit | The maximum number of events returned by the current date.

- Optional (query parameters): No

#### GET /updatestatus/{taskid}

Allow users to update the status of a task. This service requires authentication and permission of the Users group only.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/calendar/updatestatus/{taskid}

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
taskid | The given task Id.

- Optional (query parameters):

Parameter | Description
--- | ---
statusid | The Id of the status. Possible values are 1 - Need action, 2 - In Progress, 3 - Completed, and 4 - Canceled.

#### GET /getcalendars

Retrieve all data of a private (personal) calendar of a logged-in user. It requires authentication and permission of the Users group only.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/calendar/getcalendars

Parameters:

- Required (path parameters): No

- Optional (query parameters): No

#### GET /getevent/{eventid}

Produce the content of a given event basing on its Id. It requires authentication and permission of the Users group only.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/calendar/getevent/{eventid}

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
eventid | The event Id.

- Optional (query parameters): No

#### GET /invitation/{calendarId}/{calType}/{eventId}/{inviter}/{invitee}/{eXoId}/{answer}

Provide the end-point to answer or reply an invitation to join any given event by its Id.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/calendar/invitation/{calendarId}/{calType}/{eventId}/{inviter}/{invitee}/{eXoId}/{answer}

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
calendarId | The calendar Id to which the event belongs.
calType | The calendar type, such as public, private, and shared.
eventId | The Id which retrieves the event data.
inviter | The user Id of the inviter (owner of invitation).
invitee | The user Id of the receiver/participant.
eXoId | The user Id when being logged in.
answer | The answer of invitation, such as accept, refuse, or will join.

- Optional (query parameters): No

### 3.2.2. Mail application

The Mail application of Collaboration uses MailWebservice to provide all APIs for working with mail, such as sending/checking/storing mail to JCR.

REST API of the Mail portlet is exposed by org.exoplatform.services.cs.mail.MailWebservice class.

### Warning

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

Service name | Service URL | Location | Description
--- | --- | --- | ---
MailWebservice | `$portalname/$restcontextname/private/cs/mail` | Maven groupId: org.exoplatform.cs artifactId: exo.cs.web.webservice | This service is used to call extended services of the Mail application.

APIs Usage: Use the APIs to build all functions of the Mail application.

Resource | Description
--- | ---
GET /checkmail/{username}/{accountId}/{folderId}/ | Provide communication from the checking-mail job and update the status on the server. This service requires authentication and permission of the Users group only.
GET /synchfolders/{username}/{accountId}/ | Do the synchronization folders of the Mail application. This service requires authentication and permission of the Users group only.
GET /stopcheckmail/{username}/{accountId}/ | Stop the checking-mail job in case the user does not want to run the checking mail. This service requires authentication and permission of the Users group only.
GET /checkmailjobinfo/{username}/{accountId}/ | Get more information of the mail-checking job. This service requests for authentication and authorization only for the Users group.
GET /searchemail/{keywords} | Look up all contacts' emails by the input keywords. This service requires authentication and permission of the Users group only.
GET /unreadMail/{accountId}/{folderId}/{tagId}/{limit} | List the header of unread mails. This service requires authentication and permission of the Users group only.
GET /getAccounts/ | List the accounts of the current user. This service requires authentication and permission of the Users group only.
GET /getFoldersTags/{accountId} | List folders and tags of the current accounts. This service requires authentication and permission of the Users group only.
GET /checkforsupportedtypes/{mechs}/{username}/{protocol}/{host} | Help checking supported types from any given mail server by host name or IP.
GET /searchuser/{keywords} | Get all users from the user database of the portal. This service is currently deprecated.

#### GET /checkmail/{username}/{accountId}/{folderId}/

Provide communication from the checking-mail job and update the status on the server. This service requires authentication and permission of the Users group only.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/mail/checkmail/{username}/{accountId}/{folderId}/

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
username | The given user Id.
accountId | The Id of an email account. In the current implementation, one user is allowed to have multiple email accounts.
folderId | The given folder Id (name) to check messages inside.

- Optional (query parameters): No

#### GET /synchfolders/{username}/{accountId}/

Do the synchronization folders of the Mail application. This service requires authentication and permission of the Users group only.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/mail/synchfolders/{username}/{accountId}/

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
username | The given username.
accountId | The Id of an email account. In the current implementation, one user is allowed to have multiple accounts.

- Optional (query parameters): No

#### GET /stopcheckmail/{username}/{accountId}/

Stop the checking-mail job in case the user does not want to run the checking mail. This service requires authentication and permission of the Users group only.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/mail/stopcheckmail/{username}/{accountId}/

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
username | The given user Id.
accountId | The Id of an email account. In the current implementation, one user is allowed to have multiple accounts for a single user, so this should be a specific account Id.

- Optional (query parameters): No

#### GET /checkmailjobinfo/{username}/{accountId}/

Get more information of the mail-checking job. This service requests for authentication and authorization only for the Users group.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/mail/checkmailjobinfo/{username}/{accountId}/

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
username | The given user Id.
accountId | The given user account. By implementation, there are multiple accounts for a single user.

- Optional (query parameters): No

#### GET /searchemail/{keywords}

Look up all contacts' emails by the input keywords. This service requires authentication and permission of the Users group only.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/mail/searchemail/{keywords}

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
keywords | The given keywords.

- Optional (query parameters): No

#### GET /unreadMail/{accountId}/{folderId}/{tagId}/{limit}

List the header of unread mails. This service requires authentication and permission of the Users group only.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/mail/unreadMail/{accountId}/{folderId}/{tagId}/{limit}

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
accountId | The Id of an email account.
folderId | The Id of an email folder.
tagId | The Id of a tag which is used to highlight for email messages.
limit | The maximum number of returned emails.

- Optional (query parameters): No

#### GET /getAccounts/

List the accounts of the current user. This service requires authentication and permission of the Users group only.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/mail/getAccounts/

Parameters:

- Required (path parameters): No

- Optional (query parameters): No

#### GET /getFoldersTags/{accountId}

List folders and tags of the current accounts. This service requires authentication and permission of the Users group only.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/mail/getFoldersTags/{accountId}

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
accountId | The Id of an email account.

- Optional (query parameters): No

#### GET /checkforsupportedtypes/{mechs}/{username}/{protocol}/{host}

Help checking supported types from any given mail server by host name or IP.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/mail/checkforsupportedtypes/{mechs}/{username}/{protocol}/{host}

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
mechs | The name of mechanisms to check.
username | The given username.
protocol | The type of protocol to check.
host | The host name or the mail server IP.

- Optional (query parameters): No

#### GET /searchuser/{keywords}

Get all users from the user database of the portal. This service is currently deprecated.

URL:

    http://{domain_name}/{rest_context_name}/private/cs/mail/searchuser/{keywords}

Parameters:

- Required (path parameters):

Parameter | Description
--- | ---
keywords | The text which is used to search for a specific username.

- Optional (query parameters): No

### 3.2.3. Chat application

The Chat application uses some APIs to help users create a room, join a room, invite other users to room, or send files, and more.

The Chat application of Collaboration uses two following services to do these tasks.

- RESTXMPPService

- FileExchangeService

### Warning

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

RESTXMPPService

REST API RESTXMPPService of the Chat portlet is exposed by org.exoplatform.services.xmpp.rest.RESTXMPPService class.

Service name | Service URL | Location | Description
--- | --- | --- | ---
RESTXMPPService | `$portalname/$restcontextname/xmpp` | Maven groupid: org.exoplatform.cs exo.cs.eXoApplication.chat.service | Implement all actions sent to the Chat server;

APIs Usage: Use the following APIs to build all functions of the Chat application.

Name | Service URL endpoint | Parameters | Expected Values | Description
--- | --- | --- | --- | ---
loadJsResourceBundle | /loadJsResourceBundle/{locale}/ | locale | locale id | Read the language files in the Chat server.
createRoom | /muc/createroom/{username}/ | username room nickname | user id room name display name | Create a chat room or a group chat.
configRoom | /muc/configroom/{username}/ | username room | user id room name | Establish the configuration of a chat room.
getRoomConfigForm | /muc/getroomconfig/{username}/ | username room | user id room name | Get the configuration of a chat room created.
getRoomInfo | /muc/getroominfo/{username}/ | username room | user id string | Get the information of a chat room created.
getJoinedRooms | /muc/joinedrooms/{username}/ | username | user id | List chat rooms that a user has been joined.
getRooms | /muc/rooms/{username}/ | username | user id | Get a list of group chat or chat rooms created.
declineToRoom | /muc/decline/{username}/{inviter}/ | username inviter room reason | user id user id room name string | Refuse the invitation to join the chat room.
destroyRoom | /muc/destroy/{username} | username room reason altroom | user id room name string room id | Delete a chat room created.
inviteToRoom | /muc/invite/{username}/{invitee}/ | username invitee room reason | user id user id room name string | Invite other users to join a chat room.
joinRoom | /muc/join/{username}/ | username room nickname password | user id room name display name room password | Join a chat room.
leftRoom | /muc/leaveroom/{username}/ | username room | user id room name | Leave a chat room.
changeNickname | /muc/changenickname/{username}/{nickname}/ | username nickname | user id display name | Change the nickname of users.
changeAvailabilityStatusInRoom | /muc/changestatus/{username}/{mode}/ | username mood room status | user id presence type room name presence type | Change the status of a user in the chat room.
changeSubject | muc/changesubject/{username}/ | username room subject | user id room name string | Change the subject of a chat room.
manageRoleRoom | /muc/managerole/{username}/ | username room nickname role command | user id room name display name Participant / moderator grant/revoke | Change the role of each user in a chat room.
manageAffilationRoom | /muc/manageaffiliation/{username}/ | username room nickname affiliation command | user id room name display name String affiliation grant / revoke | Change the ownership of a chat room.
kickUserFromRoom | /muc/kick/{username}/ | username nickname room reason | user id display name room name string | Remove a user from the chat room.
banUserFromRoom | /muc/ban/{username}/ | username room name reason | user id room name user id string | Ban a user in the chat room.
addBoddyToRoster | /roster/add/{username}/{adduser} | username adduser nickname group | user id use id display name group id | Add a user into the contact list.
updateBoddy | /roster/update/{username}/{upduser}/ | username upduser nickname group | user id user id display name group id | Update new users into the contact list.
createGroup | /roster/group/{username}/{group}/ | username group | user id group id | Create a chat room.
askForSubscription | /askforsubscription/{username}/{askuser}/ | username askuser nickname | user id user id display name | Change the presence type of a user into Subscription.
cleanBuddylist | /rosterclean/{username}/ | username | user id | Remove a user from the contact list.
getAllHistory | /history/getmessages/{usernameto}/{isGroupChat}/ | usernameto isGroupChat usernamefrom | user id true / false user id | Get all the chat history of two users.
getHistoryBetweenDate | /history/getmessages/{usernameto}/{isGroupChat}/{from}/{to}/ | usernameto isgroupchat from to usernamefrom | user id true / false valid date format valid date format user id | Get the chat history of two users in a specific period.
getHistoryFromDateToNow | /history/getmessages/{usernameto}/{isGroupChat}/{from}/ | username isGroupChat from usernamefrom | user id true / false valid date format valid date format user id | Get the chat history of two users from a specific date to the current time.
getAllHistoryFile | /history/file/getmessages/{usernameto}/{isGroupChat}/{clientTimezoneOffset}/ | uernameto isGroupChat clientTimezoneOffset usernamefrom | user id true / false Long user id | Download all the chat history file of two users.
getHistoryFromDateToNowFile | /history/file/getmessages/{usernameto}/{isGroupChat}/{from}/{clientTimezoneOffset}/ | usernameto isGroupChat from clientTimezoneOffset usernamefrom | user id true / false valid date format Long user id | Download the chat history file of two users from a specific date to the current time
getHistoryBetweenDateFile | /history/file/getmessages/{usernameto}/{isGroupChat}/{from}/{to}/{clientTimezoneOffset}/ | usernameto isGroupChat from to clientTimezoneOffset usernamefrom | user id true / false valid date format valid date format Long user id | Download the chat history file of two users in the specific date.
getUserInfo | /getuserinfo/{username}/{needinfo}/ | username needinfo | user id string | Get the information of a user.
login2 | /login2/{forcache}/ | forcache |  | Allow a user to log in the chat server.
logout | /logout/{username}/{presencestatus}/ | username presencestatus | user id presencestatus | Allow a user to log out the chat server.
messageReceive | /history/messagereceive/{username}/{messageid}/ | username messageid | user id message id | Receive a message from other users.
removeBuddy | /roster/del/{username}/{removeboddy}/ | username removeboddy | user id user id | Delete a contact from the contact list.
removeTransport | /removetransport/{username}/{transport}/ | username transport | user id transport service (e.g: Yahoo, XMPP) | Reset the presence type at the service that is being used.
searchUsers | /searchuser/{username}/ | username search byUsername byName byEmail searchService | user id string true / false true /false true / false string | Search users in the chat server.
sendMessage | /sendmessage/{username}/ | username messageBean | usesr id object | Send an message to other users.
sendMUCMessage | /muc/sendmessage/{username}/ | username messageBean | user id object | Send a message to multiple users or a group.
setUserStatus | /sendstatus/{username}/{status}/ | username status | user id available/ unavailable / do not disturb / away / extend away | Change the status of a user.
subscribeUser | /subscribeuser/{username}/{subsuser}/ | username subsuser | user id user id | Change presence type into Subscribed type.
unsubscribeUser | /unsubscribeuser/{username}/{unsubsuser}/ | username unsubsuser | user id user id | Change presence type into the Unsubscribed type.
acceptFile | /fileexchange/accept/{username}/{uuid}/ | username uuid | user id string | Accept getting a file sent from another user.
rejectFile | /fileexchange/reject/{username}/{uuid}/ | username uuid | user id string | Refuse getting a file sent from another user.
getPreviousStatus | /getprevstatus/{username}/ | username | user id | Get the status of a user in the last log-in.

FileExchangeService

REST API FileExchangeService for uploading files is defined in org.exoplatform.services.xmpp.rest.FileExchangeService class.

Service name | Service URL | Location | Description
--- | --- | --- | ---
FileExchangeService | `$portalname/$restcontextname/fileexchange` | Maven groupid: org.exoplatform.cs InterfactId: exo.cs.eXoApplication.chat.service | Upload a file to the server and inform the user that the file can be downloaded to the local computer.

APIs Usage: Use the following APIs to upload and send files to other users.

Name | Service URL endpoint | Parameters | Expected Values | Description
--- | --- | --- | --- | ---
upload | $portalname/$restcontextname/fileexchange | description username requestor isroom | string user id user id true / false | Upload a file to the server.

## 3.3. JCR Structure

- Calendar JCR Structure

  Introduction to the Calendar JCR structure, details of child nodes, node types and properties of the following nodes: calendars, eventCategories, categories, eXoCalendarFeed, YY%yyyy% and calendarSetting.

- Chat JCR Structure

  Introduction to the Chat JCR structure, and properties of its node types (lr:conversation, lr:historicalmessage, lr:participantchat, lr:interlocutor, lr:defaultpresencestatus, and lr:presencestatus).

- Address Book JCR Structure

  Introduction to the Address Book JCR structure, and details of its nodes (Contacts, ContactGroup, tags and shared).

- Mail JCR Structure

  Introduction to the Mail JCR structure, and properties of its node types (exo:account, exo:folder, exo:message, exo:mailAttachment, exo:mailtag, exo:filter, exo:mailSetting).

- RSS JCR Structure

  Introduction to the RSS JCR structure, and properties of its node type (exo:content).

Collaboration is a JCR-based product, so data of Collaboration are managed by the eXo-JCR service with each specific structure. The chapter aims at outlining the JCR structure of each application in Collaboration through diagrams and then describing properties of main node types.

Each diagram shows nodes and their primary node types. Every node/child node must have only one primary node type represented in the round bracket () under the node/childnode, but may also have many mixin node types. Because mixin nodes cannot define the node structure like the primary nodes, they are not shown in the diagrams and their properties hereafter are not described.

### Note

To learn more about the Collaboration JCR Structure, you should have the certain knowledge of JCR.

`See also`

- Extension points

- Public REST APIs

### 3.3.1. Calendar JCR Structure

The Calendar data are saved in eXo-JCR under the CalendarApplication data directory. The Calendar JCR Structure is divided into two main branches: one for public (exo:application) and the other for users (Users).

The whole JCR structure of Calendar can be visualized in the diagram below:

#### calendars

The Calendars node of the nt:unstructured type contains the child nodes of the exo:calendar type. When a calendar is created by users or the default ones in the system, it is stored under the calendars node: CalendarApplication/calendars/%calendar_id%. Its node type is exo:calendar that has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:id | String | false | The Id of the calendar.
exo:name | String | false | The name of the calendar.
exo:description | String | false | The brief description of the calendar.
exo:viewPermissions | String | true | The list of users/groups having the view permissions.
exo:editPermissions | String | true | The list of users/groups having the edit permissions.
exo:groups | String | true | The list of user groups to which the calendar belongs.
exo:categoryId | String | false | The Id of the category containing the calendar.
exo:calendarColor | String | false | The color name of the calendar that is defined in the org.exoplatform.web ui.form.ext.UIFormColorPicker class (such as Sky blue, Powder blue).
exo:calendarOwner | String | false | The name of the user creating the calendar.
exo:locale | String | false | Location where the calendar is set in format of the uppercase ISO 3166 3-letter country code.
exo:timeZone | String | false | The Id of the time zone that is set by the user in compliance with the Java class: java.util.TimeZone.
exo:publicUrl | String | false | The public ICAL link of the calendar.
exo:privateUrl | String | false | The private ICAL link of the calendar.

When a user shares his own calendar with other users, the Id of the calendar node is referred to the node under the sharedCalendar node: CalendarApplication/sharedCalendars/%user_id% following the JCR reference mechanism.

In case of users' private calendar, two mixin node types exo:remoteCalendar and exo:calendarShared can be added to the exo:calendar node type.

- The exo:remoteCalendar mixin node type has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:remoteUrl | String | false | The URL of the remote calendar.
exo:remoteType | String | false | The type of the remote calendar, including ICalendar (.ics) and CalDav.
exo:username | String | false | The username used to access the remote calendar.
exo:password | String | false | The password used to access the remote calendar.
exo:syncPeriod | String | false | The period the remote calendar is synchronized. auto, 5 minutes, 10 minutes, 15 minutes, 1 hour, 1 day, 1 year
exo:lastUpdated | Date | false | The last update of the remote calendar.
exo:beforeDate | String | false | The period before the current date in which the calendar is checked out, including the values: None (the unlimited time), 1 week, 2 weeks, 1month, 2 months, 3 months, 6 months and 1 year.
exo:afterDate | String | false | The period after the current date in which the calendar is checked out, including the values: Forever (the unlimited time), 1 week, 2 weeks, 1month, 2 months, 3 months, 6 months and 1 year.

- The exo:calendarShared mixin node type has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:sharedId | Reference | true | The user Ids who are shared the calendars.

An event can have many attachments which are stored under the attachment node of the exo:eventAttachmenttype: CalendarApplication/calendars/%calendar_id%/%event_id%/attachment/%attachment_id%. The exo:eventAttachment node type has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:fileName | String | false | The name of the attached file.

#### eventCategories

The eventCategories node contains all event categories. When an event category is created, it is stored in a node of the exo:eventCategory type, under the eventCategories node defined at the path: CalendarApplication/eventCategories/%eventcategory_id%.

This node type has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:id | String | false | The Id of the category to which an event belongs.
exo:name | String | false | The name of the category to which an event belongs.
exo:description | String | false | The brief description of the category to which an event belongs.

Each event category node contains the calendar event node of the exo:calendarEvent type. This node of the exo:calendarEvent type is stored at the path: CalendarApplication/eventCategories/%eventcategory_id%/%event_id%.

This node type has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:id | String | false | The Id of the event.
exo:eventType | String | false | Type of the event, including Event and Task.
exo:summary | String | false | The summary of the event.
exo:location | String | false | The location where the event will take place.
exo:taskDelegator | String | false | The name of the user being delegated the task.
exo:description | String | false | The brief description of the event.
exo:eventCategoryId | String | false | The Id of the category containing the event.
exo:eventCategoryName | String | false | The name of the category containing the event.
exo:calendarId | String | false | The Id of the calendar containing the event.
exo:fromDateTime | Date | false | The start time of the event.
exo:toDateTime | Date | false | The end time of the event.
exo:priority | String | false | The preference order of the event, including 4 values: none, low, normal, high.
exo:isPrivate | Boolean | false | Define if the event is private or not.
exo:eventState | String | false | The state of the event which depends on each event type.
exo:invitation | String | true | The list of email addresses of users being invited to the event. This property is for the Event type only.
exo:participant | String | true | The list of users being invited to the event. This property is for the Event type only.
exo:participantStatus | true | String | The status of the participant, including name and status value.
exo:message | String | false | The content of the invitation email.
exo:repeat | String | false | Repetition type of the event, including: "norepeat", "daily", "weekly", "monthly", "yearly", "weekend", "workingdays".
exo:sendOption | String | false | The option to notify users before sending the invitation via email: never (not sending all time), always (sending without asking) and ask (asking before sending).

#### categories

The categories node of the nt:unstructured type contains the child nodes of the exo:calendarCategory type. These child nodes containing the Id of the calendars in the categories are stored under the categories node: CalendarApplication/categories/%calendarcategories_id%.

The exo:calendarCategory node type has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:id | String | false | The Id of the category to which a calendar belongs.
exo:name | String | false | The name of the category to which a calendar belongs.
exo:description | String | false | The brief description of the category to which a calendar belongs.
exo:calendarIds | String | true | A list of calendar Ids belonging to the category.

#### eXoCalendarFeed

The eXoCalendarFeed of the nt:unstructured type contains iCalendars, webDavCalendars as child nodes and others of the exo:rssData type.

The exo:rssData node type has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:baseUrl | String | false | The original link to the RSS source.
exo:title | String | false | The title of the feed.
exo:content | Binary | false | The content of the feed.

The iCalendars node of the nt:unstructured type contains the child nodes of exo:iCalData type.

The exo:iCalData node type has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:data | Binary | false | The exported content of the calendar in the ics.format.

The webDavCalendars node of the nt:unstructured type contains the child nodes of the exo:caldavCalendarEvent type.

The exo:caldavCalendarEvent node type has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:caldavHref | String | false | The URL of the remote calendar event.
exo:caldavEtag | String | false | The tag of the remote calendar event.

#### Y%yyyy%

The Y%yyyy% of the nt:unstructured type has the name beginning with the Y character followed by the year name having 4 numbers. It contains all the child nodes of M%mm%.

The M%mm% of the nt:unstructured type has the name beginning with the M character followed by the month name having 2 numbers. It contains all the child nodes of D%dd%.

The D%dd% of the nt:unstructured type has the name beginning with the D character followed by the date having 2 numbers. This node has two child nodes: reminder and events.

The reminder node of the nt:unstructured type contains the child nodes named basing on the Id of the event. This child node also has the nt:unstructured type. Each node is used to classify reminders of the same event. Each reminder is stored under a node of the exo:reminder type: CalendarApplication/Y%yyyy%/M%mm%/D%dd%/reminders/%event_id%/%reminder_id%.

The exo:reminder node type has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:id | String | false | The Id of the reminder.
exo:eventId | String | false | The event Id of the reminder.
exo:creator | String | false | Define who creates the reminder.
exo:alarmBefore | Long | false | The amount of time that the reminder message is sent before the event starts.
exo:email | String | false | The list of emails to which the reminder message is sent.
exo:timeInterval | Long | false | Interval for resending the reminder message in minutes.
exo:reminderType | String | false | The types of reminders, including email and pop-up.
exo:fromDateTime | Date | false | The start time to send the reminder.
exo:remindDateTime | Date | false | The time to send the reminder.
exo:isRepeat | Boolean | false | Check if the reminder is repeated or not.
exo:isOver | Boolean | false | Check if the reminder is expired or not.
exo:summary | String | false | The summary of the reminder.
exo:description | String | false | The brief description of the reminder.

The events node of the nt:unstructured type contains the child node of the exo:calendarPublicEvent type defined at the path: CalendarApplication/Y%yyyy%/M%mm%/D%dd%/events/%event_id%.

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:id | String | false | The Id of the public event.
exo:eventType | String | false | Event type, including Task and Event.
exo:calendarId | String | false | The calendar Id of the public event.
exo:rootEventId | String | false | The Id of each corresponding node: exo:calendarEvent.
exo:fromDateTime | Date | false | The start time of the public event.
exo:toDateTime | Date | false | The snd time of the public event.
exo:participant | String | true | The list of users being invited to the public event.
exo:eventState | String | false | The state of the public event, including: busy, available, outside.

The events node can add the exo:repeatCalendarEvent mixin node that has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:repeatCount | Long | false | The number of times that the event is repeated.
exo:repeatUntil | Date | false | The given time until when the event is repeated.
exo:repeatInterval | Long | false | The interval when the event is repeated. It can be day, week, month or year corresponding to the repetition type chosen of day, week, month or year.
exo:repeatByDay | String | true | The given days in a week on which the event is repeated.
exo:repeatByMonthDay | Long | true | The given day/date in a month on which the event is repeated.
exo:recurrenceId | String | false | The Id of each event in the event series.
exo:excludeId | String | true | The Id of the events that are removed from the event series.
exo:isException | Boolean | false | Show whether the event is the exception in the event series or not. This case occurs when the event is removed from the repeated event series.
exo:originalReference | Reference | false | The UUID of the event that is repeated first.
exo:repeatFinishDate | Date | false | The end date on which the event is repeated.

#### calendarSetting

The calendarSetting node of the exo:calendarSetting type is stored in CalendarApplication/calendarsetting. The exo:calendarSetting node type has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:viewType | String | false | View type of the calendar. For more details, refer to the org.exoplatform.calendar.service. CalendarSetting class.
exo:timeInterval | Long | false | The interval for each action displayed each UI, for example, dragging and dropping one event in the Calendar application.
exo:weekStartOn | String | false | Define the start date of one week, complying with the org.exoplatform.cal endar.service.CalendarSetting class.
exo:dateFormat | String | false | Define the date format, including dd/MM/yyyy, dd-MM-yyyy, MM/dd/yyyy, and MM-dd-yyyy.
exo:timeFormat | String | false | Define the time format, including "hh:mm a" and "HH:mm".
exo:location | String | false | Location where the calendar is set in format of the uppercase ISO 3166 3-letter country code.
exo:timeZone | String | false | The Id of the time zone, which is set by the user in compliance with the Java class: java.util.TimeZone.
exo:showWorkingTime | false | Boolean | Check if the working period is displayed or not.
exo:workingTimeBegin | String | false | Time to start working. This property only takes effect when exo:showWorkingTime is set to true.
exo:workingTimeEnd | String | false | Time to end working. This property only takes effect when exo:showWorkingTime is set to true.
exo:defaultPrivateCalendars | String | true | The list of the hidden private calendars.
exo:defaultPublicCalendars | String | true | The list of the hidden public calendars.
exo:defaultSharedCalendars | String | true | The list of the hidden shared calendars.
exo:sharedCalendarsColors | String | true | Define the color of the shared calendar, which is in the format of calendar id:color name.
exo:sendOption | String | false | The option to notify users before sending an invitation via email: never (not sending all time), always (sending message without asking) and ask (asking before sending).

### 3.3.2. Chat JCR Structure

### Warning

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

The node type lr:conversation has the following properties:

Property name | Required type | Description
--- | --- | ---
lr:conversationstartDate | Date | Start date of the conversation.
lr:conversationlastActiveDate | Date | Last date when the conversation is updated.

The node type lr:historicalmessage has the following properties:

Property name | Required type | Description
--- | --- | ---
lr:messagefrom | String | Jabber Id of the user (or chat room) sending (or containing) the message respectively.
lr:messageto | String | Jabber Id of the user (or chat room) to whom (to which) the message is sent.
lr:messagetype | String | List of message types. For more details, refer to the org.jivesoftware. smack.packet.Message.Type class.
lr:messagebody | String | Main content of the message.
lr:messagedateSend | Date | Date when the message was sent.
lr:messagereceive | Boolean | Check if the message has been received or not.

The node type lr:participantchat has the following properties:

Property name | Required type | Description
--- | --- | ---
lr:participantchatjid | String | Jabber Id of the user.
lr:participantchatusername | String | Username of the portal.

The node type lr:interlocutor contains information regarding to the conversation between two users or of the chat room. It has the following properties:

Property name | Required type | Description
--- | --- | ---
lr:conversationId | String | Id of the conversation which is the JCR node name of lr:conversation.
lr:interlocutorjid | String | Jabber Id of the chat room or user.
lr:interlocutorname | String | Username or name of the chat room.
lr:interlocutorisRoom | Boolean | Define if the conversation is performed between two users or is of chat room.

The node type lr:defaultpresencestatus has the following properties:

Property name | Required type | Description
--- | --- | ---
lr:conversationlastActiveDate | Date | Date when the conversation is last updated.

The node type lr:presencestatus contains information regarding to the current status of user. It has the following properties:

Property name | Required type | Description
--- | --- | ---
lr:userid | String | Id of the user.
lr:status | String | Current status of the user included in the org.jivesoftware.smack.pack et.Presence.Type class.

### 3.3.3. Address Book JCR Structure

### Warning

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

The Address Book portlet is a JCR-based application. The Address Book data are stored in the eXo-JCR under the ContactApplication data directory. The whole JCR structure of Address Book can be visualized in the diagram below:

Contacts

The Contacts node of the nt:unstructured type has the child nodes of the exo:contact. When a contact is created and added to an address book, it is stored in a node defined at the path: ContactAppication/Contacts/%contact_id%. When a contact is tagged, it is saved in the tags node with the exo:tags property. In case, a contact is shared to other users, it is referred to the SharedContact node of the exo:sharedId type. The exo:contact node type has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:id | String | false | Node name of the exo:contact property.
exo:fullName | String | false | The full name of the contact.
exo:firstName | String | false | The first name of the contact.
exo:lastName | String | false | The last name of the contact.
exo:nickName | String | false | The nickname of the contact.
exo:gender | String | false | The gender of the contact.
exo:birthday | Date | false | The birthday of the contact.
exo:jobTitle | String | false | The job title of the contact.
exo:emailAddress | String | true | The email address of the contact.
exo:exoId | String | false | The Id of the user in the Chat application of Collaboration.
exo:googleId | String | false | The Google Id of the user.
exo:msnId | String | false | The MSN Id of the user.
exo:aolId | String | false | The AOL Id of the user.
exo:yahooId | String | false | The Yahoo Id of the user.
exo:icrId | String | false | The ICR Id of the user.
exo:skypeId | String | false | The Skype Id of the user.
exo:icqId | String | false | The ICQ Id of the user.
exo:homeAddress | String | false | The home address of the contact.
exo:homeCity | String | false | The home city of the contact.
exo:homeState_province | String | false | The home state/province of the contact.
exo:homePostalCode | String | false | The home postal code of the contact.
exo:homeCountry | String | false | The home country of the contact.
exo:homePhone1 | String | false | The primary home phone number of the contact.
exo:homePhone2 | String | false | The secondary home phone number of the contact.
exo:homeFax | String | false | The home fax of the contact.
exo:personalSite | String | false | The personal site of the contact.
exo:workAddress | String | false | The address where the contact works.
exo:workCity | String | false | The city where the contact works.
exo:workState_province | String | false | The state/province where the contact works.
exo:workPostalCode | String | false | The postal code of the location where the contact works.
exo:workCountry | String | false | The country where the contact works.
exo:workPhone1 | String | false | The primary phone number at the contact's working location.
exo:workPhone2 | String | false | The secondary phone number at the contact's working location.
exo:workFax | String | false | The fax number at the contact's working location.
exo:mobilePhone | String | false | The mobile phone number of the contact.
exo:webPage | String | false | The website of the contact.
exo:note | String | false | The note about the contact.
exo:categories | String | true | The list of categories created by the user.
exo:editPermissionUsers | String | true | The list of users obtaining the edit permission.
exo:viewPermissionUsers | String | true | The list of users obtaining the view permission.
exo:editPermissionGroups | String | true | The list of groups obtaining the edit permission.
exo:viewPermissionGroups | String | true | The list of groups obtaining the view permission.
exo:tags | String | true | The list of tag Ids which the contact has marked.
exo:lastUpdated | Date | false | The time when the contact is last updated.
exo:isOwner | Boolean | false | Show if this contact is the contact of the user in the system or not.
exo:ownerId | String | false | If the contact is a user in the system, the owner Id will be the username of this user.

This node type may add the exo:contactShared mixin that has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:sharedUserId | String | false | The name of the user sharing the contact.
exo:sharedId | Reference | true | The list of the references to shared users/groups.s

ContactGroup

The ContactGroup node of the nt:unstructured type contains all the child nodes of the exo:contactGroup type. These child nodes store address books and are stored in ContactApplication/ContactGroup/%addressbook_id. This node is also referred to the exo:contact node type with the exo:categories property. When an address book is shared, it is referred to the SharedAddressBook node with the exo:sharedId property.

The information of each address book is contained in a node of the exo:contactGroup type that has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:id | String | false | The Id of the address book.
exo:name | String | false | The name of the address book.
exo:description | String | false | The brief description of the address book.
exo:editPermissionUsers | String | true | The list of users having the permission to edit the address book.
exo:viewPermissionUsers | String | true | The list of users having the permission to view the address book.
exo:editPermissionGroups | String | true | The list of groups having the permission to edit the address book.
exo:viewPermissionGroups | String | true | The list of groups having the permission to view the address book.

tags

Tags are used to categorize the contacts in groups, so users can easily find the contacts. The tags node of the nt:unstructured type contains the child nodes of the exo:contactTag type. When a new tag is created, it is stored in a node defined at the path: ApplicationData/ContactApplications/tags/%tags_id%. The information of each tag is contained in a node of the exo:contactTag type that has the following properties:

Property name | Required type | Multiple | Description
--- | --- | --- | ---
exo:id | String | false | The Id of the tag.
exo:name | String | false | The name of the tag.
exo:description | String | false | The brief description of the tag.
exo:color | String | false | The color of the tag.

Shared

When a contact or a address book is shared to other users, it is referred to the SharedContact or SharedAddressBook node. Both of these child nodes have the nt:unstructured type.

### 3.3.4. Mail JCR Structure

### Warning

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

The node type exo:account has the following properties:

Property name | Required type | Description
--- | --- | ---
exo:id | String | Id of the account.
exo:label | String | Name of the account.
exo:userDisplayName | String | Screen name of the user.
exo:emailAddress | String | Email address of the account.
exo:emailReplyAddress | String | Email address of the account receiving replies.
exo:signature | String | Signature of the account.
exo:description | String | Brief description of the account.
exo:checkMailAuto | Boolean | Define if the mail is automatically checked after a given period or not.
exo:emptyTrash | Boolean | Define if the trash needs to be cleaned up when exiting from the Mail application or not.
exo:serverProperties | String | Information of the POP/IMAP server configuration.
exo:smtpServerProperties | String | Information of the SMTP server configuration.
exo:lastCheckedTime | Date | Time when the account was last checked.
exo:checkAll | Boolean | Define if all folders of the mail are checked or not.
exo:checkFromDate | Date | Get mails as from the given date only if the value of exo:serverProperties is set for configuring the IMAP server.
exo:isSavePassword | Boolean | Define if the password is saved or not.
exo:secureAuthsIncoming | String | Type of the incoming connection for security. Its values include starttls, ssl/tls.
exo:secureAuthsOutgoing | String | Type of the outgoing connection for security. Its values include starttls, ssl/tls.
exo:authMechsIncoming | String | Authentication mechanism of the incoming connections. Its values consist of ntlm, plain, login, digest-md5, kerberos/gssapi, cram-md5.
exo:authMechsOutgoing | String | Authentication mechanism of the outgoing connections. Its values consist of ntlm, plain, login, digest-md5, kerberos/gssapi, cram-md5.
exo:permissions | String | Permissions of delegators.

The node type exo:folder has the following properties:

Property name | Required type | Description
--- | --- | ---
exo:id | String | Id of the folder.
exo:name | String | Name of the folder.
exo:label | String | Absolute path referring to the folder on the Mail server.
exo:unreadMessages | Long | Number of unread messages in the folder.
exo:totalMessages | Long | Total number of messages in the folder.
exo:personal | Boolean | Define if the folder is created by one user or the Mail system.
exo:folderType | Long | Type of folder, which is defined in the javax.mail.Folder class.
exo:lastStartCheckingTime | Date | Start time of the last check in the folder.
exo:lastCheckedTime | Date | End time of the last check in the folder.

The node type exo:message has the following properties:

Property name | Required type | Description
--- | --- | ---
exo:id | String | Id of the message.
exo:uid | String | Id of the message on the IMAP server.
exo:inReplyToHeader | String | Id of the first message in the matching thread.
exo:path | String | Absolute path of the exo:message type.
exo:account | String | Id of the account.
exo:from | String | Value given in the From field in the email message, containing information of the sender, such as full name and email.
exo:to | String | Value given in the To field in the email message, containing information of the receiver, such as full name and email.
exo:cc | String | Value given in the CC field in the email message, containing information of the receivers, such as full name and email.
exo:replyto | String | Value given in the Reply-To field in the email message, such as emails.
exo:isUnread | Boolean | Define if the email has been read or not.
exo:subject | String | Subject of the email message that can be read from the Subject field.
exo:body | String | Main content of the email message.
exo:sendDate | Date | Date when the email message was sent.
exo:receivedDate | Date | Date when the email message was received.
exo:size | Long | Capacity of the email message in bytes.
exo:contentType | String | Content type of the email message, for example: text/plain and text/html.
exo:folders | String | List of folder Ids containing the email message.
exo:tags | String | List of tag Ids marked in the email message.
exo:star | Boolean | Define if the email message is starred or not.
exo:hasAttach | Boolean | Define if any files are attached with the email message or not.
exo:priority | Long | Preference order of the message with 3 default values: 1 = High, 3 = Normal, 5 = Low.
exo:lastUpdateTime | Date | Time when the message was last updated.

The node type exo:mailAttachment has the following property:

Property name | Required type | Description
--- | --- | ---
exo:fileName | String | Name of the file attached in the mail.

The node type exo:mailtag has the following properties:

Property name | Required type | Description
--- | --- | ---
exo:id | String | Tag id of the mail.
exo:name | String | Name of the tag.
exo:description | String | Brief description of the mail tag.
exo:color | String | Color of the tag which is defined in the org.exoplatform.webui.form.ext.UIFormColorPicker class.

The node type exo:filter has the following properties:

Property name | Required type | Description
--- | --- | ---
exo:id | String | Filter id which is a unique and randomized value.
exo:name | String | Name of the filter which is defined by the user.
exo:from exo:to exo:subject exo:body | String | Filter email messages by each field respectively: From To Subject Body
exo:fromCondition exo:toCondition exo:subjectCondition exo:bodyCondition | Long | Filter emails by the condition types set in each property respectively: exo:from exo:to exo:subject exo:body All these properties have two values: 0 = returned messages contains the value set in the corresponding property. 1 = do not contain the value set in the corresponding property.
exo:applyTag | String | Apply the tag for the filtered email messages.
exo:applyFolder | String | Apply the folder for the filtered email messages.
exo:keepInbox | Boolean | Define if the email message is still kept in the Inbox folder or not.
exo:applyForAll | Boolean | If the value is set to "true" into the exo:applyForAll property, the filter will be executed for all email messages.

The node type exo:mailSetting has the following properties:

Property name | Required type | Description
--- | --- | ---
exo:numberMsgPerPage | Long | Number of messages displayed in one page.
exo:formatAsOriginal | Boolean | Define if the email message got from the mail server is kept in the original format or not.
exo:replyWithAttach | Boolean | Make the original message as the attachment before replying or not.
exo:forwardWithAttach | Boolean | Make the original message as the attachment before forwarding or not.
exo:prefixMsgWith | String | Prefix for the message.
exo:periodCheckAuto | Long | Time interval to check the email messages automatically.
exo:defaultAccount | String | Id of the user account that is displayed by default when the user logged in the Mail application.
exo:useWysiwyg | String | Define the Wysiwyg editor is used or not.
exo:saveMsgInSent | Boolean | Define the sent email message is saved to the Sent folder or not.
exo:layout | Long | Type of layout which is displayed to the user.
exo:returnReceipt | Long | Action type of the user when receiving the "return receipt" to confirm the arrival of one email message, including: 0 = ask, 1 = never, 3 = always.

### 3.3.5. RSS JCR Structure

The node type exo:content has the following properties:

Property name | Required type | Description
--- | --- | ---
id | String | Id of the content.
ownerType | String | Type of the owner. Its default value is user.
ownerId | String | User Id of owner.
dataType | String | Type of data.
data | String | XML string of the content navigation.
createdDate | Date | Created date of the content.
modifiedDate | Date | Modified date of the content.

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