This table shows some main components that take init-param in the applications of eXo Collaboration:

Applications Components Description
Calendar CalendarServiceImpl It is a service that manages calendars in the Calendar application of eXo Collaboration
Chat

HistoryImpl

XMPPMessenger

DefaultPresenceStatus

It is a service that saves the chat history of users

It is a service that processes messages of chat users, basing on the XMPP Protocol

It is a component that controls the presence status of chat users.

Contact ContactServiceImpl It is a service that supplies functions to manage contacts in the Address Book application of eXo Collaboration
Webservice AddActionsPlugin It is used to register a listener for the actions on the nodes

The following table describes the main functions of external component plug-ins:

Applications Components Description
Calendar NewUserListener Create default personal calendars.
NewGroupListener Create default group calendars.
NewMembershipListener Share calendars to members of a specific group.
ReminderPeriodJob Execute sending reminder emails to users.
PopupReminderPeriodJob Open a pop-up reminder on the browser of users.
AddActionsPlugin Enable the systems to automatically update the updated date of events/tasks in a calendar when the content of these events/tasks are changed.
Chat HistoryPeriodJob Save the chat history of users.
RequestFilterComponentPlugin Delete the session of a user when the browser is suddenly closed or the session is changed.
AuthenticationLoginListener Start the session and log in the chat server.
AuthenticationLogoutListener End the session and log out the chat server.
Contact NewUserListener Create personal contact data for users.
NewMembershipListener Create address book for a specific group.
UpdateUserProfileListener Update the personal profile of a user when it is changed on the portal.
Content RSSContentPlugin The formatter used to analyze the data from a RSS rsource.
DescriptionPlugin Represent the data from a RSS source.
Mail AuthenticationLogoutListener Stop checking mails of a user when he logs out.
Social Intergration CalendarDataInitialize Create a calendar for a group in a specific space.
ContactDataInitialize Create an address book for a group in a specific space.
ContactSpaceActivityPublisher Customize the activity status of a specific space when an event happens on an address book.
CalendarSpaceActivityPublisher Customize the activity status of a specific space when an event happens on a calendar.
PortletPreferenceRequiredPlugin Declare the application that will automatically create database.

Each user can have a default personal calendar created. Use the NewUserListener to configure that. To use the plug-in in the component configuration, you must use the target-component:

The configuration is applied mainly in extension /webapp/src/main/webapp/WEB-INF/cs-extension/cs/calendar/calendar-service-configuration.xml.


 
<component-plugin>
  <name>calendar.new.user.event.listener</name>
  <set-method>addListenerPlugin</set-method>
  <type>org.exoplatform.calendar.service.impl.NewUserListener</type>
  <description>description</description>
  <init-params>
    <value-param>
      <name>defaultEventCategories</name>
      <value>Meeting,Calls,Clients,Holiday,Anniversary</value>
    </value-param>
    <value-param>
      <name>defaultCalendarCategory</name>
      <value>My group</value><!-- Single value -->
    </value-param>
    <value-param>
      <name>defaultCalendar</name>
      <value>Default</value>
    </value-param>
    <!--Params for default calendar setting -->
    <value-param>
      <name>viewType</name>
      <value>1</value>
    </value-param>

    <value-param>
      <name>timeInterval</name>
      <value>15</value><!-- in minutes -->
    </value-param>

    <value-param>
      <name>weekStartOn</name>
      <value>2</value>
    </value-param>

    <value-param>
      <name>dateFormat</name>
      <value>MM/dd/yyyy</value>
    </value-param>

    <value-param>
      <name>timeFormat</name>
      <value>HH:mm</value> <!-- HH:mm/hh:mm a -->
    </value-param>

    <value-param>
      <name>localeId</name>
      <value>BEL</value>
    </value-param>

    <value-param>
      <name>timezoneId</name>
      <value>Europe/Brussels</value>
    </value-param>

    <value-param>
      <name>baseUrlForRss</name>
      <value/>
    </value-param>

    <value-param>
      <name>isShowWorkingTime</name>
      <value>false</value><!-- boolean true/false -->
    </value-param>

    <value-param>
      <name>workingTimeBegin</name>
      <value>08:00</value><!-- -->
    </value-param>

    <value-param>
      <name>workingTimeEnd</name>
      <value>18:00</value><!-- -->
    </value-param>

    <values-param>
      <name>ignoredUsers</name>
      <description>Definition users to ignore create default calendar</description>
      <!-- <value>demo</value> <value>marry</value> -->
    </values-param>
  </init-params>
</component-plugin>   

Details:

See the details about the init-params of the component in the following table:

Value-params Description Possible value Default Value
defaultEventCategories Default event categories for users. String (Comma separated list of category names) Meeting,Calls,Clients,Holiday,Anniversary
defaultCalendarCategory Name of the calendar group. String Default
viewType Default view after user logins and goes to Calendar portlet. 0-6 (see below) 1
timeInterval The time unit interval when you drag and move the event (in Day view and Week view only). integer in minutes 15
weekStartOn Day to use as the beginning of the week. It only affects the Week view. 1-7 (see below) 2
dateFormat The display format for dates. valid Java Date format MM/dd/yyyy
timeFormat The display format for time. valid Java Date format HH:mm
localeId ID of the geographic locale. valid locale ID BEL
timezoneIds User time zone. valid TimeZone id Europe
baseUrlForRss The url to publish the RSS content. none none
isShowWorkingTime Indicate if the working time should be hilighted in the Day view. true/false false
workingTimeBegin The start time in working time. time in timeFormat 08:00
workingTimeEnd The end time in working time. time in timeFormat 18:00
ignoredUsers Definition users to ignore create the default calendar. user id, use multiple by each line demo/marry

viewType parameter is encoded by a number as follow:

0 : Day view

1 : Week view

2 : Month view

3 : Year view

4 : List view

5 : Schedule view

6 : Working days view

weekStartOn parameter is encoded as follow:

1 : Sunday

2 : Monday

3 : Tuesday

4 : Wednesday

5 : Thursday

6 : Friday

7 : Saturday

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

The configuration is applied mainly in extension/webapp/src/main/webapp/WEB-INF/cs-extension/cs/calendar/calendar-service-configuration.xml

Details:

See the details about the init-params of the component in the following table:

Value-params Description Possible values Default values
defaultEditPermission The default permission assigned to membership in a specific group to edit calendars and events/tasks of the calendar. User id (Multi value membership, use coma (,) to split values) . means that all members in that group can modify and add, remove a calendar, events/tasks of the calendar
defaultViewPermission The default permission assigned to membership in a specific group to view a calendar and events /tasks of the calendar. User id (Multi value membership, use coma (,) to split values) . means that all members in that group can view this calendar and all the events/tasks of this calendar.
defaultLocale The default locale of the calendar. Valid locade id BEL (see more locale ids http://userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html )
defaultTimeZone The default time zone of the calendar. Valid timezone id Europe/Brussels (see more for timeZone ids http://www.unicode.org/cldr/data/docs/design/formatting/zone_log.html#windows_ids)
ignoredGroups Definition group to ignore create the default calendar. Group id (use line to define multiple value) /platform/guests

The Calendar application of eXo Collaboration can send event reminders by using the email reminder plug-in configuration. You will probably need to adjust this configuration to meet your own needs. The feature is based on a periodic poll of the stored reminders.

You must use the following target component to use the plug-in in this configuration:

The configuration is applied in extension/webapp/src/main/webapp/WEB-INF/cs-extension/cs/cs-configuration.xml

Details:

See the details about the init-params of the component in the following table:

Properties-param Description Property names Description Possible values Default values
job.info Save the monitor data periodically. jobName The name of job String ReminderJob
groupName The name of group job. String CollaborationSuite
job The name of actual job class. Class path org.exoplatform.calendar.service.ReminderJob
repeatCount How many times to run this job. Long 0, ( use '0' which means 'run forever)
period The time interval (millisecond) between job executions. Long 180000
startTime The time the job starts to run. Integer +0
endTime The time the job ends to run. Integer none

You must use the following target component to use the plug-in in this configuration:

The configuration is applied in extension/webapp/src/main/webapp/WEB-INF/cs-extension/cs/cs-configuration.xml

Details:

See the details about the init-params of the component in the following table:

Properties-param Description Property names Description Possible values Default values  
job.info Save the monitor data periodically. jobName The name of job String PopupReminderJob  
groupName The name of group job. String CollaborationSuite  
job The name of actual job class. Class path org.exoplatform.calendar.service.PopupReminderJob  
repeatCount How many times to run this job. Long 0, ( use '0' which means 'run forever)  
period The time interval (millisecond) between job executions. Long 6000  
startTime The time the job starts to run. Long +0  
endTime The time the job ends to run. Integer None  
popupreminder.info save the monitor data periodically. portalName The name of the portal String portal ‎‏

The configuration of the AddActionsPlugin is found in WEB-INF/cs-extension/cs/webservice/webservice-configuration.xml It is used to register the listener named org.exoplatform.webservice.cs.LastUpdateAction and it is executed, basing on eventTypes.



<component>
  <type>org.exoplatform.services.jcr.impl.ext.action.SessionActionCatalog</type>
  <component-plugins>
    <component-plugin>
      <name>Last Update Action</name>
      <set-method>addPlugin</set-method>
      <type>org.exoplatform.services.jcr.impl.ext.action.AddActionsPlugin</type>
      <description>add actions plugin</description>
      <init-params>
        <object-param>
          <name>actions</name>
          <object type="org.exoplatform.services.jcr.impl.ext.action.AddActionsPlugin$ActionsConfig">
            <field name="actions">
              <collection type="java.util.ArrayList">
                <value>
                  <object type="org.exoplatform.services.jcr.impl.ext.action.ActionConfiguration">
                    <field name="eventTypes">
                      <string>addNode,changeProperty</string>
                    </field>
                    <field name="nodeTypes">
                      <string>exo:calendarEvent</string>
                    </field>
                    <field name="actionClassName">
                      <string>org.exoplatform.webservice.cs.LastUpdateAction</string>
                    </field>
                  </object>
                </value>
              </collection>
            </field>
          </object>
        </object-param>
      </init-params>
    </component-plugin>
  </component-plugins>
</component>
Field name Description String
eventTypes The type of the event. addNode,changeProperty
nodeTypes The type of the node. exo:calendarEvent
actionClassName The registration class to execute the actions that the plug-in requires. org.exoplatform.webservice.cs.LastUpdateAction

The Chat congiguration is applied in /extension/webapp/src/main/webapp/WEB-INF/cs-extension/cs/chat/chat-service-configuration.xml.

Details:

See the details about the init-params of the component in the following table:

Properties-param Description Property names Description Possible values Default values
job.info Save the monitor data periodically. jobName The name of job String messageToHistoricalMessageJob
groupName The name of group name. String CollaborationSuite
job The name of actual job class. Class path org.exoplatform.services.xmpp.connection.impl.HistoryJob
repeatCount How many times to run this job. integer 0 ( use '0' which means 'run forever)
period The time interval (millisecond) between job executions. Long 3000
startTime The time the job starts running. Long +0
endTime The time the job ends running. Long none
history.info Save the monitor data periodically. logBatchSize The maximum number of messages in the cache are saved once the job runs. Integer 50

Two functions: login and logout of XMPPRestService are responsible for creating a new XMPPSessionImpl and destroying an existing XMPPSessionImpl. They can be called by listeners: AuthenticationLoginListener, AuthenticationLogoutListener or from client(browser) through Rest protocol (jabberLogin, jabberLogout in UIMainChatWindow.js). You must use the same target component for two external component plug-ins:

The Contact Application is configured by three external component plug-ins: NewUserListener, NewMembershipListener and UpdateUserProfileListener. They use the same target component:

The Contact configuration is found in extension/webapp/src/main/webapp/WEB-INF/cs-extension/cs/contact/contact-service-configuration.xml.

The Content application, such as RSS reader of eXo Collaboration, is configured by two external component plug-ins: RSSContentPlugin and DescriptionPlugin. Both the external components plug-ins use the same target component:

This content configuration is applied in extension/webapp/src/main/webapp/WEB-INF/cs-extension/cs/content/content-service-configuration.xml.

In the Mail application of eXo Collaboration, when a user checks messages for one account, the remote mailbox fetch is performed as a background job. Before eXo Collaboration 1.2, the job was continued until all messages had been retrieved or when the user stopped the check through the UI. Hence, even when a user was not logged in, the background job was continued. This can be the resource intensive for the server if many users have large mailboxes.

Since eXo Collaboration 1.2, one capability is added to halt the background job when the user session terminates (logout or timeout). It makes eXo Collaboration more friendly with server resources. If you want to activate this feature, you need to add a bunch of the xml congifuration in /extension/webapp/src/main/webapp/WEB-INF/cs-extension/cs/mail/mail-service-configuration.xml:

Details:

Since eXo Collaboration 2.2.0, MailSettingConfigPlugin is used to define the behavior, for example, showing/hiding fields and checking/unchecking checkboxes, of email account settings in the mail-server-configuration.xml file. It allows administrators to preconfigure all settings and to specify if end-users have the modification right on each specific setting or not.



<external-component-plugins>
  <target-component>org.exoplatform.mail.service.MailService</target-component>
    <component-plugin>   
        <name>cs.mail.service.settings</name>
        <set-method>addPlugin</set-method>
        <type>org.exoplatform.mail.service.MailSettingConfigPlugin</type>
        <description>description</description>
            <init-params>
                <object-param>
                    <name>leaveOnServer</name>
                <description>options to keep a copy of the message on the mail server after eXo Mail has downloaded the message</description>
                <object type="org.exoplatform.mail.service.MailSettingConfig">
                    <field name="name"><string>leaveOnServer</string></field>
                    <field name="userAllowed"><boolean>true</boolean></field>
                    <field name="defaultValue"><string>true</string></field>
                </object>
                </object-param>
                <object-param>
                    <name>incomingServer</name>
                <description>default incoming server to check for new mails.</description>
                <object type="org.exoplatform.mail.service.MailSettingConfig">
                    <field name="name"><string>incomingServer</string></field>
                    <field name="userAllowed"><boolean>true</boolean></field>
                    <field name="defaultValue"><string>imap.gmail.com</string></field>
                </object>
                </object-param>
                <object-param>
                    <name>incomingPort</name>
                <description>default port incoming server to check for new mails.</description>
                <object type="org.exoplatform.mail.service.MailSettingConfig">
                    <field name="name"><string>incomingPort</string></field>
                    <field name="userAllowed"><boolean>true</boolean></field>
                    <field name="defaultValue"><string>993</string></field>
                </object>
                </object-param>
                <object-param>
                    <name>outgoingServer</name>
                <description>description</description>
                <object type="org.exoplatform.mail.service.MailSettingConfig">
                    <field name="name"><string>outgoingServer</string></field>
                    <field name="userAllowed"><boolean>true</boolean></field>
                    <field name="defaultValue"><string>smtp.gmail.com</string></field>
                </object>
                </object-param>
                <object-param>
                    <name>outgoingPort</name>
                <description>description</description>
                <object type="org.exoplatform.mail.service.MailSettingConfig">
                    <field name="name"><string>outgoingPort</string></field>
                    <field name="userAllowed"><boolean>true</boolean></field>
                    <field name="defaultValue"><string>465</string></field>
                </object>
                </object-param>
                <object-param>
                    <name>acceptIncomingSecureAuthentication</name>
                <description>description</description>
                <object type="org.exoplatform.mail.service.MailSettingConfig">
                    <field name="name"><string>acceptIncomingSecureAuthentication</string></field>
                    <field name="userAllowed"><boolean>true</boolean></field>
                    <field name="defaultValue"><string>true</string></field>
                </object>
                </object-param>
                <object-param>
                    <name>incomingSecureAuthentication</name>
                <description>description</description>
                <object type="org.exoplatform.mail.service.MailSettingConfig">
                    <field name="name"><string>incomingSecureAuthentication</string></field>
                    <field name="userAllowed"><boolean>true</boolean></field>
                    <field name="defaultValue"><string>starttls</string></field>
                </object>
                </object-param>
                <object-param>
                    <name>incomingAuthenticationMechanism</name>
                <description>description</description>
                <object type="org.exoplatform.mail.service.MailSettingConfig">
                    <field name="name"><string>incomingAuthenticationMechanism</string></field>
                    <field name="userAllowed"><boolean>true</boolean></field>
                    <field name="defaultValue"><string>plain</string></field>
                </object>
                </object-param>
                <object-param>
                    <name>acceptOutgoingSecureAuthentication</name>
                <description>description</description>
                <object type="org.exoplatform.mail.service.MailSettingConfig">
                    <field name="name"><string>acceptOutgoingSecureAuthentication</string></field>
                    <field name="userAllowed"><boolean>true</boolean></field>
                    <field name="defaultValue"><string>true</string></field>
                </object>
                </object-param>
                <object-param>
                    <name>outgoingSecureAuthentication</name>
                <description>description</description>
                <object type="org.exoplatform.mail.service.MailSettingConfig">
                    <field name="name"><string>outgoingSecureAuthentication</string></field>
                    <field name="userAllowed"><boolean>true</boolean></field>
                    <field name="defaultValue"><string>starttls</string></field>
                </object>
                </object-param>
                <object-param>
                    <name>outgoingAuthenticationMechanism</name>
                <description>description</description>
                <object type="org.exoplatform.mail.service.MailSettingConfig">
                    <field name="name"><string>outgoingAuthenticationMechanism</string></field>
                    <field name="userAllowed"><boolean>true</boolean></field>
                    <field name="defaultValue"><string>plain</string></field>
                </object>
                </object-param>
            </init-params>
    </component-plugin>      
  </external-component-plugins>

Details:

Object-paramDesciption
leaveOnServerOptions to keep the message on the mail server after it has been downloaded to the Mail application of eXo Collaboration.
incomingServerThe default incoming server used to check new mails.
incomingPortThe default port of the incoming server used to check new mails.
outgoingServerThe default port of the outgoing server used to send new mails.
outgoingPortThe default outgoing port to send new mails.
acceptIncomingSecureAuthenticationAccepts the secure authentication of the incoming server.
incomingSecureAuthenticationThe type of incoming secure authentication.
incomingAuthenticationMechanismThe type of incoming authentication mechanism.
acceptOutgoingSecureAuthenticationAccepts the secure authentication of the outgoing server.
outgoingSecureAuthenticationThe type of outgoing secure authentication.
outgoingAuthenticationMechanismThe type of incoming authentication mechanism.

The object parameters have the same field names, but the values of the parameters are different.

Field names Description Possible values
nameThe field name in the account settings form. String
userAllowedAllows users to edit the field in the account settings form or not. Boolen
defaultValueThe default value of the field in the account settings form. String

The Social Integration Configuration is applied in /extension/webapp/src/main/webapp/WEB-INF/cs-extension/cs/social-integration/social-integration-configuration.xml.

The Chat service of eXo Collaboration is a Jabber engine powered by Openfire. eXo Platform will delegate the actual Jabber protocol communication to Openfire.

You have the full latitude to configure Openfire. There are two possible ways to do it:

  • The openfire.xml file in $openfirehome/conf/.

The eXo Collaboration bundle comes with a pre-configured Openfire server. It is bundled with some eXo plugins and configurations that allow connectivity with eXo Platform. The key properties for integration are:

eXo Platform provides implementations for these 3 interfaces with ExoAuthProvider, ExoUserProvider, ExoGroupProvider. These implementations are based on eXo REST framework and let you configure the endpoints within the openfire.xml file with additional properties:

Property Description Default value
eXo.env.serverBaseURL The base URL of the server. http://localhost:8080/##
eXo.env.restContextName The context name of REST Web application. rest
provider.authorizedUser.name The username to authenticate to access the HTTP REST service. root
provider.authorizedUser.password The password matching with provider.authorizeduser.name. gtn
exoAuthProvider.authenticationURL The URL to authenticate users. /organization/authenticate/
exoAuthProvider.authenticationMethod The HTTP method used for the authentication method. POST
exoUserProvider.findUsersURL The URL to find all users. /organization/xml/user/find-all/
exoUserProvider.findUsersMethod The HTTP method used to find all users in the system. GET
exoUserProvider.getUsersURL The URL to retrieve a range of users. /organization/xml/user/view-range/
exoUserProvider.getUsersMethod The HTTP method used for user/view-range. GET
exoUserProvider.usersCountURL The URL to count the number of users. /organization/xml/user/count
exoUserProvider.usersCountMethod The HTTP method used to count the number of users. GET
exoUserProvider.userInfoURL The URL to get the information of users. /organization/xml/user/info/
exoUserProvider.userInfoMethod The HTTP method used to get the information of users. GET
exoGroupProvider.groupInfoURL The URL to get the information of a group of users. /organization/xml/group/info/
exoGroupProvider.groupInfoMethod The HTTP method used to get the information of a group of users. GET
exoGroupProvider.getGroupsAllURL The URL to view a list of all user groups. /organization/xml/group/view-all/
exoGroupProvider.getGroupsAllMethod The HTTP method used to view a list of all user groups. GET
exoGroupProvider.getGroupsRangeURL The URL to list groups in a specific range. /organization/xml/group/view-from-to/
exoGroupProvider.getGroupsRangeMethod The HTTP method used to list groups in a specific range. GET
exoGroupProvider.getGroupsForUserURL The URL to list groups to which a user belongs. /organization/xml/group/groups-for-user/
exoGroupProvider.getGroupsForUserMethod The HTTP method used to list groups to which a user belongs. GET
exoGroupProvider.groupsCountURL The URL to count the number of groups. /organization/xml/group/count
exoGroupProvider.groupsCountMethod The HTTP method used to count the number of groups. GET

As you can see, the default settings will only work if eXo Platform is deployed on the same host as Openfire, on the port 8080.

Openfire makes use of several ports for communication.

Interface Port Type Description
All addresses 5222 Client to Server The standard port for clients is to connect to the server. Connection may or may not be encrypted. You can update the security settings for this port.
All addresses 9090 & 9091 Admin Console The ports used for the unsecured and secured Openfire Admin Console accesses respectively.
All addresses 7777 File Transfer Proxy The port used for the proxy service that allows files to be transferred between two entities on the XMPP network.
All addresses 3478 & 3479 STUN Service The port used for the service that ensures connectivity between entities behind a NAT.

You can view the table above in http://hostname:9090/index.jsp_ after you are logged into the Openfire's web console and also customize those ports by yourself.