Skip to content

Commit

Permalink
Refactoring. refs #315 @1.5h
Browse files Browse the repository at this point in the history
  • Loading branch information
みぞ@CrazyBeatCoder committed Feb 10, 2018
1 parent 6cddfc6 commit 95edbf0
Show file tree
Hide file tree
Showing 9 changed files with 184 additions and 190 deletions.
170 changes: 141 additions & 29 deletions src/main/java/com/mizo0203/shiki/LineHandlerServlet.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
package com.mizo0203.shiki;

import com.linecorp.bot.model.event.JoinEvent;
import com.linecorp.bot.model.event.MessageEvent;
import com.linecorp.bot.model.event.PostbackEvent;
import com.linecorp.bot.model.event.message.TextMessageContent;
import com.linecorp.bot.model.event.*;
import com.linecorp.bot.model.event.message.*;
import com.mizo0203.shiki.domain.LineDateFormat;
import com.mizo0203.shiki.domain.LineDatetimeFormat;
import com.mizo0203.shiki.domain.LineTimeFormat;
import com.mizo0203.shiki.domain.UseCase;

import javax.annotation.Nullable;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

public class LineHandlerServlet extends HttpServlet {
Expand All @@ -36,15 +42,27 @@ public void doPost(HttpServletRequest req, HttpServletResponse resp) {
*/
private void onLineWebhook(HttpServletRequest req, HttpServletResponse resp) {
try (UseCase useCase = new UseCase()) {
useCase.parseWebhookEvent(
req,
event -> onLineMessage(useCase, event),
null,
null,
event -> onLineJoin(useCase, event),
null,
event -> onLinePostBack(useCase, event),
null);
List<Event> eventList = useCase.getCallbackEventList(req);
if (eventList == null) {
return;
}
for (Event event : eventList) {
if (event instanceof MessageEvent) {
onLineMessage(useCase, (MessageEvent) event);
} else if (event instanceof UnfollowEvent) {
onLineUnfollow(useCase, (UnfollowEvent) event);
} else if (event instanceof FollowEvent) {
onLineFollow(useCase, (FollowEvent) event);
} else if (event instanceof JoinEvent) {
onLineJoin(useCase, (JoinEvent) event);
} else if (event instanceof LeaveEvent) {
onLineLeave(useCase, (LeaveEvent) event);
} else if (event instanceof PostbackEvent) {
onLinePostback(useCase, (PostbackEvent) event);
} else if (event instanceof BeaconEvent) {
onLineBeacon(useCase, (BeaconEvent) event);
}
}
} finally {
// ボットアプリのサーバーに webhook から送信される HTTP POST リクエストには、ステータスコード 200 を返す必要があります。
// https://developers.line.me/ja/docs/messaging-api/reference/#anchor-99cdae5b4b38ad4b86a137b508fd7b1b861e2366
Expand All @@ -53,33 +71,127 @@ private void onLineWebhook(HttpServletRequest req, HttpServletResponse resp) {
}

private void onLineMessage(UseCase useCase, MessageEvent event) {
useCase.parseMessageEvent(
event.getMessage(),
message -> onLineTextMessage(useCase, event, message),
null,
null,
null,
null,
null,
null);
MessageContent message = event.getMessage();
if (message instanceof TextMessageContent) {
onLineTextMessage(useCase, event, (TextMessageContent) message);
} else if (message instanceof ImageMessageContent) {
onLineImageMessage(useCase, event, (ImageMessageContent) message);
} else if (message instanceof LocationMessageContent) {
onLineLocationMessage(useCase, event, (LocationMessageContent) message);
} else if (message instanceof AudioMessageContent) {
onLineAudioMessage(useCase, event, (AudioMessageContent) message);
} else if (message instanceof VideoMessageContent) {
onLineVideoMessage(useCase, event, (VideoMessageContent) message);
} else if (message instanceof StickerMessageContent) {
onLineStickerMessage(useCase, event, (StickerMessageContent) message);
} else if (message instanceof FileMessageContent) {
onLineFileMessage(useCase, event, (FileMessageContent) message);
}
}

private void onLineTextMessage(UseCase useCase, MessageEvent event, TextMessageContent message) {
useCase.onLineTextMessage(event, message);
}

private void onLineImageMessage(
UseCase useCase, MessageEvent event, ImageMessageContent message) {
LOG.info("onLineImageMessage");
// NOP
}

private void onLineLocationMessage(
UseCase useCase, MessageEvent event, LocationMessageContent message) {
LOG.info("onLineLocationMessage");
// NOP
}

private void onLineAudioMessage(
UseCase useCase, MessageEvent event, AudioMessageContent message) {
LOG.info("onLineAudioMessage");
// NOP
}

private void onLineVideoMessage(
UseCase useCase, MessageEvent event, VideoMessageContent message) {
LOG.info("onLineVideoMessage");
// NOP
}

private void onLineStickerMessage(
UseCase useCase, MessageEvent event, StickerMessageContent message) {
LOG.info("onLineStickerMessage");
// NOP
}

private void onLineFileMessage(UseCase useCase, MessageEvent event, FileMessageContent message) {
LOG.info("onLineFileMessage");
// NOP
}

private void onLineUnfollow(UseCase useCase, UnfollowEvent event) {
LOG.info("onLineUnfollow");
// NOP
}

private void onLineFollow(UseCase useCase, FollowEvent event) {
LOG.info("onLineFollow");
// NOP
}

private void onLineLeave(UseCase useCase, LeaveEvent event) {
LOG.info("onLineLeave");
// NOP
}

private void onLineJoin(UseCase useCase, JoinEvent event) {
useCase.onLineJoin(event);
}

private void onLinePostBack(UseCase useCase, PostbackEvent event) {
useCase.parseLinePostbackEvent(
event.getPostbackContent().getParams(),
param -> onLinePostBackNoParam(useCase, event),
param -> onLinePostBackDateParam(useCase, event, param));
private void onLinePostback(UseCase useCase, PostbackEvent event) {
Date date = getLinePostBackDateParam(event.getPostbackContent().getParams());
if (date == null) {
onLinePostBackNoParam(useCase, event);
} else {
onLinePostBackDateParam(useCase, event, date);
}
}

private Date getLinePostBackDateParam(@Nullable Map<String, String> params) {
if (params == null || params.isEmpty()) {
return null;
}
try {
if (params.containsKey("date")) {
String source = params.get("date");
return new LineDateFormat().parse(source);
} else if (params.containsKey("time")) {
String source = params.get("time");
return new LineTimeFormat().parse(source);
} else if (params.containsKey("datetime")) {
String source = params.get("datetime");
return new LineDatetimeFormat().parse(source);
} else {
LOG.log(Level.SEVERE, "parseLinePostbackEvent not match");
return null;
}
} catch (ParseException e) {
LOG.log(Level.SEVERE, "parseLinePostbackEvent", e);
return null;
}
}

private void onLinePostBackNoParam(UseCase useCase, PostbackEvent event) {}
private void onLinePostBackNoParam(UseCase useCase, PostbackEvent event) {
LOG.info("onLinePostBackNoParam");
// NOP
}

private void onLinePostBackDateParam(UseCase useCase, PostbackEvent event, Date date) {}
private void onLinePostBackDateParam(UseCase useCase, PostbackEvent event, Date date) {
LOG.info("onLinePostBackDateParam");
// NOP
}

private void onLineBeacon(UseCase useCase, BeaconEvent event) {
LOG.info("onLineBeacon");
// NOP
}
}
11 changes: 11 additions & 0 deletions src/main/java/com/mizo0203/shiki/domain/LineDateFormat.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.mizo0203.shiki.domain;

import java.text.SimpleDateFormat;

public class LineDateFormat extends SimpleDateFormat {

public LineDateFormat() {
super("yyyy-MM-dd");
setTimeZone(Define.LINE_TIME_ZONE);
}
}
11 changes: 11 additions & 0 deletions src/main/java/com/mizo0203/shiki/domain/LineDatetimeFormat.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.mizo0203.shiki.domain;

import java.text.SimpleDateFormat;

public class LineDatetimeFormat extends SimpleDateFormat {

public LineDatetimeFormat() {
super("yyyy-MM-dd'T'HH:mm");
setTimeZone(Define.LINE_TIME_ZONE);
}
}
11 changes: 11 additions & 0 deletions src/main/java/com/mizo0203/shiki/domain/LineTimeFormat.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.mizo0203.shiki.domain;

import java.text.SimpleDateFormat;

public class LineTimeFormat extends SimpleDateFormat {

public LineTimeFormat() {
super("HH:mm");
setTimeZone(Define.LINE_TIME_ZONE);
}
}
25 changes: 0 additions & 25 deletions src/main/java/com/mizo0203/shiki/domain/Translator.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,10 @@
import com.mizo0203.shiki.domain.model.LineReversiFormat;
import com.mizo0203.shiki.domain.model.ReversiModel;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/* package */ class Translator {

/* package */ Translator() {}

public Date parseDatetime(String datetime) {
try {
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm");
fmt.setTimeZone(Define.LINE_TIME_ZONE);
return fmt.parse(datetime);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}

public Date parseDate(String date) {
// 未実装
throw new UnsupportedOperationException();
}

public Date parseTime(String time) {
// 未実装
throw new UnsupportedOperationException();
}

public void play(ReversiModel reversiModel, String message) {
if (message.length() != 2) {
return;
Expand Down
Loading

0 comments on commit 95edbf0

Please sign in to comment.