メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2009年7月19日日曜日

[Apache Shindig][お勉強][OpenSocial] メモ60 DataRequest.newFetchPeopleRequestのサーバ側実装(2)

とりあえず、現状サーバ側にわたってくる値をログに出して見た。

まずfireBug。


[{"method":"people.get","params":{"userId":["@owner"],"groupId":"@friends","count":20,"sortBy":"topFriends"

,"filterBy":"all","fields":["id","nickname","thumbnailUrl","profileUrl","id","name","thumbnailUrl","id"

,"displayName"]},"id":"get_friends"}]

な感じ。

で、サーバ側log。

jp.qsdn.gms.social.service.PersonServiceImpl - userId:[OWNER]
jp.qsdn.gms.social.service.PersonServiceImpl - groupId:[FRIENDS]
jp.qsdn.gms.social.service.PersonServiceImpl - field:[id]
jp.qsdn.gms.social.service.PersonServiceImpl - field:[nickname]
jp.qsdn.gms.social.service.PersonServiceImpl - field:[thumbnailUrl]
jp.qsdn.gms.social.service.PersonServiceImpl - field:[profileUrl]
jp.qsdn.gms.social.service.PersonServiceImpl - field:[name]
jp.qsdn.gms.social.service.PersonServiceImpl - field:[displayName]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:sortBy:[topFriends]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:sortOrder:[ascending]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:filter:[all]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:filterOperation:[contains]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:filterValue:[]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:first:[0]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:max:[20]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:updatedSince:[null]


となっている。
jp.qsdn.gms.social.service.PersonServiceImplというクラスは、

org.apache.shindig.social.opensocial.spi.PersonService

をimplementsしている。

UserId、GroupId、fieldは良いので置いておく。
問題はcollectionOptions。
newFetchPeopleRequest時に特に指定していないので、デフォルトの値がセットされている。


features/opensocial-base/fieldtranslations.js

の、

FieldTranslations.translateStandardArguments = function(opt_params, rpc_params) {
if (opt_params['first']) {
rpc_params.startIndex = opt_params['first'];
}
if (opt_params['max']) {
rpc_params.count = opt_params['max'];
}
if (opt_params['sortOrder']) {
rpc_params.sortBy = opt_params['sortOrder'];
}
if (opt_params['filter']) {
rpc_params.filterBy = opt_params['filter'];
}
if (opt_params['filterOp']) {
rpc_params.filterOp = opt_params['filterOp'];
}
if (opt_params['filterValue']) {
rpc_params.filterValue = opt_params['filterValue'];
}
if (opt_params['fields']) {
rpc_params.fields = opt_params['fields'];
}
};


で、第二引数をRPCパラメータに変換している。
どうも、rpc_params.sortOrderはどこでも触っていないっぽい。

だもんで、昇順、降順の指定をしたい人は、
newFetchPeopleRequestの中で直接指定するか、
FieldTranslations.translateStandardArgumentsに、
追加するかすればよさそうだけど、OpenSocialにそんな規約はあるのかどうか。

sort系は大体意味がわかった。
filterは、

opensocial.DataRequest.FilterType.ALL
opensocial.DataRequest.FilterType.HAS_APP
opensocial.DataRequest.FilterType.TOP_FRIENDS
opensocial.DataRequest.FilterType.IS_FRIENDS_WITH

が指定できて、
* ALLはすべて、
* HAS_APPはガジェットをインストールしている人、もしくは使ったことがある人、
* TOP_FRIENDSは、友達のみ
* IS_FRIENDS_WITHは、友達にfilterValueで指定した人がいる人(?)
を意味するっぽい。
ALL、HAS_APP、TOP_FRIENDS、IS_FRIENDS_WITHだけかと思ったけど、どうも、
filterには、検索対象の項目名を直接指定できるっぽい


filter=email
filterValue=aaaa@bbbb.ccc
filterOp=contains


などと指定できる模様。



filterOperationは、
Javaのソースの

package org.apache.shindig.protocol.model;

/**
* Standard filter operations
*/
public enum FilterOperation {
contains, equals, startsWith, present
}


のとおり、contains、equals、startsWith、presentが指定できる。
JavaScript側では、

opt_params['filterOp'] = 'contains';

などと、指定するしかなさそう。
PersonServiceDb.javaによると、
containsは、

column like '%filterValue%'

equalsは、

column = filterValue

startsWithは、

column like 'filterValue%'

なSQLのイメージ。

filterValueは、
filterで指定された値がHAS_APP、もしくは、IS_WITH_FRIENDSのときのみ有効ぽく、
filterがHAS_APPの場合は、サーバ側でインストールされているかどうかのチェックのための値、
filterがIS_WITH_FRIENDSの場合は、サーバ側で友達IDなどを指定するための値が
filterValueに設定される模様。
これはなんとなく、コンテナ依存ぽい。

firstとmaxは、何件目から何件表示するかを指定する。
よくやる、「次へ」、とか「前へ」なんかを実装するのに役立ちそう。

updatedSinceは、、、
ソースを見る限り誰も指定していないような気がする。。のでよくわからない。
たぶん、いついつ以降に更新されたデータのみ取得、みたいな意味かと思う。


これで一応パラメータの意味は分かったんで、次は実装してみる。
たぶん。

.

0 コメント: