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

2009年7月29日水曜日

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

とりあえず、サーバ側の実装してみた。

requestSendMessage時に発行するmethodはmessages.modifyにした。

で対応するサービスは、MessageServiceのcreateMessage。
messages.modifyがクライアントから飛んでくると、必ずcreateMessageが呼ばれる、
のではなく、msgCollIdなるパラメータに何かしらの値が入っているとき、
のみらしい。

msgCollIdというのは、どうもMessageを束ねるもののIDらしい。よくわかんないけど。
とりあえず使わないので考えない。
クライアントからはダミーのmsgCollIdを送付するようにして、messages.modifyのときは
必ずcreateMessageが呼ばれるようにした。

で、以下createMessageの実装。

  1. public Future<Void> createMessage(UserId userId, String appId, String msgCollId, Message message,  
  2.                            SecurityToken token) throws ProtocolException {  
  3.   logic.createMessage(userId, appId, msgCollId, message, token);  
  4.   return ImmediateFuture.newInstance(null);  
  5. }  

こんだけ。
何も考えずにlogicへパス。

でlogic。
  1. public void createMessage(UserId userId, String appId, String msgCollId, Message message,  
  2.                            SecurityToken token) throws ProtocolException {  
  3.   logger.info("メッセージ生成開始:");  
  4.   String viewerId = token.getViewerId();  
  5.   String ownerId = token.getOwnerId();  
  6.   GmsPerson viewer = null;  
  7.   try {  
  8.     if (StringUtils.hasText(viewerId)) {  
  9.       viewer = gmsPersonDao.selectByLoginId(viewerId);  
  10.     }  
  11.   }  
  12.   catch (ObjectRetrievalFailureException ex) {  
  13.   }  
  14.   
  15.   if (viewer == null) {  
  16.     if (logger.isDebugEnabled()) {  
  17.       logger.debug("Guestは送信できない:");  
  18.     }  
  19.     throw new ProtocolException(HttpServletResponse.SC_FORBIDDEN,  
  20.       "Guestのため、送信できない");  
  21.   }  
  22.   if (! isInstalledGadget(viewer, token.getModuleId())) {  
  23.     if (logger.isDebugEnabled()) {  
  24.       logger.debug("ガジェット未インストール:"  
  25.         + "viewerId:[" + viewer.getLoginId() + "]:"  
  26.         + "ガジェットID:[" + token.getModuleId() + "]"  
  27.       );  
  28.     }  
  29.     throw new ProtocolException(HttpServletResponse.SC_FORBIDDEN,  
  30.       "未インストールのため、送信できない:loginid:[" + viewer.getLoginId() + "]");  
  31.   }  
  32.   GmsPerson owner = gmsPersonDao.selectByLoginId(ownerId);  
  33.   String fromLoginId = userId.getUserId(token);  
  34.   GmsPerson fromUser = gmsPersonDao.selectByLoginId(fromLoginId);  
  35.   
  36.   for (String recip: message.getRecipients()) {  
  37.     GmsMessage gmsMessage = new GmsMessage();  
  38.     gmsMessage.setId(UuidGenerator.compress(UuidGenerator.generate()));  
  39.     gmsMessage.setFromPersonId(fromUser.getId());  
  40.     UserId toUserId = new UserId(UserId.Type.jsonValueOf(recip), recip);  
  41.     String recipLoginId = toUserId.getUserId(token);  
  42.     GmsPerson recipPerson = gmsPersonDao.selectByLoginId(recipLoginId);  
  43.     gmsMessage.setToPersonId(recipPerson.getId());  
  44.     if (StringUtils.hasText(message.getBody())) {  
  45.       gmsMessage.setBody(message.getBody());  
  46.     }  
  47.     else {  
  48.       gmsMessage.setBody("");  
  49.     }  
  50.     gmsMessage.setBodyId("");  
  51.     if (StringUtils.hasText(message.getTitle())) {  
  52.       gmsMessage.setTitle(message.getTitle());  
  53.     }  
  54.     else {  
  55.       gmsMessage.setTitle("");  
  56.     }  
  57.     gmsMessage.setTitleId("");  
  58.     gmsMessage.setType(message.getType().toString());  
  59.     gmsMessage.setCreatedAt(new Timestamp(System.currentTimeMillis()));  
  60.     gmsMessageDao.insert(gmsMessage);  
  61.   }  
  62.   logger.info("メッセージ生成終了:");  
  63. }  

へっぽこだけどまぁいいや。
ただ単にmessageテーブルにinsert。
チェックとは考えてない。

lockedDomain機能を有効にしてガジェット毎に別ドメインにしているので、
認証済みクッキーは飛んでこない。なので、securityTokenのみでチェックしている。

で、実行と。

ちゃんとDBに保存された。

.

0 コメント: