/*
* © Copyright IBM Corp. 2013
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.ibm.sbt.services.client.connections.activitystreams;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import com.ibm.commons.util.StringUtil;
import com.ibm.commons.util.io.json.JsonJavaObject;
import com.ibm.sbt.services.client.ClientService;
import com.ibm.sbt.services.client.ClientServicesException;
import com.ibm.sbt.services.client.Response;
import com.ibm.sbt.services.client.base.ConnectionsService;
import com.ibm.sbt.services.client.base.NamedUrlPart;
import com.ibm.sbt.services.client.base.transformers.TransformerException;
import com.ibm.sbt.services.client.connections.activitystreams.transformers.ActivityStreamTransformer;
import com.ibm.sbt.services.endpoints.Endpoint;
/**
* ActivityStreamService can be used to perform operations related to ActivityStream.
* <p>
* Relies on values of User, Group and Application to construct URLs and perform Network operations. Constructs {@link ActivityStreamEntity} objects after parsing the JSON response from Connections server
*
* @author Manish Kataria
* @author Carlos Manias
* <pre>
* Sample Usage
* {@code
* ActivityStreamService _service = new ActivityStreamService();
* ActivityStreamEntityList _entries = (List) _service.getUpdatesFromMyNetwork();
* }
* </pre>
* @see http://www-10.lotus.com/ldd/appdevwiki.nsf/xpDocViewer.xsp?lookupName=IBM+Connections+4.0+API+Documentation#action=openDocument&res_title=IBM_Connections_Activity_Stream_API&content=pdcontent
*/
public class ActivityStreamService extends ConnectionsService {
private static final long serialVersionUID = -1169787598206507188L;
private final ActivityStreamFeedHandler activityStreamFeedHandler = new ActivityStreamFeedHandler(this);
// Typical url pattern /activitystream/user/group/application
/**
* Constructor Creates ActivityStreamService Object with default endpoint
*/
public ActivityStreamService() {
this(DEFAULT_ENDPOINT_NAME);
}
/**
* Constructor
*
* @param endpoint
* Creates ActivityStreamService Object with the specified endpoint
*/
public ActivityStreamService(String endpoint) {
super(endpoint, DEFAULT_CACHE_SIZE);
}
/**
* Constructor
*
* @param endpoint
* Creates ActivityStreamService Object with the specified endpoint
*/
public ActivityStreamService(Endpoint endpoint) {
super(endpoint, DEFAULT_CACHE_SIZE);
}
/**
* Returns updates from ActivityStream service
* <p>
* Assumes {@link ASUser} as PUBLIC, {@link ASGroup} as ALL and {@link ASApplication} as STATUS
*
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getStream() throws ActivityStreamServiceException {
String url = ActivityStreamUrls.AS_PUBLIC_ALL_STATUS.format(this);
return getActivityStreamEntities(url, null);
}
/**
* Returns updates from ActivityStream service
*
* @param User
* see {@link ASUser} for possible values
* @param Group
* see {@link ASGroup} for possible values
* @param User
* see {@link ASApplication} for possible values
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getStream(String user, String group, String app,
Map<String, String> params) throws ActivityStreamServiceException {
// Set the parameters being passed in by user
String url = ActivityStreamUrls.AS_USER_GROUP_APP.format(this, ASUser.getByName(user), ASGroup.getByName(group), ASApplication.getByName(app));
return getActivityStreamEntities(url, params);
}
/**
* Returns updates from ActivityStream service
*
* @param User
* see {@link ASUser} for possible values
* @param Group
* see {@link ASGroup} for possible values
* @param User
* see {@link ASApplication} for possible values
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getStream(NamedUrlPart user, NamedUrlPart group, NamedUrlPart app,
Map<String, String> params) throws ActivityStreamServiceException {
// Set the parameters being passed in by user
String url = ActivityStreamUrls.AS_USER_GROUP_APP.format(this, user, group, app);
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to get all updates from Activity Stream
* <p>
* Assumes {@link ASUser} as PUBLIC, {@link ASGroup} as ALL and {@link ASApplication} as ALL
*
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getAllUpdates() throws ActivityStreamServiceException {
return getAllUpdates(null);
}
/**
* Wrapper method to get all updates from Activity Stream
* <p>
* Assumes {@link ASUser} as PUBLIC, {@link ASGroup} as ALL and {@link ASApplication} as ALL
*
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getAllUpdates(Map<String, String> params)
throws ActivityStreamServiceException {
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
params.put(ActivityStreamRequestParams.rollUp, "true");
String url = ActivityStreamUrls.AS_PUBLIC_ALL_ALL.format(this);
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to get all updates for user's network from Activity Streams
* <p>
* Assumes {@link ASUser} as ME, {@link ASGroup} as FRIENDS and {@link ASApplication} as ALL
*
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getUpdatesFromMyNetwork() throws ActivityStreamServiceException {
return getUpdatesFromMyNetwork(null);
}
/**
* Wrapper method to get all updates for user's network from Activity Streams
* <p>
* Assumes {@link ASUser} as ME, {@link ASGroup} as FRIENDS and {@link ASApplication} as ALL
*
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getUpdatesFromMyNetwork(Map<String, String> params)
throws ActivityStreamServiceException {
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
params.put(ActivityStreamRequestParams.rollUp, "true");
String url = ActivityStreamUrls.AS_ME_FRIENDS_ALL.format(this);
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to get all status updates for user's network from Activity Streams
* <p>
* Assumes {@link ASUser} as ME, {@link ASGroup} as FRIENDS and {@link ASApplication} as STATUS
*
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getStatusUpdatesFromMyNetwork() throws ActivityStreamServiceException {
return getStatusUpdatesFromMyNetwork(null);
}
/**
* Wrapper method to get all status updates for user's network from Activity Streams
* <p>
* Assumes {@link ASUser} as ME, {@link ASGroup} as FRIENDS and {@link ASApplication} as STATUS
*
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getStatusUpdatesFromMyNetwork(Map<String, String> params)
throws ActivityStreamServiceException {
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
params.put(ActivityStreamRequestParams.rollUp, "true");
String url = ActivityStreamUrls.AS_ME_FRIENDS_STATUS.format(this);
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to get all status updates for logged in user
* <p>
* Assumes {@link ASUser} as ME, {@link ASGroup} as ALL and {@link ASApplication} as STATUS
*
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getMyStatusUpdates() throws ActivityStreamServiceException {
return getMyStatusUpdates(null);
}
/**
* Wrapper method to get all status updates for logged in user
* <p>
* Assumes {@link ASUser} as ME, {@link ASGroup} as ALL and {@link ASApplication} as STATUS
* @param params
* Additional parameters used for constructing URL's
*
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getMyStatusUpdates(Map<String, String> params) throws ActivityStreamServiceException {
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
String url = ActivityStreamUrls.AS_ME_ALL_STATUS.format(this);
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to get all updates for all user's logged in user follows from Activity Streams
* <p>
* Assumes {@link ASUser} as ME, {@link ASGroup} as FOLLOWING and {@link ASApplication} as STATUS
*
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getUpdatesFromPeopleIFollow() throws ActivityStreamServiceException {
return getUpdatesFromPeopleIFollow(null);
}
/**
* Wrapper method to get all updates for all user's logged in user follows from Activity Streams
* <p>
* Assumes {@link ASUser} as ME, {@link ASGroup} as FOLLOWING and {@link ASApplication} as STATUS
*
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getUpdatesFromPeopleIFollow(Map<String, String> params)
throws ActivityStreamServiceException {
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
params.put(ActivityStreamRequestParams.rollUp, "true");
String url = ActivityStreamUrls.AS_ME_FOLLOWING_STATUS.format(this);
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to get Updates for Communities User Follows from Activity Streams
* <p>
* Assumes {@link ASUser} as ME, {@link ASGroup} as ALL and {@link ASApplication} as COMMUNITIES
*
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getUpdatesFromCommunitiesIFollow() throws ActivityStreamServiceException {
return getUpdatesFromCommunitiesIFollow(null);
}
/**
* Wrapper method to get Updates for Communities User Follows from Activity Streams
* <p>
* Assumes {@link ASUser} as ME, {@link ASGroup} as ALL and {@link ASApplication} as COMMUNITIES
*
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getUpdatesFromCommunitiesIFollow(Map<String, String> params)
throws ActivityStreamServiceException {
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
params.put(ActivityStreamRequestParams.rollUp, "true");
params.put(ActivityStreamRequestParams.broadcast, "true");
String url = ActivityStreamUrls.AS_ME_ALL_COMMUNITIES.format(this);
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to get Updates for a specific User from Activity Streams
* <p>
* Assumes {@link ASUser} as userid in parameter, {@link ASGroup} as INVOLVED and {@link ASApplication} as ALL
*
* @param id
* Userid of the user whom updates are required
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*
*/
public ActivityStreamEntityList getUpdatesFromUser(String userId) throws ActivityStreamServiceException {
return getUpdatesFromUser(userId, null);
}
/**
* Wrapper method to get Updates for a specific User from Activity Streams
* <p>
* Assumes {@link ASUser} as userid in parameter, {@link ASGroup} as INVOLVED and {@link ASApplication} as ALL
*
* @param id
* Userid of the user whose updates are required
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getUpdatesFromUser(String userId, Map<String, String> params)
throws ActivityStreamServiceException {
String url = ActivityStreamUrls.AS_USER_INVOLVED_ALL.format(this, ASUser.get(userId), ActivityStreamUrls.getLang(getUserLanguage()));
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to get Updates for a specific Community from Activity Streams
* <p>
* Assumes {@link ASUser} as communityId in parameter, {@link ASGroup} as ALL and {@link ASApplication} as NOAPP
*
* @param id
* Community of the community for which updates are required
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
// Retuns updates from a particular Community
public ActivityStreamEntityList getUpdatesFromCommunity(String communityId) throws ActivityStreamServiceException {
return getUpdatesFromCommunity(communityId, null);
}
/**
* Wrapper method to get Updates for a specific Community from Activity Streams
* <p>
* Assumes {@link ASUser} as communityId in parameter, {@link ASGroup} as ALL and {@link ASApplication} as NOAPP
*
* @param id
* Community of the community for which updates are required
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getUpdatesFromCommunity(String communityId, Map<String, String> params)
throws ActivityStreamServiceException {
if (StringUtil.isEmpty(communityId)) {
throw new ActivityStreamServiceException(null,"communityid passed was null");
}
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
String url = ActivityStreamUrls.AS_COMMUNITY_ALL.format(this, ASUser.COMMUNITY.getWithValue(communityId));
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to get Filtered view of a user's stream based on notification events
* <p>
* Assumes {@link ASUser} as ME in parameter, {@link ASGroup} as RESPONSES and {@link ASApplication} as NOAPP
*
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getNotificationsForMe(Map<String, String> params)
throws ActivityStreamServiceException {
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
String url = ActivityStreamUrls.AS_ME_RESPONSES.format(this);
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to get Filtered view of a user's stream based on notification events
* <p>
* Assumes {@link ASUser} as ME in parameter, {@link ASGroup} as NOTESFROMME and {@link ASApplication} as NOAPP
*
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getNotificationsFromMe(Map<String, String> params)
throws ActivityStreamServiceException {
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
String url = ActivityStreamUrls.AS_ME_NOTESFROMME.format(this);
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to get Filtered view of a user's stream based on notification events
* <p>
* Assumes {@link ASUser} as ME in parameter, {@link ASGroup} as RESPONSES and {@link ASApplication} as NOAPP
*
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getResponsesToMyContent(Map<String, String> params)
throws ActivityStreamServiceException {
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
String url = ActivityStreamUrls.AS_ME_RESPONSES.format(this);
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to get view of Actionable events
* <p>
* Assumes {@link ASUser} as ME in parameter, {@link ASGroup} as ACTION and {@link ASApplication} as NOAPP
*
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getMyActionableItems(Map<String, String> params)
throws ActivityStreamServiceException {
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
String url = ActivityStreamUrls.AS_ME_ACTION.format(this);
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to get view of Actionable events
* <p>
* Assumes {@link ASUser} as ME in parameter, {@link ASGroup} as ACTION
*
* @param id
* Application type ( blogs/wikis etc. )
* {@see http://www-10.lotus.com/ldd/appdevwiki.nsf/xpDocViewer.xsp?lookupName=IBM+Connections+4.0+API+Documentation#action=openDocument&res_title=Support_for_Saved_and_Actionable_events&content=pdcontent}
*
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getMyActionableItemsForApplication(String application, Map<String, String> params)
throws ActivityStreamServiceException {
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
String url = ActivityStreamUrls.AS_ME_ACTION_APP.format(this, ASApplication.get(application));
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to get view of SAVED events
* <p>
* Assumes {@link ASUser} as ME in parameter, {@link ASGroup} as SAVED and {@link ASApplication} as NOAPP
*
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getMySavedItems(Map<String, String> params)
throws ActivityStreamServiceException {
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
String url = ActivityStreamUrls.AS_ME_SAVED.format(this);
return getActivityStreamEntities(url, params);
}
/** Wrapper method to get view of SAVED events
* <p>
* Assumes {@link ASUser} as ME in parameter, {@link ASGroup} as SAVED
*
* @param id
* Application type ( blogs/wikis etc. )
* {@see http://www-10.lotus.com/ldd/appdevwiki.nsf/xpDocViewer.xsp?lookupName=IBM+Connections+4.0+API+Documentation#action=openDocument&res_title=Support_for_Saved_and_Actionable_events&content=pdcontent}
*
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList getMySavedItemsForApplication(String application, Map<String, String> params)
throws ActivityStreamServiceException {
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
String url = ActivityStreamUrls.AS_ME_SAVED_APP.format(this,ASApplication.get(application));
return getActivityStreamEntities(url, params);
}
/*
* Search wrappers
*/
/**
* Wrapper method to search in ActivityStreams
* <p>
* Assumes {@link ASUser} as PUBLIC , {@link ASGroup} as ALL and {@link ASApplication} as ALL
*
* @param query
* String to be searched for
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList searchByQuery(String query) throws ActivityStreamServiceException {
return searchByQuery(query, null);
}
/**
* Wrapper method to search in ActivityStreams
* <p>
* Assumes {@link ASUser} as PUBLIC , {@link ASGroup} as ALL and {@link ASApplication} as ALL
*
* @param query
* String to be searched for
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList searchByQuery(String query, Map<String, String> params)
throws ActivityStreamServiceException {
if (StringUtil.isEmpty(query)) {
throw new ActivityStreamServiceException(null,"query passed was null");
}
// /@public/@all/@all?rollup=true&query=manish
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
params.put(ActivityStreamRequestParams.query, query);
String url = ActivityStreamUrls.AS_PUBLIC_ALL_ALL.format(this);
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to search by tags in ActivityStreams
* <p>
* Assumes {@link ASUser} as PUBLIC , {@link ASGroup} as ALL and {@link ASApplication} as ALL
*
* @param query
* Tag to be searched for ( in case of multiple tags, provide comma separated String )
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList searchByTags(String tags) throws ActivityStreamServiceException {
return searchByTags(tags, null);
}
/**
* Wrapper method to search by tags in ActivityStreams
* <p>
* Assumes {@link ASUser} as PUBLIC , {@link ASGroup} as ALL and {@link ASApplication} as ALL
*
* @param query
* Tag to be searched for ( in case of multiple tags, provide comma separated String )
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList searchByTags(String tags, Map<String, String> params)
throws ActivityStreamServiceException {
if (StringUtil.isEmpty(tags)) {
throw new ActivityStreamServiceException(null,"tags passed was null");
}
// /@me/@all/@all?rollup=true&filters=[{'type':'tag','values':['iphone','android']}]&facetRequests=[{'people':5}]
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
params.put(ActivityStreamRequestParams.rollUp, "true");
if (!(tags.contains(","))) {
params.put(ActivityStreamRequestParams.filters, "[{'type':'tag','values':['" + tags + "']}]");
} else {
StringBuffer modifiedQuery = new StringBuffer();
StringTokenizer tokenizer = new StringTokenizer(tags, ",");
boolean addseperator = false;
while (tokenizer.hasMoreElements()) {
if (addseperator) {
modifiedQuery.append(",");
}
modifiedQuery.append("'" + tokenizer.nextElement().toString() + "'");
addseperator = true;
}
params.put(ActivityStreamRequestParams.filters, "[{'type':'tag','values':[" + modifiedQuery
+ "]}]");
}
String url = ActivityStreamUrls.AS_PUBLIC_ALL_ALL.format(this);
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to search in ActivityStreams using Search filters
* <p>
* Assumes {@link ASUser} as PUBLIC , {@link ASGroup} as ALL and {@link ASApplication} as ALL
*
* @param query
* FilterType to be searched for
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList searchByFilters(String filterType, String query)
throws ActivityStreamServiceException {
return searchByFilters(filterType, query, null);
}
/**
* Wrapper method to search in ActivityStreams using Search filters
* <p>
* Assumes {@link ASUser} as PUBLIC , {@link ASGroup} as ALL and {@link ASApplication} as ALL
*
* @param query
* FilterType to be searched for
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList searchByFilters(String filterType, String query,
Map<String, String> params) throws ActivityStreamServiceException {
if (StringUtil.isEmpty(filterType)) {
throw new ActivityStreamServiceException(null,"filterType passed was null");
}
if (StringUtil.isEmpty(query)) {
throw new ActivityStreamServiceException(null,"query passed was null");
}
// /@me/@all/@all?rollup=true&filters=[{'type':'tag','values':['iphone','android']}]&facetRequests=[{'people':5}]
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
params.put(ActivityStreamRequestParams.rollUp, "true");
if (!(query.contains(","))) {
params.put(ActivityStreamRequestParams.filters, "[{'type':'" + filterType + "','values':['"
+ query + "']}]");
} else {
StringBuffer modifiedQuery = new StringBuffer();
StringTokenizer tokenizer = new StringTokenizer(query, ",");
boolean addseperator = false;
while (tokenizer.hasMoreElements()) {
if (addseperator) {
modifiedQuery.append(",");
}
modifiedQuery.append("'" + tokenizer.nextElement().toString() + "'");
addseperator = true;
}
params.put(ActivityStreamRequestParams.filters, "[{'type':'" + filterType + "','values':["
+ modifiedQuery + "]}]");
}
String url = ActivityStreamUrls.AS_PUBLIC_ALL_ALL.format(this);
return getActivityStreamEntities(url, params);
}
/**
* Wrapper method to search in ActivityStreams using Search pattern
* <p>
* Assumes {@link ASUser} as PUBLIC , {@link ASGroup} as ALL and {@link ASApplication} as ALL
*
* @param Complete
* search pattern, check Connections documentation for generating Search patterns
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
// Generic Search
public ActivityStreamEntityList searchByPattern(String searchpattern) throws ActivityStreamServiceException {
return searchByPattern(searchpattern, null);
}
/**
* Wrapper method to search in ActivityStreams using Search pattern
* <p>
* Assumes {@link ASUser} as PUBLIC , {@link ASGroup} as ALL and {@link ASApplication} as ALL
*
* @param searchpattern
* Complete search pattern, check Connections documentation for generating Search patterns
* @param params
* Additional parameters used for constructing URL's
* @return ActivityStreamEntityList
* @throws ActivityStreamServiceException
*/
public ActivityStreamEntityList searchByPattern(String searchpattern, Map<String, String> params)
throws ActivityStreamServiceException {
if (StringUtil.isEmpty(searchpattern)) {
throw new ActivityStreamServiceException(null,"searchpattern passed was null");
}
// /@me/@all/@all?rollup=true&filters=[{'type':'tag','values':['iphone','android']}]&facetRequests=[{'people':5}]
if (null == params) {
params = new HashMap<String, String>();
params.put(ActivityStreamRequestParams.lang, getUserLanguage());
}
params.put(ActivityStreamRequestParams.rollUp, "true");
params.put(ActivityStreamRequestParams.custom, searchpattern);
String url = ActivityStreamUrls.AS_PUBLIC_ALL_ALL.format(this);
return getActivityStreamEntities(url, params);
}
/**
* postEntry Creates Activity Stream entry
*
* @param user
* @param group
* @param application
* @param jsondata
* @param header
* @return JsonJavaObject
* @throws ActivityStreamServiceException
*/
public String postEntry(String user, String group, String application, JsonJavaObject postPayload)
throws ActivityStreamServiceException {
if (null == postPayload) {
throw new ActivityStreamServiceException(null,
"postPayload passed was null");
}
String postUrl = ActivityStreamUrls.AS_USER_GROUP_APP.format(this, ASUser.get(user), ASGroup.get(group), ASApplication.NOAPP.get());
return postEntry(postUrl, postPayload);
}
public String postEntry(NamedUrlPart user, NamedUrlPart group, NamedUrlPart application, JsonJavaObject postPayload)
throws ActivityStreamServiceException {
String postUrl = ActivityStreamUrls.AS_USER_GROUP_APP.format(this, user, group, application);
return postEntry(postUrl, postPayload);
}
/**
* postEntry Creates Activity Stream entry
*
* @param JsonJavaObject
* @return String ( Id of the newly created entry )
* @throws ActivityStreamServiceException
*/
/*
* This method allows user to set json payload and headers Rest of the parameters like user,group and app are assumed to be default
*/
public String postEntry(JsonJavaObject postPayload) throws ActivityStreamServiceException {
if (null == postPayload) {
throw new ActivityStreamServiceException(null,
"postPayload passed was null");
}
String postUrl = ActivityStreamUrls.AS_ME_ALL_ALL.format(this);
return postEntry(postUrl, postPayload);
}
/**
* postEntry Creates Activity Stream entry
*
* @param ASDataPopulator
* @return String ( Id of the newly created entry )
* @throws ActivityStreamServiceException
*/
/*
* This method allows user to set ASDataPopulator, Rest of the parameters like user,group and app are assumed to be default
*/
public String postEntry(ASDataPopulator populator) throws ActivityStreamServiceException,TransformerException {
if (null == populator) {
throw new ActivityStreamServiceException(null,
"populator passed was null");
}
return postEntry(ASUser.ME.get(), ASGroup.ALL.get(), ASApplication.ALL.get(), populator);
}
/**
* postEntry Creates Activity Stream entry
* @param user
* @param group
* @param application
* @param ASDataPopulator
* @return String ( Id of the newly created entry )
* @throws ActivityStreamServiceException
*/
/*
* This method allows user to set ASDataPopulator, Rest of the parameters like user,group and app are assumed to be default
*/
public String postEntry(NamedUrlPart user, NamedUrlPart group, NamedUrlPart application, ASDataPopulator populator)
throws ActivityStreamServiceException, TransformerException {
if (null == populator) {
throw new ActivityStreamServiceException(null,
"populator passed was null");
}
ActivityStreamTransformer transformer = new ActivityStreamTransformer();
Map<String,Object> param = new HashMap<String, Object>();
param.put(transformer.DATA_POPULATOR, populator);
String jsonPayload = transformer.transform(param);
String postUrl = ActivityStreamUrls.AS_USER_GROUP_APP.format(this, user, group, application);
return postEntry(postUrl, jsonPayload);
}
/*
* Internal service methods
*/
public String postEntry(String url, Object payload) throws ActivityStreamServiceException {
try {
Map<String, String> header = new HashMap<String, String>();
header.put("Content-Type", "application/json");
Response serverResponse = createData(url, null, header, payload,ClientService.FORMAT_JSON);
JsonJavaObject entityinfo = (JsonJavaObject) serverResponse.getData();
return entityinfo.getJsonObject("entry").getString("id");
} catch (Exception e) {
throw new ActivityStreamServiceException(e, "postEntry failed");
}
}
public void saveEntry(String entryId) throws ActivityStreamServiceException{
JsonJavaObject payload = new JsonJavaObject();
payload.putString("id", "");
payload.putString("verb", "");
JsonJavaObject actor = new JsonJavaObject();
actor.putString("id", "");
payload.putObject("actor", actor);
JsonJavaObject connections = new JsonJavaObject();
connections.putString("saved", "true");
payload.putObject("connections", connections);
JsonJavaObject object = new JsonJavaObject();
object.putString("id", "");
payload.putObject("object", object);
String url = ActivityStreamUrls.AS_ME_ALL_ALL.format(this);
postEntry(url + "/" + entryId + "?X-HTTP-Method-Override=PUT", payload);
}
/**
* postMBEntry Creates Microblog entry
*
* @param user
* @param group
* @param application
* @param jsondata
* @param header
* @return JsonJavaObject
* @throws ActivityStreamServiceException
*/
public String postMicroblogEntry(String user, String group,
String application, JsonJavaObject postPayload)
throws ActivityStreamServiceException {
if (null == postPayload) {
throw new ActivityStreamServiceException(null,
"postPayload passed was null");
}
String postUrl = ActivityStreamUrls.UBLOG_USER_GROUP_APP.format(this, ASUser.get(user), ASGroup.get(group), ASApplication.get(application));
return postEntry(postUrl, postPayload);
}
public ActivityStreamEntityList getActivityStreamEntities(String url, Map<String, String> params) throws ActivityStreamServiceException {
ActivityStreamEntityList activityStreams = null;
try {
activityStreams = (ActivityStreamEntityList) getEntities(url, params, activityStreamFeedHandler);
} catch (ClientServicesException e) {
throw new ActivityStreamServiceException(e, "Problem occurred while creating list of activity streams");
}
return activityStreams;
}
private String getUserLanguage() {
return "en";
}
}