Skip to content

Commit d168a5c

Browse files
committed
Add example of custom delivery receipt, accept by default delivery receipt without sub and dlvrd with value -1.
1 parent cdfaa64 commit d168a5c

File tree

3 files changed

+99
-9
lines changed

3 files changed

+99
-9
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package org.jsmpp.examples.receipts;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.fail;
5+
6+
import java.util.Calendar;
7+
import java.util.Date;
8+
9+
import org.jsmpp.bean.DeliverSm;
10+
import org.jsmpp.bean.DeliveryReceipt;
11+
import org.jsmpp.bean.ESMClass;
12+
import org.jsmpp.bean.GSMSpecificFeature;
13+
import org.jsmpp.bean.MessageMode;
14+
import org.jsmpp.bean.MessageType;
15+
import org.jsmpp.util.InvalidDeliveryReceiptException;
16+
import org.junit.Before;
17+
import org.junit.Test;
18+
19+
public class ExampleDeliveryReceiptStripperTest {
20+
21+
private ExampleDeliveryReceiptStripper exampleDeliveryReceiptStripper;
22+
23+
@Before
24+
public void setUp() throws Exception {
25+
exampleDeliveryReceiptStripper = new ExampleDeliveryReceiptStripper();
26+
}
27+
28+
@Test
29+
public void testParseValid() {
30+
try {
31+
DeliverSm deliverSm = new DeliverSm();
32+
deliverSm.setEsmClass(new ESMClass(MessageMode.DEFAULT, MessageType.SMSC_DEL_RECEIPT, GSMSpecificFeature.DEFAULT).value());
33+
deliverSm.setShortMessage(
34+
("id:0123456789 sub:001 dlvrd:001 submit date:0809011130 done date:0809021131 stat:DELIVRD").getBytes());
35+
DeliveryReceipt delReceipt = exampleDeliveryReceiptStripper.strip(deliverSm);
36+
assertEquals("", delReceipt.getText());
37+
38+
assertEquals(1, delReceipt.getSubmitted());
39+
40+
Date submitDate = delReceipt.getSubmitDate();
41+
Date expectedSubmitDate = createDate(2008, 9, 1, 11, 30);
42+
assertEquals(expectedSubmitDate, submitDate);
43+
44+
Date doneDate = delReceipt.getDoneDate();
45+
Date expectedDoneDate = createDate(2008, 9, 2, 11, 31);
46+
assertEquals(expectedDoneDate, doneDate);
47+
} catch (InvalidDeliveryReceiptException e) {
48+
fail("Failed parsing delivery receipt:" + e.getMessage());
49+
}
50+
}
51+
52+
private Date createDate(int year, int month, int day, int hour, int minute) {
53+
return createDate(year, month, day, hour, minute, 0);
54+
}
55+
56+
private Date createDate(int year, int month, int day, int hour, int minute, int second) {
57+
Calendar cal = Calendar.getInstance();
58+
cal.set(year, month - 1, day, hour, minute, second);
59+
cal.set(Calendar.MILLISECOND, 0);
60+
return cal.getTime();
61+
}
62+
63+
}

jsmpp/src/main/java/org/jsmpp/bean/DeliveryReceipt.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ public class DeliveryReceipt {
4444
"yyMMddHHmm");
4545

