서비스 제공업체들이 준 API들 쓰기가 너무 귀찮고 복잡해서
builder pattern으로 만들었다. 시리즈 첫번째.
android만 봐도 클래스에 옵션이 많다 싶으면 builder를 제공하는데, 몇개 안보긴 했지만 제대로 된 example이나 builder를 제공하는게 별로 없는 것 같다.
이번에 만든 것은 bizPurio builder 이다.
하나는 SMS message builder.
property 마다 주석 달아놔서 좀 읽기 쉬울거라고 생각한다.
property 마다 주석 달아놔서 좀 읽기 쉬울거라고 생각한다.
다른 하나는 실제 메세지를 보내는 class builder.
인라인 주석으로 되어 있는거 보기가 싫어서 마찬가지로 builder pattern으로 작업.
인라인 주석으로 되어 있는거 보기가 싫어서 마찬가지로 builder pattern으로 작업.
작업하면서 method chaining이 되도록 하는 방법을 알게된게 소득이랄까.
EDIT:
...purio가 아니라 [ppurio 뿌리오]였구나. sms를 뿌리오? 이런건가 보다;;
...purio가 아니라 [ppurio 뿌리오]였구나. sms를 뿌리오? 이런건가 보다;;
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* BizPurio 메시지 전송 class build | |
* @author by dotkebi@gmail.com on 2016-10-11. | |
*/ | |
public class BizSenderBuilder { | |
private BizSend bizSend; | |
private String ip; | |
private int port; | |
private String userId; | |
private String password; | |
/** | |
* Console 에서 로그를 확인할 경우 설정 | |
*/ | |
private boolean logged = false; | |
/** | |
* 전송할 파일 경로 설정 | |
* ex. FAX, PHONE, MMS 등 | |
*/ | |
private String filePath; | |
/** | |
* 블랙리스트 파일 경로 설정 | |
*/ | |
private String blackListPath; | |
/** | |
* 수신번호, 메세지 내용을 암호화 여부 | |
*/ | |
private boolean encryptMessage = false; | |
/** | |
* 첨부 파일 암호화 여부 | |
*/ | |
private boolean encryptFile = false; | |
/** | |
* 첨부 파일 전송 후 삭제 여부 | |
* (T : 삭제, F : 남김) | |
*/ | |
private boolean deleteFileAfterSend = false; | |
private BizSenderBuilder() {} | |
public static BizSenderBuilder init(String ip, int port, String userId, String password) { | |
BizSenderBuilder builder = new BizSenderBuilder(); | |
builder.ip = ip; | |
builder.port = port; | |
builder.userId = userId; | |
builder.password = password; | |
return builder; | |
} | |
public String send(SendMsgEntity sendMsgEntity) { | |
bizSend = new BizSend(); | |
bizSend.doBegin(ip, port, userId, password); | |
bizSend.setLogEnabled(logged); | |
if (!isEmpty(filePath)) { | |
bizSend.setFilePath(filePath); | |
} | |
if (!isEmpty(blackListPath)) { | |
bizSend.setFilePath(blackListPath); | |
} | |
try { | |
return bizSend.sendMsg(sendMsgEntity, encryptMessage, encryptFile, deleteFileAfterSend); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} finally { | |
bizSend.doEnd(); | |
} | |
return ""; | |
} | |
/** | |
* PING-PONG | |
* 장시간 연결하여 메시지를 전송할 경우 연결이 끊어지지 않기 위해 실행 | |
* 이전 호출 시점으로부터 30초 이상 지난 경우에만 PING 을 전송하도록 함수내 정의되어 있음 | |
* 실행하지 않아도 메시지 전송에는 영향을 미치지 않으나 안전한 연결을 위해 주기적으로 실행하길 권장 | |
*/ | |
public boolean sendPing() { | |
return bizSend != null && bizSend.sendPing(); | |
} | |
/** | |
* 리포트 재요청 | |
* msgid 에 해당하는 메시지의 리포트가 시간이 지나도 오지 않는 경우 실행 | |
* @param msgId 다우기술의 서버에서 정의한 message id | |
*/ | |
public boolean reconfirmRepost(String msgId) { | |
return bizSend != null && bizSend.reconfirmReport(msgId); | |
} | |
private boolean isEmpty(String message) { | |
return message == null || "".equals(message); | |
} | |
/** | |
* setters | |
*/ | |
public BizSenderBuilder setLogged(boolean logged) { | |
this.logged = logged; | |
return this; | |
} | |
public BizSenderBuilder setFilePath(String filePath) { | |
this.filePath = filePath; | |
return this; | |
} | |
public BizSenderBuilder setBlackListPath(String blackListPath) { | |
this.blackListPath = blackListPath; | |
return this; | |
} | |
public BizSenderBuilder setEncryptMessage(boolean encryptMessage) { | |
this.encryptMessage = encryptMessage; | |
return this; | |
} | |
public BizSenderBuilder setEncryptFile(boolean encryptFile) { | |
this.encryptFile = encryptFile; | |
return this; | |
} | |
public BizSenderBuilder setDeleteFileAfterSend(boolean deleteFileAfterSend) { | |
this.deleteFileAfterSend = deleteFileAfterSend; | |
return this; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Biz Purio 메시지 Builder | |
* @author by dotkebi@gmail.com on 2016-10-11. | |
*/ | |
public class SMSMessageBuilder { | |
public enum MessageType { | |
SMS, WAP, FAX, PHONE, SMS_INBOUND, MMS | |
} | |
/******************* | |
* 필수 | |
******************/ | |
/** | |
* 데이터 id | |
*/ | |
private String cmid; | |
/** | |
* 데이터 타입 | |
*/ | |
private MessageType messageType; | |
/** | |
* 받는 사람 전화 번호 | |
*/ | |
private String destPhone; | |
/** | |
* 보내는 사람 전화 번호 | |
*/ | |
private String sendPhone; | |
/** | |
* 데이터 내용 | |
*/ | |
private String messageBody; | |
/** | |
* (FAX/PHONE) 재시도 회수 (5~10분 간격: 최대 3회) | |
*/ | |
private int retryCount; | |
/******************* | |
* Optional | |
******************/ | |
/** | |
* 발송 (예약) 시간 (Unix Time, 정의하지 않을 경우 즉시 발송) | |
*/ | |
private String sendTime = ""; | |
/** | |
* 받는 사람 이름 | |
*/ | |
private String destName = ""; | |
/** | |
* 보내는 사람 이름 | |
*/ | |
private String sendName = ""; | |
/** | |
* (FAX/MMS) 제목, (SMS_INBOUND) 데이터 내용 | |
*/ | |
private String subject = ""; | |
/** | |
* (WAP) URL 주소 | |
*/ | |
private String url = ""; | |
/** | |
* (FAX) 표지 발송 옵션 | |
*/ | |
private int coverFlag = 0; | |
/** | |
* (PHONE) PHONE 실패 시 문자 전송 옵션 | |
*/ | |
private int smsFlag = 0; | |
/** | |
* (PHONE) 응답 받기 선택 | |
*/ | |
private int replyFlag = 0; | |
/** | |
* (PHONE/FAX/MMS) 파일 전송시 파일 이름 | |
*/ | |
private String faxFile = ""; | |
/** | |
* (PHONE) 음성 시나리오 파일 이름 | |
*/ | |
private String vxmlFile = ""; | |
private SMSMessageBuilder() {} | |
public static SMSMessageBuilder init(String senderNumber, String callNo, String msg) { | |
SMSMessageBuilder builder = new SMSMessageBuilder(); | |
builder.cmid = new SimpleDateFormat("yyyyMMdd").format(new Date()) + "700"; | |
builder.messageType = (msg.length() < 80) ? MessageType.SMS : MessageType.MMS; | |
builder.destPhone = callNo; | |
builder.sendPhone = senderNumber; | |
builder.messageBody = msg; | |
builder.retryCount = 0; | |
return builder; | |
} | |
public SendMsgEntity build() { | |
SendMsgEntity message = new SendMsgEntity(); | |
message.setCMID(this.cmid); | |
message.setMSG_TYPE(this.messageType.ordinal()); | |
message.setDEST_PHONE(this.destPhone); | |
message.setSEND_PHONE(this.sendPhone); | |
message.setMSG_BODY(this.messageBody); | |
message.setRETRY_CNT(this.retryCount); | |
if (!isEmpty(sendTime)) { | |
message.setSEND_TIME(sendTime); | |
} | |
if (!isEmpty(destName)) { | |
message.setDEST_NAME(destName); | |
} | |
if (!isEmpty(sendName)) { | |
message.setSEND_NAME(sendName); | |
} | |
if (!isEmpty(subject)) { | |
message.setSUBJECT(subject); | |
} | |
if (!isEmpty(url)) { | |
message.setWAP_URL(url); | |
} | |
if (!isEmpty(coverFlag)) { | |
message.setCOVER_FLAG(coverFlag); | |
} | |
if (!isEmpty(smsFlag)) { | |
message.setSMS_FLAG(smsFlag); | |
} | |
if (!isEmpty(replyFlag)) { | |
message.setREPLY_FLAG(replyFlag); | |
} | |
if (!isEmpty(faxFile)) { | |
message.setSEND_TIME(faxFile); | |
} | |
if (!isEmpty(vxmlFile)) { | |
message.setSEND_TIME(vxmlFile); | |
} | |
return message; | |
} | |
private boolean isEmpty(String message) { | |
return message == null || "".equals(message); | |
} | |
private boolean isEmpty(int message) { | |
return message == 0; | |
} | |
/** | |
* setters | |
*/ | |
public SMSMessageBuilder setMessageType(MessageType messageType) { | |
this.messageType = messageType; | |
return this; | |
} | |
public SMSMessageBuilder setSendPhone(String sendPhone) { | |
this.sendPhone = sendPhone; | |
return this; | |
} | |
public SMSMessageBuilder setRetryCount(int retryCount) { | |
this.retryCount = retryCount; | |
return this; | |
} | |
public SMSMessageBuilder setSendTime(String sendTime) { | |
this.sendTime = sendTime; | |
return this; | |
} | |
public SMSMessageBuilder setDestName(String destName) { | |
this.destName = destName; | |
return this; | |
} | |
public SMSMessageBuilder setSendName(String sendName) { | |
this.sendName = sendName; | |
return this; | |
} | |
public SMSMessageBuilder setSubject(String subject) { | |
this.subject = subject; | |
return this; | |
} | |
public SMSMessageBuilder setUrl(String url) { | |
this.url = url; | |
return this; | |
} | |
public SMSMessageBuilder setCoverFlag(int coverFlag) { | |
this.coverFlag = coverFlag; | |
return this; | |
} | |
public SMSMessageBuilder setSmsFlag(int smsFlag) { | |
this.smsFlag = smsFlag; | |
return this; | |
} | |
public SMSMessageBuilder setReplyFlag(int replyFlag) { | |
this.replyFlag = replyFlag; | |
return this; | |
} | |
public SMSMessageBuilder setFaxFile(String faxFile) { | |
this.faxFile = faxFile; | |
return this; | |
} | |
public SMSMessageBuilder setVxmlFile(String vxmlFile) { | |
this.vxmlFile = vxmlFile; | |
return this; | |
} | |
} |