とりあえず、requestCreateActivityに対応するサーバ側処理完成。
くそソースだけど以下な感じ。
- public void createActivity(UserId userId, GroupId groupId, String appId,
- Set<String> fields, Activity activity, SecurityToken token) throws ProtocolException {
- GmsPerson viewer = getUser();
- logger.info("createActivity開始"
- + "viewer:[" + ((viewer == null) ? "Guest" : viewer.getLoginId()) + "]:"
- + "userId:[" + userId + "]:"
- + "appId:[" + appId + "]:"
- );
- if (viewer == null) {
- logger.info("createActivity終了:Guestは保存できない:"
- + "viewer:[" + ((viewer == null) ? "Guest" : viewer.getLoginId()) + "]:"
- + "userId:[" + userId + "]:"
- + "appId:[" + appId + "]:"
- );
- throw new ProtocolException(HttpServletResponse.SC_FORBIDDEN,
- "Guestは保存できない: 未ログイン");
- }
- String loginId = userId.getUserId(token);
- if ("Guest".equalsIgnoreCase(loginId)) {
- logger.info("createActivity終了:Guestは保存できない:"
- + "viewer:[" + ((viewer == null) ? "Guest" : viewer.getLoginId()) + "]:"
- + "userId:[" + userId + "]:"
- + "appId:[" + appId + "]:"
- );
- throw new ProtocolException(HttpServletResponse.SC_FORBIDDEN,
- "Guestは保存できない: loginid:[" + loginId + "]");
- }
- List<String> userLoginIds = new ArrayList<String>();
- userLoginIds.add(loginId);
- GmsPerson[] gmsPersons = gmsPersonDao.peopleGet(
- userLoginIds,
- "self",
- null,
- null,
- null,
- null,
- null,
- null,
- 0,
- 1,
- null);
- if (gmsPersons.length == 0) {
- logger.info("createActivity終了:該当Personなし:"
- + "viewer:[" + ((viewer == null) ? "Guest" : viewer.getLoginId()) + "]:"
- + "userId:[" + userId + "]:"
- + "appId:[" + appId + "]:"
- );
- throw new ProtocolException(HttpServletResponse.SC_FORBIDDEN,
- "Guestは保存できない: loginid:[" + loginId + "]");
- }
- gmsPersonDao.select(gmsPersons[0].getId(), true);
- GmsActivity target = mapToGmsActivity(gmsPersons[0], appId, activity, token);
- if (supportsField(token.getContainer(), "activity", Activity.Field.MEDIA_ITEMS.toString()) && activity.getMediaItems() != null) {
- for(MediaItem m : activity.getMediaItems()) {
- GmsMediaItem gmsMediaItem = new GmsMediaItem();
- gmsMediaItem.setId(UuidGenerator.compress(UuidGenerator.generate()));
- gmsMediaItem.setActivityId(target.getId());
- if (supportsField(token.getContainer(), "mediaItem", MediaItem.Field.MIME_TYPE.toString()) && m.getMimeType() != null) {
- gmsMediaItem.setMimeType(m.getMimeType());
- }
- else {
- gmsMediaItem.setMimeType("");
- }
- if (supportsField(token.getContainer(), "mediaItem", MediaItem.Field.TYPE.toString()) && m.getType() != null
- && (MediaItem.Type.AUDIO == m.getType() || MediaItem.Type.IMAGE == m.getType() || MediaItem.Type.VIDEO == m.getType())) {
- gmsMediaItem.setMediaType(m.getType().toString());
- }
- else {
- gmsMediaItem.setMediaType("");
- }
- if (supportsField(token.getContainer(), "mediaItem", MediaItem.Field.URL.toString()) && m.getUrl() != null) {
- gmsMediaItem.setUrl(m.getUrl());
- }
- else {
- gmsMediaItem.setUrl("");
- }
- gmsMediaItem.setAlbumId("");
- Timestamp now = new Timestamp(System.currentTimeMillis());
- gmsMediaItem.setCreated(now);
- gmsMediaItem.setDescription("");
- gmsMediaItem.setDuration(-1);
- gmsMediaItem.setFileSize(-1);
- gmsMediaItem.setLanguage("");
- gmsMediaItem.setLastUpdated(now);
- gmsMediaItem.setLocationId("");
- gmsMediaItem.setNumComments(0);
- gmsMediaItem.setNumViews(0);
- gmsMediaItem.setNumVotes(0);
- gmsMediaItem.setRating(0);
- gmsMediaItem.setStartTime(now);
- gmsMediaItem.setTaggedPeople("");
- gmsMediaItem.setTags("");
- gmsMediaItem.setThumbnailUrl("");
- gmsMediaItem.setTitle("");
- gmsMediaItemDao.insert(gmsMediaItem);
- }
- }
- gmsActivityDao.insert(target);
- logger.info("createActivity終了"
- + "viewer:[" + ((viewer == null) ? "Guest" : viewer.getLoginId()) + "]:"
- + "userId:[" + userId + "]:"
- + "appId:[" + appId + "]:"
- );
- }
- public GmsActivity mapToGmsActivity(GmsPerson person, String appId, Activity activity, SecurityToken token) {
- GmsActivity result = new GmsActivity();
- result.setId(UuidGenerator.compress(UuidGenerator.generate()));
- result.setGmsPersonId(person.getId());
- result.setAppId(appId);
- String appHashId = toStringDigest(getStringDigest(appId));
- if (logger.isDebugEnabled()) {
- logger.debug("appHashId:[" + appHashId + "]");
- }
- result.setAppHashId(appHashId);
- if (supportsField(token.getContainer(), "activity", Activity.Field.BODY.toString()) && activity.getBody() != null) {
- result.setBody(activity.getBody());
- }
- else {
- result.setBody("");
- }
- if (supportsField(token.getContainer(), "activity", Activity.Field.BODY_ID.toString()) && activity.getBodyId() != null) {
- result.setBodyId(activity.getBodyId());
- }
- else {
- result.setBodyId("");
- }
- if (supportsField(token.getContainer(), "activity", Activity.Field.EXTERNAL_ID.toString()) && activity.getExternalId() != null) {
- result.setExternalId(activity.getExternalId());
- }
- else {
- result.setExternalId("");
- }
- result.setPostedTime(new Timestamp(System.currentTimeMillis())); /* 取り出すときにはlongに変換すること */
- if (supportsField(token.getContainer(), "activity", Activity.Field.PRIORITY.toString()) && activity.getPriority() != null) {
- result.setPriority((double)(float)activity.getPriority());
- }
- else {
- result.setPriority(0.0d);
- }
- if (supportsField(token.getContainer(), "activity", Activity.Field.STREAM_FAVICON_URL.toString()) && activity.getStreamFaviconUrl() != null) {
- result.setStreamFaviconUrl(activity.getStreamFaviconUrl());
- }
- else {
- result.setStreamFaviconUrl("");
- }
- if (supportsField(token.getContainer(), "activity", Activity.Field.STREAM_SOURCE_URL.toString()) && activity.getStreamSourceUrl() != null) {
- result.setStreamSourceUrl(activity.getStreamSourceUrl());
- }
- else {
- result.setStreamSourceUrl("");
- }
- if (supportsField(token.getContainer(), "activity", Activity.Field.STREAM_TITLE.toString()) && activity.getStreamTitle() != null) {
- result.setStreamTitle(activity.getTitle());
- }
- else {
- result.setStreamTitle("");
- }
- if (supportsField(token.getContainer(), "activity", Activity.Field.STREAM_URL.toString()) && activity.getStreamUrl() != null) {
- result.setStreamUrl(activity.getUrl());
- }
- else {
- result.setStreamUrl("");
- }
- Map<String, String> params = activity.getTemplateParams();
- if (supportsField(token.getContainer(), "activity", Activity.Field.TEMPLATE_PARAMS.toString()) && params != null) {
- result.setTemplateParams(beanJsonConverter.convertToString(params));
- }
- else {
- result.setTemplateParams("");
- }
- if (supportsField(token.getContainer(), "activity", Activity.Field.TITLE.toString()) && activity.getTitle() != null) {
- result.setTitle(activity.getTitle());
- }
- else {
- result.setTitle("");
- }
- if (supportsField(token.getContainer(), "activity", Activity.Field.TITLE_ID.toString()) && activity.getTitleId() != null) {
- result.setTitleId(activity.getTitleId());
- }
- else {
- result.setTitleId("");
- }
- if (supportsField(token.getContainer(), "activity", Activity.Field.URL.toString()) && activity.getUrl() != null) {
- result.setUrl(activity.getUrl());
- }
- else {
- result.setUrl("");
- }
- return result;
- }
TEMPLATE_PARAMSはMap
container.jsのsupportsFieldと連動させたいのでsupportsFieldコールしまくり。
MediaItemは使用していない項目が大量にあるけど、これは0.9用らしい。
でActivityの保存ができた。
次はDataRequest.newFetchActivitiesRequest(idSpec, opt_params)のサーバ側処理を
実装してみるつもり。
--
というか、入力チェック一切行っていないのを今さら気づいた。
--
というか、hasPermissionをせっかく作ったのに使ってなかった。。
--
というか、サニタイズは?
--
簡易サニタイズつけた。
hasPermission呼ぶようにした。
.
0 コメント:
コメントを投稿