Skip to content

Commit

Permalink
Refactoring. refs #262 @2h
Browse files Browse the repository at this point in the history
  • Loading branch information
みぞ@CrazyBeatCoder committed Dec 29, 2017
1 parent 7331397 commit 0b545bc
Show file tree
Hide file tree
Showing 11 changed files with 200 additions and 66 deletions.
65 changes: 31 additions & 34 deletions src/main/java/com/mizo0203/hoshiguma/HoshigumaLineBotServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@

import com.mizo0203.hoshiguma.repo.Repository;
import com.mizo0203.hoshiguma.repo.State;
import com.mizo0203.hoshiguma.repo.line.messaging.data.*;
import com.mizo0203.hoshiguma.repo.line.messaging.data.MessageObject;
import com.mizo0203.hoshiguma.repo.line.messaging.data.TemplateMessageObject;
import com.mizo0203.hoshiguma.repo.line.messaging.data.TextMessageObject;
import com.mizo0203.hoshiguma.repo.line.messaging.data.action.Action;
import com.mizo0203.hoshiguma.repo.line.messaging.data.action.DateTimePickerAction;
import com.mizo0203.hoshiguma.repo.line.messaging.data.action.DateTimePickerAction.Mode;
import com.mizo0203.hoshiguma.repo.line.messaging.data.action.PostBackAction;
import com.mizo0203.hoshiguma.repo.line.messaging.data.template.ButtonTemplate;
import com.mizo0203.hoshiguma.repo.line.messaging.data.template.Template;
import com.mizo0203.hoshiguma.repo.line.messaging.data.webHook.event.*;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
Expand Down Expand Up @@ -58,20 +61,13 @@ private void onLineWebhook(HttpServletRequest req, HttpServletResponse resp) {
if (requestBody == null) {
return;
}
for (WebHookEventObject event : requestBody.events) {
LOG.info("replyToken: " + event.replyToken);
switch (event.type) {
case WebHookEventObject.TYPE_JOIN:
onLineJoin(event);
break;
case WebHookEventObject.TYPE_MESSAGE:
onLineMessage(event);
break;
case WebHookEventObject.TYPE_POST_BACK:
onLinePostBack(event);
break;
default:
break;
for (WebHookEventObject event : requestBody.concreteWebHookEventObject()) {
if (event instanceof JoinEvent) {
onLineJoin((JoinEvent) event);
} else if (event instanceof MessageEvent) {
onLineMessage((MessageEvent) event);
} else if (event instanceof PostBackEvent) {
onLinePostBack((PostBackEvent) event);
}
}
} finally {
Expand All @@ -82,29 +78,30 @@ private void onLineWebhook(HttpServletRequest req, HttpServletResponse resp) {
}
}

private void onLineJoin(WebHookEventObject event) {
mRepository.clearEvent(event.source);
private void onLineJoin(JoinEvent event) {
LOG.info("replyToken: " + event.getReplyToken());
mRepository.clearEvent(event.getSource());
MessageObject[] messages = new MessageObject[1];
messages[0] = new TextMessageObject("幹事は任せろ!\nところで何の飲み会だっけ?w");
mRepository.replyMessage(event.replyToken, messages);
mRepository.replyMessage(event.getReplyToken(), messages);
}

private void onLineMessage(WebHookEventObject event) {
LOG.info("text: " + event.message.text);
if (event.message.text == null) {
private void onLineMessage(MessageEvent event) {
LOG.info("text: " + event.getMessage().text);
if (event.getMessage().text == null) {
return;
}
State state = mRepository.getState(event.source);
State state = mRepository.getState(event.getSource());
switch (state) {
case NO_EVENT_NAME:
{
String event_name = event.message.text.split("\n")[0];
mRepository.setEventName(event.source, event_name);
String event_name = event.getMessage().text.split("\n")[0];
mRepository.setEventName(event.getSource(), event_name);
MessageObject[] messages = new MessageObject[1];
messages[0] = createMessageData("ああ、" + event_name + "だったな!\n早速、日程調整するぞ!!\n候補を教えてくれ!");
// イベント名の修正機能
// 日程調整機能の ON/OFF 切り替え
mRepository.replyMessage(event.replyToken, messages);
mRepository.replyMessage(event.getReplyToken(), messages);
break;
}
case HAS_EVENT_NAME:
Expand All @@ -117,25 +114,25 @@ private void onLineMessage(WebHookEventObject event) {
}
}

private void onLinePostBack(WebHookEventObject event) {
switch (event.postback.data) {
private void onLinePostBack(PostBackEvent event) {
switch (event.getPostBackData()) {
case "data1":
{
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm");
String strDate = event.postback.params.datetime;
String strDate = event.getPostBackParams().datetime;
try {
Date date = fmt.parse(strDate);
System.out.println(strDate + "をDateオブジェクトへ変換 → " + date); // [2]
mRepository.addCandidateDate(event.source, date);
Date[] candidateDates = mRepository.getCandidateDates(event.source);
mRepository.addCandidateDate(event.getSource(), date);
Date[] candidateDates = mRepository.getCandidateDates(event.getSource());
SimpleDateFormat format2 = new SimpleDateFormat("MM/dd(E) HH:mm -");
StringBuilder text = new StringBuilder("↓候補日時一覧だ!↓");
for (Date candidateDate : candidateDates) {
text.append("\n").append(format2.format(candidateDate));
}
MessageObject[] messages = new MessageObject[1];
messages[0] = new TextMessageObject(text.toString());
mRepository.replyMessage(event.replyToken, messages);
mRepository.replyMessage(event.getReplyToken(), messages);
} catch (ParseException e) {
e.printStackTrace();
}
Expand All @@ -145,15 +142,15 @@ private void onLinePostBack(WebHookEventObject event) {
{
MessageObject[] messages = new MessageObject[1];
messages[0] = new TextMessageObject("了解だ!");
mRepository.replyMessage(event.replyToken, messages);
mRepository.replyMessage(event.getReplyToken(), messages);
break;
}
case "data3":
{
mRepository.clearCandidateDate(event.source);
mRepository.clearCandidateDate(event.getSource());
MessageObject[] messages = new MessageObject[1];
messages[0] = createMessageData("候補をクリアしたぞ!\n改めて候補を教えてくれ!");
mRepository.replyMessage(event.replyToken, messages);
mRepository.replyMessage(event.getReplyToken(), messages);
break;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.mizo0203.hoshiguma.repo.line.messaging.data.MessageObject;
import com.mizo0203.hoshiguma.repo.line.messaging.data.ReplyMessageData;
import com.mizo0203.hoshiguma.repo.line.messaging.data.RequestBody;
import com.mizo0203.hoshiguma.repo.line.messaging.data.webHook.event.RequestBody;
import com.mizo0203.hoshiguma.util.HttpPostUtil;
import com.mizo0203.hoshiguma.util.PaserUtil;
import org.apache.commons.codec.binary.Base64;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/mizo0203/hoshiguma/repo/Repository.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.mizo0203.hoshiguma.repo;

import com.mizo0203.hoshiguma.repo.line.messaging.data.MessageObject;
import com.mizo0203.hoshiguma.repo.line.messaging.data.RequestBody;
import com.mizo0203.hoshiguma.repo.line.messaging.data.SourceData;
import com.mizo0203.hoshiguma.repo.line.messaging.data.webHook.event.RequestBody;
import com.mizo0203.hoshiguma.repo.objectify.entity.KeyEntity;
import com.mizo0203.hoshiguma.repo.objectify.entity.LineTalkRoomConfig;

Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.mizo0203.hoshiguma.repo.line.messaging.data.webHook.event;

/**
* 参加イベント
*
* <p>アカウントがグループまたはトークルームに参加したことを示すイベントです。参加イベントには応答できます。
*
* <p>https://developers.line.me/ja/docs/messaging-api/reference/#anchor-511183a26c172a77583ef45edd4a5a0f596c5623
*/
public class JoinEvent extends WebHookEventObject {

/* package */ JoinEvent() {
// NOP
}

/** @return このイベントへの応答に使用するトークン */
public String getReplyToken() {
return replyToken;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.mizo0203.hoshiguma.repo.line.messaging.data.webHook.event;

import com.mizo0203.hoshiguma.repo.line.messaging.data.MessageData;

/**
* メッセージイベント
*
* <p>送信されたメッセージを含む webhook イベントオブジェクトです。 メッセージのタイプに対応するメッセージオブジェクトが、message
* プロパティに含まれます。メッセージイベントには応答できます。
*
* <p>https://developers.line.me/ja/docs/messaging-api/reference/#anchor-e2c59da01216760e81e8ca10c55b2e28b276c3e5
*/
public class MessageEvent extends WebHookEventObject {
/* package */ MessageEvent() {
// NOP
}

/** @return イベントへの応答に使用するトークン */
public String getReplyToken() {
return replyToken;
}

/** @return メッセージの内容を含むオブジェクト。メッセージには以下のタイプがあります。 */
public MessageData getMessage() {
return message;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.mizo0203.hoshiguma.repo.line.messaging.data.webHook.event;

import com.mizo0203.hoshiguma.repo.line.messaging.data.PostBack;

/**
* 参加イベント
*
* <p>アカウントがグループまたはトークルームに参加したことを示すイベントです。参加イベントには応答できます。
*
* <p>https://developers.line.me/ja/docs/messaging-api/reference/#anchor-511183a26c172a77583ef45edd4a5a0f596c5623
*/
public class PostBackEvent extends WebHookEventObject {

/* package */ PostBackEvent() {
// NOP
}

/** @return このイベントへの応答に使用するトークン */
public String getReplyToken() {
return replyToken;
}

/** @return ポストバックデータ */
public String getPostBackData() {
return postback.data;
}

/** @return 日時選択アクションを介してユーザーが選択した日時を含むJSONオブジェクト。 日時選択アクションによるポストバックアクションの場合にのみ返されます。 */
public PostBack.Params getPostBackParams() {
return postback.params;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.mizo0203.hoshiguma.repo.line.messaging.data.webHook.event;

import java.util.Arrays;

/** リクエストボディ */
public class RequestBody {
private WebHookEventObject[] events;

public WebHookEventObject[] concreteWebHookEventObject() {
WebHookEventObject[] ret = new WebHookEventObject[events.length];
for (int i = 0; i < ret.length; i++) {
ret[i] = events[i].concrete();
}
return ret;
}

@Override
public String toString() {
return "events: " + Arrays.toString(events);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package com.mizo0203.hoshiguma.repo.line.messaging.data.webHook.event;

import com.mizo0203.hoshiguma.repo.line.messaging.data.MessageData;
import com.mizo0203.hoshiguma.repo.line.messaging.data.PostBack;
import com.mizo0203.hoshiguma.repo.line.messaging.data.SourceData;

@SuppressWarnings({"unused", "WeakerAccess", "SpellCheckingInspection"})
public class WebHookEventObject {

public static final String TYPE_JOIN = "join";
public static final String TYPE_MESSAGE = "message";
public static final String TYPE_POST_BACK = "postback";
/* package */ String replyToken;
/* package */ String type;
/* package */ long timestamp;
/* package */ SourceData source;
/* package */ MessageData message;
/* package */ PostBack postback;

private <T extends WebHookEventObject> T copy(T dest) {
dest.replyToken = replyToken;
dest.type = type;
dest.timestamp = timestamp;
dest.source = source;
dest.message = message;
dest.postback = postback;
return dest;
}

public JoinEvent getJoinEventObject() {
switch (type) {
case TYPE_JOIN:
return new JoinEvent();
default:
return null;
}
}

/** @return イベントのタイプを表す識別子 */
public String getType() {
return type;
}

/** @return イベントの発生時刻(ミリ秒) */
public long getTimestamp() {
return timestamp;
}

/** @return イベントの送信元情報を含むユーザー、グループ、またはトークルームオブジェクト */
public SourceData getSource() {
return source;
}

public WebHookEventObject concrete() {
switch (type) {
case TYPE_JOIN:
return copy(new JoinEvent());
case TYPE_MESSAGE:
return copy(new MessageEvent());
case TYPE_POST_BACK:
return copy(new PostBackEvent());
default:
return null;
}
}
}
2 changes: 1 addition & 1 deletion src/main/java/com/mizo0203/hoshiguma/util/PaserUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.google.gson.Gson;
import com.mizo0203.hoshiguma.repo.line.messaging.data.ReplyMessageData;
import com.mizo0203.hoshiguma.repo.line.messaging.data.RequestBody;
import com.mizo0203.hoshiguma.repo.line.messaging.data.webHook.event.RequestBody;

import java.io.BufferedReader;
import java.io.IOException;
Expand Down

0 comments on commit 0b545bc

Please sign in to comment.