From b870f31bf8995931689d1023cc66ab6f9c44af14 Mon Sep 17 00:00:00 2001 From: hoavu Date: Thu, 24 May 2012 13:45:11 +0700 Subject: [PATCH 1/2] DOC-1683 Check the patch of DOC-1644 and edit if any --- .../en/en-US/Application/List_of_Gadgets.wiki | 22 +- .../en-US/Application/List_of_Portlets.wiki | 45 +- .../en/en-US/Configuration/Configuration.wiki | 64 ++- ...nfiguring_the_oauth_2_legged_scenario.wiki | 6 +- .../Spaces_Template_Configuration.wiki | 20 +- .../Developer_Documentation.wiki | 16 +- ...veloper_Documentation_Activity_Plugin.wiki | 399 ++++++++++++++++-- ...veloper_Documentation_Activity_Stream.wiki | 39 +- .../Developer_Documentation_OpenSocial.wiki | 38 +- .../Developer_Documentation_People.wiki | 23 +- .../Developer_Documentation_Spaces.wiki | 42 +- .../Developing_Open_Social_Gadgets.wiki | 14 +- .../en-US/DeveloperReference/Java_APIs.wiki | 298 ++++++------- .../DeveloperReference/Javascript_APIs.wiki | 2 +- .../Overrideable_components.wiki | 2 +- .../en-US/DeveloperReference/REST_APIs.wiki | 48 +-- .../DeveloperReference/widget_tutorial.wiki | 10 +- .../images/LookAndFeelSpaceActivity.png | Bin 17225 -> 28761 bytes .../images/SimpleSpaceActivity-custom.png | Bin 9896 -> 19793 bytes .../images/SimpleSpaceActivity-default.png | Bin 15385 -> 24221 bytes .../main/resources/wikbook/images/spaces.png | Bin 34134 -> 65683 bytes 21 files changed, 701 insertions(+), 387 deletions(-) diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/Application/List_of_Gadgets.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/Application/List_of_Gadgets.wiki index acc24661b6..26f704b329 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/Application/List_of_Gadgets.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/Application/List_of_Gadgets.wiki @@ -1,21 +1,21 @@ -All Social Gadgets are in _opensocial.war_. +All eXo Social gadgets are in _opensocial.war_. h1. Activity Stream {anchor:id=SOCref.List_Of_Gadget_in_Social.ActivityStream} -* *Description*: Manages activities of users. Some kinds of activities such as: update status, like/unlike activities, comment activities, delete activities and delete comments. -* *Used REST services*: ActivitiesRestServices +* *Description*: Manage activities of users: update status, like/unlike activities, comment activities, delete activities and delete comments. +* *Used REST services*: ActivitiesRestServices. h1. Social RSS Reader {anchor:id=SOCref.List_Of_Gadget_in_Social.SocialRSSReader} -* *Description*: Fetches and parses RSS information from a specific url. -* *Description of user preferences*: The number of RSS per page is 10 by default. Get RSS from input URL (Default URL is http://blog.exoplatform.org/feed/). -* *Used REST services*: N/A +* *Description*: Fetch, parse and display RSS from a specific URL. +* *Description of user preferences*: There are 2 preference fields: URL input box (default value is [http://blog.exoplatform.org/feed/]) and Number of RSS per page selector (default value is 10). +* *Used REST services*: N/A. h1. My Connections {anchor:id=SOCref.List_Of_Gadget_in_Social.MyConnections} -* *Description*: Displays a viewer's information and his connections' information. -* *Description of user preferences*: Connections displayed per page. The number of connections displayed is 5 by default. -* *Used REST services*: N/A +* *Description*: Get and display information of the current viewer and his connections. +* *Description of user preferences*: The number of connections displayed per page. It is set to '5' by default. +* *Used REST services*: N/A. h1. My Spaces {anchor:id=SOCref.List_Of_Gadget_in_Social.MySpaces} -* *Description*: Displays all the spaces that a user has the "member" role. -* *Used REST services*: SpacesRestService +* *Description*: Display all spaces that a user has the "member" role. +* *Used REST services*: SpacesRestService. diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/Application/List_of_Portlets.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/Application/List_of_Portlets.wiki index 8b1b512d52..380c82219e 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/Application/List_of_Portlets.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/Application/List_of_Portlets.wiki @@ -1,39 +1,18 @@ -All the portlets are in _social-portlet.war_ - -|| Portlets name || Description || -| *SpaceMenuPortlet* | Display the menu on the right of a Space: Home, Dashboard, Members, SpaceSettings | -| *MembersPortlet* | Display MemberSpace where you can search for space members or list space members in alphabet | -| *SpaceSettingPortlet* | Shows the settings of Space: Settings, Visibility, Members, Application. You can change the setting information of a space if you are the creator of that space or have the manager right on it. | -| *MySpacesPortlet* | Displays your Space page where you can add new spaces, search for spaces or list spaces in alphabet | -| *InvitationSpacesPortlet* | Displays the *Space invitation* page where you can search for spaces, list spaces in alphabet and view all the Space invitations | -| *PendingSpacesPortlet* | Displays the *Space requests to join* page where you can search for spaces, list spaces in alphabet and view all the pending request to join Spaces | -| *PublicSpaces Portlet* | Displays the *Public Spaces* page where you can search for spaces, list spaces by alphabet and view all available public spaces to join | -| *SpaceActivityStreamPortlet* | Display spaces activities | -| *UserActivityStreamPortlet* | Update user's activities/status | -| *PeoplePortlet* | The People page where you can find people, display people name by alphabet | -| *ProfileNavigationPortlet* | | -| *ConnectionsPortlet* | The Conections page where you can access to your network, invitations to connect or connection requests | -| *InvitationsPortlet* | | -| *RequestsPortlet* | | -| *UserProfilePortlet* | Display user profile page where you can view/ edit user's basic information, contacts, experience or change avatar | -| *MyConnectionsNavigationPortlet* | | - - All the portlets are in the file _social-portlet.war_ || Portlet name || Description || -| *MembersPortlet* | To enable users to search for Space members or list Space members in the alphabet order. | -| *MySpacesPortlet* | To display the Space page where you can add new Spaces, search for Spaces or list Spaces in the alphabet order. | -| *SpaceActivityStreamPortlet* | To share Spaces activity information. | -| *InvitationsPortlet* | To list all people that invite users. | -| *RequestsPortlet* | To list all invitations that the user requests. | -| *InvitationSpaces Portlet* | To enable users to search for Spaces, and list spaces in the alphabet order and view all the Space invitations. | -| *PendingSpacePortlet* | To display the *Space requests to join* page where you can search for Spaces, list spaces in the alphabet order and view all the pending requests to join Spaces. | -| *PublicSpacesPortlet* | To display the *Public Spaces* page where you can search for Spaces, list Spaces in the alphabet order and view all available public Spaces to join. | -| *UserActivityStreamPortlet* | To update and share user's activities and/or status. | -| *People Portlet* | To display the People page where you can find people, display people names in the alphabet order. | -| *ConnectionsPortlet* | To display the Connections page where you can access your network, invitations to connect or connection requests. | -| *UserProfilePortlet* | To display the user profile page where users can view and/or edit basic information, contacts, experience or change their avatar. | +| *MembersPortlet* | Enable users to search for Space members or list Space members in the alphabet order. | +| *MySpacesPortlet* | Display the Space page where you can add new Spaces, search for Spaces or list Spaces in the alphabet order. | +| *SpaceActivityStreamPortlet* | Share Spaces activity information. | +| *InvitationsPortlet* | List all people that invite users. | +| *RequestsPortlet* | List all invitations that the user requests. | +| *InvitationSpaces Portlet* | Enable users to search for Spaces, and list spaces in the alphabet order and view all the Space invitations. | +| *PendingSpacePortlet* | Display the *Space requests to join* page where you can search for Spaces, list spaces in the alphabet order and view all the pending requests to join Spaces. | +| *PublicSpacesPortlet* | Display the *Public Spaces* page where you can search for Spaces, list Spaces in the alphabet order and view all available public Spaces to join. | +| *UserActivityStreamPortlet* | Update and share user's activities and/or status. | +| *People Portlet* | Display the People page where you can find people, display people names in the alphabet order. | +| *ConnectionsPortlet* | Display the *Connections* page where you can access your network, invitations to connect or connection requests. | +| *UserProfilePortlet* | Display the *UserProfile* page where users can view and/or edit basic information, contacts, experience or change their avatar. | diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Configuration.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Configuration.wiki index 9768c5c5fc..20d441d6fc 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Configuration.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Configuration.wiki @@ -5,8 +5,8 @@ h2. ActivityManager {anchor:id=SOCref.Configuration.Component.ActivityManager} h2. SpaceService {anchor:id=SOCref.Configuration.Component.SpaceService} || Configuration name || Data type || Default Value || Description || -| space.homeNodeApp | {{String}} | {{SpaceActivityStreamPortlet}} | The home application for a space | -| space.apps | {{String list}} | {{DashboardPortlet:true}}, {{SpaceSettingPortlet:false}}, {{MembersPortlet:true}} | The space applications | +| space.homeNodeApp | {{String}} | {{SpaceActivityStream Portlet}} | The home application for a space. | +| space.apps | {{String list}} | {{DashboardPortlet:true}}, {{SpaceSettingPortlet: false}}, {{MembersPortlet:true}} | The space applications. | {note} Deprecated: Use external-component-plugins instead: org.exoplatform.social.core.space.SpaceApplicationConfigPlugin @@ -14,42 +14,40 @@ Deprecated: Use external-component-plugins instead: org.exoplatform.social.core. h2. IdentityManager {anchor:id=SOCref.Configuration.Component.IdentityManager} || Configuration name || Data type || Default Value || Description || -| providers | {{String}} | {{org.exoplatform.social.core.identity.provider.SpaceIdentityProvider}} | | +| providers | {{String}} | {{org.exoplatform.social.core.identity.provider.SpaceIdentityProvider}} | The identity providers. | h2. ProfileConfig {anchor:id=SOCref.Configuration.Component.ProfileConfig} || Configuration name || Data type || Default Value || Description || -| nodetype.emails | {{String}} | {{exo:profileKeyValue}} | | -| nodetype.phones | {{String}} | {{exo:profileKeyValue}} | | -| nodetype.ims | {{String}} | {{exo:profileKeyValue}} | | -| nodetype.urls | {{String}} | {{exo:profileKeyValue}} | | -| nodetype.address | {{String}} | {{exo:profileAddress}} | | -| nodetype.experiences | {{String}} | {{exo:profileExperience}} | | -| nodetype.education | {{String}} | {{exo:profileEducation}} | | -| forceMultiValue | {{String}} | xxxxxxxxxxxx | | - +| nodetype.emails | {{String}} | {{exo:profileKeyValue}} |Define the node type which contains user email information of a profile. | +| nodetype.phones | {{String}} | {{exo:profileKeyValue}} | Define the node type which contains user phone information of a profile. | +| nodetype.ims | {{String}} | {{exo:profileKeyValue}} |Define the node type contains user IMS information of a profile. | +| nodetype.urls | {{String}} | {{exo:profileKeyValue}} | Define the node type which contains user URL of a profile. | +| nodetype.address | {{String}} | {{exo:profileAddress}} | Define the node type which contains user address information of a profile. | +| nodetype.experiences | {{String}} | {{exo:profileExperience}} |Define the node type which contains user working-experience information of a profile. | +| nodetype.education | {{String}} | {{exo:profileEducation}} |Define the node type which contains user education information of a profile. | h2. ServiceProviderStore {anchor:id=SOCref.Configuration.Component.ServiceProviderStore} || Configuration name || Data type || Default Value || Description || -| sample-provider | properties-params | | sample service provider | +| sample-provider | properties-params | N/A | Sample service provider. | h1. External component plugins {anchor:id=SOCref.Configuration.External_component_plugins} h2. MentionsProcessor {anchor:id=SOCref.Configuration.External_component_plugins.MentionsProcessor} || Configuration name || Data type || Default Value || Description || -| priority | {{String}} | 2 | priority of this processor (lower are executed first) | +| priority | {{String}} | 2 | Priority of this processor (lower are executed first). | h2. PortletPreferenceRequiredPlugin {anchor:id=SOCref.Configuration.External_component_plugins.PortletPrederenceRequiredPlugin} || Configuration name || Data type || Default Value || Description || -| portletsPrefsRequired | {{String list}} | {{SpaceActivityStreamPortlet, SpaceSettingPortlet, MembersPortlet}} | The portlet name which requires space URL preference| +| portletsPrefsRequired | {{String list}} | {{SpaceActivityStream Portlet, SpaceSettingPortlet, MembersPortlet}} | The portlet name which requires space URL preference.| h2. SpaceApplicationConfigPlugin {anchor:id=SOCref.Configuration.External_component_plugins.SpaceApplicationConfigPlugin} || Configuration name || Data type || Description || -| spaceHomeApplication | {{SpaceApplicationConfigPlugin$SpaceApplication}} | The space application for the space home node| -|spaceApplicationList| {{SpaceApplicationConfigPlugin}} |space application list configuration| +| spaceHomeApplication | {{SpaceApplicationConfigPlugin$S paceApplication}} | The space application for the space home node.| +|spaceApplicationList| {{SpaceApplicationConfigPlugin}} |Space application list configuration.| h2. AddNodeTypePlugin {anchor:id=SOCref.Configuration.External_component_plugins.AddNodeTypePlugin} || Configuration name || Data type || Default Value || Description || -| autoCreatedInNewRepository | {{String}} | {{jar:/conf/portal/core-nodetypes.xml}} | Node types configuration file | +| autoCreatedInNewRepository | {{String}} | {{jar:/conf/portal/ core-nodetypes.xml}} | Node types configuration file. | h1. RelationshipManager {anchor:id=SOCref.Configuration.RelationshipManager} The Service is used to manipulate user relationships. @@ -94,7 +92,7 @@ h2. Components configuration {anchor:id=SOCref.Configuration.SpaceService.Compon {code} || Configuration name || Data Type || Possible value || Default Value || Description || -| *SpaceActivityStreamPortlet* | {{String}} | N/A | {{SpaceActivityStreamPortlet}} | The name of portlet displaying activities of spaces | +| *SpaceActivityStreamPortlet* | {{String}} | N/A | {{SpaceActivityStream Portlet}} | The name of portlet displaying activities of spaces | | *space.apps* | {{String list}} | {{Porlets' name: true/false }} | {{DashboardPortlet:true}}; {{SpaceSettingPortlet:false}}; {{MembersPortlet:true}} |The list of configurations for portlets used as portlet applications. | h2. External plug-in configuration {anchor:id=SOCref.Configuration.SpaceService.ExternalPluginConfiguration} @@ -121,7 +119,7 @@ h3. PortletPreferenceRequiredPlugin {anchor:id=SOCref.Configuration.SpaceService In which: || Name || Set-method || Type || Description || -| *PortletPreferenceRequiredPlugin* | setPortletsPrefsRequired | org.exoplatform.social.core.application.PortletPreferenceRequiredPlugin | Configure the list of portlet names which will have portlet preference of space context. | +| *PortletPreference RequiredPlugin* | setPortletsPrefsRequired | org.exoplatform.social.core.application. PortletPreferenceRequiredPlugin | Configure the list of portlet names which will have portlet preference of space context. | * Init-params: @@ -130,7 +128,7 @@ In which: h3. SpaceApplicationConfigPlugin {anchor:id=SOCref.Configuration.SpaceService.ExternalPluginConfiguration.SpaceApplicationConfigPlugin} {note} -Since 1.1.3 +This plugin has been used since 1.1.3 {note} {code:xml} @@ -205,7 +203,7 @@ Since 1.1.3 In which: || Name || Set-method || Type || Description || -| *Space Application Configuration* | setSpaceApplicationConfigPlugin | org.exoplatform.social.core.application.PortletPreferenceRequiredPlugin | Configure the list of space applications to be installed when creating a new space. | +| *Space Application Configuration* | setSpaceApplicationConfigPlugin | org.exoplatform.social.core. application.PortletPreferenceRequiredPlugin | Configure the list of space applications to be installed when creating a new space. | h1. Activity Manager {anchor:id=SOCref.Configuration.ActivityManager} @@ -244,12 +242,12 @@ h2. Component plug-in configuration {anchor:id=SOCref.Configuration.ActivityMana In which, || Name || Set-method || Type || Description || -| *OSHtmlSanitizerProcessor* | addProcessorPlugin | org.exoplatform.social.core.processor.OSHtmlSanitizerProcessor | The plugin that renders valid html tags appearing in the Activity body (content). | +| *OSHtmlSanitizer Processor* | addProcessorPlugin | org.exoplatform.social.core. processor.OSHtmlSanitizerProcessor | The plugin that renders valid html tags appearing in the Activity body (content). | * Init-params: || Name || Possible value || Default Value || Description || -| *allowedTags* | {{html tags}} | b, i, a, span, em, strong, p, ol, ul,li, br, img | To process and render html tags in the activity content (body). | +| *allowedTags* | {{html tags}} | b, i, a, span, em, strong, p, ol, ul,li, br, img | Process and render html tags in the activity content (body). | h2. External plug-in configuration {anchor:id=SOCref.Configuration.ActivityManager.ExternalPluginConfiguration} @@ -274,18 +272,18 @@ h2. External plug-in configuration {anchor:id=SOCref.Configuration.ActivityManag In which: || Name || Set-method || Type || Description || -| *MentionsProcessor* | addProcessorPlugin | org.exoplatform.social.core.processor.MentionsProcessor | A processor that substitutes @username expressions by a link on the user profile. | +| *MentionsProcessor* | addProcessorPlugin | org.exoplatform.social.core. processor.MentionsProcessor | A processor that substitutes @username expressions by a link on the user profile. | * Init-params: || Name || Possible value || Default Value || Description || -| *priority* | {{priority number}} | 2 | Priority of this processor (The lower level will be executed first). | +| *priority* | {{priority number}} | 2 | The priority of this processor. The lower priority level is executed first. | h1. Identity Manager {anchor:id=SOCref.Configuration.IdentityManager} h2. Description {anchor:id=SOCref.Configuration.IdentityManager.Description} -The service is to manipulate the identity operations like creating, getting, deleting or finding a profile. +The service is used to manipulate the identity operations like creating, getting, deleting, or finding a profile. h2. Component plug-in configuration {anchor:id=SOCref.Configuration.IdentityManager.ComponentPluginConfiguration} @@ -313,23 +311,23 @@ h2. Component plug-in configuration {anchor:id=SOCref.Configuration.IdentityMana In which: || Name || Set-method || Type || Description || -| *SpaceIdentityProvider plugin* | registerIdentityProviders | org.exoplatform.social.core.identity.IdentityProviderPlugin | The plugin that provides identity for a space | +| *SpaceIdentityProvider plugin* | registerIdentityProviders | org.exoplatform.social.core. identity.IdentityProviderPlugin | The plugin that provides identity for a space. | * Init-params: || Name || Possible value || Default Value || Description || -| *providers* | {{Every other identity providers}} | {{org.exoplatform.social.core.identity.provider.SpaceIdentityProvider}} | Identity Provider instances for managing identities. | +| *providers* | {{Every other identity providers}} | {{org.exoplatform.social.core.identity.provider.SpaceIdentityProvider}} |The Identity Provider instances for managing identities. | h1. OpenSocial Rest Context Configuration {anchor:id=SOCref.Configuration.OpenSocialRestContextConfiguration} h2. Description {anchor:id=SOCref.Configuration.OpenSocialRestContextConfiguration.Description} -The service is used to configure the portal container name when there is a OpenSocial REST API request. By configuring this service, we can make sure to to reach the right portal container. +The service is used to configure the portal container name when there is a OpenSocial REST API request. By configuring this service, you must reach the right portal container. The default portal container is {{portal}}. h2. Component plug-in configuration {anchor:id=SOCref.Configuration.OpenSocialRestContextConfiguration.ComponentPluginConfiguration} -This should be used when there is a portal container different than the default {{portal}} one. +This should be used when there is a portal container different with the default {{portal}} one. {code:xml} @@ -351,9 +349,9 @@ This should be used when there is a portal container different than the default In which: || Name || Set-method || Type || Description || -| *set portal container name used for REST service* | setRestContainerName | org.exoplatform.social.opensocial.auth.RestPortalContainerNameConfig | The plugin provided to set rest portal container name for OpenSocial REST API request | +| *set portal container name used for REST service* | setRestContainerName | org.exoplatform.social.opensocial. auth.RestPortalContainerNameConfig | The plugin provided to set the rest portal container name for OpenSocial REST API request.| * Init-params: || Name || Possible value || Default Value || Description || -| *rest-container-name* | {{any valid portal container name}} | {{N/A}} | Portal container name | +| *rest-container-name* | {{any valid portal container name}} | {{N/A}} | The portal container name. | diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Configuring_the_oauth_2_legged_scenario.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Configuring_the_oauth_2_legged_scenario.wiki index be639e6cd2..26581af1e3 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Configuring_the_oauth_2_legged_scenario.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Configuring_the_oauth_2_legged_scenario.wiki @@ -1,6 +1,6 @@ -This is to explain how to configure the oAuth 2 legs scenario in openSocial. +This section is about configuring the oAuth 2 legs scenario in OpenSocial. (Reference: [OpenSocial.org|http://docs.opensocial.org/display/OS/Home]) -For more information about this, visit the website: [great article|http://sites.google.com/site/oauthgoog/2leggedoauth/2opensocialrestapi] +For more information, visit [2-legged OAuth for the OpenSocial REST API.|http://sites.google.com/site/oauthgoog/2leggedoauth/2opensocialrestapi] h1. Generate the certificates {anchor:id=SOCref.Configuration.Generate_certificates} To generate the key: @@ -13,7 +13,7 @@ $ openssl pkcs8 -in testkey.pem -out oauthkey.pem -topk8 -nocrypt -outform PEM h1. Configure the property file {anchor:id=SOCref.Configuration.Configure_the_property_life} -Edit container.js and change the following parameter to point to your private key and your key name. +Edit _container.js_ and change the following parameter to point to your private key and your key name. {code} "gadgets.signingKeyFile" : "oauth.pem", diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Spaces_Template_Configuration.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Spaces_Template_Configuration.wiki index beeb327be2..8ad0fadd15 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Spaces_Template_Configuration.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Spaces_Template_Configuration.wiki @@ -1,8 +1,9 @@ -In the eXo Spaces, we may have two space types (classic and webos spaces). This is for the classic mode (it's the only one implemented now). +In the eXo Social, you may have two space types (classic and webos spaces). This is for the classic mode (it is the only one implemented now). -For the classic space, we can pre-configure the template, meaning that you can set up where your *menu* will be displayed or where your *application* will be displayed. +For the classic space, you can pre-configure the template. You can configure the layout to select where to display the applications (for example, the application's menu on the left, the selected application is displayed on the right, and more). + +Here is an example of the configuration file that displays the menu on the left. The application will be inserted in the container with the ID *Application*: -Here is an example of configuration file that displays the menu on the left. The Application will be inserted in the container with the id *Application*: {code:xml} @@ -25,11 +26,11 @@ Here is an example of configuration file that displays the menu on the left. The {code} -In this example, the outer container contains two inner containers: one container has id as *Menu* for your Menu and another has id as *Application* containing your applications. +In this example, the outer container contains two inner containers. One container has Id as *Menu* for your Menu, and another has Id as *Application* containing your applications. -!spaces.png! +!images/spaces.png! -If you want to put your menu in right and your application in left, you can swap the declared position of two containers: +If you want to put the menu on the right and the application on the left, you can swap the declared position of these two containers: {code:xml} @@ -53,9 +54,10 @@ If you want to put your menu in right and your application in left, you can swap {code} -Here is the configure file in FishEye: http://fisheye.exoplatform.org/browse/social/trunk/extension/war/src/main/webapp/WEB-INF/conf/portal/template/pages/space/page.xml. - -In your tomcat, this configuration file is at _$EXO_TOMCAT/webapps/social-ext/WEB-INF/conf/portal/template/pages/space/page.xml_. +In eXo Social standalone, this configuration file is at: +* _{{{$EXO_TOMCAT/webapps/socialdemo/WEB-INF/conf/portal/template/pages/space/page.xml}}}_ +In eXo Platform, this configuration file is at: +* _{{{$EXO_TOMCAT/webapps/{portal-name}/WEB-INF/conf/portal/template/pages/space/page.xml}}}_ diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation.wiki index 447fb25c44..eab728d285 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation.wiki @@ -1,29 +1,23 @@ - eXo Social provides many extension point to make it fit to your needs. Every part can be customized and/or automated. h2. [Spaces|Developer Documentation Spaces ] eXo Social provides a way to create groups and to share data and applications: the space. A space has it's own activity stream in which applications or members can publish information. In each space, members share applications and an openSocial dashboard. -With the API, you can create spaces, invite users, add applications be notified of events... +With the API, you can create spaces, invite users, add applications be notified of events, etc. -[Read more::|Developer Documentation Spaces] h2. [People|Developer Documentation People] eXo Social provides a way to add profile information, relationships and connections between users: People. With the API, profile information, relationship can be customized. -[Read more::|Developer Documentation People] h2. [Activity Stream|Developer Documentation Activity Stream] eXo Social provides a way to share status updates and activity informations for users as well as spaces: Activity Streams. With the API, you can customize the activities or publish new ones. -[Read more::|Developer Documentation Activity Stream] - h2. [OpenSocial|Developer Documentation OpenSocial] eXo Social is implementing the OpenSocial standard. So you can integrate OpenSocial Gadget in your dashboard and use the RPC or REST API to access the social data. -[Read more::|Developer Documentation OpenSocial] eXo Social provides many extension point to make it fit to your needs. Every part can be customized and/or automated. @@ -31,22 +25,14 @@ h2. [Spaces|Developer Documentation Spaces ] eXo Social provides a way to create groups and to share data and applications: the space. A space has it's own activity stream in which applications or members can publish information. In each space, members share applications and an openSocial dashboard. With the API, you can create spaces, invite users, add applications be notified of events... -[Read more::|Developer Documentation Spaces] - h2. [People|Developer Documentation People] eXo Social provides a way to add profile information, relationships and connections between users: People. With the API, profile information, relationship can be customized. -[Read more::|Developer Documentation People] - h2. [Activity Stream|Developer Documentation Activity Stream] eXo Social provides a way to share status updates and activity informations for users as well as spaces: Activity Streams. With the API, you can customize the activities or publish new ones. -[Read more::|Developer Documentation Activity Stream] - h2. [OpenSocial|Developer Documentation OpenSocial] eXo Social is implementing the OpenSocial standard. So you can integrate OpenSocial Gadget in your dashboard and use the RPC or REST API to access the social data. - -[Read more::|Developer Documentation OpenSocial] \ No newline at end of file diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Plugin.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Plugin.wiki index e8e432456c..9be29c32f7 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Plugin.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Plugin.wiki @@ -4,20 +4,20 @@ Since the Social 1.1.0, the activity plug-in feature was introduced that enables h1. Create the activity plug-in {anchor:id=Developer_document.Create the activity plug-in} -At first, you should have an idea about the UI Extension Framework. If you have already worked with the UI Extension Framework, it's really easy to create the activity plug-in. If no, you have chance to work with it visiting [UI Extension Framework|http://wiki.exoplatform.org/xwiki/bin/view/ECM/UI+Extension+Framework]. +At first, you should have an idea about the UI Extension Framework. If you have already worked with the UI Extension Framework, it is really easy to create the activity plug-in. If no, you have chance to work with it by reading [UI Extension Framework|http://wiki.exoplatform.org/xwiki/bin/view/ECM/UI+Extension+Framework]. h2. Create a custom UI component for displaying the activity based on its type {anchor:id=Developer_document.Create_custom_UI_component} {note} -("Project Code can be downloadable [here|http://wiki.exoplatform.org/xwiki/bin/download/Social/Developer%20Documentation%20Activity%20Plugin/exo.social.samples.activity-plugin.zip]") +Project Code can be downloaded [here|http://wiki.exoplatform.org/xwiki/bin/download/Social/Developer%20Documentation%20Activity%20Plugin/exo.social.samples.activity-plugin.zip] {note} When an activity is displayed, UIActivityFactory will look for its registered custom activity display by activity's type. If not found, UIDefaultActivity will be called for displaying that activity. -For example, in Social, there is an activity of type "exosocial:spaces" created by SpaceActivityPublisher. If you want to display it with our own UI component instead of default ones. +For example, in Social, there is an activity of type "exosocial:spaces" created by SpaceActivityPublisher. If you want to display it with your own UI component instead of the default ones. You can do as follows: -First, create a sample project: +*1.* Create a sample project. {code} mvn archetype:generate @@ -28,7 +28,7 @@ Choose version: 1 Define value for property 'groupId': : org.exoplatform.social.samples Define value for property 'artifactId': : exo.social.samples.activity-plugin Define value for property 'version': 1.0-SNAPSHOT: 1.0.0-SNAPSHOT -Define value for property 'package': org.exoplatform.social.samples: org.exoplatform.social.samples.activityPlugin +Define value for property 'package': org.exoplatform.social.samples: org.exoplatform.social.samples. activityPlugin Confirm properties configuration: groupId: org.exoplatform.social.samples artifactId: exo.social.samples.activity-plugin @@ -38,7 +38,7 @@ Y: y {code} -Edit the pom.xml file as follows. +*2.* Edit the pom.xml file as follows. {code:xml} {code} -To use the custom UI component for displaying its activity, we need a subclass of {{BaseUIActivity}}. We call this {{UISpaceSimpleActivity}}: +To use the custom UI component for displaying its activity, you need a subclass of {{BaseUIActivity}}. Let's call this {{UISpaceSimpleActivity}}: {code:java} package org.exoplatform.social.samples.activityplugin; @@ -158,7 +158,7 @@ public class SimpleSpaceUIActivityBuilder extends BaseUIActivityBuilder { } {code} -Next, create {{configuration.xml}} under conf/portal: +*3.* Create the _configuration.xml_ file under _conf/portal_: {code:xml} exosocial:spaces{code} , its value must match the activity's type you want to display with your UI component. -Build sample project and copy the jar to tomcat/lib. Run Social, create a space and access it. You can see: - +*4.* Build the sample project and copy the .jar to {{tomcat/lib}}. Then, run Social, create a space and access it. You can see space's activity of type "exosocial:spaces" is displayed by default in Social: -!SimpleSpaceActivity-default.png! - +!images/SimpleSpaceActivity-default.png! -With our custom UI component for displaying activity of type: "exosocial:spaces": -!SimpleSpaceActivity-custom.png! +With your custom UI component for displaying activity of type: "exosocial:spaces": +!images/SimpleSpaceActivity-custom.png! -Make the custom UI activity display have the look and feel and function like default one. +*5.* Make the custom UI activity display have the look, feel and function like the default one. -When displaying an activity, we should make sure the look and feel of the custom UI component is consistent and match other activities and have the functions of like, comments. So, to create the another UI component to display, we call {{UISpaceLookAndFeelActivity}}: +When displaying an activity, you should make sure the look and feel of the custom UI component is consistent and match other activities and have the functions of like, comments. So, to create the another UI component to display, call {{UISpaceLookAndFeelActivity}}: {code:java} package org.exoplatform.social.samples.activityplugin; @@ -222,8 +220,8 @@ import org.exoplatform.webui.core.lifecycle.UIFormLifecycle; @EventConfig(listeners = BaseUIActivity.LikeActivityActionListener.class), @EventConfig(listeners = BaseUIActivity.SetCommentListStatusActionListener.class), @EventConfig(listeners = BaseUIActivity.PostCommentActionListener.class), - @EventConfig(listeners = BaseUIActivity.DeleteActivityActionListener.class, confirm = "UIActivity.msg.Are_You_Sure_To_Delete_This_Activity"), - @EventConfig(listeners = BaseUIActivity.DeleteCommentActionListener.class, confirm = "UIActivity.msg.Are_You_Sure_To_Delete_This_Comment") + @EventConfig(listeners = BaseUIActivity.DeleteActivityActionListener.class, confirm = "UIActivity. msg.Are_You_Sure_To_Delete_This_Activity"), + @EventConfig(listeners = BaseUIActivity.DeleteCommentActionListener.class, confirm = "UIActivity. msg.Are_You_Sure_To_Delete_This_Comment") } ) public class UISpaceLookAndFeelActivity extends BaseUIActivity { @@ -231,9 +229,10 @@ public class UISpaceLookAndFeelActivity extends BaseUIActivity { } {code} -Now, create the {{UISpaceLookAndFeelActivity}} template by copying the content of [UIDefaultActivity.gtmpl|http://fisheye.exoplatform.org/browse/social/tags/1.1.0-GA/component/webui/src/main/resources/groovy/social/webui/activity/UIDefaultActivity.gtmpl?r=HEAD] to this template file. -You should make needed modifications for this template. We make a small modification here: +*6.* Create the {{UISpaceLookAndFeelActivity}} template by copying the content of [UIDefaultActivity.gtmpl|http://fisheye.exoplatform.org/browse/social/tags/1.1.0-GA/component/webui/src/main/resources/groovy/social/webui/activity/UIDefaultActivity.gtmpl?r=HEAD] to this template file. + +You should make needed modifications for this template. {code}
@@ -241,12 +240,12 @@ You should make needed modifications for this template. We make a small modifica
{code} -We need to reconfigure {{configuration.xml}}: +*7.* Reconfigure the {{configuration.xml}} file: {code:xml} org.exoplatform.webui.ext.UIExtensionManager @@ -260,8 +259,8 @@ We need to reconfigure {{configuration.xml}}: org.exoplatform.social.webui.activity.BaseUIActivity exosocial:spaces - org.exoplatform.social.samples.activityplugin.UISpaceLookAndFeelActivity - org.exoplatform.social.samples.activityplugin.SimpleSpaceUIActivityBuilder + org.exoplatform.social.samples.activityplugin. UISpaceLookAndFeelActivity + org.exoplatform.social.samples.activityplugin. SimpleSpaceUIActivityBuilder @@ -270,16 +269,358 @@ We need to reconfigure {{configuration.xml}}: {code} -Rebuild the sample project, copy jar to tomcat/lib. Rerun the server and see the result: +*8.* Rebuild the sample project, copy the *.jar* file to tomcat/lib. Run the server again and see the result: -!LookAndFeelSpaceActivity.png! +!images/LookAndFeelSpaceActivity.png! {note} -Currently, we have to copy and paste in the template file. We will have the full control of the UI, but it is not good when there is any change in UIDefaultActivity. +Currently, you have to copy and paste in the template file. By this way, you have full control of the UI but it is not a good way when there are changes in UIDefaultActivity. This will be improved soon so that no copy/paste is needed. {note} h3. What is activity builder? {anchor:id=Developer_document.What_is_activity_builder} -{note}to do{note} + +ActivityBuilder is one class which is used to get values of _ExoSocialActivity_ to set to UIActivity for displaying. eXo Social provides the BaseUIActivityBuilder class for developers to extend and customize their own activity builder easily and properly. + +For example, to write your own UILinkActivityBuilder, you just need to extend BaseUIActivityBuilder and then customize attributes and behaviors of the activity builder as below. + +{code:java} +public class UILinkActivityBuilder extends BaseUIActivityBuilder { + private static final Log LOG = ExoLogger.getLogger(UILinkActivityBuilder.class); + @Override + protected void extendUIActivity(BaseUIActivity uiActivity, ExoSocialActivity activity) { + UILinkActivity uiLinkActivity = (UILinkActivity) uiActivity; + Map templateParams = activity.getTemplateParams(); + uiLinkActivity.setLinkSource(templateParams.get(UILinkActivityComposer.LINK_PARAM)); + uiLinkActivity.setLinkTitle(templateParams.get(UILinkActivityComposer.TITLE_PARAM)); + uiLinkActivity.setLinkImage(templateParams.get(UILinkActivityComposer.IMAGE_PARAM)); + uiLinkActivity.setLinkDescription(templateParams.get(UILinkActivityComposer.DESCRIPTION_PARAM)); + uiLinkActivity.setLinkComment(templateParams.get(UILinkActivityComposer.COMMENT_PARAM)); + } +} +{code} + +{note} +To learn more about ActivityBuilder, refer to the [BaseUIActivity class.|http://svn.exoplatform.org/projects/social/trunk/component/webui/src/main/java/org/exoplatform/social/webui/activity/BaseUIActivity.java] +{note} + h2. Create a composer extension for composing activity on the UI composer and display it on activity stream {anchor:id=Developer_document.Create_composer_extension} -{note}to do{note} +The UIActivityComposer is an extended class of UIContainer that is used to display inputs for users to create their own activities. To write your own activity composer, it is recommended that you use the UIActivityComposer available in eXo Social. + +For example, to create an input component for inserting video links into your activity, do the following steps: + +*1.* Write UIVideoActivityComposer which extends UIActivityComposer. The UIActivityComposer allows you to input extended activities (for example, adding videos, links or documents) on the UI composer. + +{code:java} +package org.exoplatform.social.plugin.videolink; + +import org.exoplatform.social.plugin.videolink.util.VideoEmbedTool; +@ComponentConfig( + template = "classpath:groovy/social/plugin/videolink/UIVideoActivityComposer.gtmpl", + events = { + @EventConfig(listeners = UIVideoActivityComposer.SearchVideo.class), + @EventConfig(listeners = UIVideoActivityComposer.SelectVideoFromResultList.class), + @EventConfig(listeners = UIVideoActivityComposer.AttachActionListener.class), + @EventConfig(listeners = UIVideoActivityComposer.ChangeLinkContentActionListener.class), + @EventConfig(listeners = UIActivityComposer.CloseActionListener.class), + @EventConfig(listeners = UIActivityComposer.SubmitContentActionListener.class), + @EventConfig(listeners = UIActivityComposer.ActivateActionListener.class) + } +) + +public class UIVideoActivityComposer extends UIActivityComposer { + + public static final String LINK_PARAM = "link"; + public static final String IMAGE_PARAM = "image"; + public static final String TITLE_PARAM = "title"; + public static final String HTML_PARAM = "htmlembed"; + public static final String COMMENT_PARAM = "comment"; + + private static final String HTTP = "http://"; + private static final String HTTPS = "https://"; + private JSONObject videoJson; + private boolean linkInfoDisplayed_ = false; + private Map templateParams; + + /** + * The constructor. + */ + public UIVideoActivityComposer() { + setReadyForPostingActivity(false); + addChild(new UIFormStringInput("InputLink", "InputLink", null)); + } + /** + * Set the link info to be displayed. + * + * @param displayed + */ + public void setLinkInfoDisplayed(boolean displayed) { + linkInfoDisplayed_ = displayed; + } + + /** + * Set the template params. + * + * @param templateParams + */ + public void setTemplateParams(Map templateParams) { + this.templateParams = templateParams; + } + + /** + * Get the template params. + */ + public Map getTemplateParams() { + return templateParams; + } + + /** + * Clear the video json. + */ + public void clearVideoJson() { + videoJson = null; + } + + /** + * Get the video json. + */ + public JSONObject getVideoJson() { + return videoJson; + } + + /** + * Set the link. + + * @param url + * @throws Exception + */ + private void setLink(String url) throws Exception { + if (!(url.contains(HTTP) || url.contains(HTTPS))) { + url = HTTP + url; + } + + videoJson = VideoEmbedTool.getoembedData(url); + templateParams = new HashMap(); + templateParams.put(LINK_PARAM, url); + templateParams.put(TITLE_PARAM, videoJson.getString(VideoEmbedTool.OEMBED_TITLE)); + templateParams.put(HTML_PARAM, videoJson.getString(VideoEmbedTool.OEMBED_HTML)); + setLinkInfoDisplayed(true); + } + + static public class AttachActionListener extends EventListener { + + @Override + public void execute(Event event) throws Exception { + WebuiRequestContext requestContext = event.getRequestContext(); + UIVideoActivityComposer uiComposerLinkExtension = event.getSource(); + String url = requestContext.getRequestParameter(OBJECTID); + try { + uiComposerLinkExtension.setLink(url.trim()); + } catch (Exception e) { + uiComposerLinkExtension.setReadyForPostingActivity(false); + return; + } + requestContext.addUIComponentToUpdateByAjax(uiComposerLinkExtension); + event.getSource().setReadyForPostingActivity(true); + } + } + + static public class ChangeLinkContentActionListener extends EventListener { + @Override + public void execute(Event event) throws Exception { + WebuiRequestContext requestContext = event.getRequestContext(); + UIVideoActivityComposer uiComposerLinkExtension = event.getSource(); + + Map tempParams = new HashMap(); + + uiComposerLinkExtension.setTemplateParams(tempParams); + requestContext.addUIComponentToUpdateByAjax(uiComposerLinkExtension); + UIComponent uiParent = uiComposerLinkExtension.getParent(); + if (uiParent != null) { + uiParent.broadcast(event, event.getExecutionPhase()); + } + } + } + + public static class SelectVideoFromResultList extends EventListener{ + @Override + public void execute(Event event) throws Exception { + WebuiRequestContext requestContext = event.getRequestContext(); + UIVideoActivityComposer uiComposerLinkExtension = event.getSource(); + + } + } + + public static class SearchVideo extends EventListener{ + + @Override + public void execute(Event event) throws Exception { + WebuiRequestContext requestContext = event.getRequestContext(); + UIVideoActivityComposer uiComposerLinkExtension = event.getSource(); + + + } + } + + @Override + public void onPostActivity(PostContext postContext, UIComponent source, + WebuiRequestContext requestContext, String postedMessage) throws Exception { + + templateParams.put(COMMENT_PARAM, postedMessage); + setTemplateParams(templateParams); + if (templateParams.size() == 0) { + uiApplication.addMessage(new ApplicationMessage("UIComposer.msg.error.Empty_Message", + null, + ApplicationMessage.WARNING)); + return; + } + String title = "Shared a video: ${" + TITLE_PARAM + "} "; + ExoSocialActivity activity = new ExoSocialActivityImpl(userIdentity.getId(), + UIVideoActivity.ACTIVITY_TYPE, + title, + null); + activity.setTemplateParams(templateParams); + + if (postContext == UIComposer.PostContext.SPACE) { + + UIActivitiesContainer activitiesContainer = uiDisplaySpaceActivities.getActivitiesLoader(). getActivitiesContainer(); + activitiesContainer.addActivity(activity); + requestContext.addUIComponentToUpdateByAjax(activitiesContainer); + requestContext.addUIComponentToUpdateByAjax(uiComposer); + } else if (postContext == PostContext.USER) { + UIUserActivitiesDisplay uiUserActivitiesDisplay = (UIUserActivitiesDisplay) getActivityDisplay(); + String ownerName = uiUserActivitiesDisplay.getOwnerName(); + Identity ownerIdentity = identityManager.getOrCreateIdentity(OrganizationIdentityProvider.NAME, + ownerName, false); + + activityManager.saveActivity(ownerIdentity, activity); + + if (uiUserActivitiesDisplay.getSelectedDisplayMode() == UIUserActivitiesDisplay.DisplayMode. MY_STATUS) { + UIActivitiesContainer activitiesContainer = uiUserActivitiesDisplay.getActivitiesLoader(). getActivitiesContainer(); + if (activitiesContainer.getChildren().size() == 1) { + uiUserActivitiesDisplay.setSelectedDisplayMode(UIUserActivitiesDisplay.DisplayMode.MY_STATUS); + } else { + activitiesContainer.addActivity(activity); + requestContext.addUIComponentToUpdateByAjax(activitiesContainer); + requestContext.addUIComponentToUpdateByAjax(uiComposer); + } + } else{ + uiUserActivitiesDisplay.setSelectedDisplayMode(UIUserActivitiesDisplay.DisplayMode.MY_STATUS); + } + } + } +} +{code} + +*2.* Use the BaseUIActivity class to write and customize the UIActivity display as below: + +{code:java} +package org.exoplatform.social.plugin.videolink; +import org.exoplatform.social.webui.activity.BaseUIActivity; +import org.exoplatform.webui.config.annotation.ComponentConfig; +import org.exoplatform.webui.core.lifecycle.UIFormLifecycle; +import org.exoplatform.webui.config.annotation.EventConfig; +@ComponentConfig(lifecycle = UIFormLifecycle.class, template = "classpath:groovy/social/plugin/ videolink/UIVideoActivity.gtmpl", events = { + @EventConfig(listeners = BaseUIActivity.ToggleDisplayLikesActionListener.class), + @EventConfig(listeners = BaseUIActivity.ToggleDisplayCommentFormActionListener.class), + @EventConfig(listeners = BaseUIActivity.LikeActivityActionListener.class), + @EventConfig(listeners = BaseUIActivity.SetCommentListStatusActionListener.class), + @EventConfig(listeners = BaseUIActivity.PostCommentActionListener.class), + @EventConfig(listeners = BaseUIActivity.DeleteActivityActionListener.class, confirm = "UIActivity. msg.Are_You_Sure_To_Delete_This_Activity"), + @EventConfig(listeners = BaseUIActivity.DeleteCommentActionListener.class, confirm = "UIActivity. msg.Are_You_Sure_To_Delete_This_Comment") + } +) +public class UIVideoActivity extends BaseUIActivity { + public static final String ACTIVITY_TYPE = "VIDEO_ACTIVITY"; + private String linkSource = ""; + private String linkTitle = ""; + private String linkHTML = ""; + private String linkComment = ""; + + /** + * Get the link comment. + */ + public String getLinkComment() { + return linkComment; + } + + /** + * Set the link comment. + * + * @param linkComment + */ + public void setLinkComment(String linkComment) { + this.linkComment = linkComment; + } + + /** + * Get the link html. + */ + public String getLinkHTML() { + return linkHTML; + } + + /** + * Set the link html. + * + * @param linkHTML + */ + public void setLinkHTML(String linkHTML) { + this.linkHTML = linkHTML; + } + + /** + * Get the link source. + */ + public String getLinkSource() { + return linkSource; + } + + /** + * Set the link source. + * + * @param linkSource + */ + public void setLinkSource(String linkSource) { + this.linkSource = linkSource; + } + + /** + * Get the link title. + */ + public String getLinkTitle() { + return linkTitle; + } + + /** + * Set the link title. + * + * @param linkTitle + */ + public void setLinkTitle(String linkTitle) { + this.linkTitle = linkTitle; + } +} +{code} + +*3.* Use the _UIVideoActivityBuilder_ class to get values of _ExoSocialActivity_ that are set to UIVideoActivity for displaying. + +{code:java} +package org.exoplatform.social.plugin.videolink; +import java.util.Map; +import org.exoplatform.social.core.activity.model.ExoSocialActivity; + +public class UIVideoActivityBuilder extends BaseUIActivityBuilder { + private static final Log LOG = ExoLogger.getLogger(UIVideoActivityBuilder.class); + @Override + protected void extendUIActivity(BaseUIActivity uiActivity, ExoSocialActivity activity) { + UIVideoActivity uiVideoActivity = (UIVideoActivity) uiActivity; + Map templateParams = activity.getTemplateParams(); + uiVideoActivity.setLinkSource(templateParams.get(UIVideoActivityComposer.LINK_PARAM)); + uiVideoActivity.setLinkTitle(templateParams.get(UIVideoActivityComposer.TITLE_PARAM)); + uiVideoActivity.setLinkImage(templateParams.get(UIVideoActivityComposer.IMAGE_PARAM)); + uiVideoActivity.setLinkHTML(templateParams.get(UIVideoActivityComposer.HTML_PARAM)); + uiVideoActivity.setLinkComment(templateParams.get(UIVideoActivityComposer.COMMENT_PARAM)); + } +} +{code} diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Stream.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Stream.wiki index a3fd57be5d..c3960fd555 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Stream.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Stream.wiki @@ -1,13 +1,12 @@ -eXo Social provides a way to share status updates and activity information for users as well as spaces (aka Activity Streams). With the API, you can customize the activities or publish new ones. - -To manipulate activities, you will use the [ActivityManager|http//repository:exoplatform.org-service-local-repositories-public-archive-org-exoplatform-social-social-1.0.0-GA-social-1.0.0-GA-javadoc.jar-!-org-exoplatform-social-core-activitystream-ActivityManager.html]. To get an instance of this class, you will need to use the {{PortalContainer}}. +eXo Social provides users a way to share their activity information (also known as Activity Stream) and collaborate in spaces (also known as group work). With the API, you can customize the way to display activities or publish new ones. +To manipulate activities, you need to use the _AtivityManager_ service. h1. Create an activity {anchor:id=SOCref.Developer_references.CreateActivity} -There are two types of activities : activities for a user and activities for a space. The following examples will show you how to create an activity for each type. +There are two types of activities: activities for a user and activities for a space. The following examples will show you how to create an activity for each type. h1. Publish an activity for a user {anchor:id=SOCref.Developer_references.Publish_an_activity_for_a_user} -Users have activity streams. The code below shows you how to publish a nex activity into the public activity stream of a user. +Users have activity streams. The code below shows you how to publish a next activity into the public activity stream of a user. {code:java} import org.exoplatform.container.PortalContainer; @@ -47,7 +46,7 @@ import org.exoplatform.social.core.identity.model.Identity; {code} h1. Publish an activity for a space {anchor:id=SOCref.Developer_references.Publish_an_activity_for_a_space} -Spaces are also social objects and thus, they own an activity stream. The code below shows you how to publish activity into a space's stream +Spaces are also social objects and thus, they own activity stream. The code below shows you how to publish activity into a space's stream {code:java} import org.exoplatform.container.PortalContainer; @@ -103,19 +102,19 @@ import org.exoplatform.social.space.impl.SpaceIdentityProvider; h1. Useful functions {anchor:id=SOCref.Developer_references.Useful_functions} -* [ActivityManager#getActivity|http//repository:exoplatform.org-service-local-repositories-public-archive-org-exoplatform-social-social-1.0.0-GA-social-1.0.0-GA-javadoc.jar-!-org-exoplatform-social-core-activitystream-ActivityManager.html] -* [ActivityManager#getActivities|http//repository:exoplatform.org-service-local-repositories-public-archive-org-exoplatform-social-social-1.0.0-GA-social-1.0.0-GA-javadoc.jar-!-org-exoplatform-social-core-activitystream-ActivityManager.html] -* [ActivityManager#saveActivity|http//repository:exoplatform.org-service-local-repositories-public-archive-org-exoplatform-social-social-1.0.0-GA-social-1.0.0-GA-javadoc.jar-!-org-exoplatform-social-core-activitystream-ActivityManager.html] -* [ActivityManager#saveComment|http//repository:exoplatform.org-service-local-repositories-public-archive-org-exoplatform-social-social-1.0.0-GA-social-1.0.0-GA-javadoc.jar-!-org-exoplatform-social-core-activitystream-ActivityManager.html] -* [ActivityManager#saveLike|http//repository:exoplatform.org-service-local-repositories-public-archive-org-exoplatform-social-social-1.0.0-GA-social-1.0.0-GA-javadoc.jar-!-org-exoplatform-social-core-activitystream-ActivityManager.html] -* [ActivityManager#removeLike|http//repository:exoplatform.org-service-local-repositories-public-archive-org-exoplatform-social-social-1.0.0-GA-social-1.0.0-GA-javadoc.jar-!-org-exoplatform-social-core-activitystream-ActivityManager.html] -* [ActivityManager#getComments|http//repository:exoplatform.org-service-local-repositories-public-archive-org-exoplatform-social-social-1.0.0-GA-social-1.0.0-GA-javadoc.jar-!-org-exoplatform-social-core-activitystream-ActivityManager.html] +* ActivityManager#getActivity +* ActivityManager#getActivities +* ActivityManager#saveActivity +* ActivityManager#saveComment +* ActivityManager#saveLike +* ActivityManager#removeLike +* ActivityManager#getComments h2. Configure an activity processor {anchor:id=SOCref.Developer_references.ConfigureAnActivityProcessor} -An Activity processor is used for modifying the content of activities before they are responsed and rendered at client's browser. For example, we will create an activity processor for replacing all the texts representing the smile face ":-)" in the activity title by the smiley icons. +An Activity processor is used for modifying the content of activities before they are responsed and rendered at client's browser. For example, you will create an activity processor for replacing all the texts representing the smile face ":-)" in the activity title by the smiley icons. -Firstly, we will create the {{SmileyProcessor}} class by extending the {{BaseActivityProcessorPlugin}} +Firstly, you will create the {{SmileyProcessor}} class by extending the {{BaseActivityProcessorPlugin}} {code:java} package org.exoplatform.social.core.activitystream; @@ -135,7 +134,7 @@ public class SmileyProcessor extends BaseActivityProcessorPlugin { } {code} -And then, we have to register this processor by adding some XML configuration into the project configuration file (configuration.xml) +Then, register this processor by adding some XML configuration into the project configuration file (configuration.xml). {code:xml} @@ -157,11 +156,11 @@ And then, we have to register this processor by adding some XML configuration in {code} -"init-params" contains all the key-value data which a processor will use to initialize. At the above config, priority value indicates the order that this processor will be used. So with '1' value, this processor will be used before all remaining processors with lower priority. +"init-params" contains all the key-value data which a processor will use to initialize. At the above configuration, priority value indicates the order that this processor will be used. So with '1' value, this processor will be used before all remaining processors with lower priority. -h1. Publish an rss feed with feedmash {anchor:id=SOCref.Developer_references.Publish_an_rss_feed_with_feedmash} +h1. Publish an RSS feed with feedmash {anchor:id=SOCref.Developer_references.Publish_an_rss_feed_with_feedmash} -It's really easy to publish an rss feed to a space's activity stream. eXo Social already provides {{FeedmashJobPlugin}} for publishing rss feeds. As you can see in project {{exo.social.extras.feedmash}}, there are {{JiraFeedConsumer}} and {{HudsonFeedConsumer}} samples to post eXo Social project's feeds (jira and hudson) to a pre-defined space: {{exosocial}} in a specifiportal container: {{socialdemo}} as in the configuration file: +It is really easy to publish an RSS feed to a space's activity stream. eXo Social already provides {{FeedmashJobPlugin}} for publishing RSS feeds. As you can see in project {{exo.social.extras.feedmash}}, there are {{JiraFeedConsumer}} and {{HudsonFeedConsumer}} samples to post eXo Social project's feeds (Jira and Hudson) to a pre-defined space: {{exosocial}} in a specifiportal container: {{socialdemo}} as in the configuration file: {code:xml} @@ -220,4 +219,4 @@ It's really easy to publish an rss feed to a space's activity stream. eXo Social {code} -When running eXo Social, login with http://localhost:8080/socialdemo and create a space named "exosocial". Done, all the feeds from jira and hudson for Social project will be automatically published to {{exosocial}} space. +When running eXo Social, login with http://localhost:8080/socialdemo and create a space named "exosocial". All feeds from Jira and Hudson for eXo Social project will be automatically published to {{exosocial}} space. diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_OpenSocial.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_OpenSocial.wiki index d3e9423ea9..534593014e 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_OpenSocial.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_OpenSocial.wiki @@ -1,27 +1,28 @@ - -eXo Social is implementing the OpenSocial standard. So you can integrate OpenSocial Gadget in your dashboard and use the RPC or REST API to access to the social data. -With the support for the OpenSocial standard, eXo Social provides a framework for developers to build gadgets that can display and mash-up activity information for contacts, social networks, applications and services. +eXo Social supports the OpenSocial standard. So you can integrate OpenSocial gadgets in your dashboard and use the RPC or REST service to view or publish the social data. +With the support for the OpenSocial standard, eXo Social provides a framework for developers to build gadgets that can display and mash up activity information for contacts, social networks, applications and services. h1. Gadget {anchor:id=SOCref.Developers_References.OpenSocial.Gadget} -Gadgets are web-based software components based on HTML, CSS, and JavaScript. They allow developers to easily write useful web applications that work anywhere on the web without modification. To know more, we suggest some links for detail information : +Gadgets are web-based software components based on HTML, CSS, JavaScript; defined by using an XML declaration syntax. They allow developers to easily write social applications that work on the social networks supporting OpenSocial APIs without modification. See the following links for detailed information: -[Gadgets Specification | http//code:google.com-apis-gadgets-docs-spec.html] +* [Gadgets Specification v1.1|http://opensocial-resources.googlecode.com/svn/spec/1.1/Social-Gadget.xml] -[OpenSocial Core Gadget Specification 10 | http:--opensocial-resources.googlecode.com-svn-spec-1.0-Core-Gadget.xml] +* [OpenSocial Core Gadget Specification v1.1|http://opensocial-resources.googlecode.com/svn/spec/1.1/Core-Gadget.xml] -After getting acquainted with Gadget concept, we enter into the detail on how to create an opensocial gadget. However, the tutorials are done greatly in Opensocial official site so we refer you to read these tutorials at [that website|http://wiki.opensocial.org/index.php?title=Gadget_Developer's_Guide] +You are going to the detail on how to create an opensocial gadget. However, the tutorials are done greatly in Opensocial official site so you should read these tutorials at [this website|http://wiki.opensocial.org/index.php?title=Gadget_Developer's_Guide] -We only note that in Opensocial gadgets only work in the dashboard in eXo Social. +{note} +In Opensocial, gadgets only work in the dashboard in eXo Social. +{note} h2. Supported APIs {anchor:id=SOCref.Developers_References.OpenSocial.Supported_APIs} -As we have said above, eXo Social is implementing the OpenSocial standard. So every eXo Social implementations apply the Opensocial Specification generally or [Apache Shindig|http://shindig.apache.org/overview.html] specifically. Therefore, eXo Social uses and extends Apache Shindig APIs to compatible with the common Opensocial APIs which is supported by other big social networks like [Ning|http://www.ning.com], [Hi5|http://www.hi5.com], [Orkut|http://www.orkut.com] ... +As said above, eXo Social is implementing the OpenSocial standard. So, every eXo Social implementations apply the Opensocial Specification generally or [Apache Shindig|http://shindig.apache.org/overview.html] specifically. Therefore, eXo Social uses and extends Apache Shindig APIs to compatible with the common Opensocial APIs which is supported by other big social networks like [Ning|http://www.ning.com], [Hi5|http://www.hi5.com], [Orkut|http://www.orkut.com], etc. -To get more detail about Supported APIs, we refer you to read [Opensocial Specs|http://www.opensocial.org/page/specs-1] +To get more details about Supported APIs, you should also read [Opensocial Specs|http://www.opensocial.org/page/specs-1]. h1. REST/RPC API {anchor:id=SOCref.Developers_References.OpenSocial.REST_RPC_API} -If your eXo social server is running on http://localhost:8080/ the address of the API will be: +If your eXo social server is running on http://localhost:8080/m the address of the API will be: REST API: http://localhost:8080/social/social/rest @@ -31,11 +32,10 @@ http://localhost:8080/social/social/rpc To learn what you can do with this APIs, have a look at the [specification|http://opensocial-resources.googlecode.com/svn/spec/1.0/Social-Data.xml]. If you are developing in Java, you can use the [opensocial-java-client|http://code.google.com/p/opensocial-java-client/] - h2. Configure the security {anchor:id=SOCref.Developers_References.OpenSocial.Configure_security} If you are using opensocial, there is good chance you are going to need to configure the oAuth authentication. To do this, you need to edit the configuration to add you oAuth key. -Edit the file: gatein/conf/portal/portal/configuration.xml and add this component: +Edit the file: _gatein/conf/portal/portal/configuration.xml_ and add this component: {code} org.exoplatform.social.opensocial.oauth.ServiceProviderStore @@ -44,7 +44,9 @@ Edit the file: gatein/conf/portal/portal/configuration.xml and add this componen grails-book-flow - consmer key and secret for sample oauth provider. + + consmer key and secret for sample oauth provider. + @@ -53,12 +55,12 @@ Edit the file: gatein/conf/portal/portal/configuration.xml and add this componen {code} -The consumerKey and sharedSecret are the key that need to be shared with the application that is doing the request. +The consumerKey and sharedSecret are the key that need to be shared with the application that is doing the request. h2. Publish an activity into a space {anchor:id=SOCref.Developers_References.OpenSocial.Publish_Activity_Into_Space} -eXo Social added this functionality that is not available in the standard opensocial API. You can publish activities into a space using the opensocial API. +eXo Social added this functionality that is not available in the standard opensocial API. You can publish activities into a space using the opensocial API. To do this, instead of publishing your activity to the group @self as usual, publish it to the group "space:spaceID" or "space:spaceName". @@ -66,7 +68,7 @@ Using the opensocial java library and groovy, your code will look like this: {code} def client = getOpenSocialClient() - //we create our new activity + //we create your new activity Activity activity = new Activity() activity.title = "BookFlow Purchase" activity.body = "xx puchased the book xxx" @@ -78,7 +80,7 @@ Using the opensocial java library and groovy, your code will look like this: client.send(request); {code} -As you can see in this example, we set the groupId to "space:bookflow", bookflow being the name of our space. +As you can see in this example, the groupId is set to "space:bookflow", BookFlow is the name of your space. h3. Tutorial {anchor:id=SOCref.Developers_References.OpenSocial.Tutorial} * See [Grails + eXo Social tutorial|http://www.exoplatform.com/company/public/website/resource-viewer?path=/website/Content%20types/Tutorial/grails-exo-social]. \ No newline at end of file diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_People.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_People.wiki index a6bd53ed0e..d2972e3b66 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_People.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_People.wiki @@ -1,4 +1,4 @@ -eXo Social provides a way to add profile informations, relationships and connections between users: People. With the eXo People API, profile informations and relationship can be easily managed and customized. +Social provides a way to add profile informations, relationships and connections between users: People. With the eXo People API, profile informations and relationship can be easily managed and customized. h1. Identity {anchor:id=SOCref.Developers_References.People.Identity} The identity allows to identity uniquely a social object. Social objects can be persons, groups, applications, or whatever you think deserves social interactions like connecting, publishing an activity stream or holding a profile. @@ -22,11 +22,11 @@ class SampleIdentityProvider extends OrganizationIdentityProvider{ } {code} -In this example, we created a SampleIdentityProvider class extending OrganizationIdentityProvider which is the IdentityProvider used to connect to the portal user's base. In this class, we overrided the populateProfile method and added some dummy data in the profile fields. +In this example, the _SampleIdentityProvider_ class extends _OrganizationIdentityProvider_ which is the IdentityProvider used to connect to the portal user's base. In this class, the _populateProfile_ method is overridden and some dummy data are added to the profile fields. h2. IdentityManager {anchor:id=SOCref.Developers_References.People.IdentityManager} -The IdentityManager is the service used to manipulate the identity operations like creating, getting, deleting or finding a profile. We can get the IdentityManager via the ExoContainer. The following code will show how to get an IdentityManager instance and create a basic identity instance : +IdentityManager is the service used to manipulate the identity operations, such as creating, getting, deleting or finding a profile. You can get the IdentityManager via the ExoContainer. The following code will show how to get an IdentityManager instance and create a basic identity instance: {code:language=java} import org.exoplatform.container.ExoContainer; @@ -56,9 +56,9 @@ Identity userIdentity = identityManager.getOrCreateIdentity(OrganizationIdentity h1. ProfileListener {anchor:id=SOCref.Developers_References.People.ProfileListener} -The People API provides some notification interfaces which programmers can implement in order to create their own handlers for notifications like notifications() for profile modifications([ProfileListenerPlugin|(ProfileListenerPlugin--]]) or for relationship changes([RelationshipListenerPlugin|(RelationshipListenerPlugin--]]). The following example will guide you through implementing one of these interfaces and show you how to configure this plugin. +The People API provides some notification interfaces which programmers can implement in order to create their own handlers for notifications like notifications() for profile modifications(ProfileListenerPlugin) or for relationship changes(RelationshipListenerPlugin). The following example will guide you through implementing one of these interfaces and show you how to configure this plugin. -We will create the class ProfileLoggerListener. Its tasks is to log all profile modifications of the systems. The abstract class ProfileListenerPlugin provides us the interface to implement this method. +We will create the class ProfileLoggerListener. Its task is to log all profile modifications of the systems. The abstract class ProfileListenerPlugin provides us the interface to implement this method. {code:language=java} import org.exoplatform.services.log.ExoLogger; @@ -96,7 +96,7 @@ public class ProfileLoggerListener extends ProfileListenerPlugin{ } {code} -After creating the ProfileLoggerListener class, we have to add some configurations for this class to the configuration.xml : +After creating the ProfileLoggerListener class, you have to add some configurations for this class to the _configuration.xml_: {code:language=xml} @@ -112,11 +112,11 @@ After creating the ProfileLoggerListener class, we have to add some configuratio h1. Relationships {anchor:id=SOCref.Developers_References.People.Relationships} Similarly, you can apply the above steps to implement the RelationshipListenerPlugin for relationship notifications. -Relationship is the bridge between two identities in eXo Social. There are many types of relationships defined in the Relationship class. With these types, a user can invite another user, confirm invitations or remove relationship. +Relationship is the bridge between two identities in Social. There are many types of relationships defined in the Relationship class. With these types, a user can invite another user, confirm invitations or remove relationship. h2. User connection {anchor:id=SOCref.Developers_References.People.Connecting_users} -The following code will show how to invite a user to connect to another : +The following code will show how to invite a user to connect: {code:language=java} import org.exoplatform.container.ExoContainer; @@ -147,7 +147,10 @@ public void inviteUser() throws Exception { h2. RelationshipListener {anchor:id=SOCref.Developers_References.People.RelationshipListener} -Let's take a look at relationship Listener([RelationshipListenerPlugin|http//repository:exoplatform.org-service-local-repositories-public-archive-org-exoplatform-social-social-1.0.0-GA-social-1.0.0-GA-javadoc.jar-!-org-exoplatform-social-core-relationship-lifecycle-RelationshipListenerPlugin.html]). The following example will show you how to implement one of these interfaces and how to configure this plugin. The following step is similar to the Profile notifications implementation. +The following example will show you how to implement one of these interfaces and how to configure this plugin. The following step is similar to the Profile notifications implementation. + +*1.* Create the _RelationshipLoggerListener_ class: + {code:language=java} import org.exoplatform.social.core.relationship.Relationship; @@ -189,7 +192,7 @@ public class RelationshipLoggerListener extends RelationshipListenerPlugin{ } {code} -After creating the RelationshipLoggerListener class, we have to add some configurations for this class to the configuration.xml : +*2.* Add some configurations for this class in the _configuration.xml_ file: {code:language=xml} org.exoplatform.social.core.relationship.RelationshipManager diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Spaces.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Spaces.wiki index 2fc28a44ec..b1a69b7f73 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Spaces.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Spaces.wiki @@ -1,8 +1,10 @@ -eXo Social provides a way to create groups and to share data and applications: the space. A space has it's own activity stream in which applications or members can publish information. In each space, members share applications and an openSocial dashboard. +eXo Social provides a way to create groups and to share data and applications by spaces. A space has its own activity stream in which applications or members can publish information. In each space, members use applications together with shared data. + +To manipulate the spaces, you will use the SpaceService. To get an instance of this class, you need to get the current _PortalContainer_ instance. -To manipulate the spaces, you will use the SpaceService. To get an instance of this class, you will need to get current PortalContainer instance. h1. Spaces Management {anchor:id=SOCref.Developer_Ref.Developer_document_Spaces.Space_Management} h2. Create a space {anchor:id=SOCref.Developer_Ref.Developer_document_Spaces.Space_Management.Create_Space} + The following example shows how to create a space: {code:java} package org.exoplatform.social.sample; @@ -41,7 +43,7 @@ public class SpaceCreationSample { h1. Space's applications management {anchor:id=SOCref.Developer_Ref.Developer_document_Spaces.Space_applications_managemnet} h2. Add an application to a space {anchor:id=SOCref.Developer_Ref.Developer_document_Spaces.Add_application_to_a_space} -We can add a portlet or gadget applications into spaces. Once added, all members of the space can use that application. The following code shows how to add an application into a space : +You can add portlet or gadget applications to spaces. Once added, all members of the space can use that application. The following code shows you how to add an application to a space: {code: java} public void addApplicationToSpace() throws SpaceException { @@ -62,12 +64,13 @@ public void addApplicationToSpace() throws SpaceException { spaceService.activateApplication(spaceId, appId); } {code} + {note} -appId is the portlet or gadget name as defined in portlet.xml or gadget.xml in the web-app. With eXo Social, we can find it in social-portlet.war and social.war. +_appId_ is the portlet or gadget name as defined in _portlet.xml_ or _gadget.xml_ in the web-app. You can find it in _social-portlet.war_ and _social.war_. {note} h1. Members Management {anchor:id=SOCref.Developer_Ref.Developer_document_Space.Members_Management} -The SpaceService allows you to manage the spaces' members.Here is how you would add a now member to a space: +SpaceService allows you to manage the spaces' members. Here is the way to add a new member to a space: {code:java} String spaceName = "mySpace"; @@ -79,21 +82,22 @@ if (space != null) { spaceService.addMember(space, "mary"); } {code} + h1. Listener to a space lifecycle {anchor:id=SOCref.Developer_Ref.Developer_document_Space.Listener_to_a_space_lifecycle} -To receive notifications of what is happening in spaces, you need to extend SpaceListenerPlugin and register it. Every method takes a SpaceLifeCycleEvent object as parameter that contain the information about the event and it's context. +To receive notifications of what are happening in spaces, you need to extend _SpaceListenerPlugin_ and register it. Every method takes a _SpaceLifeCycleEvent_ object as a parameter that contains the information about the event and its context. -The events available are: +The available events are: -- spaceCreated: this event is called right after space is created successfully with its applications. -- spaceRemoved: this event is called right after a space is removed: application's removed, its group and group navigation is removed -- applicationAdded: this event is called right after an application is added (installed) to a space -- applicationActivated: this event is called right after an application is activated. -- applicationDeactivated: this event is called right after an application is deactivated. -- applicationRemoved: this event is called right after an application is removed from a space. -- joined: this event is called right after a user joins a space. -- left: this event is called right after a space member leaves its space. -- grantedLead: this event is called right after a user is grated space's manager role. -- revokedLead: this event is called right after a space's manager is revoked his role to be a space member. +* _spaceCreated_: This event is called right after a space is created successfully with its applications. +* _spaceRemoved_: This event is called right after the space is removed. It means all the applications of the space are removed, its group and group navigation are removed. +* _applicationAdded_: This event is called right after an application is added (installed) to the space. +* _applicationActivated_: This event is called right after an application is activated in the space. +* _applicationDeactivated_: This event is called right after an application is deactivated. +* _applicationRemoved_: This event is called right after an application is removed from the space. +* _joined_: This event is called right after a user joins the space. +* _left_: This event is called right after a space member leaves its space. +* _grantedLead_: This event is called right after a user is granted the space's manager role. +* _revokedLead_: This event is called right after the space's manager is revoked his role to be a space member. {code:java} import org.exoplatform.social.space.lifecycle.SpaceListenerPlugin; @@ -103,9 +107,9 @@ public class MySpaceListenerPlugin extends SpaceListenerPlugin { } {code} -As an example, see the [SpaceActivityPublisher|http://fisheye.exoplatform.org/browse/social/trunk/component/exosocial/src/main/java/org/exoplatform/social/space/SpaceActivityPublisher.java?r=HEAD] that publishes an activity based on an event that happened in a space. +As an example, see the SpaceActivityPublisher that publishes an activity based on an event that happened in a space. -To register your listener, hook it to the SpaceService like this : +To register your listener, hook it to the SpaceService like this: {code:xml} org.exoplatform.social.space.SpaceService diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developing_Open_Social_Gadgets.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developing_Open_Social_Gadgets.wiki index f1ca5c8861..1d14e934e9 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developing_Open_Social_Gadgets.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developing_Open_Social_Gadgets.wiki @@ -1,13 +1,11 @@ -h1. Developing OpenSocial Gadgets - +h1. Developing OpenSocial Gadgets {anchor:id=SOCref.DevelopingOpenSocialGadget} - -h1. Introduction -eXo Social with OpenSocial container based on apache shindig supports OpenSocial capability. So we can develop gadgets that use OpenSocial API to request OpenSocial data or deploy opensocial gadget using tool supported by portal. +h1. Introduction {anchor:id=SOCref.Developer_references.Introduction} +eXo Social with OpenSocial container based on apache shindig supports OpenSocial capability. So you can develop gadgets that use OpenSocial API to request OpenSocial data or deploy opensocial gadget using tool supported by portal. To develop your gadgets, you can use the tool that supported by portal. -!createGadgets.png! +!images/createGadgets.png! h1. Development Parameters @@ -31,11 +29,11 @@ TODO, but you can look at this [demonstration|http://www.vimeo.com/2069512] h1. Developing OpenSocial Gadgets h1. Introduction -eXo Social with OpenSocial container based on apache shindig supports OpenSocial capability. So we can develop gadgets that use OpenSocial API to request OpenSocial data or deploy opensocial gadget using tool supported by portal. +eXo Social with OpenSocial container based on apache shindig supports OpenSocial capability. So you can develop gadgets that use OpenSocial API to request OpenSocial data or deploy opensocial gadget using tool supported by portal. To develop your gadgets, you can use the tool that supported by portal. -!createGadgets.png! +!images/createGadgets.png! h1. Development Parameters diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Java_APIs.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Java_APIs.wiki index 13274c8c98..3b91348381 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Java_APIs.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Java_APIs.wiki @@ -1,168 +1,168 @@ h1. ActivityManager {anchor:id=Developer_document.Java_APIs.Activity_Manager} || Method || Param || Return || Description || -| *saveActivity*(Identity owner, Activity activity) | {{owner}} - the owner of activity stream, {{activity}} - the activity which needs to be saved |Activity| Saves an activity to the stream of a owner. Note that the Activity.userId will be set to the owner identity if not already set. | -| *getActivity*(java.lang.String activityId) | {{activityId}} - the id of activity | Activity | Gets an activity by activity id. | -| *deleteActivity*(java.lang.String activityId) | {{activityId}} - the id of activity | void | Deletes an activity by id. | -| *deleteComment*(java.lang.String activityId, java.lang.String commentId) | {{activityId}} - the id of activity, {{commentId}} - the id of comment | void | Deletes comment by id. | -| *getActivities*(Identity identity) | {{identity}} | List | Gets the latest activities by identity with the default limit of 20 latest activities. | -| *getActivities*(Identity identity, long start, long limit) | {{identity}}, {{start}} - the offset index , {{limit}} | List | Gets the latest activities by identity, specifying the start offset index and limit. | -| *getActivitiesOfConnections*(Identity ownerIdentity)| {{ownerIdentity}}| List| Gets activities of connections from an identity. The activities are sorted by time. The result list is maximum 30 activities by default. (Since 1.1.1). | -| *getActivitiesOfConnections*(Identity ownerIdentity, int offset, int limit)|{{ownerIdentity, limit, offset}}| List |Gets activities of connections from an identity by specifying offset and limit. The acivities are returned as a list that is sorted starting from the most recent activity. (Since 1.1.3).| -| *getActivitiesOfUserSpaces*(Identity ownerIdentity)| {{ownerIdentity}} | List | Gets the activities from all user's spaces.| -| *getActivityFeed*(Identity identity)|{{identity}}|List|Gets the activity feed of an identity. This feed is the combination of all the activities of his own activities, his connections' activities and his spaces' activities which are sorted by time. The latest activity is the first item in the activity list.| -| *saveActivity*(Activity activity) | {{activity}} - the activity which needs to be saved | activity | Saves the activity into the stream for the activity's userId. | -| *saveComment*(Activity activity, Activity comment) | {{activity}}, {{comment}} | void | Saves new or update comments to an activity comment which is an instance of Activity with mandatory properties: userId, title. | -| *saveLike*(Activity activity, Identity identity) | {{activity}}, {{identity}} | void | Saves an identity of user who likes the activity. | -| *removeLike*(Activity activity, Identity identity) | {{activity}}, {{identity}} - the identity of user who unlikes the activity |void | Removes the like activity, if this activity liked, remove, else does nothing. | -| *getComments*(Activity activity) | {{activity}} | comments | Gets an activity's commentList. | -| *recordActivity*(Identity owner, java.lang.String type, java.lang.String title, java.lang.String body) | {{owner}} - the owner of the target stream for this activity, {{type}} is the type of activity (freeform), {{title}}, {{body}}| stored activity | Records an activity. | -| *recordActivity*(Identity owner, Activity activity) | {{owner}}, {{activity}} | stored activity | Saves an activity. | -| *addProcessor*(ActivityProcessor processor, Adds a new processor}} | {{processor}}, {{addProcessorPlugin}} | void | Adds a new activity processor. | -| *addProcessorPlugin*(BaseActivityProcessorPlugin plugin) | {{plugin}} | void | Adds a new processor plug-in. | -| *getActivitiesCount*(Identity owner) |{{owner}} | int | Gets the number of activity from a stream owner. | +| *saveActivity* (Identity owner, Activity activity) | {{owner}} - the owner of activity stream, {{activity}} - the activity which needs to be saved |Activity| Save an activity to the stream of a owner. Note that the Activity.userId will be set to the owner identity if not already set. | +| *getActivity* (java.lang.String activityId) | {{activityId}} - the id of activity | Activity | Get an activity by activity Id. | +| *deleteActivity* (java.lang.String activityId) | {{activityId}} - the id of activity | void | Delete an activity by Id. | +| *deleteComment* (java.lang.String activityId, java.lang.String commentId) | {{activityId}} - the id of activity, {{commentId}} - the id of comment | void | Delete comment by Id. | +| *getActivities* (Identity identity) | {{identity}} | List | Get the latest activities by identity with the default limit of 20 latest activities. | +| *getActivities* (Identity identity, long start, long limit) | {{identity}}, {{start}} - the offset index , {{limit}} | List | Get the latest activities by identity, specifying the start offset index and limit. | +| *getActivitiesOfConnections* (Identity ownerIdentity)| {{ownerIdentity}}| List| Get activities of connections from an identity. The activities are sorted by time. The result list is maximum 30 activities by default. (Since 1.1.1). | +| *getActivitiesOfConnections* (Identity ownerIdentity, int offset, int limit)|{{ownerIdentity, limit, offset}}| List |Get activities of connections from an identity by specifying offset and limit. The acivities are returned as a list that is sorted starting from the most recent activity. (Since 1.1.3).| +| *getActivitiesOfUserSpaces* (Identity ownerIdentity)| {{ownerIdentity}} | List | Get the activities from all user's spaces.| +| *getActivityFeed* (Identity identity)|{{identity}}|List|Get the activity feed of an identity. This feed is the combination of all the activities of his own activities, his connections' activities and his spaces' activities which are sorted by time. The latest activity is the first item in the activity list.| +| *saveActivity* (Activity activity) | {{activity}} - the activity which needs to be saved | activity | Save the activity into the stream for the activity's userId. | +| *saveComment* (Activity activity, Activity comment) | {{activity}}, {{comment}} | void | Save new or update comments to an activity comment which is an instance of Activity with mandatory properties: userId, title. | +| *saveLike* (Activity activity, Identity identity) | {{activity}}, {{identity}} | void | Save an identity of user who likes the activity. | +| *removeLike* (Activity activity, Identity identity) | {{activity}}, {{identity}} - the identity of user who unlikes the activity |void | Remove the like activity. Liked activity will be moved. | +| *getComments* (Activity activity) | {{activity}} | comments | Get an activity's commentList. | +| *recordActivity* (Identity owner, java.lang.String type, java.lang.String title, java.lang.String body) | {{owner}} - the owner of the target stream for this activity, {{type}} is the type of activity (freeform), {{title}}, {{body}}| stored activity | Record an activity. | +| *recordActivity* (Identity owner, Activity activity) | {{owner}}, {{activity}} | stored activity | Save an activity. | +| *addProcessor* (ActivityProcessor processor, Add a new processor}} | {{processor}}, {{addProcessorPlugin}} | void | Add a new activity processor. | +| *addProcessorPlugin* (BaseActivityProcessorPlugin plugin) | {{plugin}} | void | Add a new processor plug-in. | +| *getActivitiesCount* (Identity owner) |{{owner}} | int | Get the number of activity from a stream owner. | h1. IdentityManager {anchor:id=Developer_document.Java_APIs.Identity_Manager} || Method || Param || Return || Description || -| *registerIdentityProviders(IdentityProviderPlugin plugin)* | {{plugin}}| |Registers one or more IdentityProvider through an IdentityProviderPlugin | -| *getIdentity*(String id) | {{id}} can be a social GlobalId or a raw identity such as in Identity.getId() | null if nothing is found, or the Identity object | Gets the identity by id and to load his profile. | -| *getIdentity*(String id, boolean loadProfile) | {{id}} can be a social GlobalId or a raw identity such as in Identity.getId(), {{loadProfile}} - the value is true if the profile is loaded and false if not loaded | null if nothing is found, or the Identity object | Gets the identity by loading id of the profile optionally. | -| *deleteIdentity*(Identity identity)| {{identity}}| void |Deletes an identity. | -| *addIdentityProvider*(IdentityProvider idProvider)| {{idProvider}} is the id of provider | void | Adds the id of provider. | -| *getIdentitiesCount*(String providerId) | {{providerId}}|long |Gets the number of identities. | -| *getOrCreateIdentity*(java.lang.String providerId, java.lang.String remoteId) | {{providerId}} is the id of provider, {{remoteId}} is the remote id | identity | Gets the identity by a remote id. | -| *getOrCreateIdentity*(java.lang.String providerId, java.lang.String remoteId, boolean loadProfile) | {{providerId}} - referring to the name of the Identity provider, {{remoteId}} - the identifier that identify the identity in the specific identity provider, {{loadProfile}} is true when the profile is loaded | null if nothing is found, or the Identity object TODO improves the performance by specifying what needs to be loaded | Returns an Identity object that is specific to a special type. For example, if the type is Linked'In, the identifier will be the URL of profile or if it is a CS contact manager contact, it will be the UID of the contact. A new identity is created if it doesnot exist. | -| *getIdentitiesByProfileFilter*(java.lang.String providerId, ProfileFilter profileFilter) throws Exception | {{providerId}} is the id of provider, {{profileFilter}} is the filter of provider | the identities by the profile filter | Gets the identities by profile filter.| -| *getIdentitiesByProfileFilter*(java.lang.String providerId, ProfileFilter profileFilter, long offset, long limit) throws Exception | {{providerId, profileFilter, offset, limit,}} | List | Gets the identities by profile filter.| -| *getIdentitiesByProfileFilter*(ProfileFilter profileFilter) throws Exception | {{profileFilter}} - the profile filter | the identities by profile filter | Gets the identities by profile filter. | -| *getIdentitiesByProfileFilter*(ProfileFilter profileFilter, long offset, long limit) throws Exception|{{profileFilter, offset, limit}} |List |Gets the identities by profile filter. | -| *getIdentitiesFilterByAlphaBet*(java.lang.String providerId, ProfileFilter profileFilter) throws Exception | {{providerId}} is the id of provider, {{profileFilter}} is the profile filter | the identities filter by alphabet | Gets the identities filter by alpha bet. | -| *getIdentitiesFilterByAlphaBet*(String providerId, ProfileFilter profileFilter, long offset, long limit) throws Exception |{{providerId, profileFilter, offset, limit}} |List| Gets the identities filter by alpha bet by specifying offset and limit.| -| *getIdentitiesFilterByAlphaBet*(ProfileFilter profileFilter) throws Exception | {{profileFilter}} - the profile filter | the identities filter by alphabet | Gets the identities filter by alphabet. | -| *getIdentity*(java.lang.String providerId, java.lang.String remoteId, boolean loadProfile) | {{providerId}}, {{remoteId}}, {{loadProfile}} | Identity | Gets the identity. | -| *identityExisted*(java.lang.String providerId, java.lang.String remoteId) | {{providerId}}, {{remoteId}} | boolean | Checks if the identity is already existed or not. | -| *saveIdentity*(Identity identity) | {{identity}} is the identity | void | Saves the identity. | -| *saveProfile*(Profile profile)|{{profile}}|void|Saves a profile.| -| *updateAvatar*(Profile p) throws Exception | {{p - profile}} | void | Updates avatar. | -| *updateBasicInfo*(Profile p) throws Exception | {{p - profile}} | Profile | Updates basic info of a profile. | -| *updateContactSection*(Profile p)throws Exception | {{p - profile}} | void | Updates the contact section of a profile. | -| *updateExperienceSection*(Profile p) throws Exception| {{p - profile}} | void | Updates the experience section of a profile. | -| *updateHeaderSection*(Profile p)throws Exception | {{p - profile}} | void | Updates the header section of profile. | -| *getIdentities*(java.lang.String providerId) throws Exception | {{providerId}} is the id of provider | List| Gets the identity. | -| *getIdentities*(java.lang.String providerId, boolean loadProfile) | {{providerId}} is the id of provider, {{loadProfile}} is the loaded profile. |List | Gets the identities. | -| *getConnections*(Identity ownerIdentity) throws Exception| {{ownerIdentity}} | List | Gets connections of an identity | -| *getStorage*() | {{N/A}} | IdentityStorage| Gets the storage. | -| *setIdentityStorage*(IdentityStorage identityStorage) | {{identityStorage}} | void | Sets identityStorage. | -| *registerProfileListener*(ProfileListener listener)unregisterProfileListener |{{listener}} |void | Registers a profile listener. | -| *unregisterProfileListener*(ProfileListener listener) | {{listener}} | void | Unregisters a profile listener. | -| *addProfileListener*(ProfileListenerPlugin plugin) | {{plugin}} | void | Registers a profile listener component plug-in. | -| *getIdentityStorage*() | {{N/A}} | IdentityStorage | Gets identity storage. | +| *registerIdentityProviders (IdentityProviderPlugin plugin)* | {{plugin}}| |Register one or more IdentityProvider through an IdentityProviderPlugin | +| *getIdentity*(String id) | {{id}} can be a social GlobalId or a raw identity such as in Identity.getId() | null if nothing is found, or the Identity object | Get the identity by Id and to load his profile. | +| *getIdentity*(String id, boolean loadProfile) | {{id}} can be a social GlobalId or a raw identity such as in Identity.getId(), {{loadProfile}} - the value is true if the profile is loaded and false if not loaded | null if nothing is found, or the Identity object | Get the identity by loading Id of the profile optionally. | +| *deleteIdentity*(Identity identity)| {{identity}}| void |Delete an identity. | +| *addIdentityProvider* (IdentityProvider idProvider)| {{idProvider}} is the Id of provider | void | Add the Id of provider. | +| *getIdentitiesCount* (String providerId) | {{providerId}}|long |Get the number of identities. | +| *getOrCreateIdentity* (java.lang.String providerId, java.lang.String remoteId) | {{providerId}} is the Id of provider, {{remoteId}} is the remote Id | identity | Get the identity by a remote Id. | +| *getOrCreateIdentity* (java.lang.String providerId, java.lang.String remoteId, boolean loadProfile) | {{providerId}} - referring to the name of the Identity provider, {{remoteId}} - the identifier that identify the identity in the specific identity provider, {{loadProfile}} is true when the profile is loaded | null if nothing is found, or the Identity object TODO improves the performance by specifying what needs to be loaded | Return an Identity object that is specific to a special type. For example, if the type is Linked'In, the identifier will be the URL of profile or if it is a CS contact manager contact, it will be the UID of the contact. A new identity is created if it doesnot exist. | +| *getIdentitiesByProfileFilter* (java.lang.String providerId, ProfileFilter profileFilter) throws Exception | {{providerId}} is the id of provider, {{profileFilter}} is the filter of provider | the identities by the profile filter | Get the identities by profile filter.| +| *getIdentitiesByProfileFilter* (java.lang.String providerId, ProfileFilter profileFilter, long offset, long limit) throws Exception | {{providerId, profileFilter, offset, limit,}} | List | Get the identities by profile filter.| +| *getIdentitiesByProfileFilter* (ProfileFilter profileFilter) throws Exception | {{profileFilter}} - the profile filter | the identities by profile filter | Get the identities by profile filter. | +| *getIdentitiesByProfileFilter* (ProfileFilter profileFilter, long offset, long limit) throws Exception|{{profileFilter, offset, limit}} |List |Get the identities by profile filter. | +| *getIdentitiesFilterByAlphaBet* (java.lang.String providerId, ProfileFilter profileFilter) throws Exception | {{providerId}} is the id of provider, {{profileFilter}} is the profile filter | the identities filter by alphabet | Get the identities filter by alpha bet. | +| *getIdentitiesFilterByAlphaBet* (String providerId, ProfileFilter profileFilter, long offset, long limit) throws Exception |{{providerId, profileFilter, offset, limit}} |List| Get the identities filter by alpha bet by specifying offset and limit.| +| *getIdentitiesFilterByAlphaBet* (ProfileFilter profileFilter) throws Exception | {{profileFilter}} - the profile filter | the identities filter by alphabet | Get the identities filter by alphabet. | +| *getIdentity* (java.lang.String providerId, java.lang.String remoteId, boolean loadProfile) | {{providerId}}, {{remoteId}}, {{loadProfile}} | Identity | Get the identity. | +| *identityExisted* (java.lang.String providerId, java.lang.String remoteId) | {{providerId}}, {{remoteId}} | boolean | Check if the identity is already existed or not. | +| *saveIdentity* (Identity identity) | {{identity}} is the identity | void | Save the identity. | +| *saveProfile* (Profile profile)|{{profile}}|void|Save a profile.| +| *updateAvatar* (Profile p) throws Exception | {{p - profile}} | void | Update avatar. | +| *updateBasicInfo* (Profile p) throws Exception | {{p - profile}} | Profile | Update basic info of a profile. | +| *updateContactSection* (Profile p)throws Exception | {{p - profile}} | void | Update the contact section of a profile. | +| *updateExperienceSection* (Profile p) throws Exception| {{p - profile}} | void | Update the experience section of a profile. | +| *updateHeaderSection* (Profile p)throws Exception | {{p - profile}} | void | Update the header section of profile. | +| *getIdentities* (java.lang.String providerId) throws Exception | {{providerId}} is the id of provider | List| Get the identity. | +| *getIdentities* (java.lang.String providerId, boolean loadProfile) | {{providerId}} is the id of provider, {{loadProfile}} is the loaded profile. |List | Get the identities. | +| *getConnections* (Identity ownerIdentity) throws Exception| {{ownerIdentity}} | List | Get connections of an identity | +| *getStorage*() | {{N/A}} | IdentityStorage| Get the storage. | +| *setIdentityStorage* (IdentityStorage identityStorage) | {{identityStorage}} | void | Set identityStorage. | +| *registerProfileListener* (ProfileListener listener)unregisterProfileListener |{{listener}} |void | Register a profile listener. | +| *unregisterProfileListener* (ProfileListener listener) | {{listener}} | void | Unregister a profile listener. | +| *addProfileListener* (ProfileListenerPlugin plugin) | {{plugin}} | void | Register a profile listener component plug-in. | +| *getIdentityStorage*() | {{N/A}} | IdentityStorage | Get identity storage. | h1. RelationshipManager {anchor:id=Developer_document.Java_APIs.Relationship_manager} || Method || Param || Return || Description || -|*getRelationshipById*(String id) throws Exception|{{id}}|Relationship |Gets relationship the by id.| -|*invite*(Identity currIdentity, Identity requestedIdentity) throws Exception|{{currIdentity}} - The current identity, {{requestedIdentity}} - The requested identity}}|Relationship|Creates a connection invitation between two identities.| -|*confirm*(Relationship relationship) throws Exception|{{relationship}}|void|Marks a relationship as confirmed.| -|*deny*(Relationship relationship) throws Exception|{{relationship}}|void|Denies a relationship.| -|*remove*(Relationship relationship) throws Exception|{{relationship}}|void|Removes a relationship.| -|*ignore*(Relationship relationship) throws Exception|{{relationship}}|void |Marks a relationship as ignored.| -|*getPendingRelationships*(Identity identity) throws Exception |{{identity}}|List|Returns all the pending relationships of the identity, including sent and received relationships of the pending type.| -|*getPendingRelationships*(Identity identity, boolean toConfirm) throws Exception|{{identity, toConfirm}}|List|If toConfirm is true, it returns a list of the pending relationship received, but not confirmed, if toConfirm is false, it returns a list of the relationship sent, but not confirmed yet.| -|*getPendingRelationships*(Identity currIdentity, List identities, boolean toConfirm) throws Exception|{{currIdentity}} - the current identity, {{identities}} - the identities, {{toConfirm}} - |List |Gets the pending relations in two cases:{example}{example} - If toConfirm is true, it returns a list of the pending relationships received, but not confirmed.{example}{example} - If toConfirm is false, it returns a list of the relationships sent, but not confirmed yet.| -|*getContacts*(Identity currIdentity, List identities) throws Exception|{{currIdentity}} - the current identity, {{identities}} - the identities, |List |Gets contacts that matches the search result.| -|*getContacts*(Identity identity) throws Exception|{{identity}}|List|Gets the contacts of the identity.| -|*getAllRelationships*(Identity identity) throws Exception|{{identity }}|List |Returns all the relationships associated with a given identity.| -|*getRelationshipsByIdentityId*(String id) throws Exception|{{id}}|List|Returns all the relationships associated with a given identityId.| -|*getIdentities*(Identity id) throws Exception|{{id}}|List |Returns all the identities associated with a given identity and checks whether the relation has been validated or not.| -|*create*(Identity sender, Identity receiver)|{{sender, receiver}}|Relationship |Creates the relationship.| -|*saveRelationship*(Relationship relationship) throws Exception|{{relationship}}|void|Saves the relationship.| -|*updateRelationshipCached*(Relationship relationship)|{{relationship}}|void|Updates the relationship cached.| -|*findRoute*(Identity sender, Identity receiver) throws NotSupportedException|{{sender,receiver}}|Relationship|Finds a route.| -|*findRelationships*(Identity ownerIdentity, Relationship.Type relationshipType) throws Exception|{{ownerIdentity, relationshipType}}|List | Finds all identities having relationshipType with the ownerIdentity.(Since 1.1.2).| -|*getRelationshipStatus*(Relationship rel, Identity id)|{{rel, id }}|Relationship.Type |Gets the relationship type of the relationship with the identity.| -|*getConnectionStatus*(Identity fromIdentity, Identity toIdentity) throws Exception|{{fromIdentity, toIdentity}}|Relationship.Type |Gets the connection type between two identities. (Since 1.1.1).| -|*registerListener*(RelationshipListener listener)|{{listener}}|void|Registers the RelationshipListener.| -|*unregisterListener*(RelationshipListener listener)|{{listener}}|void|Removes the RelationshipListener.| -|*addListenerPlugin*(RelationshipListenerPlugin plugin)|{{plugin}}|void| Adds the plugin.| +|*getRelationshipById* (String id) throws Exception|{{id}}|Relationship |Get relationship the by Id.| +|*invite* (Identity currIdentity, Identity requestedIdentity) throws Exception|{{currIdentity}} - The current identity, {{requestedIdentity}} - The requested identity}}|Relationship|Create a connection invitation between two identities.| +|*confirm* (Relationship relationship) throws Exception|{{relationship}}|void|Mark a relationship as confirmed.| +|*deny* (Relationship relationship) throws Exception|{{relationship}}|void|Deny a relationship.| +|*remove* (Relationship relationship) throws Exception|{{relationship}}|void|Remove a relationship.| +|*ignore* (Relationship relationship) throws Exception|{{relationship}}|void |Mark a relationship as ignored.| +|*getPendingRelationships* (Identity identity) throws Exception |{{identity}}|List|Return all the pending relationships of the identity, including sent and received relationships of the pending type.| +|*getPendingRelationships* (Identity identity, boolean toConfirm) throws Exception|{{identity, toConfirm}}|List|If toConfirm is true, it returns a list of the pending relationship received, but not confirmed, if toConfirm is false, it returns a list of the relationship sent, but not confirmed yet.| +|*getPendingRelationships* (Identity currIdentity, List identities, boolean toConfirm) throws Exception|{{currIdentity}} - the current identity, {{identities}} - the identities, {{toConfirm}} - |List |Get the pending relations in two cases:{example}{example} - If toConfirm is true, it returns a list of the pending relationships received, but not confirmed.{example}{example} - If toConfirm is false, it returns a list of the relationships sent, but not confirmed yet.| +|*getContacts* (Identity currIdentity, List identities) throws Exception|{{currIdentity}} - the current identity, {{identities}} - the identities, |List |Get contacts that matches the search result.| +|*getContacts* (Identity identity) throws Exception|{{identity}}|List|Get the contacts of the identity.| +|*getAllRelationships* (Identity identity) throws Exception|{{identity }}|List |Return all the relationships associated with a given identity.| +|*getRelationshipsByIdentityId* (String id) throws Exception|{{id}}|List|Return all the relationships associated with a given identityId.| +|*getIdentities* (Identity id) throws Exception|{{id}}|List |Return all the identities associated with a given identity and checks whether the relation has been validated or not.| +|*create* (Identity sender, Identity receiver)|{{sender, receiver}}|Relationship |Create the relationship.| +|*saveRelationship* (Relationship relationship) throws Exception|{{relationship}}|void|Save the relationship.| +|*updateRelationshipCached* (Relationship relationship)|{{relationship}}|void|Update the relationship cached.| +|*findRoute* (Identity sender, Identity receiver) throws NotSupportedException|{{sender,receiver}}|Relationship|Find a route.| +|*findRelationships* (Identity ownerIdentity, Relationship.Type relationshipType) throws Exception|{{ownerIdentity, relationshipType}}|List | Find all identities having relationshipType with the ownerIdentity.(Since 1.1.2).| +|*getRelationshipStatus* (Relationship rel, Identity id)|{{rel, id }}|Relationship.Type |Get the relationship type of the relationship with the identity.| +|*getConnectionStatus* (Identity fromIdentity, Identity toIdentity) throws Exception|{{fromIdentity, toIdentity}}|Relationship.Type |Get the connection type between two identities. (Since 1.1.1).| +|*registerListener* (RelationshipListener listener)|{{listener}}|void|Register the RelationshipListener.| +|*unregisterListener* (RelationshipListener listener)|{{listener}}|void|Remove the RelationshipListener.| +|*addListenerPlugin* (RelationshipListenerPlugin plugin)|{{plugin}}|void| Add the plugin.| h1. SpaceService {anchor:id=Developer_document.JavaAPIs.Java_APIs.SpaceService} || Method || Param || Return || Description || -|*getAllSpaces*() throws SpaceException|{{N/A}}|List - list of spaces in Social|Gets all spaces in Social.| -|*getSpaceByName*(String spaceName) throws SpaceException|{{spaceName}}|Space|Gets a space by its space name.| -|*getSpacesByFirstCharacterOfName*(String firstCharacterOfName) throws SpaceException|{{firstCharacterOfName}}| List - all spaces which have first character of name matched the input string.|Gets all spaces has the name starting with the input character.| -|*getSpacesBySearchCondition*(String condition) throws Exception|{{condition}} - the input condition| List - a list of spaces|Gets all spaces which has the name or the description that matches the input condition.| -|*getSpaceByGroupId*(String groupId) throws SpaceException,|{{groupId}} - the group id of the space| Space|Gets a space by its group id. | -|*getSpaceById*(String spaceId) throws SpaceException|{{spaceId}} - Id of that space|Space - space with the id specified|Gets a space by its id.| -|*getSpaceByUrl*(String spaceUrl) throws SpaceException|{{spaceUrl}} - url of space|Space - the space with string url specified|Gets a space by its url.| -|*getSpaces*(String userId) throws SpaceException|{{userId}} - Id of the user| List - all spaces of a user in which the user is a member|Gets spaces of a user in which that user is a member.| -|*getAccessibleSpaces*(String userId) throws SpaceException|{{userId}}| List - list of spaces|Gets spaces of a user which that user has the access permission| -|*getEditableSpaces*(String userId) throws SpaceException|{{userId}}| List - list of spaces|Gets spaces of a user which that user has the edit permission.| -|*getInvitedSpaces*(String userId) throws SpaceException|{{userId}}| List - spaces list of all user's invited spaces|Gets a user's invited spaces and that user can accept or deny the request.| -|*getPublicSpaces*(String userId) throws SpaceException|{{userId - Id of user}}|List - spaces list in which the user can request to join|Gets a user's public spaces and that user can request to join.| -|*getPendingSpaces*(String userId) throws SpaceException|{{userId}}| List - spaces list in which the user can revoke that request|Gets a user's pending spaces and that the user can revoke that request.| -|*createSpace*(Space space, String creator) throws SpaceException|{{space, creator}}|Space - the created space|Creates a new space by creating a new group.This new group will be under */Spaces* node.This is shorthand for calling createSpace(space, creator, null).| -|*createSpace*(Space space, String creator, String groupId) throws SpaceException|{{space, creator, groupId}} - if groupId == null: create a new space by creating a new group|Space|Creates a new space from an existing group.| -|*saveSpace*(Space space, boolean isNew) throws SpaceException|{{space - space is saved, isNew}} - true if creating a new space, otherwise, update an existing space.|void|Saves a new space or updates a space.| -|*deleteSpace*(Space space) throws SpaceException|{{space - the space is deleted}}|void|Deletes a space. When deleting a space, all of its page navigations and its group will be deleted.| -|*deleteSpace*(String spaceId) throws SpaceException|{{ spaceId}}|void|Deletes a space by its id.| -|*initApp*(Space space) throws SpaceException|{{space}}|void|Initializes default applications in a space. Deprecated, use *initApps*(Space) instead.| -|*initApps*(Space space) throws SpaceException|{{space}}|void|Initializes default applications in a space. Set *space.homeNodeApp* from the configuration file to be the root page of that space node. When removing a space, make sure to call *deInitApps*(Space) and then deleteSpace(Space) or *deleteSpace*(String)| -|*deInitApps*(Space space) throws SpaceException|{{space }}| void |De-initializes the applications of a space.Make sure to call this method before *deleteSpace*(Space) or *deleteSpace*(String). Otherwise, the space is deleted but its pages and navigation still exists.| -|*addMember*(Space space, String userId) throws SpaceException|{{}}|void|Adds a user to a space, the user will get the "member" role in a space.| -|*addMember*(String spaceId, String userId) throws SpaceException|{{spaceId, userId}}|void|Adds a user to a space, the user will get the "member" role in a space.| -|*removeMember*(Space space, String userId) throws SpaceException|{{space, userId}}|void|Removes a member from a space. If the member is the only leader of that space, the member removed is not allowed and throws *SpaceException* with Code = USER_ONLY_LEADER.| -|*removeMember*?(String spaceId, String userId) throws SpaceException|{{spaceId, userId}}|void|Removes a member from a space.| -|*getMembers*(Space space) throws SpaceException|{{space}}| List - a list of the space members|Gets a list of the space members from a space.| -|*getMembers*(String spaceId) throws SpaceException|{{spaceId}}| List - a list of the space members| Gets a list of the space members from a space.| -|*setLeader*(Space space, String userId, boolean isLeader) throws SpaceException|{{space, userId, isLeader }}|void|Sets a member of a space as a manager.| -|*setLeader*(String spaceId, String userId, boolean isLeader) throws SpaceException|{{spaceId, userId, isLeader}}|void|Sets a member of a space as a manager.| -|*isLeader*(Space space, String userId) throws SpaceException|{{space, userId}}|boolean - true if that the user is a leader, otherwise, false|Checks whether a user is a space's leader or not.| -|*isLeader*(String spaceId, String userId) throws SpaceException|{{spaceId, userId}}|boolean - true if that user is a leader, otherwise, false|Checks whether a user is a space's leader or not.| -|*isOnlyLeader*(Space space, String userId) throws SpaceException|{{space, userId}}|boolean - true if that user is the only leader of the space, otherwise, false|Checks whether a user is the only leader of a space or not.| -|*isOnlyLeader*(String spaceId, String userId) throws SpaceException|{{spaceId, userId}}|boolean|Checks whether a user is the only leader of a space or not.| -|*isMember*(Space space, String userId) throws SpaceException|{{space, userId}}| boolean - true if that user is a member, otherwise, false|Checks whether a user is a space's member or not.| -|*isMember*(String spaceId, String userId) throws SpaceException|{{spaceId, userId, }}| boolean - true if that user is a member, otherwise,false|Checks whether a user is a space's member or not.| -|*hasAccessPermission*(Space space, String userId) throws SpaceException|{{space, userId}}|boolean - true If the user is root or the space's member.|Checks if a user can access a space or not.| -|*hasAccessPermission*(String spaceId, String userId) throws SpaceException|{{spaceId, userId}}|boolean - true If the user is root or the space's member|Checks if a user can access a space or not.| -|*hasEditPermission*(Space space, String userId) throws SpaceException|{{space, userId}}|boolen - true If the user is root or the space's manager|Checks if a user can have the edit permission of a space or not.| -|*hasEditPermission*(String spaceId, String userId) throws SpaceException|{{spaceId, userId}}|boolen - true If user is root or the space's manager|Checks if a user can have the edit permission of a space or not.| -|*isInvited*(Space space, String userId) throws SpaceException|{{space, userId}}|boolen - true if that user is in the invited list, otherwise, false|Checks if a user is in the invited list of a space or not.| -|*isInvited*(String spaceId, String userId) throws SpaceException|{{spaceId, userId}}|boolen - true if the user is in the invited list, otherwise, false|Checks if a user is in the invited list of a space or not.| -|*isPending*(Space space, String userId) throws SpaceException|{{space, userId}}|boolen - true if that user is in the pending list, otherwise, false|Checks if a user is in the pending list of a space or not.| -|*installApplication*(String spaceId, String appId) throws SpaceException|{{spaceId, appId}}|void|Installs an application to a space.| -|*installApplication*(Space space, String appId) throws SpaceException|{{space, appId}}|void | Installs an application to a space| -|*activateApplication*(Space space, String appId) throws SpaceException|{{space, appId}}| void| Activates an installed application in a space.| -|*activateApplication*(String spaceId, String appId) throws SpaceException|{{spaceId, appId}}|void|Activates an installed application in a space.| -|*deactivateApplication*(Space space, String appId) throws SpaceException|{{space, appId}}|void |Deactivates an installed application in a space.| -|*deactivateApplication*(String spaceId, String appId) throws SpaceException|{{spaceId, appId}}|void|Deactivates an installed application in a space.| -|*removeApplication*(Space space, String appId, String appName) throws SpaceException|{{space, appId, appName}}| void|Removes an installed application from a space.| -|*removeApplication*(String spaceId, String appId, String appName) throws SpaceException|{{space, appId, appName}}|void|Removes an installed application from a space.| -|*requestJoin*(Space space, String userId) throws SpaceException|{{space, userid}}| void |Requests a user to join a space, adds that user to the pending list of the space.| -|*requestJoin*(String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Requests a user to join a space, adds that user to the pending list of the space.| -|*revokeRequestJoin*(Space space, String userId) throws SpaceException|{{space, userid}}|void|Revokes a join request after users request to join a group and is in the pending status.| -|*revokeRequestJoin*(String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Revokes a request to join a space.| -|*inviteMember*(Space space, String userId) throws SpaceException|{{space, userid}}| void |Invites a userId to become a member of a space.| -|*inviteMember*(String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Invites a userId to a be member of a space.| -|*revokeInvitation*(Space space, String userId) throws SpaceException|{{space, userid}}|void|Revokes an invitation. Removes a user from the invited member list of the space.| -|*revokeInvitation*(String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Revokes an invitation. Removes a user from the invited member list of the space.| -|*acceptInvitation*(Space space, String userId) throws SpaceException|{{space, userid}}|void|Accepts an invitation and moves a user from the invited list to the member list.| -|*acceptInvitation*(String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Accepts an invitation and moves a user from the invited list to the member list.| -|*denyInvitation*(Space space, String userId) throws SpaceException|{{space, userid}}|void|Denies an invitation and removes a user from the invited list.| -|*denyInvitation*(String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Denies an invitation and removes a user from the invited list.| -|*validateRequest*(Space space, String userId) throws SpaceException|{{space, userid}}|void|Validates a request and moves a user from the pending list to the member list.| -|*validateRequest*(String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Validates a request and moves a user from the pending list to the member list.| -|*declineRequest*(Space space, String userId) throws SpaceException|{{space, userid}}|void|Declines a request and removes a user from the pending list.| -|*declineRequest*(String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Declines a request and removes a user from the pending list.| -|*registerSpaceLifeCycleListener*(SpaceLifeCycleListener listener|{{listener}}|void|Registers a space lifecycle listener.| -|*unregisterSpaceLifeCycleListener*(SpaceLifeCycleListener listener)|{{listener}}|void|Unregisters a space lifecycle listener.| -|*setPortletsPrefsRequired*(PortletPreferenceRequiredPlugin portletPrefsRequiredPlugin)|{{portletPrefsRequiredPlugin}}|void| Sets the portlet preferences got from the plug-in configuration.| -|*getPortletsPrefsRequired*()|{{N/A}}|{{{String[]}}}|Gets the portlet preferences required to use in creating the portlet application.| -|*setSpaceApplicationConfigPlugin*(SpaceApplicationConfigPlugin spaceApplicationConfigPlugin)|{{SpaceApplicationConfigPlugin}}|void|Sets configuration plugin for initializing applications when creating a new space. (Since 1.1.3).| -|*getSpaceApplicationConfigPlugin*()|{{N/A}}|SpaceApplicationConfigPlugin|Gets the configuration of applications to be initialized when creating a new space. (Since 1.1.3).| +|*getAllSpaces*() throws SpaceException|{{N/A}}|List - list of spaces in Social|Get all spaces in Social.| +|*getSpaceByName* (String spaceName) throws SpaceException|{{spaceName}}|Space|Get a space by its space name.| +|*getSpacesByFirstCharacterOfName* (String firstCharacterOfName) throws SpaceException|{{firstCharacterOfName}}| List - all spaces which have first character of name matched the input string.|Get all spaces has the name starting with the input character.| +|*getSpacesBySearchCondition* (String condition) throws Exception|{{condition}} - the input condition| List - a list of spaces|Get all spaces which has the name or the description that matches the input condition.| +|*getSpaceByGroupId* (String groupId) throws SpaceException,|{{groupId}} - the group Id of the space| Space|Get a space by its group Id. | +|*getSpaceById* (String spaceId) throws SpaceException|{{spaceId}} - Id of that space|Space - space with the id specified|Get a space by its Id.| +|*getSpaceByUrl* (String spaceUrl) throws SpaceException|{{spaceUrl}} - url of space|Space - the space with string url specified|Get a space by its URL.| +|*getSpaces* (String userId) throws SpaceException|{{userId}} - Id of the user| List - all spaces of a user in which the user is a member|Get spaces of a user in which that user is a member.| +|*getAccessibleSpaces* (String userId) throws SpaceException|{{userId}}| List - list of spaces|Get spaces of a user which that user has the access permission| +|*getEditableSpaces* (String userId) throws SpaceException|{{userId}}| List - list of spaces|Get spaces of a user which that user has the edit permission.| +|*getInvitedSpaces* (String userId) throws SpaceException|{{userId}}| List - spaces list of all user's invited spaces|Get a user's invited spaces and that user can accept or deny the request.| +|*getPublicSpaces* (String userId) throws SpaceException|{{userId - Id of user}}|List - spaces list in which the user can request to join|Get a user's public spaces and that user can request to join.| +|*getPendingSpaces* (String userId) throws SpaceException|{{userId}}| List - spaces list in which the user can revoke that request|Get a user's pending spaces and that the user can revoke that request.| +|*createSpace* (Space space, String creator) throws SpaceException|{{space, creator}}|Space - the created space|Create a new space by creating a new group.This new group will be under */Spaces* node.This is shorthand for calling createSpace(space, creator, null).| +|*createSpace* (Space space, String creator, String groupId) throws SpaceException|{{space, creator, groupId}} - if groupId == null: create a new space by creating a new group|Space|Create a new space from an existing group.| +|*saveSpace* (Space space, boolean isNew) throws SpaceException|{{space - space is saved, isNew}} - true if creating a new space, otherwise, update an existing space.|void|Save a new space or updates a space.| +|*deleteSpace* (Space space) throws SpaceException|{{space - the space is deleted}}|void|Delete a space. When deleting a space, all of its page navigations and its group will be deleted.| +|*deleteSpace* (String spaceId) throws SpaceException|{{ spaceId}}|void|Delete a space by its Id.| +|*initApp* (Space space) throws SpaceException|{{space}}|void|Initialize default applications in a space. Deprecated, use *initApps*(Space) instead.| +|*initApps* (Space space) throws SpaceException|{{space}}|void|Initialize default applications in a space. Set *space.homeNodeApp* from the configuration file to be the root page of that space node. When removing a space, make sure to call *deInitApps*(Space) and then deleteSpace(Space) or *deleteSpace*(String)| +|*deInitApps* (Space space) throws SpaceException|{{space }}| void |De-initialize the applications of a space. Make sure to call this method before *deleteSpace*(Space) or *deleteSpace*(String). Otherwise, the space is deleted but its pages and navigation still exists.| +|*addMember* (Space space, String userId) throws SpaceException|{{}}|void|Add a user to a space, the user will get the "member" role in a space.| +|*addMember* (String spaceId, String userId) throws SpaceException|{{spaceId, userId}}|void|Add a user to a space, the user will get the "member" role in a space.| +|*removeMember* (Space space, String userId) throws SpaceException|{{space, userId}}|void|Remove a member from a space. If the member is the only leader of that space, the member removed is not allowed and throws *SpaceException* with Code = USER_ONLY_LEADER.| +|*removeMember*? (String spaceId, String userId) throws SpaceException|{{spaceId, userId}}|void|Remove a member from a space.| +|*getMembers* (Space space) throws SpaceException|{{space}}| List - a list of the space members|Get a list of the space members from a space.| +|*getMembers* (String spaceId) throws SpaceException|{{spaceId}}| List - a list of the space members| Get a list of the space members from a space.| +|*setLeader* (Space space, String userId, boolean isLeader) throws SpaceException|{{space, userId, isLeader }}|void|Set a member of a space as a manager.| +|*setLeader* (String spaceId, String userId, boolean isLeader) throws SpaceException|{{spaceId, userId, isLeader}}|void|Set a member of a space as a manager.| +|*isLeader* (Space space, String userId) throws SpaceException|{{space, userId}}|boolean - true if that the user is a leader, otherwise, false|Check whether a user is a space's leader or not.| +|*isLeader* (String spaceId, String userId) throws SpaceException|{{spaceId, userId}}|boolean - true if that user is a leader, otherwise, false|Check whether a user is a space's leader or not.| +|*isOnlyLeader* (Space space, String userId) throws SpaceException|{{space, userId}}|boolean - true if that user is the only leader of the space, otherwise, false|Check whether a user is the only leader of a space or not.| +|*isOnlyLeader* (String spaceId, String userId) throws SpaceException|{{spaceId, userId}}|boolean|Check whether a user is the only leader of a space or not.| +|*isMember* (Space space, String userId) throws SpaceException|{{space, userId}}| boolean - true if that user is a member, otherwise, false|Check whether a user is a space's member or not.| +|*isMember* (String spaceId, String userId) throws SpaceException|{{spaceId, userId, }}| boolean - true if that user is a member, otherwise,false|Check whether a user is a space's member or not.| +|*hasAccessPermission* (Space space, String userId) throws SpaceException|{{space, userId}}|boolean - true If the user is root or the space's member.|Check if a user can access a space or not.| +|*hasAccessPermission* (String spaceId, String userId) throws SpaceException|{{spaceId, userId}}|boolean - true If the user is root or the space's member|Check if a user can access a space or not.| +|*hasEditPermission* (Space space, String userId) throws SpaceException|{{space, userId}}|boolen - true If the user is root or the space's manager|Check if a user can have the edit permission of a space or not.| +|*hasEditPermission* (String spaceId, String userId) throws SpaceException|{{spaceId, userId}}|boolen - true If user is root or the space's manager|Check if a user can have the edit permission of a space or not.| +|*isInvited* (Space space, String userId) throws SpaceException|{{space, userId}}|boolen - true if that user is in the invited list, otherwise, false|Check if a user is in the invited list of a space or not.| +|*isInvited* (String spaceId, String userId) throws SpaceException|{{spaceId, userId}}|boolen - true if the user is in the invited list, otherwise, false|Check if a user is in the invited list of a space or not.| +|*isPending* (Space space, String userId) throws SpaceException|{{space, userId}}|boolen - true if that user is in the pending list, otherwise, false|Check if a user is in the pending list of a space or not.| +|*installApplication* (String spaceId, String appId) throws SpaceException|{{spaceId, appId}}|void|Install an application to a space.| +|*installApplication* (Space space, String appId) throws SpaceException|{{space, appId}}|void | Install an application to a space| +|*activateApplication* (Space space, String appId) throws SpaceException|{{space, appId}}| void| Activate an installed application in a space.| +|*activateApplication* (String spaceId, String appId) throws SpaceException|{{spaceId, appId}}|void|Activate an installed application in a space.| +|*deactivateApplication* (Space space, String appId) throws SpaceException|{{space, appId}}|void |Deactivate an installed application in a space.| +|*deactivateApplication* (String spaceId, String appId) throws SpaceException|{{spaceId, appId}}|void|Deactivate an installed application in a space.| +|*removeApplication* (Space space, String appId, String appName) throws SpaceException|{{space, appId, appName}}| void|Remove an installed application from a space.| +|*removeApplication* (String spaceId, String appId, String appName) throws SpaceException|{{space, appId, appName}}|void|Remove an installed application from a space.| +|*requestJoin* (Space space, String userId) throws SpaceException|{{space, userid}}| void |Request a user to join a space, add that user to the pending list of the space.| +|*requestJoin* (String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Request a user to join a space, add that user to the pending list of the space.| +|*revokeRequestJoin* (Space space, String userId) throws SpaceException|{{space, userid}}|void|Revoke a join request after users request to join a group and is in the pending status.| +|*revokeRequestJoin* (String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Revoke a request to join a space.| +|*inviteMember* (Space space, String userId) throws SpaceException|{{space, userid}}| void |Invite a userId to become a member of a space.| +|*inviteMember* (String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Invite a userId to a be member of a space.| +|*revokeInvitation* (Space space, String userId) throws SpaceException|{{space, userid}}|void|Revoke an invitation. Remove a user from the invited member list of the space.| +|*revokeInvitation* (String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Revoke an invitation. Remove a user from the invited member list of the space.| +|*acceptInvitation* (Space space, String userId) throws SpaceException|{{space, userid}}|void|Accept an invitation and moves a user from the invited list to the member list.| +|*acceptInvitation* (String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Accept an invitation and moves a user from the invited list to the member list.| +|*denyInvitation* (Space space, String userId) throws SpaceException|{{space, userid}}|void|Deny an invitation and removes a user from the invited list.| +|*denyInvitation* (String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Deny an invitation and removes a user from the invited list.| +|*validateRequest* (Space space, String userId) throws SpaceException|{{space, userid}}|void|Validate a request and moves a user from the pending list to the member list.| +|*validateRequest* (String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Validate a request and moves a user from the pending list to the member list.| +|*declineRequest* (Space space, String userId) throws SpaceException|{{space, userid}}|void|Decline a request and removes a user from the pending list.| +|*declineRequest* (String spaceId, String userId) throws SpaceException|{{spaceId, userid}}|void|Decline a request and removes a user from the pending list.| +|*registerSpaceLifeCycleListener* (SpaceLifeCycleListener listener|{{listener}}|void|Register a space lifecycle listener.| +|*unregisterSpaceLifeCycleListener* (SpaceLifeCycleListener listener)|{{listener}}|void|Unregister a space lifecycle listener.| +|*setPortletsPrefsRequired* (PortletPreferenceRequiredPlugin portletPrefsRequiredPlugin)|{{portletPrefsRequiredPlugin}}|void| Set the portlet preferences got from the plug-in configuration.| +|*getPortletsPrefsRequired* ()|{{N/A}}|{{{String[]}}}|Get the portlet preferences required to use in creating the portlet application.| +|*setSpaceApplicationConfigPlugin* (SpaceApplicationConfigPlugin spaceApplicationConfigPlugin)|{{SpaceApplicationConfigPlugin}}|void|Set configuration plugin for initializing applications when creating a new space. (Since 1.1.3).| +|*getSpaceApplicationConfigPlugin* ()|{{N/A}}|SpaceApplicationConfigPlugin|Get the configuration of applications to be initialized when creating a new space. (Since 1.1.3).| diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Javascript_APIs.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Javascript_APIs.wiki index be06f71890..a49d46e51c 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Javascript_APIs.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Javascript_APIs.wiki @@ -1 +1 @@ -All references for Opensocial Javascript APIs can be viewed [here|http://wiki.opensocial.org/index.php?title=JavaScript_API_Reference] +All references for Opensocial Javascript APIs can be viewed [here|http://wiki.opensocial.org/index.php?title=JavaScript_API_Reference]. diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Overrideable_components.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Overrideable_components.wiki index 468e1028c4..5aec4cadb4 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Overrideable_components.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Overrideable_components.wiki @@ -1,4 +1,4 @@ -There are 2 components in Social that can be overridden: Space Application Handler & Space Service +There are 2 components in eXo Social that can be overridden: Space Application Handler & Space Service. * *Space Application Handler* {code:xml} diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/REST_APIs.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/REST_APIs.wiki index 4d6d769c4c..ac9b9ce229 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/REST_APIs.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/REST_APIs.wiki @@ -2,18 +2,18 @@ h1. Activities REST service {anchor:id=SOCref.Developer_references.ActivitiesRESTService} || Name || Service URL || Location || Description || -| *ActivitiesRestService* | {noformat}{restContextName}/{portalName}/social/activities{noformat} | *Maven groupId*: org.exoplatform.social {example}{example} *ArtifactId*: exo.social.component.service |Provides REST services for activity applications, such as like/unlike, comment, delete activity.| +| *ActivitiesRestService* | {noformat}{restContextName}/ {portalName}/social/activities{noformat} | *Maven groupId*: org.exoplatform.social {example}{example} *ArtifactId*: exo.social.component.service |Provide REST services for activity applications, such as like/unlike, comment, delete activity.| * *API*: || Name || Service URL Endpoint || Parameters || Expected Values|| Description || -| *destroyActivity* | {noformat}{restContextName}/{portalName}/social/activities/destroy/{activityId}.{format}{noformat} | portalName{example} activityId{example} format | String{example} String{example} String: json or xml | Destroys an activity and returns the json/xml format. | -| *showLikes* | {noformat}{restContextName}/{portalName}/social/activities/{activityId}/likes/show.{format}{noformat} |portalName{example} activityId{example} format| String{example} String {example} String: json or xml| Shows the list of identityId who likes this activity and returns the json/xml format. | -| *updateLike* | {noformat}{restContextName}/{portalName}/social/activities/{activityId}/likes/update.{format}{noformat} |portalName{example}{example} activityId{example}{example}format | String{example}{example} String{example}{example} String: json or xml| Updates the list of likes by the json/xml format. | -| *destroyLike* | {noformat}{restContextName}/{portalName}/social/activities/{activityId}/likes/destroy/{identity}.{format}{noformat} | portalName{example}{example} activityId{example}{example} identityId{example}{example} format |String{example}{example} String {example}{example} String {example}{example} String: json or xml |Destroys *like* by identityId and returns the json/xml format.| -| *showComments* | {noformat}{restContextName}/{portalName}/social/activities/{activityId}/comments/show.{format}{noformat}| portalName{example}activityId {example} format| String{example}String {example}String: json or xml| Shows the comment list of an activity by the json/xml format. | -| *updateComment* | {noformat}{restContextName}/{portalName}/social/activities/{activityId}/comments/update.{format}{noformat} | portalName{example} activityId {example} format | String{example} String{example}String: json or xml | Updates the comment of an acitivity by the json/xml format. | -| *destroyComment* | {noformat}{restContextName}/{portalName}/social/activities/{activityId}/comments/destroy/{commentId}.{format}{noformat} | portalName{example}{example}activityId {example}{example} commentId{example}{example} format| String{example}{example} String{example}{example} String{example}{example} String: json or xml | Destroys the comment of an identity and returns the json/xml format. | +| *destroyActivity* | {noformat}{restContextName}/ {portalName}/social/activities/destroy/{activityId}.{format}{noformat} | portalName{example} activityId{example} format | String{example} String{example} String: json or xml | Destroy an activity and Return the json/xml format. | +| *showLikes* | {noformat}{restContextName}/ {portalName}/social/activities/{activityId}/likes/show.{format}{noformat} |portalName{example} activityId{example} format| String{example} String {example} String: json or xml| Show the list of identityId who likes this activity and Return the json/xml format. | +| *updateLike* | {noformat}{restContextName}/ {portalName}/social/activities/{activityId}/likes/update.{format}{noformat} |portalName{example}{example} activityId{example}{example}format | String{example}{example} String{example}{example} String: json or xml| Update the list of likes by the json/xml format. | +| *destroyLike* | {noformat}{restContextName}/ {portalName}/social/activities/{activityId}/likes/destroy/{identity}.{format}{noformat} | portalName{example}{example} activityId{example}{example} identityId{example}{example} format |String{example}{example} String {example}{example} String {example}{example} String: json or xml |Destroy *like* by identityId and Return the json/xml format.| +| *showComments* | {noformat}{restContextName}/ {portalName}/social/activities/{activityId}/comments/show.{format}{noformat}| portalName{example}activityId {example} format| String{example}String {example}String: json or xml| Show the comment list of an activity by the json/xml format. | +| *updateComment* | {noformat}{restContextName}/ {portalName}/social/activities/{activityId}/comments/update.{format}{noformat} | portalName{example} activityId {example} format | String{example} String{example}String: json or xml | Update the comment of an acitivity by the json/xml format. | +| *destroyComment* | {noformat}{restContextName}/ {portalName}/social/activities/{activityId}/comments/destroy/{commentId}.{format}{noformat} | portalName{example}{example}activityId {example}{example} commentId{example}{example} format| String{example}{example} String{example}{example} String{example}{example} String: json or xml | Destroy the comment of an identity and Return the json/xml format. | Example: @@ -24,11 +24,11 @@ Example: h1. Apps REST service {anchor:id=SOCref.Developer_references.AppsRESTService} || Name || Service URL || Location ||Description || -| *AppsRestService* | {noformat}{restContextName}/social/apps{noformat} | *Maven groupId*: org.exoplatform.social {example}{example} *ArtifactId*: exo.social.component.service |Provides REST services for showing the application list from the application registry gadget.| +| *AppsRestService* | {noformat}{restContextName}/social/ apps{noformat} | *Maven groupId*: org.exoplatform.social {example}{example} *ArtifactId*: exo.social.component.service |Provide REST services for showing the application list from the application registry gadget.| * *API*: || Name || Service URL Endpoint || Parameters || Expected Values||Description || -| *showApps* | {noformat}{restContextName}/social/apps/show.{format}{noformat} | format| String: json or xml |Shows applications by the json/xml format. | +| *showApps* | {noformat}{restContextName} /social/apps/show.{format}{noformat} | format| String: json or xml |Show applications by the json/xml format. | Example: @@ -36,11 +36,11 @@ http://localhost:9090/rest-socialdemo/apps/show.json h1. Identity REST service {anchor:id=SOCref.Developer_references.IdentityRESTService} || Name || Service URL || Location|| Description || -| *IdentityRestService* | {noformat}{restContextName}/{portalName}/social/identity/{username}/id{noformat} |*Maven groupId*: org.exoplatform.social {example}{example} *ArtifactId*: exo.social.component.service| Gets identityId by the username. | +| *IdentityRestService* | {noformat}{restContextName}/ {portalName}/social/ identity/{username}/id{noformat} |*Maven groupId*: org.exoplatform.social {example}{example} *ArtifactId*: exo.social.component.service| Get identityId by the username. | * *API*: || Name || Service URL Endpoint || Parameters || Expected Values ||Description || -| *getId* | {noformat}{restContextName}/{portalName}/social/identity/{username}/id/show.json{noformat} |username{example}{example} portalname | String{example}{example} String |Gets the identity by username and returns by the json format. | +| *getId* | {noformat}{restContextName}/ {portalName}/social/ identity/{username}/id/show.json{noformat} |username{example}{example} portalname | String{example}{example} String |Get the identity by username and Return by the json format. | Example: @@ -49,12 +49,12 @@ http://localhost:8080/rest-socialdemo/socialdemo/social/identity/john/id/show.js h1. Linkshare REST service {anchor:id=SOCref.Developer_references.LinkshareRESTService} || Name || Service URL || Location || Description || -|*LinkshareRestService* | {noformat}{restContextName}/social/linkshare{noformat} |*Maven groupId*: org.exoplatform.social {example}{example} *ArtifactId*: exo.social.component.service |Provides REST service for getting metadata information, such as page title, images, and description from a provided link. | +|*LinkshareRestService* | {noformat}{restContextName}/social/ linkshare{noformat} |*Maven groupId*: org.exoplatform.social {example}{example} *ArtifactId*: exo.social.component.service |Provide REST service for getting metadata information, such as page title, images, and description from a provided link. | * *API*: || Name || Service URL Endpoint ||Parameters || Expected Values|| Description | -| *getLink* | {noformat}{restContextName}/social/linkshare/show.{format}{noformat} | format | String: json or xml |Gets the provided link metadat by posting a linkShare request as post data. | +| *getLink* | {noformat}{restContextName} /social/linkshare/show. {format}{noformat} | format | String: json or xml |Get the provided link metadat by posting a linkShare request as post data. | Example: @@ -62,12 +62,12 @@ http://localhost:9090/rest-socialdemo/social/linkshare/show.json h1. People REST Service {anchor:id=SOCref.Developer_references.PeopleRestService} || Name || Service URL || Location || Description || -| *PeopleRestService* | {noformat}{restContextName}/social/people{noformat}| *Maven groupId*: org.exoplatform.social {example}{example} *ArtifactId*: exo.social.component.service | Provides REST services for serving requests related to people, such as suggesting username, getting people information. | +| *PeopleRestService* | {noformat}{restContextName} /social/people{noformat}| *Maven groupId*: org.exoplatform.social {example}{example} *ArtifactId*: exo.social.component. service | Provide REST services for serving requests related to people, such as suggesting username, getting people information. | * *API*: || Name || Service URL Endpoint || Parameters || Expected Values|| Description || -|*suggestUsernames*|{noformat}{restContextName}/social/people/suggest.{format}{noformat}|nameToSearch {example}{example} currentUser {example}{example} typeOfRelation {example}{example} spaceURL {example}{example} portalName {example}{example}format|String {example}{example} String {example}{example} String {example}{example} String {example}{example} String {example}{example} String|Gets and returns a list of users's full names that matches the input string for suggesting.| -|*getPeopleInfo*|{noformat}{restContextName}/social/people/{portalName}/{currentUserName}/getPeopleInfo/{userId}.{format}{noformat}|portalName {example}currentUserName{example} userId{example} format{example} updatedType| String {example} String {example} String{example}String: json or xml {example} String |Gets and returns information of people that is displayed as users's detailed information on pop-up.| +|*suggestUsernames*|{noformat}{restContextName} /social/people/ suggest. {format}{noformat}|nameToSearch {example}{example} currentUser {example}{example} typeOfRelation {example}{example} spaceURL {example}{example} portalName {example}{example}format|String {example}{example} String {example}{example} String {example}{example} String {example}{example} String {example}{example} String|Get and Return a list of users's full names that matches the input string for suggesting.| +|*getPeopleInfo*|{noformat}{restContextName} /social/people /{portalName}/{currentUserName} /getPeopleInfo/{userId}.{format}{noformat}|portalName {example}currentUserName{example} userId{example} format{example} updatedType| String {example} String {example} String{example}String: json or xml {example} String |Get and Return information of people that is displayed as users's detailed information on pop-up.| Example: @@ -75,13 +75,13 @@ http://localhost:8080/rest-socialdemo/social/people/suggest.json?nameToSearch=ro h2. Spaces REST service {anchor:id=SOCref.Developer_references.SpacesRESTService} || Name || Service URL || Location || Description || -| *SpacesRestService* | {noformat}{restContextName}/{portalName}/social/spaces{noformat}| *Maven groupId*: org.exoplatform.social {example}{example} *ArtifactId*: exo.social.component.service |Provides REST services for space gadget to display user's spaces and pending spaces | +| *SpacesRestService* | {noformat}{restContextName} /{portalName}/social/spaces{noformat}| *Maven groupId*: org.exoplatform.social {example}{example} *ArtifactId*: exo.social.component.service |Provide REST services for space gadget to display user's spaces and pending spaces. | * *API*: || Name || Service URL Endpoint ||Parameters || Expected Values|| Description || -| *showMySpaceList* | {noformat}{restContextName}/social/spaces/mySpaces/show.{format}{noformat}|portalName{example}{example} format| String{example}{example} String: json or xml | Shows mySpaceList by the json/xml format. | -| *showPendingSpaceList* | {noformat}{restContextName}/social/spaces/pendingSpaces/show.{format}{noformat}| portalName{example}{example} format| String{example}{example} String: json or xml |Shows pendingSpaceList by the json/xml format.| -| *suggestSpacenames*|{noformat}{restContextName}/social/spaces/suggest.{format}{noformat}|portalName{example}conditionToSearch{example} typeOfRelation {example} currentUser {example} format| String{example} String{example} String{example} String{example} String: json or xml | Returns space's names that match the input string for suggesting.| +| *showMySpaceList* | {noformat}{restContextName} /social/spaces /mySpaces/show.{format}{noformat}|portalName{example}{example} format| String{example}{example} String: json or xml | Show mySpaceList by the json/xml format. | +| *showPendingSpaceList* | {noformat}{restContextName} /social/spaces /pendingSpaces/show.{format}{noformat}| portalName{example}{example} format| String{example}{example} String: json or xml |Show pendingSpaceList by the json/xml format.| +| *suggestSpacenames*|{noformat}{restContextName} /social/spaces /suggest.{format}{noformat}|portalName{example}conditionToSearch{example} typeOfRelation {example} currentUser {example} format| String{example} String{example} String{example} String{example} String: json or xml | Return space's names that match the input string for suggesting.| Example: @@ -89,12 +89,12 @@ http://localhost:8080/rest-socialdemo/social/spaces/s08d397dg6/mySpaces/show.xml h2. Widget REST service {anchor:id=SOCref.Developer_references.WidgetRESTService} || Name || Service URL || Location || Description || -| *WidgetRestService* | {noformat}{restContextName}/spaces/{containerName}{noformat}|*Maven groupId*: org.exoplatform.social {example}{example} *ArtifactId*: exo.social.extras.widget.rest |Provides REST services for creating spaces or getting spaces'information. | +| *WidgetRestService* | {noformat}{restContextName} /spaces/{containerName}{noformat}|*Maven groupId*: org.exoplatform.social {example}{example} *ArtifactId*: exo.social.extras.widget.rest |Provide REST services for creating spaces or getting spaces'information. | * *API*: || Name || Service URL Endpoint || Parameters || Expected Values|| Description || -| *goToSpace* | {noformat}{restContextName}/spaces/{containerName}/go_to_space{noformat}|containerName {example}{example} portalName{example}{example} spaceName{example}{example} description| String{example}{example} String (Defauult Value: classic) {example}{example} String {example}{example} String | Creates (if not existing) or accesses a space. Two query parameters needed: {{spaceName}} and {{description}} | -| *spaceInfo* | {noformat}{restContextName}/spaces/{containerName}/space_info{noformat}|containerName{example}{example} portalName{example}{example} spaceName{example}{example} description| String {example}{example} String (Default Value: classic){example}{example} String| Returns the HTML page for displaying the information of space. Two query parameters needed: {{spaceName}} and {{description}} | +| *goToSpace* | {noformat}{restContextName} /spaces /{containerName}/go_to_space{noformat}|containerName {example}{example} portalName{example}{example} spaceName{example}{example} description| String{example}{example} String (Defauult Value: classic) {example}{example} String {example}{example} String | Create (if not existing) or accesses a space. Two query parameters needed: {{spaceName}} and {{description}} | +| *spaceInfo* | {noformat}{restContextName} /spaces /{containerName}/space_info{noformat}|containerName{example}{example} portalName{example}{example} spaceName{example}{example} description| String {example}{example} String (Default Value: classic){example}{example} String| Return the HTML page for displaying the information of space. Two query parameters needed: {{spaceName}} and {{description}} | Example: diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/widget_tutorial.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/widget_tutorial.wiki index c4f5be5400..374a18d4a3 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/widget_tutorial.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/widget_tutorial.wiki @@ -13,9 +13,9 @@ To insert the basic version, you need to have an iFrame to insert on your site. {code} To install this version in your application, replace all the uppercase text below: -* URL_OF_YOUR_EXO_INSTALLATION.COM - this is the URL of your eXo Social installation. If you are testing on your local computer, the URL may be _localhost:8080_ -* NAME_OF_YOUR_SPACE - this is the title of your space in eXo Social. In the URL, it is necessary to avoid special characters. For the space name, you can only use alphanumeric characters and "_", ".", "-" or ". " -* DESCRIPTION_OF_THE_SPACE - this will be displayed in the list of spaces. +* URL_OF_YOUR_EXO_INSTALLATION.COM: This is the URL of your eXo Social installation. If you are testing on your local computer, the URL may be _localhost:8080_. +* NAME_OF_YOUR_SPACE: This is the title of your space in eXo Social. In the URL, it is necessary to avoid special characters. For the space name, you can only use alphanumeric characters and "_", ".", "-" or ". ". +* DESCRIPTION_OF_THE_SPACE: This will be displayed in the list of spaces. h1. Advanced version {anchor:id=SOCref.DeveloperReference.widget_tutorial.advanced_version} @@ -29,10 +29,12 @@ Next, insert the following code at the position you want the button to be displa {code} -The important function here is: +The important function is: {code} spaces.createPopup(link, spaceName, description) {code} + +In which: * link: link is the ID or the HTMLElement where the pop-up will be placed. If you copy and paste the code snippet provided above, you donot need to change this value. * spaceName: This is the name of space. It is also used to identify the space. We recommend you use the following format: "MyAppName - my social object" * description: This is the description of your space that will be displayed within eXo Spaces. It is used when a new space is created. diff --git a/docs/refguide/src/main/resources/wikbook/images/LookAndFeelSpaceActivity.png b/docs/refguide/src/main/resources/wikbook/images/LookAndFeelSpaceActivity.png index 69de53e6f668f40d5d3dc731cede1c21c2f7ef7e..760bbec85b46c11c5bfe8040ec3bf7d9c64f9aa3 100644 GIT binary patch literal 28761 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
9~z9Xp7IwA5RBp>HBP4la~>9r>j?= zI_-W40n7&zlA>Ky9X3%JN$UcPoSUh;sz_&bX!b-;NJY184A%}QO0DIV^(oygTqA*A zI9!=!M$p~gnss4yEJ7dndy_DeEq(?JuZUgz(Qmv^qiJ~|Nc;w-gv6N5hE_lz^upvrTW zLI4M=k&Tts+aun?7Eeletpi1b`%tg5(Rf`&uGbN`1+fn#UO~65O^z<$sB#9fG@pQPB)5k_H3W1B%km#|qrjW~p50O*|$SGpiZbYd*&)HfVM&w%)qL#%* zcWQS!kWNucVEAD@)M_(^CxcY~Po1Fg5;Otr7X-06_eCK}ujWpDZ|+AK@a zeA^wmI@3Zr9|W`{I6!&s%C%1I+dZo6l_k-JzzW1JXr+IG$8B=-WZ?V8ShMNd92o4F z&+k?Pfy@P^ovaSjYd?P#^R^lVy!YhzQ{sp2&hCz|K$&meUF88(&lCQ1@h8i(66E9K z7^V>(&+<#@VIiw9yd-Gpi3m|}__pC&f6x*GBUoB(y1RArb}N-@^q~j+{cB4)Yb82< z&3wNql{rRoM5&yeopCQ8SG3-e=G-B+kOZzNa_5G^{RMdqw6YSYsTLuUthOq8S9muR zj77G2@vI~<47$cYGOWJa2UW+#y`)U~7}vB-G9ZEvmL{Quy|B=M1s|kmly}DK;D73m z%-Prg>o4o(W>wtAfDA2u2OKgW$EM)}L$1}>kUVi)TO_SU&*@i}S#S1MYdhudrv+PV z^S(Fj?R^vS9JXq8+C9~*)^lwP&RWTm^72^q#_e|qZNs}TjS+>hi$#$U(~hVD3!S#` z1A3;QvY*|KdE*Uixhlnsh~q2$d!TR~ILPmJ>-}qN{)^2V001~Dv-624cC(?442t$c z`Yf}Phx6Wgy<%$ChFt49Sh~rk!>=pbgP65(QHY5HX$_H_el@;FsI2>%0||<6WsJpX zXRMQpHR$6${OF>;p9&2XhOxJ|a3yPm36011YLnF7GL3+PjfUkZ-oc-n7oRU!v^N~n zys2YMwUGRL>uWQe`EaD+i9~naO4Vs&Aptgf>kxZ>;r864GSu>zJPhS{&r?T3^1XzFWN}eW{dbMW@z)@l(+x;y4kl;1>pJ_#PkRyk z4_e7Wn;LS@CcN@`oBea7x|Aj9C+thf(b0=8s&qJ=A5r z7(eqLyzpV(z(nGTaBd{jI9J`tE#k^{`vAI%*x0t-HGAi^P}L70nTf1$I`pr)%t+$A zoz+h6Ka(PPR<2kSq<)*^_zdcRE=?0Ce)@AddC;`@o&d?>eh+JfvgRrJ5rx5CBC8)H zZi*+Z@i$Tv!84bZ01#wv%1j!Mo@>PLnVv@ z=W&BQ_Dhu^sW^J5O0V$y%-*2*-#IL*$loK%>p=RWr*eZdq%kb^3!zl+U=g8TriP=*7#&}YY99D)yGDOP-J5~EHDc&CbK*T(^ngJ{>-c9~Re!*5 ze7H-3FzkG#SXZw~d*ak1LR@0h`BtAeN-y2;j^jG2)@tR~IgE?HI% zPQfUu=mdox46T8U2Pxgea=zJVD4Fj3$v`asgdI;7DPv|Unr^aIARtRekc(g@_s$S6 zZ&8@ip$=jVBr5G^mfX1*(9(MNDgY?na`Bf1nUVj3VZiN(++W()H4un~<78$KDaHfs z=y&rt`#!Zzk)F2)axwSFT=QC5?bv?*CJE=t^I^uw5@g5;2TSHv5w49USl7 zrM%?cO$N(6-U7o%kA3SpB<`s7Z;t0KW%+8Xq>12Qm?NT(_$pM^qBu^oC3-WN!4kqA z=Z?pM*Ok}3-ebrvZ~96NOYB%1Dc1)n-O{W6pi-TTUZfgQroX7XI|tz+cf-=Vpd z69jJl;h)jJeTOwxl5A$>F+}ZWZY=_PhC&Pq)lp?JK4Brv;VlhYY9j=Kmt#|uG{U~& zIlgxkDmqjfPB`WCE&=kva|zgIa!F%zNs!G^&Wn|B4y-g> zIP4*aXH-Z;k#IK7+kW6&GF~eJ+bfAib<0b@!<;IA3;g3RoNiz(66=Dq2^?;$p7f&9`zCaay{wBFl; zI5mM7BUyqFceCWt2=PdH)4u4IK^Qi`kh|RE`XFSwswv}dYRPly`$f1;_}l4}g0nIq zYtPr4ty}|ogJb*cr+|MH)cR25ud$H3`6;t{xxP3oTs`~-O3aS>?wvhUHqU#Y$w8s@ zg28LCDRiPGJ<3W*<{3#Zs)Ez`>Z^R(6yoeY!=5p2KB)@Jd8CuVn=277QJh?mjEpv= ze}LkR^VC&&E@<;wFZPZ76wV1UoaNCgwR|4eApfDCtW+I|Vz;q6z{gWc$WOwA`OqMg?Lg}p4QLng8`gV~7_jsY2iwYC<|8JJ z;!ih^0Khp{dkV5S)Vccd-Ev}s-l?OWr6S|Y)km$;=cj)!VpNN53fW0x`!|lnWGu%x zb>~`6M%t2hx}8<^}+sa#&mP`o@Li!;XjBWq<7}!2LYK&nepbPdQJ2?~91S#$f+^}`6(DAH1k;ZB5mmL9|Ujll9y1~T6!H+xZs*1Q>Jwo-OOKjOy1Ho_$G zQ#W5{JCIzOVosne?5e}niJ+YFnd@&RYt??g^$w3~`ux{L@yH6~8%uwT-YANj$YyVM9sNwLbnc-61E>08sxpn(3{4RPM4u=0UCR+p@DW5 zhU?q&a$#&_j6Nz5kg{2BE4Z_~T9lC4#PP8=VzhNlhH_y{asc*5gf~FBA<=ZdPGVuV z#Q2{VB;U5B%9K)NO-74;;H@@VsJwg~855v5~d3P(Bh&p?_KaNJ{V^O%v^XHJ|@TBq`7J&=>Lm{m)p+@W|a3 zQHTl`+dun9f#ma(DJ&FxM>xvA?Hoe@kS+%rOkF;evPASJF3kA%ea8tIYh%|_jFJ9( zO!xfHG0pw`=;B*<1P+4Ie0HeB#y8;K{?Lywc5aU;aMu}hhK{)-b{Rq zdwFEH?XK1+qV(BfrdxG5wZNqU?H)9up}9~J5t3};cN>Hv?T{z%TKfg`f+F~XO>m;6 z?pponV}ppYk}Bqd{K%<&JpZ~B+i_(_`J3GjA1>N&UY2?3?f zjKuiua*$Kb2Y*E-(cz;b@~U12OQ7;z$(pB2yto}@exhwY*p#s-Hp+uYQ4;s^(@8?6 z&=E6qK6x#P53P_6w0hjPf6mo+zF#%xP8n z=ZN2?(a7Wcq{6Fg!Xmom81;~R*SP+ZDd&g;51-6Zo8M~MTcTI)1l4O`_lqbE_uXm! z?;oSX+T5mVwkSM9xDubM0?2)nwk|SFXf(7E{}IC*7b%9;yYB#=e!LV^1&8%@A8rZ# zwf${$L)cgC5w6-T#VbE)x1-m-UbM=hu%m50_p7YW(rxD+g0#I!&|~Ij1%HvzknAY| zZ$nhtiOx;f4c^b@u1E^cuq}{i|0i7I{=a&{$Co#?=|FPNQoib1<=RZ4BQc|Hnn1zLDfG?s^p}uD)mxjV#;SIjYsp;e~HEOn+kz zw)Wj(xcD~`^xML+gbu-KPC)^pK0#|Ykafgo-FmUL%|dr0D~WnN_kHupxAXs1P1WR}!sgLGXfm9WQgu>fhcVSB_r5`_G32eS{s4 z(1n?k-h9VQMM3cmGMdTX8NNHXqQ|7i`ObE~Kbkaog#tfv)XwtrAwi{8ax#8W)>8D+d%6iB$!e3*?OHjNyKf;sU(SFG*QxI8wU^}42W%F_!y^iizL9JcnGGeLsZysr9@ zDY|v(+gcOvXN4e6u$F%MnxMK2-d|b7%U*uR#;7Nh!4?J~$STG?yhv!g3%hB$Aj&jd zvpitGdAcCTBK@?XiM`%K;Ojp|WcR~k_RrEEx!GL-!~9Z+PK7Q(lv+VICyI?Gn%_Jr zw~GF>FWZ6mVLN55E%kh`UeOtevYMkurv&L~5l{hvz0tqRYr;28>|MTL^Yg@oAkP^1 zt@iDNYEI!C33cKfns4)+4ZF1;J_Hk9TN|;DbJ!)QW@6uxQ((I5VPDddJ4S35r4ZZC zr&^Xyw<|Q$?8Habidz^R6Kl0+bbT;vf)h1*caEPQu+<-Zu+ozfqYB{rmCDK`tZ9%o zI&^MR@=Aj|J-KZ2HVX%?<>Ik_1t!TDhR-a@$ev10+RTmI=%_1s-3YRAjg0YRxc?3- z{9TYdm2-y;snKHi+XiXS=a+%azlx%cDUyXGT3V*DR&<@R?g&nvPN(=LVbxKGOW$Rt z=-)EIk9m`MC5wi1m#2FGL=o*hc#!TeiOQ_2Egn`fA@bgOHaSR#GsPaRCbIZs>a;ET z9LB;}u=9fsj(G3C%S&RGT8~UEck~R@Tp*k*GdJqv<^Vipsmg@iZKB?8w%^iMm=y9W zUq8E@ndLs8pt`*IY)LK6gq|Qb85<6@4_#GfIQr<(V*WI$=#?@HG6UmfpM1hu2L}bs zDEhG`iYPffdGw2jz%VH`vGQkaF;pl9(}7*QVeWzU^kT2@Lp~&$b4&278>r-Ivnmy* zj`)qUXQ9#t0_^o3B9M&LyRV|Zcc3L^|emNk>3)|wlmqg;H5Fd_76 z2?Y!!jJ8uRAo)99_>9s&YTx$U9SOz!B6UMYJYt;f7z>rj*^VzQEBxLRov2!%nVOq8 z+o1}&rLVsjH+V*=AN!Tj&@j<>oNb}6z#J>taD{<%drw=Yo;}*4soN@LtfuQLCq43FPG*6&s_rg% zZXuxZb-vrfyM&P+F2i6SxMS#KL+l^eFSm2LEsY=-Pv{eMt8G`%T5cxJ_KV$@(x&~VcU`E#gV+c5XA)d85;Kw5QtoDWxoM{*{7 zwD#LmW3%u)P!A3w$15_Z#ax@0-J_QgoHj@h)-680iQuczboSoCSr4v5kT@0 zUUh(x&Cauu%B$X-aCY(iSd2$AS-jci?a#c};uwP__A(aNBNLs>Pu=Mt==Wa_2Raq! zvvM7?RVkzHHDzl!wcb>q1@Wb1gn4tY#B?t=AoCMW&b97yQQ>oL(2UApo!%-|W!E>M zgRTCBeD6ExU6$WPSI){L`Tio9cf_3obT4o8~qHPpCI&r2qS z#cWRm^xZc_kKygi##5!sqpxo<6%RkY2!j?$iD{x5@OP`q(Bz^QHIwqXKpJjWMI9Xv zA&9?+zDd_YyJ54B2;E`Q4h|jq;17$Y1qWC5ZmXs87$=GUrd(e1)$~Z-+%e zvL5S5l`rt2?d&jDqG#(7x3$M(lnq<6!ax+cBV7>;D+K%|9u75VI&Drtg4 zImpuc>qB;TYO6@%z?PN5QK=+rm#XV1*cPElMFO=to^ z1F`*Rjida^j9(KoOwD+ubN39V4db`Diy9?u86pk?W$29f@zaR2ATkA^L9F3UK)GRp z&M0M79a&aq56fJTnVBOY3?m^FY9C2sOv}|+cSZ*xOxmLZCOF|28)#xzeWEzq#_eg+ z!c@!nq?aB`f{P+D(M6t+z-1Ca>2HV^JvBC-+I@~psAWhiD=@bW#Z5dJGIc^x2zTx( z&`vex#ffu|Pu)dUqUF#CQ&I&onzVz89w53V)tMpUpgsJ0U@v!B1|?VRflJfL@>T|Ku?+f7q{sm_Ry;#={bI*t-nTD?4XhXs-<}rL)8vguy=)XE9cPc_;57KrOS^^-CVn4d>}KD8Lzim*_{u1sU!ouR z;4GCaP6~d9A^YNxCqt$%M}mawl>P-gA06E=Z#X`#&}Kk?5~-tG_(#h)l_8p}(?QJp zmp1#q5a{Et+H7lHl%wuXbCm#)am;VKSH4Mm^ZZGUkLO&kK0itM_YDj^_ojkygi7EA z()8nGvR`Q7qlol$kxzVFNsiVqdGHA1ST?8V(=c`T9DZ&|{ck|mvXzJR5I2WA)DUwa z?CqE9(c*8Iu2~?kB++#lc*Y0V1W7MnUp`JP2s2#Fn)>=LHrv2@RAK`CE8x4wzr`NO zsd3J^fP!VCSE^f+ZptRpRe$Eca4n*Lk7#u!NN;Dqp}{D*9B6QXtQd*NHK({+zz0qXSzqR6=aJ z7eQQ-gx6yf7EXjz1S=m5JUWoOWxUAux9J$b-$J; zUql6BG+}Rse9-@I$5{5u4l5(*7JJFpG?qZ|mKo%20+h8R|HwuACx;>r*AW9#HS_Ro zXD6gpH=W5)Vt0G7I_rAURfTHA>C(%uXD-(^Sv_Q%DjO0pUSqjSNLo|K?``?H=ws@6 z9nR6OfDCgCQ-Rhk#yzUj&}p>-C__IPMl3ZC`k;jD>CH zZ343X6N1$^joGz0?Ep(>rllAQT#(}iS{n4glQ>O?R4}R9X`XIbdz`F3;&{H!sgT9l zf5#zqY>ksaHQhUVz?(OjmBaP#qHCh}Js_`Wb&MSt0BsF|JTuGoWypc%R>oQ|sevGJ z<5s)V)tc8%3`DuPykZu=*`l*DUZVRXNvoqE>$uG!&i1sk=f~dn!QLQ7WLugqUhWD3 z8H1y}8_OW>)sH$Kb4vzRvOi=}JRZc6+H-_&9d(w?>m5`B`-#M@|vqyt6 z)JTgr*>t(tP^>({hltl#Jw@z6$u-e0?s<$vd(~EK7c?=1`_Rj$YAT>l4UD<{(Tk1| zD)rhaL5xt{K5oC*6$;h$PMM0y0vBu2qjy+nLh?bkq<%-z?Jx~jJ`T@S@;Eld)4HW= zao@v;3)P(Vj_pO+#3vnLhG&Kq({R(Q3c5YFEG$lnosr>z)=TD!m|$Im3;@Npke#hclws{qlzq&R01 zBqBcXVG=|vlcnIZSvKL5jivP|zcYtPHY*wgH86qspFoPE?2`(y2|jco!bz-VBa|Sf z-d-rDrFxCo*_(7SRsJxW(sHllDd~b#7T%`}{VqZt2I71&T#6npd{NuaOBZ~pO6CA& zn6egS0&=`5`FP_7+SvW3yISprYzy*gGzl!`a#7Wu*SwQ#it!GNnv*+@X13|py~gIh z$+uoNeN$`^KaQ04wGDr10!&@LTBftK&}j&YvQk$9GiXiDbm^p=n3SM$&h^$)%-g5h zPq(s6F#Tt-nYE-9xOWsir@RiabS#Q5jIB9t9g3kSt$6_I+ev zpuOph_72iftIL`&7{vsT8|IM8=$uP%08>n(J&HtM<9&9pudY4Rn7@%y8UH z*sNZjOKXXXVjzjf{rd2w2rpJ}m|aCfryGc~RPm)aR6xiE-a;=a>>Y3b z)X*4+Eb+D7nI*$oI}s;laIFpg+pNB0mN#B|R_Wk@<;tVT4(beRa_3{x8eUpL#@SoC z$hm+>OF~ORoLUzwg1h)XPe$rT+;!WLB$9gcA_U|aT;#ORO-EkbL{jkPSL2BY@1Iie zOouOa>m{obV?4gJ0!N%SB*9AXM+EEYtu8Y8XF>`#dzRT;8RH}RS7eRCg@58rcGB0a zP72mzTTieYqnM5A+tD!*?3O>`d)sx^^R?O8--jhcx+_cVyzh}-+>1MW%vVG;_EX`Z z5B5e5V8W6FJyZfdt?+vbheM8rXSlZRTV=_!H#IdwrjChELelGPCvB%Y(zCyFGgyb$ zsLCmTe*|hzBl?W@W-sp=+!$LOJ}Ey6f|cZ!Fkav`JQa(U!xPWL4SE)bdvte)_Jo@L zl>*L$lgos0NbCkW@Vn`Hrk!3y;Vi{M@pZQStpCYyPN1FdYRVv|2i}aGnH=9!{ToF3 zslwMqHm%a9YY{}kcb*--Z7(zRPEO{eBO^KtbsXzh-OtyovH_0ikmNHS{Y$GS6qgJsoYspXtP-c$~K9R38;slM>q5`f-=B^S6D1rkhB{4(v`X?rW zN7f_XvrtpImJX2Yx_4~{u**0ZH0W1rCR(4P8O6g7&Pf2C>s3Z-<>s^EQmuqCKV}l2 z57>MYA|1u@NrxI+=Jnim*<4$o~HFS0^&Axg1$Ht32kU{nHeIywCMgjPCQ- z$lowNv)Wb7m8I$5NVy~Hj5<C$f?4f=wpDA3%gDy@DDToYYqcqMETw^2_6w}k zR(1WSgbf%f4+G;pqNZE-$Pl($I#WKtx?8z#@Qv1?%O!xWKeYbG{im2jI+DQU9_UmL zaS@JJ#}o~6*lpUNKsp&L_Iv3B3EMLg9-47BA}@5?9{~S+A8*ZhvsMm!d4JQz$MlVL z$sAUhdBDBcGC3+Q>2cA|avf!J@7wqoQOo=@AsOiE7~uX6LA(b69?=BqOOHQ7&fi<-Y(TDA64N literal 17225 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 Qd;yxGhD19G2q+W-In diff --git a/docs/refguide/src/main/resources/wikbook/images/SimpleSpaceActivity-custom.png b/docs/refguide/src/main/resources/wikbook/images/SimpleSpaceActivity-custom.png index 22fdf72b91f8fbc0b5ec57685bf344425fe79043..23ba7b29b55c98bfae4a21aa966c2dec07a631cc 100644 GIT binary patch literal 19793 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 literal 9896 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 E1K_w-VE_OC literal 15385 zcmch;2T+q)xG?OltFA6(EvWQWDN25-udqQbMO4~&;JfX4&l7#Jm=}{yw%oJroX^);nb;9^eT@Z z>7F`uIujU={CO7m-RNQwbn4VUr&Jz2(DzR#P6qf7zkYG-F_9&YH8oYd2)(JBFXCzS z@HfTmm&!U-#HWH!Dtej<#si7D`w+~_iQm57NuGcH{8idB&hxMK>0W&J@ND7cIhDtv z()dgiIkxNl`4p9h-|r7o2?0|m7JJd%{u#O0tWboQ(@kLWQ>TK9yE5cXMxUvy$jh|R zj2@j9?en>o0dr;mR_O1GC(ooOhygWG{^;h(lN;E%#`SZU)$#wy$hQY6w%#l8bIqI6 z3@0#rX8dnJiGY8jK_}&85)hRsYf=XL zD9e%Gy7X!>L_%5lFJe4MOJtB2O5ClC#zuF#st?S0yn{X|55@AKuF=+P!@2b^YmHM* zr^;G4#=noZ)wA4Ui)NL#d}kB2@L~S8Tt)lka3-t8HP4R>qeNe6t}cH|wN7Demy-H@ z30+AJKYC17M&=)M;+N+xXzZ=L zqVttLH;Nalb?On-I9}B|BpdM>=qF{jPg&FQj06Be4PCdXFa3v|CTfx!yZ2fn?% zEFN$a*gkKPK5Yw}8O6irxcjs(i?z7qvc2Oj$4Na^-{n)5z?}&Za|n-zbvkzS z{#jrq(9{&rWUsvNoku!yM7{%JvK3&*tZLv^*QI0k#z5A~u{l)xF9+A5cHL&K$X@2= zE7xZNf}y+un1)8>g_f6?!nt1k1v9qlg-1@?uL@*BC;7Tc3A``Gt$he(mvtN34(1^2eO2FYL`G=}4J50fN_usAs{CbeyRmOC$fx9pHY+S7OFDJGGH805 z6gkVB&ED0Y<=$GSEXFHCb`X{-eQnimG;EN-=K0;Av#{YNVc#h_7=r!+Rfg6u5 zUrisT)b^#;fFCT>fr(j?T7y{6+Az)M5(P#wNPir6v1MeDf+FuCft+>5v45g5^`2kl zVt+y&avGH9kM8RR`0;R#-_5I7%Kk-%pd3F| z!L-KDsW5qvo<ktCv=i?hB5F-G5h9KA@=A&hGB) zZ}`50+oN>cOpd+!s)fPVw})eGfiKz)@Hg2T-6(g#D1OHSF#D!B*y|>fae%+2WyxEw z*y7KYJypXJ;Ie29VI(>v4LCC1NZKue7ufiD$I|wp43k-Au0vSPI_`J)e(ENBRN=d6 z$Bkqw=L4*R{u~PgPOr6T7b0d|xUCP40QqIvhg~doP0k<_yp8EqrTrefu4BzARp==H z!=hX4-gK-}*Fem20$dJrlK_9*m-=`9WvDQmej*PtveJnQ@mH-&jai7m`A%%CC6+Uf zU%7ij-GNS`%T0e|@JYyWXl#)I7PX3Q6T|XPF`ABJY3P|@tzW15n|k~7*oMf2M#uAq z7QD%ue}DBDp#|F4KC0(Dt3STx{m}>HT*VVAr+K;X^^)xilQZk%wcdNlEb^f(9no3k z0g$JOWNZH%*qm^lcKZ+ zEA{~xr(zd6aQ!lVJxIM6QEu|CX~NOEU&uD9#Pn|&D=W?EO7$|Xl*B6seuuJBD*Xvv z@Q@Rlwt28d^0K5OdGs0!p4OT{{aoG_3Tb`7POF}Xq2DRwW^=D)_T?`LTkY3y;-LqB zXqdGqu17c*1=95DOw7|0em)f(HG7_hgta>-6g%~~=sL}4ojR5E-zH=+YW>pMS@gd~ zxv5Y6FP)f;I4zt1VPsfZJdmCH^(hk*Q^}{hR-Dm$(Q?82l6z}J>%AEwHr*;V(1Np7 zR-N-`-6!Pkiq9cY%Y7+44mP!J!+Wx?bGZnZ-|p^};!oeRABKAchpu&6cdOkioG9yr z22mO+i!!xC$8;8o*o`d5L@c!AD-UY(_MQy8lXt2vpTGzjxt9phPUn$tu^`A?&(pt&~{*)=J4%|&3Hq5imN)- z$`c9i9dvRY)bNIIDLlxDqC3MU(4UagFc4s-6GwX&&)A3EWzQ;|S)%WCj`MV zV6oh3qh=lrZ}MN8iHRo5b;Im?E1Z|%$JNO&g5FRtW#36yP_6XXW>r3;&>;+=eK=)W zeDN5hbMEPozT@qrFWTh*7MbbJ0zZAJJ2{tpLv!DqTU-g;^XUIY0?Y@-NW2Mg-;7mu z`+$G1{WM}YSM2=sR8p-rN`AoNFH{Egz$e7{`Rpi_@h>OU8ZC*Rjigj zTCmR;-kX*!G*39X^@=bT~B<0&7r4v{xqqvc@iK?&l|^gr-=GFULB`=Ykw3GOsV#W?(T1{I#A~5B%BzHj>i( znbPzjGg}QZty{LJ0AG*abg=J)4b&bVK1{>mS~2_krd_;p5$ zc#0kL!lLha_6G!2AU7L)HIMTmj)ts4wdyblu?O!+0d6mZ9NG!1?==Hw8h4xgaj2Gc z-SKaYE1T%d3o=$zoE%$1X{fuPKH}m#@i}3%w-gU1AjQ=>E-EUWQ{48p0A}?(C%<)P zkxZClWn~cuy7QJaPUR8pnHS8WL#5}p2U2)7ys@!irRPY;B^(Wi5|Y!Z!0$d7_6N5>1(Xa26n& zRuuZW~%# zx6vuuiC($ly#0z1`f1a~LQ2YLx2u!#g>zTm?5E0f2OX^SO64n}KzdY_xbD&|ytIlH z#CS7nS>Ep(pQM;lv;1dhW)06F{OOyk4X9UF zuQKZ!>u0AV$PL4{Y??AdCjvUWxX9~2{rZh0t*}_UpCGoNwubkxe!sT}@=OL5%#s*< z$FhdE4HkR66EVfPn<}@5V?E&bsrPePp86Yh``CMpd}D+N+`6TZl9JNh-K`rM+D3O4 z$u94Ea_HO+7G%PSh`kB^cT~(_(erqqedlpT?Brhf($nDlN;|G$0{mYyg2{Wg9>*sv zIKZeF;PgVMLwV%C{%^C&%$=|Xq3iE-tH46qf5juE%5V98sOsu}vxja)B-VKs2Dil0^ zwe2RC|IqA^A!GKZtb4OI7cgG)G}ce@QoM7%(`Q@z)pogQZis_t8~X>q7X$GU22%gD zOXZeU=WFnO#JgRNnG&3h8vA5ymaA*Gz7+yE)B)jjp3CP}jKs=B7D?L_`MOM$mA&SX<}w+&RofadYZB@N zxb2p4jW1#n{sYFc;~=osvP*DOlseNj?3kK2ah{L(BS=Ll()oHO1GBLEa7=Me|BdCl zW&a47kGC*rby;313xOE&&ziRH%eZoPYiSuZT2Q|J;<2V^jGzCQ8tk@QV1{pnWv<}t zgRwdu^?k-HgV6T2d0gl1$1Y_sk6*XOa=?;wjmK*Kc)0= zt+eGvUT$s+BkI$qyRp+hmw%+M2bHunHvUMR4Jcwv{JBsYC&tO&v*VXWTN#UHjTg)O zIe#7I!!q9ZmNh{43F5s4|-Y2gxPhs z$|n^Qf%?~~-`SP;3;F83-57cb4^ez}8hn%?qz_><*KKQ@>taeD+WT-XMBVbp4a=t2 z#s&T6q_>nI&vBw&OJzA3QGdHiS!@x*$HZ!>X)*_;OpFRb{)(@**`-VK&ecH-1oMi= zLfk#BN0i^I1gq$#h+cZ?y`f)zN!QcBtq1!Seq;J@w$bGskOR@ro&RxJrY`KA;UAJO zaT{BHUw(4_UjM@QEOV2J2Y0-Fc`e&JuEL)bN$; z9QjDnjWg+(^pnLb2alrpnRM6jH~6v6(9TYncS~WJYC~e4XQauUdq$3!O0=rr-7cN= z;CEuUT3+y@2R-$7M5c|`Wgb^U?~pexx|&)#xtMGwraC>#^Z_lb9OQ&YX$X3Uy7ub! zCfyYdyOv{mnW^Y~Zqz26A>o3qrqh1+lQXaN<&O^X$|h0kHIH)p@tY_5 z4>oR8oIme8VB%^v8Rm3rC+zMCF*erM%TwoCSU-D3 zY!Rs8T42-ne^xA!!4KtH;IOP1;G@!GR)|HVvQyoz*K8B>4{S_XFO~M4w~Jrxmiyb% z>H59DOoG%KV^oD>TFrNv-^$e4&;XNf+xO=->5kGj{!pP*QFAWON4#sdbR5P$vhqQ@Vk-2Zw697xcDXoXjEy4@Y4ZmJ^8(`e zxEi0SvqhR53)-m_GMCAT&UtXb`LoTjum9rG>XB@eOj5b1N;Mb6$e02!*K92nTN{@N z=cb`@FJ}Qc+h{&6oWiB@x~Sf{Z_ly7gsbE}@5t-hw{PpSKFvs;P2zPM6s1xFLQ%GG zF^itM+g0ZAp5D)h_5kv1QTkhwUod3CvhI(8Xc;{L6~(B@YGgo33AahJp?{#zmkZ;y zRt}ZsdT}KizYFRFKXROmk-S~IV%G_UX6k*bW*Q4#D;Kir(`m~wwll^KyUCU#I}Txg>G#TpU03gIbx#cUNyAy^|6@8#hK>{8yU*J{MP zy>Sc{5^B0BLL5^#AWX^5{^xc1{`O@r?mQtEGt$APvx9QIK~T#;_CIG}QHF(+l*3A~ zDoMHIzboWYg-gt(yUs_+`sj+Rm-N^8@@e-*XvfBqm;EP`TS^~y6*2P5>}6|yD_Rch zuqMjjTG|r>^_zVkE$c@VyohiBNIaL`3F$MOm_03%q(9T*vOQ*9!EnA5xkiWCyX@4I z>aV*`T^)$|uGd|sqFc#OVYw*hHTicZ>8QEJmT!CJH+HQSp=K_oET7QhXb0`qw!(8v z{RMR=#v=OWG#zTjAgaH*Y%KD8qj0RC(cFmLg$oySc1XqrOxH7T4}GEd3~VK|2fps# zq{^pRK3dJ_+&8wOAavUw&aj}*_N+jSzbwnu+>p3#c<$Vt+m5e&jnb3g4n!=Uu!3E{ zHxY|ozQn=9Wobj`y!psm;7@AsTQj*gg@fOI8KR^4 zu|&&AJT=7omrp|ei-F=% z8@p@Xb`oim4)O{QA9`=Ej`G!;2_)S+diryM4ifM4GaENB@c)>7``1TmVL&A&UMVOn z=jPsoCMJG&6z{gL2{^QjMT&8A zE85xFRh#g)4bCRu+VWND>GK}YY{K47PmK6?{^t5hk9_hL==n!1XLj+0Z# zKB1+hh3q4gzWWDl3zWG6fN?%aNo+`C#g`}A0RfFsQBjFmS;A!)zVI*qPU*Pqr%2}uSQ2?GrB!Z8&#*Uk3w0g~Gc}okpprD|nrDa0)F?wid!aDslT`1niIg@*L?EeSAtX4bynOY7I_zgg(F-PZO+Wtq~^0IB~5 z;)___Cz$7rvo*{@_Z{ z>bfK|u!{%4;Mn0$sf*}w^9{at#i5mZa|N4Gk7B*klM-F+5{%rX9E2rc-=p4B$Oz)nZ8^%YWx|1E1Z_ zl;ELvv&##OK@Q2cmJxjYx3{4l?O|PPjgRWmpW^!%!dE?N>@4@|)YYuwJd!qhi`Hkj z85P#~@plgbb59gHZsNDxj z9Rn!4X3O9T4ilV~%nEK?={t%18aFM5ew7Ob@-t|n&%%Hr_Ff|(G)?`1^ z_F+A9qV=AWe~Tze{wd0i*J&7J2j-j_xJ!HI9&MOyeHYvc_M;8&BO7dxVzROpfE?5G zy4>E)K&vFZ0VUr zACX%&W10u^lnJfWDKr6wsKi=@S#07_M!vohzuwAo+h6PL>of58Z?FvAwQD`t=n32> z*3)*OXO&P#M$n(UIE##Ij$Bd`Zq0x5=1w?HDuJ^>zP-7~0&-4l_L~Y& zzNPej;G>9*c-T>J>qa*}iTbQ5ZbRmQtGf`Pr%8X4g<|2-~MKCBJf$sz5TKNUol zB~CU|_vOL#Y2q_4@U;@hnw;O+ZJV+e^un(gnZ~+D??-03QD0~#1vLzQQaR0WJzFEf zOt$S%RD%pKvTEM}RDIkKP)QSW;YN2k69eo4c?!MV+!)7s4xnV{8jFiRX{y!Cy=6T@ z>HYPbi?@`PsEFg%2u4m)Kj_Liy6f5a%%FbRyB1{1*2qAP0?2XT9}0QeDo-hT=*`7j zrQk}!VK%vKzj7)7&))v++if16h}qo``yaVq7`M^g6KR}U^?v>g9|DebO&GNjo$9=H zm>JC*+RwqB=^-~6enH_D;IE{t%r7G|cKF)^SnIZFw1bFM@VX*}IBpbvj&Wq>OE|D` zHVdoNv+T^UqW~HofaEF(o|9EJozAO2s+xj#t5Fd}d0XjMW0op;Il|24gXXPer|>pJ zNhvOy@(xOfK2?6eoKZ6Du{>d&SFqW|Gc>_E;q1YZNUONZ^FSYRHZR9Imeoofy${>Q zh)rhdmW`YiKQfMEBkjxOeu2>s3kP`*qryfWAgt1hJ+ZE&S*JnF8!hpCn|tt}jq|c3 z$wyhri`|CAH?FEy!)CE9bq25FU5t`TQL*HupqjUMNM>ssux@>l*l|wD=rZU_x0jO#n zqfE;vdN6*jik1lMm)tE1XYsU+{18GSr79m~3J7~E}7*x7ShFOWds zVzwLEeVeiMo%Ldq<$9uEvcqyplDnf`W+e8r?9Nmo{JT&WSJ3biJacEX@&qga_b^-C zit2N;yLBY$x@WpA8bqughjp`fB2#)lFnRu9UG@MtXyzO_DH5Lwg4Ejgu~27%7obL4 z8$H5=f@I6mcmnDy16#3WYhYvK!X`@I%I0vNYBb#zLSrIW?BS4_@G{iMacU-b9fBY`SfG#`!dl=eA7NJ{Ou@_>eIh-FOk1k#sQbnRG z-xsuQg^`1FErPbRV>x7p^MZn8r?xeSYu+V}yCR1RU8K~28yY>9D`g(6$0eDqzbAg= zD13pqUJ+gZ;zVHa=C3uFt>p9UgF_Ji;iK(VbZ6R&5+D|EcS9A(Ust))!C zAgNUBL67}{J4az8N0^y4{(>!3{}U-dc86aWDQ4Xwb8sLmW9ZRc&b6W;J7UwOTY(|- zqfHJEOAG_4PZnmK(3p1A(u)U>g=J^dN>nYxpY_n0DYv(`WeE?@ugU*_uaX+BU!)AREE`~XTf|it7Cz&GQOt%7g zcJI)rxb>}~J;ky(Q;8acDZND*n|pF%)46H2>U0ZXwP!|n|M6-whRAu3wG;+@x~6(N ze#+gQ(h19ewUB?zfNJW$wt!{zJ^sTDg<(Wk7&Uv#5S1yrKqiwpl3D{Pr6O2u;$U7R z%>=+=$AK9%Q*=u?X83#Dtq}i`3X2G_i(_6@k9<}5Vh4}+WGj!Q%yWCQNw zx+!&vt=j}-+{YPcJjs)hY+}!?v7BokTRX6slTzJdiChl~>ccVcwNP2{P(CPKQakkY0+G2(d@f2*<8Oz zA>b(<`xHVE%^^5!eqdu`6Cw^~=X-Oce|lW5d@&Y2a#;&p@PgBQ*x;S5uvE72Svcl0 zF=!<@dkpggY0T6*CNbKdw8j9)6-n0?4o;C8+2MkpiUOC*PG z%{jB>6u+c9qdiR7BZ&bk+b}JsuK{>bIG4sC`nbNe(84=3oQk6!rI#VV3#xR?6;rYD z<;oncIajr|(2@5x!3?O>7(@qlNGCVp^4X=qLdIgnaV!4Y@Zo*J6XAg`>k7k_6up(9 z&14p-{4x$lps9)BVDR+Ha6yKt+|K30Exa&f?nM+9NcN#I+^ybLop)4Amsc&}jFhUL zIF1>%XTP1c)$ES5jlU&wzpx!q-tb2qLY+1FyXDHBWAT`qaPr|dE4y?PkMqP*3X_8f z>#Rrd<8jM2Wok={h9aoN1)#ys(Nq7x0Fs}+!l5anxBw)zjWn$*T-kexbAs01I&2Yc z;e7AO=TkHns5OYX9XRSjo@&M9DKo;I&`QMddZYbqBBsJj(uXwBXll{qt&=QdF;6DL zMk>t80IdR-^94vci5N#GXE_tR=uk=};Kj>_bL)O^*p4PAts`k|(i7+u<>65h5fNbl ze9-+>yLz`t@JMTrA7ynEEqgy`Ybi&_qNx~ASTuhbYL2Y&A&jg55(rp>Wr|0$5228z z(1NHW7BTzx9q*a*=I7_hq%~SD;yF3aj3aY&bhNv_e+2M)hfDN$0WF8YG57Xo+$%Gy zcU!@fC3nPf!WiXt?sEpOy*M~HpiQDO4{Q_1%WOJhHa0gCva+&h>jJJccJIezvtKd- zfmrNK$&>b49A5qb2_ykqoq8VO(E}ur05@c~#sTH*AY|dQGOUsz~s9fLu`j_w$piN{v=l}fW z+rK@_nkg+UO%nUaF5~@-QPl|e(2itazjFP0F_0s9{rdGC0fAmwnejT;vO3rCrsGi% z4^Zz)Oil*6bN0RyY?}K&G;uUnVzz!JLFn_oL=+Lq9e|9)q=PU&9-tYJ)w&}hqC*&| zKtKQOv^YR^xcjuF>sT%AtFrmMHb6@6+`ReF+S=L~TWJBU$%6tmIV?l2E9qwiu-+(~ z9<{UMAI&VL1RRZ2lU!+TQ|&rl$08Tpuz%SZpiqT`>sYZ}Pm(jH6xy65Xx4_PeWsr7c=$%02KsKT4xp#s{*307w^U0K7zD!1 zNyOgkUntkgh;RrFZkfa3;I>_tqFF$yA^Y0~0C^^Ds=e_2fm?&hm|7=2xZ~hMfRb?l z-;Ti{MZUzb5-gBLbvU;)zZD95NMb?~=!f zXWL!R53QCYhx7J(agit5bv$5P+v^#Z7Q+1*l+IYNZ$5Jy1A%Gcxb{-wyL#I zFr&w8=gLgfZ?zm1p^Za)a#r}Ad&bJ9;k(UkU7yt29k!;>$HN`zW;;|yfQHczflRl6 zz)AG}$r=eLE%K2MZ>7j6fGv>gm_BvFD|WwkJ}*|T)V?pZ(Y+anFNcBuQP)~V`4~~% zVWdEH?2n3I2|yDTI#0DU(x?WYqkDRK`jB7*SgIl*EG#X=Te`Ph&n*1QR8H`*$JE*9 zt&g0p0sVcxkE_eJzA9;Cu~hafnjH@^bP66Rhq-o68Jl?dc%oG+MjMS-A4)iq`$48v z>kXdHW|(ejJ(!4f_ zGz*5eG$vV-)y1tHtk$4_BU&xULiAxZ<5hMo2B+@#Xq+D?->ngM8eyBt7EA}M*v}(W5ys)sNTlC9^ZD+SKa;48j*_Lfdkq@16BN&hL!<&y{<^JqT zR9TSO!y>wltiOxrAV}8t_|+E@`XD|TQ?@DiGy*=b2Lw(NchX%zxwB86Q74~Biuc}^-itx-uNz_QX6#C^wm$Xu~d zTKVmrfbic71+ZP_KnFsU*10?XthRJpP%FS-{x+0QR}yQ*uGk2Fd$3oh8%n-(=FGTv zW3TjE0TZ1)=Sr{ZED2x5eb!Z^VXN>Gu6q`*GkvY;VTjhX{FkTOMqa2VZ0;7gp;x8* zJ7LQd*wIt_<(ZXdM6i!ivmtRL<)g&~t5&NNxVfmy577s*p>REB%kA=oIVF0+T}4Q| zV7!2;nTWyRS+`-kcj(;K_7|QFna|D!Fa{wlIRb z>u|cGgX^`1S+1U9%vt74CVB1lYjuv>z4T41%kp2{rR2;=av`9gw4mE530TLD_{;t4 zez>*rgO>MiFQl;KzS>A*&SYT9Ix@A=OwCh#cMY;W*KXRf!+)mVq)d&cEA?`PVuHhM zTO0>_l#0GmRWfCfLh&n}cll5l@vVoVJL;JWTs{HBj2+Z=G-cHf&iE1fFu(^4HEh^b z^P$RsiQNqQ>a9~?ZmNXXH^(i#EGM7B)~DVY+P3Y{N%=l|6tNpJW*(pI&MhuA-e`t8 zp*1G3IS_t%qfQAZuf5uvqe|`MaSub`>v{DB}>E6Nc>Afedf$EmM8wIqE>?|PF`@y zPNXT&`;?b~teI2Kln$t{7m&LVZUNNbRqHW_KiK=RPfT96$TC4Z3gb07M>6RjT=;k? z_wpGG%$;(ycQ2ASyfEF?VG!X!4+~QeX^(`g3G+ZUL0Z^_F=*?77$s0lsl8HO^xKkr z=AQa&W(58x{<63MSU}@R7v2ef7XG{nM13ATm#xoK#?lU z`-@JV3$xM-koK$hxTN)c?V1_+-lD+B*Ks>BYTaIQq-lARiRkoL)ibexpA=lE>Kbo5NcmxK;bU7{j04y`#DA){ zYJ7vid3GLFd#|xKprjoB*a( zg+@ukuJSntLC?SV3~Mb~$kwOeDVEsOB&`!okziGs8+eQbc1v zsc*0xmgML(AX;H6r;q@+7jO08PiD>g(j`pv>|p~h#IY$XWgAa#)p9*+D%8rV{LFnZ z$_H@`oeNPmbnfqMG;Q#I`_M=b?Tz(MFiF{00NHHlYh=~v7P$jm)5@cE#0x2TC6{@f zhVoS|7=KcVMEA%tp0T1srOEidqkG%TBq4ksU8sQ`c6wo2z5Mh>{OmXDXc!{TyktMgY4MdX$fH}}Ovonu_eGLU9lQ>Un3Yl;swJV{vTO`z z4HNN92+alIi!$jp32gQj=dH@a2zw3`!j1#|^=e~+a4O>P^FN$)T3xxluG34?`$s0N zhtqnnqNCEVpyTJ2BS2|YDdVs7Y=`j}Lxd$7PI5jS*6?APbN=|pZ66nd!GtWx^0G~) zy!qp+1r;B29Gd$vNpxm?C|X1rtr_hACO4DiV99M$F+C7>cxnu+d(HcCNl8gPjuL?y zwG%a+$XZMd^Gvai@&B4i3TgAA-wd{et~Q|6;0nTF9f7SqgZ75Z~{b+<`K#Q4yWA!1MVvKsueBOIPdM zk8d3UsdOxmO)A}*dndf|`kJM7mR!him5nkjzM=)uoiXf~9EC{JO)51R@c)76#taX{ zp%d~*Gay1J-teJC*^OQf^ep0!h1+&=Bj}iOzl5KItj&C30g4eoB(xlw$ z<`$;kKPlPBJaNb3xc0GDCwTz{l>eo0Cl`R^hUPouAFHUuAuX#0-0XuT>T*nzaUP*- z0(mFbMT3jS))Lbd%4=(DyY1@ZOJk(nj}O?b>qn*0C-2w4=$ySH-RWRznyRa-o0ytf znwXeKwgd1Eq;xi9e%|JE{PW*Cr~h8>Y(ELdPwia!8PERbrPO~X7})t2T1l(^Y_{<3 s31I(uJxN^r--d|)v18)@#|eAKY;QMY)RrALXvbDj)O=L=@X5>n1KWh;`v3p{ diff --git a/docs/refguide/src/main/resources/wikbook/images/spaces.png b/docs/refguide/src/main/resources/wikbook/images/spaces.png index 96c7224e8bf0fe80b4f6368f84dc619fa21bcfaa..739612c5b99d50307d4493a36ccf43bfe6f3dbc5 100644 GIT binary patch literal 65683 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

AJPtM5Nkf_udUO=lDxL|y3S5N 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 B+Y$f( literal 34134 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 GJpUgEg@(TX From 597fb6cf0a5854845596c863de77bcb2168076e9 Mon Sep 17 00:00:00 2001 From: hoavu Date: Thu, 24 May 2012 17:08:15 +0700 Subject: [PATCH 2/2] DOC-1683 Change eXo Social into Social --- .../en/en-US/Application/List_of_Gadgets.wiki | 2 +- .../Spaces_Template_Configuration.wiki | 2 +- .../Developer_Documentation.wiki | 20 +++++++++---------- ...veloper_Documentation_Activity_Plugin.wiki | 4 ++-- ...veloper_Documentation_Activity_Stream.wiki | 4 ++-- .../Developer_Documentation_OpenSocial.wiki | 14 ++++++------- .../Developer_Documentation_Spaces.wiki | 2 +- .../Developing_Open_Social_Gadgets.wiki | 4 ++-- .../Overrideable_components.wiki | 2 +- .../DeveloperReference/widget_tutorial.wiki | 8 ++++---- 10 files changed, 31 insertions(+), 31 deletions(-) diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/Application/List_of_Gadgets.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/Application/List_of_Gadgets.wiki index 26f704b329..0ac2c4c84b 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/Application/List_of_Gadgets.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/Application/List_of_Gadgets.wiki @@ -1,4 +1,4 @@ -All eXo Social gadgets are in _opensocial.war_. +All the Social gadgets are in _opensocial.war_. h1. Activity Stream {anchor:id=SOCref.List_Of_Gadget_in_Social.ActivityStream} * *Description*: Manage activities of users: update status, like/unlike activities, comment activities, delete activities and delete comments. diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Spaces_Template_Configuration.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Spaces_Template_Configuration.wiki index 8ad0fadd15..1c6dfe129b 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Spaces_Template_Configuration.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/Configuration/Spaces_Template_Configuration.wiki @@ -1,4 +1,4 @@ -In the eXo Social, you may have two space types (classic and webos spaces). This is for the classic mode (it is the only one implemented now). +In the Social function, you may have two space types (classic and webos spaces). This is for the classic mode (it is the only one implemented now). For the classic space, you can pre-configure the template. You can configure the layout to select where to display the applications (for example, the application's menu on the left, the selected application is displayed on the right, and more). diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation.wiki index eab728d285..d38e802fb8 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation.wiki @@ -1,38 +1,38 @@ -eXo Social provides many extension point to make it fit to your needs. Every part can be customized and/or automated. +The Social function provides many extension point to make it fit to your needs. Every part can be customized and/or automated. h2. [Spaces|Developer Documentation Spaces ] -eXo Social provides a way to create groups and to share data and applications: the space. A space has it's own activity stream in which applications or members can publish information. In each space, members share applications and an openSocial dashboard. +The Social function provides a way to create groups and to share data and applications: the space. A space has it's own activity stream in which applications or members can publish information. In each space, members share applications and an openSocial dashboard. With the API, you can create spaces, invite users, add applications be notified of events, etc. h2. [People|Developer Documentation People] -eXo Social provides a way to add profile information, relationships and connections between users: People. With the API, profile information, relationship can be customized. +The Social function provides a way to add profile information, relationships and connections between users: People. With the API, profile information, relationship can be customized. h2. [Activity Stream|Developer Documentation Activity Stream] -eXo Social provides a way to share status updates and activity informations for users as well as spaces: Activity Streams. With the API, you can customize the activities or publish new ones. +The Social function provides a way to share status updates and activity information for users as well as spaces: Activity Streams. With the API, you can customize the activities or publish new ones. h2. [OpenSocial|Developer Documentation OpenSocial] -eXo Social is implementing the OpenSocial standard. So you can integrate OpenSocial Gadget in your dashboard and use the RPC or REST API to access the social data. +The Social function is implementing the OpenSocial standard. So you can integrate OpenSocial Gadget in your dashboard and use the RPC or REST API to access the social data. -eXo Social provides many extension point to make it fit to your needs. Every part can be customized and/or automated. +The Social function provides many extension point to make it fit to your needs. Every part can be customized and/or automated. h2. [Spaces|Developer Documentation Spaces ] -eXo Social provides a way to create groups and to share data and applications: the space. A space has it's own activity stream in which applications or members can publish information. In each space, members share applications and an openSocial dashboard. +The Social function provides a way to create groups and to share data and applications: the space. A space has it's own activity stream in which applications or members can publish information. In each space, members share applications and an openSocial dashboard. With the API, you can create spaces, invite users, add applications be notified of events... h2. [People|Developer Documentation People] -eXo Social provides a way to add profile information, relationships and connections between users: People. With the API, profile information, relationship can be customized. +The Social function provides a way to add profile information, relationships and connections between users: People. With the API, profile information, relationship can be customized. h2. [Activity Stream|Developer Documentation Activity Stream] -eXo Social provides a way to share status updates and activity informations for users as well as spaces: Activity Streams. With the API, you can customize the activities or publish new ones. +The Social function provides a way to share status updates and activity information for users as well as spaces: Activity Streams. With the API, you can customize the activities or publish new ones. h2. [OpenSocial|Developer Documentation OpenSocial] -eXo Social is implementing the OpenSocial standard. So you can integrate OpenSocial Gadget in your dashboard and use the RPC or REST API to access the social data. +The Social function is implementing the OpenSocial standard. So you can integrate OpenSocial Gadget in your dashboard and use the RPC or REST API to access the social data. diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Plugin.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Plugin.wiki index 9be29c32f7..bc5a8aafdf 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Plugin.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Plugin.wiki @@ -279,7 +279,7 @@ Currently, you have to copy and paste in the template file. By this way, you hav h3. What is activity builder? {anchor:id=Developer_document.What_is_activity_builder} -ActivityBuilder is one class which is used to get values of _ExoSocialActivity_ to set to UIActivity for displaying. eXo Social provides the BaseUIActivityBuilder class for developers to extend and customize their own activity builder easily and properly. +ActivityBuilder is one class which is used to get values of _ExoSocialActivity_ to set to UIActivity for displaying. The Social function provides the BaseUIActivityBuilder class for developers to extend and customize their own activity builder easily and properly. For example, to write your own UILinkActivityBuilder, you just need to extend BaseUIActivityBuilder and then customize attributes and behaviors of the activity builder as below. @@ -304,7 +304,7 @@ To learn more about ActivityBuilder, refer to the [BaseUIActivity class.|http:// {note} h2. Create a composer extension for composing activity on the UI composer and display it on activity stream {anchor:id=Developer_document.Create_composer_extension} -The UIActivityComposer is an extended class of UIContainer that is used to display inputs for users to create their own activities. To write your own activity composer, it is recommended that you use the UIActivityComposer available in eXo Social. +The UIActivityComposer is an extended class of UIContainer that is used to display inputs for users to create their own activities. To write your own activity composer, it is recommended that you use the UIActivityComposer available in the Social function. For example, to create an input component for inserting video links into your activity, do the following steps: diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Stream.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Stream.wiki index c3960fd555..03afc2569f 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Stream.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Activity_Stream.wiki @@ -1,4 +1,4 @@ -eXo Social provides users a way to share their activity information (also known as Activity Stream) and collaborate in spaces (also known as group work). With the API, you can customize the way to display activities or publish new ones. +The Social function provides users a way to share their activity information (also known as Activity Stream) and collaborate in spaces (also known as group work). With the API, you can customize the way to display activities or publish new ones. To manipulate activities, you need to use the _AtivityManager_ service. h1. Create an activity {anchor:id=SOCref.Developer_references.CreateActivity} @@ -160,7 +160,7 @@ Then, register this processor by adding some XML configuration into the project h1. Publish an RSS feed with feedmash {anchor:id=SOCref.Developer_references.Publish_an_rss_feed_with_feedmash} -It is really easy to publish an RSS feed to a space's activity stream. eXo Social already provides {{FeedmashJobPlugin}} for publishing RSS feeds. As you can see in project {{exo.social.extras.feedmash}}, there are {{JiraFeedConsumer}} and {{HudsonFeedConsumer}} samples to post eXo Social project's feeds (Jira and Hudson) to a pre-defined space: {{exosocial}} in a specifiportal container: {{socialdemo}} as in the configuration file: +It is really easy to publish an RSS feed to a space's activity stream. The Social function already provides {{FeedmashJobPlugin}} for publishing RSS feeds. As you can see in project {{exo.social.extras.feedmash}}, there are {{JiraFeedConsumer}} and {{HudsonFeedConsumer}} samples to post eXo Social project's feeds (Jira and Hudson) to a pre-defined space: {{exosocial}} in a specifiportal container: {{socialdemo}} as in the configuration file: {code:xml} diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_OpenSocial.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_OpenSocial.wiki index 534593014e..ec10377215 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_OpenSocial.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_OpenSocial.wiki @@ -1,5 +1,5 @@ -eXo Social supports the OpenSocial standard. So you can integrate OpenSocial gadgets in your dashboard and use the RPC or REST service to view or publish the social data. -With the support for the OpenSocial standard, eXo Social provides a framework for developers to build gadgets that can display and mash up activity information for contacts, social networks, applications and services. +The Social function supports the OpenSocial standard. So you can integrate OpenSocial gadgets in your dashboard and use the RPC or REST service to view or publish the social data. +With the support for the OpenSocial standard, the Social provides a framework for developers to build gadgets that can display and mash up activity information for contacts, social networks, applications and services. h1. Gadget {anchor:id=SOCref.Developers_References.OpenSocial.Gadget} Gadgets are web-based software components based on HTML, CSS, JavaScript; defined by using an XML declaration syntax. They allow developers to easily write social applications that work on the social networks supporting OpenSocial APIs without modification. See the following links for detailed information: @@ -11,18 +11,18 @@ Gadgets are web-based software components based on HTML, CSS, JavaScript; define You are going to the detail on how to create an opensocial gadget. However, the tutorials are done greatly in Opensocial official site so you should read these tutorials at [this website|http://wiki.opensocial.org/index.php?title=Gadget_Developer's_Guide] {note} -In Opensocial, gadgets only work in the dashboard in eXo Social. +In Opensocial, gadgets only work in the dashboard in the Social. {note} h2. Supported APIs {anchor:id=SOCref.Developers_References.OpenSocial.Supported_APIs} -As said above, eXo Social is implementing the OpenSocial standard. So, every eXo Social implementations apply the Opensocial Specification generally or [Apache Shindig|http://shindig.apache.org/overview.html] specifically. Therefore, eXo Social uses and extends Apache Shindig APIs to compatible with the common Opensocial APIs which is supported by other big social networks like [Ning|http://www.ning.com], [Hi5|http://www.hi5.com], [Orkut|http://www.orkut.com], etc. +As said above, the Social is implementing the OpenSocial standard. So, every Social implementations apply the Opensocial Specification generally or [Apache Shindig|http://shindig.apache.org/overview.html] specifically. Therefore, Social uses and extends Apache Shindig APIs to compatible with the common Opensocial APIs which is supported by other big social networks like [Ning|http://www.ning.com], [Hi5|http://www.hi5.com], [Orkut|http://www.orkut.com], etc. To get more details about Supported APIs, you should also read [Opensocial Specs|http://www.opensocial.org/page/specs-1]. h1. REST/RPC API {anchor:id=SOCref.Developers_References.OpenSocial.REST_RPC_API} -If your eXo social server is running on http://localhost:8080/m the address of the API will be: +If your Social server is running on http://localhost:8080/m the address of the API will be: REST API: http://localhost:8080/social/social/rest @@ -60,7 +60,7 @@ The consumerKey and sharedSecret are the key that need to be shared with the app h2. Publish an activity into a space {anchor:id=SOCref.Developers_References.OpenSocial.Publish_Activity_Into_Space} -eXo Social added this functionality that is not available in the standard opensocial API. You can publish activities into a space using the opensocial API. +The Social function added this functionality that is not available in the standard opensocial API. You can publish activities into a space using the opensocial API. To do this, instead of publishing your activity to the group @self as usual, publish it to the group "space:spaceID" or "space:spaceName". @@ -83,4 +83,4 @@ Using the opensocial java library and groovy, your code will look like this: As you can see in this example, the groupId is set to "space:bookflow", BookFlow is the name of your space. h3. Tutorial {anchor:id=SOCref.Developers_References.OpenSocial.Tutorial} -* See [Grails + eXo Social tutorial|http://www.exoplatform.com/company/public/website/resource-viewer?path=/website/Content%20types/Tutorial/grails-exo-social]. \ No newline at end of file +* See [Grails + Social tutorial|http://www.exoplatform.com/company/public/website/resource-viewer?path=/website/Content%20types/Tutorial/grails-exo-social]. \ No newline at end of file diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Spaces.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Spaces.wiki index b1a69b7f73..91a8b433df 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Spaces.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developer_Documentation_Spaces.wiki @@ -1,4 +1,4 @@ -eXo Social provides a way to create groups and to share data and applications by spaces. A space has its own activity stream in which applications or members can publish information. In each space, members use applications together with shared data. +The Social function provides a way to create groups and to share data and applications by spaces. A space has its own activity stream in which applications or members can publish information. In each space, members use applications together with shared data. To manipulate the spaces, you will use the SpaceService. To get an instance of this class, you need to get the current _PortalContainer_ instance. diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developing_Open_Social_Gadgets.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developing_Open_Social_Gadgets.wiki index 1d14e934e9..e5774bbd1b 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developing_Open_Social_Gadgets.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Developing_Open_Social_Gadgets.wiki @@ -1,7 +1,7 @@ h1. Developing OpenSocial Gadgets {anchor:id=SOCref.DevelopingOpenSocialGadget} h1. Introduction {anchor:id=SOCref.Developer_references.Introduction} -eXo Social with OpenSocial container based on apache shindig supports OpenSocial capability. So you can develop gadgets that use OpenSocial API to request OpenSocial data or deploy opensocial gadget using tool supported by portal. +The Social function with OpenSocial container based on apache shindig supports OpenSocial capability. So you can develop gadgets that use OpenSocial API to request OpenSocial data or deploy opensocial gadget using tool supported by portal. To develop your gadgets, you can use the tool that supported by portal. @@ -29,7 +29,7 @@ TODO, but you can look at this [demonstration|http://www.vimeo.com/2069512] h1. Developing OpenSocial Gadgets h1. Introduction -eXo Social with OpenSocial container based on apache shindig supports OpenSocial capability. So you can develop gadgets that use OpenSocial API to request OpenSocial data or deploy opensocial gadget using tool supported by portal. +The Social function with OpenSocial container based on apache shindig supports OpenSocial capability. So you can develop gadgets that use OpenSocial API to request OpenSocial data or deploy opensocial gadget using tool supported by portal. To develop your gadgets, you can use the tool that supported by portal. diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Overrideable_components.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Overrideable_components.wiki index 5aec4cadb4..75ccfea50c 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Overrideable_components.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/Overrideable_components.wiki @@ -1,4 +1,4 @@ -There are 2 components in eXo Social that can be overridden: Space Application Handler & Space Service. +There are 2 components in the Social function that can be overridden: Space Application Handler & Space Service. * *Space Application Handler* {code:xml} diff --git a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/widget_tutorial.wiki b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/widget_tutorial.wiki index 374a18d4a3..38e51c7081 100644 --- a/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/widget_tutorial.wiki +++ b/docs/refguide/src/main/resources/wikbook/en/en-US/DeveloperReference/widget_tutorial.wiki @@ -1,6 +1,6 @@ -The eXo Social widget enables developers to add capabilities of eXo Social to external applications. Since the widget is hosted on your eXo Social server, it can display personalized information. An activity stream of the most recent user actions will display to the group's members. +The Social widget enables developers to add capabilities of the Social to external applications. Since the widget is hosted on your Social server, it can display personalized information. An activity stream of the most recent user actions will display to the group's members. -There are two options of the eXo Social widget that provide different levels of integration and information. +There are two options of the Social widget that provide different levels of integration and information. The basic version of this widget is an iFrame. The more advanced version is a button you can insert in a page; this will display a small pop-up with information about the space. @@ -13,8 +13,8 @@ To insert the basic version, you need to have an iFrame to insert on your site. {code} To install this version in your application, replace all the uppercase text below: -* URL_OF_YOUR_EXO_INSTALLATION.COM: This is the URL of your eXo Social installation. If you are testing on your local computer, the URL may be _localhost:8080_. -* NAME_OF_YOUR_SPACE: This is the title of your space in eXo Social. In the URL, it is necessary to avoid special characters. For the space name, you can only use alphanumeric characters and "_", ".", "-" or ". ". +* URL_OF_YOUR_EXO_INSTALLATION.COM: This is the URL of your Social installation. If you are testing on your local computer, the URL may be _localhost:8080_. +* NAME_OF_YOUR_SPACE: This is the title of your space in Social. In the URL, it is necessary to avoid special characters. For the space name, you can only use alphanumeric characters and "_", ".", "-" or ". ". * DESCRIPTION_OF_THE_SPACE: This will be displayed in the list of spaces. h1. Advanced version {anchor:id=SOCref.DeveloperReference.widget_tutorial.advanced_version}