4646
private String id;
47-
private int submitted;
48-
private int delivered;
47+
private Integer submitted;
48+
private Integer delivered;
4949
private Date submitDate;
5050
private Date doneDate;
5151
private DeliveryReceiptState finalStatus;
@@ -63,10 +63,8 @@ public DeliveryReceipt(String formattedDeliveryReceipt)
6363
*/
6464
try {
6565
id = getDeliveryReceiptValue(DeliveryReceipt.DELREC_ID, formattedDeliveryReceipt);
66-
submitted = Integer.parseInt(getDeliveryReceiptValue(
67-
DeliveryReceipt.DELREC_SUB, formattedDeliveryReceipt));
68-
delivered = Integer.parseInt(getDeliveryReceiptValue(
69-
DeliveryReceipt.DELREC_DLVRD, formattedDeliveryReceipt));
66+
submitted = getDeliveryReceiptIntValue(DeliveryReceipt.DELREC_SUB, formattedDeliveryReceipt);
67+
delivered = getDeliveryReceiptIntValue(DeliveryReceipt.DELREC_DLVRD, formattedDeliveryReceipt);
7068
submitDate = string2Date(getDeliveryReceiptValue(
7169
DeliveryReceipt.DELREC_SUBMIT_DATE, formattedDeliveryReceipt));
7270
doneDate = string2Date(getDeliveryReceiptValue(
@@ -77,8 +75,7 @@ public DeliveryReceipt(String formattedDeliveryReceipt)
7775
error = getDeliveryReceiptValue(DeliveryReceipt.DELREC_ERR, formattedDeliveryReceipt);
7876
text = getDeliveryReceiptTextValue(formattedDeliveryReceipt);
7977
} catch (Exception e) {
80-
throw new InvalidDeliveryReceiptException(
81-
"There is an error found when parsing delivery receipt", e);
78+
throw new InvalidDeliveryReceiptException("There is an error found when parsing delivery receipt", e);
8279
}
8380
}
8481

@@ -457,4 +454,12 @@ private static String getDeliveryReceiptTextValue(String source) {
457454
startIndex = startIndex + tmpAttr.length();
458455
return source.substring(startIndex);
459456
}
457+
458+
private static int getDeliveryReceiptIntValue(String attrName, String formattedDeliveryReceipt){
459+
String value = getDeliveryReceiptValue(attrName, formattedDeliveryReceipt);
460+
if (value != null) {
461+
return Integer.parseInt(value);
462+
}
463+
return -1;
464+
}
460465
}

jsmpp/src/test/java/org/jsmpp/util/DeliveryReceiptParserTest.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
public class DeliveryReceiptParserTest {
1717
private PDUDecomposer decomposer = new DefaultDecomposer();
18-
private static final String ORIGINAL_MESSAGE = "testing jsmpp bow";
18+
private static final String ORIGINAL_MESSAGE = "testing jSMPP bow";
1919

2020
@Test
2121
public void parseTextWithLowerCase() {
@@ -90,6 +90,28 @@ public void parseWithSecondInDate() {
9090
fail("Failed parsing delivery receipt:" + e.getMessage());
9191
}
9292
}
93+
94+
@Test
95+
public void parseWithoutSubAndDelivered() {
96+
try {
97+
DeliveryReceipt delReceipt = decomposer.deliveryReceipt("id:1526758174 submit date:1701240904 done date:1701250907 stat:DELIVRD err:000 text:" + ORIGINAL_MESSAGE);
98+
assertEquals(delReceipt.getText(), ORIGINAL_MESSAGE);
99+
100+
Date submitDate = delReceipt.getSubmitDate();
101+
Date expectedSubmitDate = createDate(2017, 1, 24, 9, 4, 0);
102+
assertEquals(submitDate, expectedSubmitDate);
103+
104+
Date doneDate = delReceipt.getDoneDate();
105+
Date expectedDoneDate = createDate(2017, 1, 25, 9, 7, 0);
106+
assertEquals(doneDate, expectedDoneDate);
107+
108+
assertEquals(delReceipt.getSubmitted(), -1);
109+
assertEquals(delReceipt.getDelivered(), -1);
110+
} catch (InvalidDeliveryReceiptException e) {
111+
e.printStackTrace();
112+
fail("Failed parsing delivery receipt:" + e.getMessage());
113+
}
114+
}
93115

94116
private static Date createDate(int year, int month, int day, int hour, int minute) {
95117
return createDate(year, month, day, hour, minute, 0);

0 commit comments

Comments
 (0)