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

2009年7月24日金曜日

[Apache Shindig][お勉強][OpenSocial] メモ80 opensocial.requestCreateActivityのサーバ側実装をしてみる(3)

とりあえず、requestCreateActivityに対応するサーバ側処理完成。

くそソースだけど以下な感じ。

  1. public void createActivity(UserId userId, GroupId groupId, String appId,  
  2.     Set<String> fields, Activity activity, SecurityToken token) throws ProtocolException {  
  3.   GmsPerson viewer = getUser();  
  4.   logger.info("createActivity開始"  
  5.     + "viewer:[" + ((viewer == null) ? "Guest" : viewer.getLoginId()) + "]:"  
  6.     + "userId:[" + userId + "]:"  
  7.     + "appId:[" + appId + "]:"  
  8.   );  
  9.   if (viewer == null) {  
  10.     logger.info("createActivity終了:Guestは保存できない:"  
  11.       + "viewer:[" + ((viewer == null) ? "Guest" : viewer.getLoginId()) + "]:"  
  12.       + "userId:[" + userId + "]:"  
  13.       + "appId:[" + appId + "]:"  
  14.     );  
  15.     throw new ProtocolException(HttpServletResponse.SC_FORBIDDEN,  
  16.       "Guestは保存できない: 未ログイン");  
  17.   }  
  18.   
  19.   String loginId = userId.getUserId(token);  
  20.   if ("Guest".equalsIgnoreCase(loginId)) {  
  21.     logger.info("createActivity終了:Guestは保存できない:"  
  22.       + "viewer:[" + ((viewer == null) ? "Guest" : viewer.getLoginId()) + "]:"  
  23.       + "userId:[" + userId + "]:"  
  24.       + "appId:[" + appId + "]:"  
  25.     );  
  26.     throw new ProtocolException(HttpServletResponse.SC_FORBIDDEN,  
  27.       "Guestは保存できない: loginid:[" + loginId + "]");  
  28.   }  
  29.   List<String> userLoginIds = new ArrayList<String>();  
  30.   userLoginIds.add(loginId);  
  31.   GmsPerson[] gmsPersons = gmsPersonDao.peopleGet(  
  32.     userLoginIds,  
  33.     "self",  
  34.     null,  
  35.     null,  
  36.     null,  
  37.     null,  
  38.     null,  
  39.     null,  
  40.     0,  
  41.     1,  
  42.     null);  
  43.   if (gmsPersons.length == 0) {  
  44.     logger.info("createActivity終了:該当Personなし:"  
  45.       + "viewer:[" + ((viewer == null) ? "Guest" : viewer.getLoginId()) + "]:"  
  46.       + "userId:[" + userId + "]:"  
  47.       + "appId:[" + appId + "]:"  
  48.     );  
  49.     throw new ProtocolException(HttpServletResponse.SC_FORBIDDEN,  
  50.       "Guestは保存できない: loginid:[" + loginId + "]");  
  51.   }  
  52.   gmsPersonDao.select(gmsPersons[0].getId(), true);  
  53.   GmsActivity target = mapToGmsActivity(gmsPersons[0], appId, activity, token);  
  54.   if (supportsField(token.getContainer(), "activity", Activity.Field.MEDIA_ITEMS.toString()) && activity.getMediaItems() != null) {  
  55.     for(MediaItem m : activity.getMediaItems()) {  
  56.       GmsMediaItem gmsMediaItem = new GmsMediaItem();  
  57.       gmsMediaItem.setId(UuidGenerator.compress(UuidGenerator.generate()));  
  58.       gmsMediaItem.setActivityId(target.getId());  
  59.       if (supportsField(token.getContainer(), "mediaItem", MediaItem.Field.MIME_TYPE.toString()) && m.getMimeType() != null) {  
  60.         gmsMediaItem.setMimeType(m.getMimeType());  
  61.       }  
  62.       else {  
  63.         gmsMediaItem.setMimeType("");  
  64.       }  
  65.       if (supportsField(token.getContainer(), "mediaItem", MediaItem.Field.TYPE.toString()) && m.getType() != null  
  66.           && (MediaItem.Type.AUDIO == m.getType() || MediaItem.Type.IMAGE == m.getType() || MediaItem.Type.VIDEO == m.getType())) {  
  67.         gmsMediaItem.setMediaType(m.getType().toString());  
  68.       }  
  69.       else {  
  70.         gmsMediaItem.setMediaType("");  
  71.       }  
  72.       if (supportsField(token.getContainer(), "mediaItem", MediaItem.Field.URL.toString()) && m.getUrl() != null) {  
  73.         gmsMediaItem.setUrl(m.getUrl());  
  74.       }  
  75.       else {  
  76.         gmsMediaItem.setUrl("");  
  77.       }  
  78.       gmsMediaItem.setAlbumId("");  
  79.       Timestamp now = new Timestamp(System.currentTimeMillis());  
  80.       gmsMediaItem.setCreated(now);  
  81.       gmsMediaItem.setDescription("");  
  82.       gmsMediaItem.setDuration(-1);  
  83.       gmsMediaItem.setFileSize(-1);  
  84.       gmsMediaItem.setLanguage("");  
  85.       gmsMediaItem.setLastUpdated(now);  
  86.       gmsMediaItem.setLocationId("");  
  87.       gmsMediaItem.setNumComments(0);  
  88.       gmsMediaItem.setNumViews(0);  
  89.       gmsMediaItem.setNumVotes(0);  
  90.       gmsMediaItem.setRating(0);  
  91.       gmsMediaItem.setStartTime(now);  
  92.       gmsMediaItem.setTaggedPeople("");  
  93.       gmsMediaItem.setTags("");  
  94.       gmsMediaItem.setThumbnailUrl("");  
  95.       gmsMediaItem.setTitle("");  
  96.       gmsMediaItemDao.insert(gmsMediaItem);  
  97.     }  
  98.   }  
  99.   gmsActivityDao.insert(target);  
  100.   logger.info("createActivity終了"  
  101.     + "viewer:[" + ((viewer == null) ? "Guest" : viewer.getLoginId()) + "]:"  
  102.     + "userId:[" + userId + "]:"  
  103.     + "appId:[" + appId + "]:"  
  104.   );  
  105. }  
  106. public GmsActivity mapToGmsActivity(GmsPerson person, String appId, Activity activity, SecurityToken token) {  
  107.   GmsActivity result = new GmsActivity();  
  108.   result.setId(UuidGenerator.compress(UuidGenerator.generate()));  
  109.   result.setGmsPersonId(person.getId());  
  110.   result.setAppId(appId);  
  111.   String appHashId = toStringDigest(getStringDigest(appId));  
  112.   if (logger.isDebugEnabled()) {  
  113.     logger.debug("appHashId:[" + appHashId + "]");  
  114.   }  
  115.   result.setAppHashId(appHashId);  
  116.   if (supportsField(token.getContainer(), "activity", Activity.Field.BODY.toString()) && activity.getBody() != null) {  
  117.     result.setBody(activity.getBody());  
  118.   }  
  119.   else {  
  120.     result.setBody("");  
  121.   }  
  122.   if (supportsField(token.getContainer(), "activity", Activity.Field.BODY_ID.toString()) && activity.getBodyId() != null) {  
  123.     result.setBodyId(activity.getBodyId());  
  124.   }  
  125.   else {  
  126.     result.setBodyId("");  
  127.   }  
  128.   if (supportsField(token.getContainer(), "activity", Activity.Field.EXTERNAL_ID.toString()) && activity.getExternalId() != null) {  
  129.     result.setExternalId(activity.getExternalId());  
  130.   }  
  131.   else {  
  132.     result.setExternalId("");  
  133.   }  
  134.   result.setPostedTime(new Timestamp(System.currentTimeMillis())); /* 取り出すときにはlongに変換すること */  
  135.   if (supportsField(token.getContainer(), "activity", Activity.Field.PRIORITY.toString()) && activity.getPriority() != null) {  
  136.     result.setPriority((double)(float)activity.getPriority());  
  137.   }  
  138.   else {  
  139.     result.setPriority(0.0d);  
  140.   }  
  141.   if (supportsField(token.getContainer(), "activity", Activity.Field.STREAM_FAVICON_URL.toString()) && activity.getStreamFaviconUrl() != null) {  
  142.     result.setStreamFaviconUrl(activity.getStreamFaviconUrl());  
  143.   }  
  144.   else {  
  145.     result.setStreamFaviconUrl("");  
  146.   }  
  147.   if (supportsField(token.getContainer(), "activity", Activity.Field.STREAM_SOURCE_URL.toString()) && activity.getStreamSourceUrl() != null) {  
  148.     result.setStreamSourceUrl(activity.getStreamSourceUrl());  
  149.   }  
  150.   else {  
  151.     result.setStreamSourceUrl("");  
  152.   }  
  153.   if (supportsField(token.getContainer(), "activity", Activity.Field.STREAM_TITLE.toString()) && activity.getStreamTitle() != null) {  
  154.     result.setStreamTitle(activity.getTitle());  
  155.   }  
  156.   else {  
  157.     result.setStreamTitle("");  
  158.   }  
  159.   if (supportsField(token.getContainer(), "activity", Activity.Field.STREAM_URL.toString()) && activity.getStreamUrl() != null) {  
  160.     result.setStreamUrl(activity.getUrl());  
  161.   }  
  162.   else {  
  163.     result.setStreamUrl("");  
  164.   }  
  165.   Map<String, String> params = activity.getTemplateParams();  
  166.   if (supportsField(token.getContainer(), "activity", Activity.Field.TEMPLATE_PARAMS.toString()) && params != null) {  
  167.     result.setTemplateParams(beanJsonConverter.convertToString(params));  
  168.   }  
  169.   else {  
  170.     result.setTemplateParams("");  
  171.   }  
  172.   if (supportsField(token.getContainer(), "activity", Activity.Field.TITLE.toString()) && activity.getTitle() != null) {  
  173.     result.setTitle(activity.getTitle());  
  174.   }  
  175.   else {  
  176.     result.setTitle("");  
  177.   }  
  178.   if (supportsField(token.getContainer(), "activity", Activity.Field.TITLE_ID.toString()) && activity.getTitleId() != null) {  
  179.     result.setTitleId(activity.getTitleId());  
  180.   }  
  181.   else {  
  182.     result.setTitleId("");  
  183.   }  
  184.   if (supportsField(token.getContainer(), "activity", Activity.Field.URL.toString()) && activity.getUrl() != null) {  
  185.     result.setUrl(activity.getUrl());  
  186.   }  
  187.   else {  
  188.     result.setUrl("");  
  189.   }  
  190.   return result;  
  191. }  


TEMPLATE_PARAMSはMapをJSON形式の文字列に変換後DBにセット。
container.jsのsupportsFieldと連動させたいのでsupportsFieldコールしまくり。

MediaItemは使用していない項目が大量にあるけど、これは0.9用らしい。


でActivityの保存ができた。

次はDataRequest.newFetchActivitiesRequest(idSpec, opt_params)のサーバ側処理を
実装してみるつもり。



--
というか、入力チェック一切行っていないのを今さら気づいた。

--
というか、hasPermissionをせっかく作ったのに使ってなかった。。

--
というか、サニタイズは?

--
簡易サニタイズつけた。
hasPermission呼ぶようにした。
.

0 コメント: