DataRequest.newFetchActivitiesRequestのactivityId指定しない版できた。
まず、GadgetXMLのJavaScriptは、
- function getData() {
- /*===================================================================*/
- /* OWNER IdSpec */
- /*===================================================================*/
- var idspec = new opensocial.IdSpec();
- idspec.setField(opensocial.IdSpec.Field.USER_ID, opensocial.IdSpec.PersonId.OWNER);
- idspec.setField(opensocial.IdSpec.Field.GROUP_ID, opensocial.IdSpec.GroupId.SELF);
- /*===================================================================*/
- /* DataRequestオブジェクトを作成し、 */
- /* そこにActivity取得リクエストを追加. */
- /* レスポンスを取得するときのキーは'get_activity' */
- /*===================================================================*/
- var req = opensocial.newDataRequest();
- req.add(req.newFetchActivitiesRequest(idspec), 'get_activity');
- /*===================================================================*/
- /* 送信! */
- /*===================================================================*/
- req.send(function(response){
- var activity = response.get('get_activity')
- if (activity.hadError()) {
- document.getElementById('result').innerHTML
- = 'エラーだったよ:' + activity.getErrorMessage();
- return;
- }
- var out = document.createElement('ul');
- if (activity.getData().size() == 0) {
- var li = document.createElement('li');
- li.innerHTML = 'Activity0件';
- out.appendChild(li);
- }
- activity.getData().each(function(act) {
- var li = document.createElement('li');
- var title = act.getField(opensocial.Activity.Field.TITLE);
- var media = act.getField(opensocial.Activity.Field.MEDIA_ITEMS);
- if (media != undefined) {
- for (var ii=0, len = media.length; ii < len; ii++) {
- if (media[ii].getField(opensocial.MediaItem.Field.TYPE) == opensocial.MediaItem.Type.IMAGE) {
- title +=
- '
- g src="'
- + media[ii].getField(opensocial.MediaItem.Field.URL);
- + '/>';
- }
- }
- }
- li.innerHTML = title;
- out.appendChild(li);
- });
- document.getElementById('result').appendChild(out);
- });
- }
と、こんな感じ。
newFetchActivitiesRequestの第二引数はactivityIdを指定しないので、必要なし。
で、このリクエストに対応するサーバ側の処理は、
まずAcitivityServiceのjava、
- public Future<RestfulCollection<Activity>> getActivities(Set<UserId> userIds,
- GroupId groupId, String appId, Set<String> fields, CollectionOptions options, SecurityToken token)
- throws ProtocolException {
- return ImmediateFuture.newInstance(
- new RestfulCollection<Activity>(logic.getActivities(userIds,groupId,appId,fields,options,token)));
- }
な感じ。
とりあえずパラメータはそのままlogicの方に渡す。
で、そのlogic。
- public List<Activity> getActivities(Set<UserId> userIds, GroupId groupId, String appId, Set<String> fields, CollectionOptions options, SecurityToken token)
- throws ProtocolException {
- GmsPerson viewer = getUser();
- List<Activity> activities = new ArrayList<Activity>();
- logger.info("アクティビティ取得(userId複数指定)開始:");
- if (viewer == null) {
- if (logger.isDebugEnabled()) {
- logger.debug("Guestは取得できない:");
- }
- throw new ProtocolException(HttpServletResponse.SC_FORBIDDEN,
- "Guestのため、取得できない:loginid:[" + viewer.getLoginId() + "]");
- }
- if (! isInstalledGadget(viewer, token.getModuleId())) {
- if (logger.isDebugEnabled()) {
- logger.debug("ガジェット未インストール:"
- + "viewerId:[" + viewer.getLoginId() + "]:"
- + "ガジェットID:[" + token.getModuleId() + "]"
- );
- }
- throw new ProtocolException(HttpServletResponse.SC_FORBIDDEN,
- "未インストールのため、取得できない:loginid:[" + viewer.getLoginId() + "]");
- }
- List<String> userLoginIds = getUserList(userIds, token);
- ExtendedGmsPerson[] gmsPersons = null;
- List<String> personIds = new ArrayList<String>();
- int first = 0;
- int max = 20;
- for (;;) {
- gmsPersons = gmsPersonDao.peopleGet(
- userLoginIds,
- groupId.getType().toString(),
- groupId.getGroupId(),
- null,
- null,
- null,
- null,
- null,
- first,
- max,
- null);
- if (logger.isDebugEnabled()) {
- logger.debug("count:[" + gmsPersons.length + "]");
- }
- int length = gmsPersons.length;
- for (int ii=0; ii<length; ii++) {
- personIds.add(gmsPersons[ii].getId());
- }
- if (length < max) {
- break;
- }
- first += max;
- }
- ExtendedGmsActivity[] gmsActivities = gmsActivityDao.selectByGmsPersonIds(personIds, options.getFirst(), options.getMax());
- for (int ii=0,len = gmsActivities.length; ii<len; ii++) {
- activities.add(mapToActivity(gmsActivities[ii], gmsActivities[ii].getGmsPerson().getLoginId()));
- }
- logger.info("アクティビティ取得(userId複数指定)終了:");
- return activities;
- }
大したことはしていない。
まずパーミッションをチェックして、
userIdとgroupIdからUserIdのリストを取得と。
そしたら、そのUserIdとひもづくactivityを取得する。
そんだけ。
.
0 コメント:
コメントを投稿