You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by cm...@apache.org on 2013/08/25 16:30:47 UTC

[1/3] git commit: CAMEL-6655: SMPP - add support of Vendor Specific Optional Parameter

Updated Branches:
  refs/heads/camel-2.10.x 5654b18b5 -> 36b2c8c6d


CAMEL-6655: SMPP - add support of Vendor Specific Optional Parameter


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a027d7dc
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a027d7dc
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a027d7dc

Branch: refs/heads/camel-2.10.x
Commit: a027d7dc9cef4dedeec54d321491a10bdfe8c7bf
Parents: 5654b18
Author: cmueller <cm...@apache.org>
Authored: Sat Aug 24 23:23:52 2013 +0200
Committer: cmueller <cm...@apache.org>
Committed: Sat Aug 24 23:26:28 2013 +0200

----------------------------------------------------------------------
 .../component/smpp/AbstractSmppCommand.java     | 52 ++++++++++++++-
 .../component/smpp/SmppDataSmCommandTest.java   | 66 ++++++++++++++++++++
 .../smpp/SmppSubmitMultiCommandTest.java        | 64 +++++++++++++++++++
 .../component/smpp/SmppSubmitSmCommandTest.java | 63 +++++++++++++++++++
 4 files changed, 244 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/a027d7dc/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java
index 54d93da..145ce46 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java
@@ -55,8 +55,58 @@ public abstract class AbstractSmppCommand implements SmppCommand {
         return message;
     }
 
+    @SuppressWarnings({ "unchecked", "rawtypes" })
+    protected List<OptionalParameter> createOptionalParameters(Map optinalParamaters) {
+        if (optinalParamaters == null || optinalParamaters.isEmpty()) {
+            return new ArrayList<OptionalParameter>();
+        }
+
+        Object firstKey = optinalParamaters.keySet().iterator().next();
+        if (firstKey instanceof String) {
+            return createOptionalParametersByName(optinalParamaters);
+        } else {
+            return createOptionalParametersByCode(optinalParamaters);
+        }
+    }
+
+    protected List<OptionalParameter> createOptionalParametersByCode(Map<Short, Object> optinalParamaters) {
+        List<OptionalParameter> optParams = new ArrayList<OptionalParameter>();
+
+        for (Entry<Short, Object> entry : optinalParamaters.entrySet()) {
+            OptionalParameter optParam = null;
+            Short key = entry.getKey();
+            Object value = entry.getValue();
+
+            try {
+                if (value == null) {
+                    optParam = new OptionalParameter.Null(key);
+                } else if (value instanceof byte[]) {
+                    optParam = new OptionalParameter.OctetString(key, (byte[]) value);
+                } else if (value instanceof String) {
+                    optParam = new OptionalParameter.COctetString(key, (String) value);
+                } else if (value instanceof Byte) {
+                    optParam = new OptionalParameter.Byte(key, (Byte) value);
+                } else if (value instanceof Integer) {
+                    optParam = new OptionalParameter.Int(key, (Integer) value);
+                } else if (value instanceof Short) {
+                    optParam = new OptionalParameter.Short(key, (Short) value);
+                } else {
+                    log.info("Couldn't determine optional parameter for value {} (type: {}). Skip this one.", value, value.getClass());
+                    continue;
+                }
+
+                optParams.add(optParam);
+            } catch (Exception e) {
+                log.info("Couldn't determine optional parameter for key {} and value {}. Skip this one.", key, value);
+            }
+        }
+
+        return optParams;
+    }
+
     @SuppressWarnings("rawtypes")
-    protected List<OptionalParameter> createOptionalParameters(Map<String, String> optinalParamaters) {
+    @Deprecated
+    protected List<OptionalParameter> createOptionalParametersByName(Map<String, String> optinalParamaters) {
         List<OptionalParameter> optParams = new ArrayList<OptionalParameter>();
 
         for (Entry<String, String> entry : optinalParamaters.entrySet()) {

http://git-wip-us.apache.org/repos/asf/camel/blob/a027d7dc/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
index 28714ec..5374753 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
@@ -136,6 +136,13 @@ public class SmppDataSmCommandTest {
         optionalParameters.put("DEST_TELEMATICS_ID", "2");
         optionalParameters.put("QOS_TIME_TO_LIVE", "3600000");
         optionalParameters.put("ALERT_ON_MESSAGE_DELIVERY", null);
+        // fall back test for vendor specific optional parameter 
+        optionalParameters.put("0x2150", "0815");
+        optionalParameters.put("0x2151", "0816");
+        optionalParameters.put("0x2152", "6");
+        optionalParameters.put("0x2153", "9");
+        optionalParameters.put("0x2154", "7400000");
+        optionalParameters.put("0x2155", null);
         exchange.getIn().setHeader(SmppConstants.OPTIONAL_PARAMETERS, optionalParameters);
         expect(session.dataShortMessage(eq("CMT"), eq(TypeOfNumber.UNKNOWN), eq(NumberingPlanIndicator.UNKNOWN), eq("1616"),
                 eq(TypeOfNumber.UNKNOWN), eq(NumberingPlanIndicator.UNKNOWN), eq("1717"), eq(new ESMClass()),
@@ -168,4 +175,63 @@ public class SmppDataSmCommandTest {
         assertEquals("3600000", optParamMap.get("QOS_TIME_TO_LIVE"));
         assertNull(optParamMap.get("ALERT_ON_MESSAGE_DELIVERY"));
     }
+    
+    @SuppressWarnings("unchecked")
+    @Test
+    public void executeWithOptionalParameterNewStyle() throws Exception {
+        Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+        exchange.getIn().setHeader(SmppConstants.COMMAND, "DataSm");
+        Map<Short, Object> optionalParameters = new LinkedHashMap<Short, Object>();
+        // standard optional parameter
+        optionalParameters.put(Short.valueOf((short) 0x0202), "1292".getBytes("UTF-8"));
+        optionalParameters.put(Short.valueOf((short) 0x001D), "urgent");
+        optionalParameters.put(Short.valueOf((short) 0x0005), Byte.valueOf("4"));
+        optionalParameters.put(Short.valueOf((short) 0x0008), Short.valueOf((short) 2));
+        optionalParameters.put(Short.valueOf((short) 0x0017), Integer.valueOf(3600000));
+        optionalParameters.put(Short.valueOf((short) 0x130C), null);
+        // vendor specific optional parameter
+        optionalParameters.put(Short.valueOf((short) 0x2150), "0815".getBytes("UTF-8"));
+        optionalParameters.put(Short.valueOf((short) 0x2151), "0816");
+        optionalParameters.put(Short.valueOf((short) 0x2152), Byte.valueOf("6"));
+        optionalParameters.put(Short.valueOf((short) 0x2153), Short.valueOf((short) 9));
+        optionalParameters.put(Short.valueOf((short) 0x2154), Integer.valueOf(7400000));
+        optionalParameters.put(Short.valueOf((short) 0x2155), null);
+        exchange.getIn().setHeader(SmppConstants.OPTIONAL_PARAMETERS, optionalParameters);
+        expect(session.dataShortMessage(eq("CMT"), eq(TypeOfNumber.UNKNOWN), eq(NumberingPlanIndicator.UNKNOWN), eq("1616"),
+                eq(TypeOfNumber.UNKNOWN), eq(NumberingPlanIndicator.UNKNOWN), eq("1717"), eq(new ESMClass()),
+                eq(new RegisteredDelivery((byte) 1)), eq(DataCoding.newInstance((byte) 0)),
+                eq(new OptionalParameter.OctetString(Tag.SOURCE_SUBADDRESS, "1292")),
+                eq(new OptionalParameter.COctetString(Tag.ADDITIONAL_STATUS_INFO_TEXT.code(), "urgent")),
+                eq(new OptionalParameter.Byte(Tag.DEST_ADDR_SUBUNIT, (byte) 4)),
+                eq(new OptionalParameter.Short(Tag.DEST_TELEMATICS_ID.code(), (short) 2)),
+                eq(new OptionalParameter.Int(Tag.QOS_TIME_TO_LIVE, 3600000)),
+                eq(new OptionalParameter.Null(Tag.ALERT_ON_MESSAGE_DELIVERY)),
+                eq(new OptionalParameter.OctetString((short) 0x2150, "1292", "UTF-8")),
+                eq(new OptionalParameter.COctetString((short) 0x2151, "0816")),
+                eq(new OptionalParameter.Byte((short) 0x2152, (byte) 6)),
+                eq(new OptionalParameter.Short((short) 0x2153, (short) 9)),
+                eq(new OptionalParameter.Int((short) 0x2154, 7400000)),
+                eq(new OptionalParameter.Null((short) 0x2155))))
+            .andReturn(new DataSmResult(new MessageId("1"), new OptionalParameter[]{
+                new OptionalParameter.OctetString(Tag.SOURCE_SUBADDRESS, "1292"), new OptionalParameter.COctetString(Tag.ADDITIONAL_STATUS_INFO_TEXT.code(), "urgent"),
+                new OptionalParameter.Byte(Tag.DEST_ADDR_SUBUNIT, (byte) 4), new OptionalParameter.Short(Tag.DEST_TELEMATICS_ID.code(), (short) 2),
+                new OptionalParameter.Int(Tag.QOS_TIME_TO_LIVE, 3600000), new OptionalParameter.Null(Tag.ALERT_ON_MESSAGE_DELIVERY)}));
+
+        replay(session);
+
+        command.execute(exchange);
+
+        verify(session);
+
+        assertEquals("1", exchange.getOut().getHeader(SmppConstants.ID));
+        Map<String, String> optParamMap = exchange.getOut().getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class);
+        assertEquals(6, optParamMap.size());
+        assertEquals("1292", optParamMap.get("SOURCE_SUBADDRESS"));
+        // FIXME: fix required in JSMPP. See http://code.google.com/p/jsmpp/issues/detail?id=140
+        //assertEquals("urgent", optParamMap.get("ADDITIONAL_STATUS_INFO_TEXT"));
+        assertEquals("4", optParamMap.get("DEST_ADDR_SUBUNIT"));
+        assertEquals("2", optParamMap.get("DEST_TELEMATICS_ID"));
+        assertEquals("3600000", optParamMap.get("QOS_TIME_TO_LIVE"));
+        assertNull(optParamMap.get("ALERT_ON_MESSAGE_DELIVERY"));
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/a027d7dc/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java
index 01e24de..3434d40 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java
@@ -473,4 +473,68 @@ public class SmppSubmitMultiCommandTest {
         assertEquals(1, exchange.getOut().getHeader(SmppConstants.SENT_MESSAGE_COUNT));
         assertNull(exchange.getOut().getHeader(SmppConstants.ERROR));
     }
+
+    @Test
+    public void executeWithOptionalParameterNewStyle() throws Exception {
+        Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+        exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitMulti");
+        exchange.getIn().setHeader(SmppConstants.ID, "1");
+        exchange.getIn().setHeader(SmppConstants.SOURCE_ADDR_TON, TypeOfNumber.NATIONAL.value());
+        exchange.getIn().setHeader(SmppConstants.SOURCE_ADDR_NPI, NumberingPlanIndicator.NATIONAL.value());
+        exchange.getIn().setHeader(SmppConstants.SOURCE_ADDR, "1818");
+        exchange.getIn().setHeader(SmppConstants.DEST_ADDR_TON, TypeOfNumber.INTERNATIONAL.value());
+        exchange.getIn().setHeader(SmppConstants.DEST_ADDR_NPI, NumberingPlanIndicator.INTERNET.value());
+        exchange.getIn().setHeader(SmppConstants.DEST_ADDR, Arrays.asList("1919"));
+        exchange.getIn().setHeader(SmppConstants.SCHEDULE_DELIVERY_TIME, new Date(1111111));
+        exchange.getIn().setHeader(SmppConstants.VALIDITY_PERIOD, new Date(2222222));
+        exchange.getIn().setHeader(SmppConstants.PROTOCOL_ID, (byte) 1);
+        exchange.getIn().setHeader(SmppConstants.PRIORITY_FLAG, (byte) 2);
+        exchange.getIn().setHeader(SmppConstants.REGISTERED_DELIVERY, new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS).value());
+        exchange.getIn().setHeader(SmppConstants.REPLACE_IF_PRESENT_FLAG, ReplaceIfPresentFlag.REPLACE.value());
+        Map<Short, Object> optionalParameters = new LinkedHashMap<Short, Object>();
+        // standard optional parameter
+        optionalParameters.put(Short.valueOf((short) 0x0202), "1292".getBytes("UTF-8"));
+        optionalParameters.put(Short.valueOf((short) 0x001D), "urgent");
+        optionalParameters.put(Short.valueOf((short) 0x0005), Byte.valueOf("4"));
+        optionalParameters.put(Short.valueOf((short) 0x0008), Short.valueOf((short) 2));
+        optionalParameters.put(Short.valueOf((short) 0x0017), Integer.valueOf(3600000));
+        optionalParameters.put(Short.valueOf((short) 0x130C), null);
+        // vendor specific optional parameter
+        optionalParameters.put(Short.valueOf((short) 0x2150), "0815".getBytes("UTF-8"));
+        optionalParameters.put(Short.valueOf((short) 0x2151), "0816");
+        optionalParameters.put(Short.valueOf((short) 0x2152), Byte.valueOf("6"));
+        optionalParameters.put(Short.valueOf((short) 0x2153), Short.valueOf((short) 9));
+        optionalParameters.put(Short.valueOf((short) 0x2154), Integer.valueOf(7400000));
+        optionalParameters.put(Short.valueOf((short) 0x2155), null);
+        exchange.getIn().setHeader(SmppConstants.OPTIONAL_PARAMETERS, optionalParameters);
+        exchange.getIn().setBody("short message body");
+        expect(session.submitMultiple(eq("CMT"), eq(TypeOfNumber.NATIONAL), eq(NumberingPlanIndicator.NATIONAL), eq("1818"),
+                aryEq(new Address[]{new Address(TypeOfNumber.INTERNATIONAL, NumberingPlanIndicator.INTERNET, "1919")}),
+                eq(new ESMClass()), eq((byte) 1), eq((byte) 2), eq("-300101001831100-"), eq("-300101003702200-"), eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS)),
+                eq(ReplaceIfPresentFlag.REPLACE), eq(DataCoding.newInstance((byte) 0)), eq((byte) 0), aryEq("short message body".getBytes()),
+                aryEq(new OptionalParameter[]{
+                    new OptionalParameter.OctetString(Tag.SOURCE_SUBADDRESS, "1292"),
+                    new OptionalParameter.COctetString(Tag.ADDITIONAL_STATUS_INFO_TEXT.code(), "urgent"),
+                    new OptionalParameter.Byte(Tag.DEST_ADDR_SUBUNIT, (byte) 4),
+                    new OptionalParameter.Short(Tag.DEST_TELEMATICS_ID.code(), (short) 2),
+                    new OptionalParameter.Int(Tag.QOS_TIME_TO_LIVE, 3600000),
+                    new OptionalParameter.Null(Tag.ALERT_ON_MESSAGE_DELIVERY),
+                    new OptionalParameter.OctetString((short) 0x2150, "1292", "UTF-8"),
+                    new OptionalParameter.COctetString((short) 0x2151, "0816"),
+                    new OptionalParameter.Byte((short) 0x2152, (byte) 6),
+                    new OptionalParameter.Short((short) 0x2153, (short) 9),
+                    new OptionalParameter.Int((short) 0x2154, 7400000),
+                    new OptionalParameter.Null((short) 0x2155)})))
+                .andReturn(new SubmitMultiResult("1"));
+
+        replay(session);
+
+        command.execute(exchange);
+
+        verify(session);
+
+        assertEquals(Arrays.asList("1"), exchange.getOut().getHeader(SmppConstants.ID));
+        assertEquals(1, exchange.getOut().getHeader(SmppConstants.SENT_MESSAGE_COUNT));
+        assertNull(exchange.getOut().getHeader(SmppConstants.ERROR));
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/a027d7dc/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java
index e13d0c04..9f32a95 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java
@@ -221,6 +221,69 @@ public class SmppSubmitSmCommandTest {
     }
 
     @Test
+    public void executeWithOptionalParameterNewStyle() throws Exception {
+        Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+        exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitSm");
+        exchange.getIn().setHeader(SmppConstants.ID, "1");
+        exchange.getIn().setHeader(SmppConstants.SOURCE_ADDR_TON, TypeOfNumber.NATIONAL.value());
+        exchange.getIn().setHeader(SmppConstants.SOURCE_ADDR_NPI, NumberingPlanIndicator.NATIONAL.value());
+        exchange.getIn().setHeader(SmppConstants.SOURCE_ADDR, "1818");
+        exchange.getIn().setHeader(SmppConstants.DEST_ADDR_TON, TypeOfNumber.INTERNATIONAL.value());
+        exchange.getIn().setHeader(SmppConstants.DEST_ADDR_NPI, NumberingPlanIndicator.INTERNET.value());
+        exchange.getIn().setHeader(SmppConstants.DEST_ADDR, "1919");
+        exchange.getIn().setHeader(SmppConstants.SCHEDULE_DELIVERY_TIME, new Date(1111111));
+        exchange.getIn().setHeader(SmppConstants.VALIDITY_PERIOD, new Date(2222222));
+        exchange.getIn().setHeader(SmppConstants.PROTOCOL_ID, (byte) 1);
+        exchange.getIn().setHeader(SmppConstants.PRIORITY_FLAG, (byte) 2);
+        exchange.getIn().setHeader(SmppConstants.REGISTERED_DELIVERY, new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS).value());
+        exchange.getIn().setHeader(SmppConstants.REPLACE_IF_PRESENT_FLAG, ReplaceIfPresentFlag.REPLACE.value());
+        exchange.getIn().setBody("short message body");
+        Map<Short, Object> optionalParameters = new LinkedHashMap<Short, Object>();
+        // standard optional parameter
+        optionalParameters.put(Short.valueOf((short) 0x0202), "1292".getBytes("UTF-8"));
+        optionalParameters.put(Short.valueOf((short) 0x001D), "urgent");
+        optionalParameters.put(Short.valueOf((short) 0x0005), Byte.valueOf("4"));
+        optionalParameters.put(Short.valueOf((short) 0x0008), Short.valueOf((short) 2));
+        optionalParameters.put(Short.valueOf((short) 0x0017), Integer.valueOf(3600000));
+        optionalParameters.put(Short.valueOf((short) 0x130C), null);
+        // vendor specific optional parameter
+        optionalParameters.put(Short.valueOf((short) 0x2150), "0815".getBytes("UTF-8"));
+        optionalParameters.put(Short.valueOf((short) 0x2151), "0816");
+        optionalParameters.put(Short.valueOf((short) 0x2152), Byte.valueOf("6"));
+        optionalParameters.put(Short.valueOf((short) 0x2153), Short.valueOf((short) 9));
+        optionalParameters.put(Short.valueOf((short) 0x2154), Integer.valueOf(7400000));
+        optionalParameters.put(Short.valueOf((short) 0x2155), null);
+        exchange.getIn().setHeader(SmppConstants.OPTIONAL_PARAMETERS, optionalParameters);
+        expect(session.submitShortMessage(eq("CMT"), eq(TypeOfNumber.NATIONAL), eq(NumberingPlanIndicator.NATIONAL), eq("1818"),
+                eq(TypeOfNumber.INTERNATIONAL), eq(NumberingPlanIndicator.INTERNET), eq("1919"),
+                eq(new ESMClass()), eq((byte) 1), eq((byte) 2), eq("-300101001831100-"), eq("-300101003702200-"), eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS)),
+                eq(ReplaceIfPresentFlag.REPLACE.value()), eq(DataCoding.newInstance((byte) 0)), eq((byte) 0),
+                aryEq("short message body".getBytes()),
+                eq(new OptionalParameter.OctetString(Tag.SOURCE_SUBADDRESS, "1292")),
+                eq(new OptionalParameter.COctetString(Tag.ADDITIONAL_STATUS_INFO_TEXT.code(), "urgent")),
+                eq(new OptionalParameter.Byte(Tag.DEST_ADDR_SUBUNIT, (byte) 4)),
+                eq(new OptionalParameter.Short(Tag.DEST_TELEMATICS_ID.code(), (short) 2)),
+                eq(new OptionalParameter.Int(Tag.QOS_TIME_TO_LIVE, 3600000)),
+                eq(new OptionalParameter.Null(Tag.ALERT_ON_MESSAGE_DELIVERY)),
+                eq(new OptionalParameter.OctetString((short) 0x2150, "1292", "UTF-8")),
+                eq(new OptionalParameter.COctetString((short) 0x2151, "0816")),
+                eq(new OptionalParameter.Byte((short) 0x2152, (byte) 6)),
+                eq(new OptionalParameter.Short((short) 0x2153, (short) 9)),
+                eq(new OptionalParameter.Int((short) 0x2154, 7400000)),
+                eq(new OptionalParameter.Null((short) 0x2155))))
+                .andReturn("1");
+
+        replay(session);
+
+        command.execute(exchange);
+
+        verify(session);
+
+        assertEquals(Arrays.asList("1"), exchange.getOut().getHeader(SmppConstants.ID));
+        assertEquals(1, exchange.getOut().getHeader(SmppConstants.SENT_MESSAGE_COUNT));
+    }
+
+    @Test
     public void executeWithValidityPeriodAsString() throws Exception {
         Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
         exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitSm");


[2/3] git commit: CAMEL-6655: SMPP - add support of Vendor Specific Optional Parameter

Posted by cm...@apache.org.
CAMEL-6655: SMPP - add support of Vendor Specific Optional Parameter


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8989fd3f
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8989fd3f
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8989fd3f

Branch: refs/heads/camel-2.10.x
Commit: 8989fd3fc7642d5e1f61bc13f176e1e6b92dd778
Parents: a027d7d
Author: cmueller <cm...@apache.org>
Authored: Sun Aug 25 15:41:52 2013 +0200
Committer: cmueller <cm...@apache.org>
Committed: Sun Aug 25 16:29:38 2013 +0200

----------------------------------------------------------------------
 .../component/smpp/AbstractSmppCommand.java     | 20 ++----
 .../camel/component/smpp/SmppBinding.java       | 73 +++++++++++++++-----
 .../camel/component/smpp/SmppConstants.java     |  3 +-
 .../camel/component/smpp/SmppDataSmCommand.java | 14 ++--
 .../component/smpp/SmppSubmitMultiCommand.java  | 14 ++--
 .../component/smpp/SmppSubmitSmCommand.java     | 14 ++--
 .../camel/component/smpp/SmppBindingTest.java   | 15 +++-
 .../component/smpp/SmppDataSmCommandTest.java   |  2 +-
 .../smpp/SmppSubmitMultiCommandTest.java        |  2 +-
 .../component/smpp/SmppSubmitSmCommandTest.java |  2 +-
 10 files changed, 106 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/8989fd3f/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java
index 145ce46..c6ad202 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java
@@ -55,20 +55,6 @@ public abstract class AbstractSmppCommand implements SmppCommand {
         return message;
     }
 
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    protected List<OptionalParameter> createOptionalParameters(Map optinalParamaters) {
-        if (optinalParamaters == null || optinalParamaters.isEmpty()) {
-            return new ArrayList<OptionalParameter>();
-        }
-
-        Object firstKey = optinalParamaters.keySet().iterator().next();
-        if (firstKey instanceof String) {
-            return createOptionalParametersByName(optinalParamaters);
-        } else {
-            return createOptionalParametersByCode(optinalParamaters);
-        }
-    }
-
     protected List<OptionalParameter> createOptionalParametersByCode(Map<Short, Object> optinalParamaters) {
         List<OptionalParameter> optParams = new ArrayList<OptionalParameter>();
 
@@ -104,8 +90,12 @@ public abstract class AbstractSmppCommand implements SmppCommand {
         return optParams;
     }
 
+    /**
+     * @deprecated will be removed in Camel 2.13.0/3.0.0 - use createOptionalParametersByCode instead
+     * @param optinalParamaters
+     * @return
+     */
     @SuppressWarnings("rawtypes")
-    @Deprecated
     protected List<OptionalParameter> createOptionalParametersByName(Map<String, String> optinalParamaters) {
         List<OptionalParameter> optParams = new ArrayList<OptionalParameter>();
 

http://git-wip-us.apache.org/repos/asf/camel/blob/8989fd3f/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
index 5c86c9c..c1a8a8e 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
@@ -106,26 +106,15 @@ public class SmppBinding {
             smppMessage.setHeader(SmppConstants.SUBMIT_DATE, smscDeliveryReceipt.getSubmitDate());
             smppMessage.setHeader(SmppConstants.SUBMITTED, smscDeliveryReceipt.getSubmitted());
             smppMessage.setHeader(SmppConstants.FINAL_STATUS, smscDeliveryReceipt.getFinalStatus());
+
             if (deliverSm.getOptionalParametes() != null && deliverSm.getOptionalParametes().length > 0) {
-                List<OptionalParameter> oplist = Arrays.asList(deliverSm.getOptionalParametes());
+                // the deprecated way
+                Map<String, Object> optionalParameters = createOptionalParameterByName(deliverSm);
+                smppMessage.setHeader(SmppConstants.OPTIONAL_PARAMETERS, optionalParameters);
 
-                Map<String, Object> optParams = new HashMap<String, Object>();
-                for (OptionalParameter optPara : oplist) {
-                    if (OctetString.class.isInstance(optPara)) {
-                        optParams.put(OptionalParameter.Tag.valueOf(optPara.tag).toString(), ((OctetString) optPara).getValueAsString());
-                    } else if (org.jsmpp.bean.OptionalParameter.COctetString.class.isInstance(optPara)) {
-                        optParams.put(OptionalParameter.Tag.valueOf(optPara.tag).toString(), ((COctetString) optPara).getValueAsString());
-                    } else if (org.jsmpp.bean.OptionalParameter.Byte.class.isInstance(optPara)) {
-                        optParams.put(OptionalParameter.Tag.valueOf(optPara.tag).toString(), Byte.valueOf(((org.jsmpp.bean.OptionalParameter.Byte) optPara).getValue()));
-                    } else if (org.jsmpp.bean.OptionalParameter.Short.class.isInstance(optPara)) {
-                        optParams.put(OptionalParameter.Tag.valueOf(optPara.tag).toString(), Short.valueOf(((org.jsmpp.bean.OptionalParameter.Short) optPara).getValue()));
-                    } else if (org.jsmpp.bean.OptionalParameter.Int.class.isInstance(optPara)) {
-                        optParams.put(OptionalParameter.Tag.valueOf(optPara.tag).toString(), Integer.valueOf(((org.jsmpp.bean.OptionalParameter.Int) optPara).getValue()));
-                    } else if (Null.class.isInstance(optPara)) {
-                        optParams.put(OptionalParameter.Tag.valueOf(optPara.tag).toString(), null);
-                    }
-                }
-                smppMessage.setHeader(SmppConstants.OPTIONAL_PARAMETERS, optParams);
+                // the new way
+                Map<Short, Object> optionalParameter = createOptionalParameterByCode(deliverSm);
+                smppMessage.setHeader(SmppConstants.OPTIONAL_PARAMETER, optionalParameter);
             }
         } else {
             smppMessage.setHeader(SmppConstants.MESSAGE_TYPE, SmppMessageType.DeliverSm.toString());
@@ -162,7 +151,53 @@ public class SmppBinding {
 
         return smppMessage;
     }
-    
+
+    private Map<String, Object> createOptionalParameterByName(DeliverSm deliverSm) {
+        List<OptionalParameter> oplist = Arrays.asList(deliverSm.getOptionalParametes());
+
+        Map<String, Object> optParams = new HashMap<String, Object>();
+        for (OptionalParameter optPara : oplist) {
+            if (COctetString.class.isInstance(optPara)) {
+                optParams.put(OptionalParameter.Tag.valueOf(optPara.tag).toString(), ((COctetString) optPara).getValueAsString());
+            } else if (org.jsmpp.bean.OptionalParameter.OctetString.class.isInstance(optPara)) {
+                optParams.put(OptionalParameter.Tag.valueOf(optPara.tag).toString(), ((OctetString) optPara).getValueAsString());
+            } else if (org.jsmpp.bean.OptionalParameter.Byte.class.isInstance(optPara)) {
+                optParams.put(OptionalParameter.Tag.valueOf(optPara.tag).toString(), Byte.valueOf(((org.jsmpp.bean.OptionalParameter.Byte) optPara).getValue()));
+            } else if (org.jsmpp.bean.OptionalParameter.Short.class.isInstance(optPara)) {
+                optParams.put(OptionalParameter.Tag.valueOf(optPara.tag).toString(), Short.valueOf(((org.jsmpp.bean.OptionalParameter.Short) optPara).getValue()));
+            } else if (org.jsmpp.bean.OptionalParameter.Int.class.isInstance(optPara)) {
+                optParams.put(OptionalParameter.Tag.valueOf(optPara.tag).toString(), Integer.valueOf(((org.jsmpp.bean.OptionalParameter.Int) optPara).getValue()));
+            } else if (Null.class.isInstance(optPara)) {
+                optParams.put(OptionalParameter.Tag.valueOf(optPara.tag).toString(), null);
+            }
+        }
+
+        return optParams;
+    }
+
+    private Map<Short, Object> createOptionalParameterByCode(DeliverSm deliverSm) {
+        List<OptionalParameter> oplist = Arrays.asList(deliverSm.getOptionalParametes());
+
+        Map<Short, Object> optParams = new HashMap<Short, Object>();
+        for (OptionalParameter optPara : oplist) {
+            if (COctetString.class.isInstance(optPara)) {
+                optParams.put(Short.valueOf(optPara.tag), ((COctetString) optPara).getValueAsString());
+            } else if (org.jsmpp.bean.OptionalParameter.OctetString.class.isInstance(optPara)) {
+                optParams.put(Short.valueOf(optPara.tag), ((OctetString) optPara).getValue());
+            } else if (org.jsmpp.bean.OptionalParameter.Byte.class.isInstance(optPara)) {
+                optParams.put(Short.valueOf(optPara.tag), Byte.valueOf(((org.jsmpp.bean.OptionalParameter.Byte) optPara).getValue()));
+            } else if (org.jsmpp.bean.OptionalParameter.Short.class.isInstance(optPara)) {
+                optParams.put(Short.valueOf(optPara.tag), Short.valueOf(((org.jsmpp.bean.OptionalParameter.Short) optPara).getValue()));
+            } else if (org.jsmpp.bean.OptionalParameter.Int.class.isInstance(optPara)) {
+                optParams.put(Short.valueOf(optPara.tag), Integer.valueOf(((org.jsmpp.bean.OptionalParameter.Int) optPara).getValue()));
+            } else if (Null.class.isInstance(optPara)) {
+                optParams.put(Short.valueOf(optPara.tag), null);
+            }
+        }
+
+        return optParams;
+    }
+
     public SmppMessage createSmppMessage(DataSm dataSm, String smppMessageId) {
         SmppMessage smppMessage = new SmppMessage(dataSm, configuration);
 

http://git-wip-us.apache.org/repos/asf/camel/blob/8989fd3f/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConstants.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConstants.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConstants.java
index 32555cc..7099c3a 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConstants.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConstants.java
@@ -58,7 +58,8 @@ public interface SmppConstants {
     String PASSWORD = "CamelSmppSystemId";
     String VALIDITY_PERIOD = "CamelSmppValidityPeriod";
     String OPTIONAL_PARAMETERS = "CamelSmppOptionalParameters";
-    
+    String OPTIONAL_PARAMETER = "CamelSmppOptionalParameter";
+
     String UCS2_ENCODING = "UTF-16BE";
     byte UNKNOWN_ALPHABET = -1;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/8989fd3f/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java
index b33fa2a..a29a388 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java
@@ -168,12 +168,18 @@ public class SmppDataSmCommand extends AbstractSmppCommand {
             dataSm.setRegisteredDelivery(config.getRegisteredDelivery());
         }
 
-        Map<String, String> optinalParamaters = in.getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class);
-        if (optinalParamaters != null) {
-            List<OptionalParameter> optParams = createOptionalParameters(optinalParamaters);
+        Map<java.lang.Short, Object> optinalParamater = in.getHeader(SmppConstants.OPTIONAL_PARAMETER, Map.class);
+        if (optinalParamater != null) {
+            List<OptionalParameter> optParams = createOptionalParametersByCode(optinalParamater);
             dataSm.setOptionalParametes(optParams.toArray(new OptionalParameter[optParams.size()]));
         } else {
-            dataSm.setOptionalParametes();
+            Map<String, String> optinalParamaters = in.getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class);
+            if (optinalParamaters != null) {
+                List<OptionalParameter> optParams = createOptionalParametersByName(optinalParamaters);
+                dataSm.setOptionalParametes(optParams.toArray(new OptionalParameter[optParams.size()]));
+            } else {
+                dataSm.setOptionalParametes();
+            }
         }
 
         return dataSm;

http://git-wip-us.apache.org/repos/asf/camel/blob/8989fd3f/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java
index 00c8638..f541dab 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java
@@ -246,12 +246,18 @@ public class SmppSubmitMultiCommand extends SmppSmCommand {
             submitMulti.setReplaceIfPresentFlag(config.getReplaceIfPresentFlag());
         }
 
-        Map<String, String> optinalParamaters = in.getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class);
-        if (optinalParamaters != null) {
-            List<OptionalParameter> optParams = createOptionalParameters(optinalParamaters);
+        Map<java.lang.Short, Object> optinalParamater = in.getHeader(SmppConstants.OPTIONAL_PARAMETER, Map.class);
+        if (optinalParamater != null) {
+            List<OptionalParameter> optParams = createOptionalParametersByCode(optinalParamater);
             submitMulti.setOptionalParameters(optParams.toArray(new OptionalParameter[optParams.size()]));
         } else {
-            submitMulti.setOptionalParameters(new OptionalParameter[]{});
+            Map<String, String> optinalParamaters = in.getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class);
+            if (optinalParamaters != null) {
+                List<OptionalParameter> optParams = createOptionalParametersByName(optinalParamaters);
+                submitMulti.setOptionalParameters(optParams.toArray(new OptionalParameter[optParams.size()]));
+            } else {
+                submitMulti.setOptionalParameters(new OptionalParameter[]{});
+            }
         }
 
         return submitMulti;

http://git-wip-us.apache.org/repos/asf/camel/blob/8989fd3f/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java
index 4a8166e..ac5f4f1 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java
@@ -206,12 +206,18 @@ public class SmppSubmitSmCommand extends SmppSmCommand {
 
         submitSm.setEsmClass(new ESMClass().value());
 
-        Map<String, String> optinalParamaters = in.getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class);
-        if (optinalParamaters != null) {
-            List<OptionalParameter> optParams = createOptionalParameters(optinalParamaters);
+        Map<java.lang.Short, Object> optinalParamater = in.getHeader(SmppConstants.OPTIONAL_PARAMETER, Map.class);
+        if (optinalParamater != null) {
+            List<OptionalParameter> optParams = createOptionalParametersByCode(optinalParamater);
             submitSm.setOptionalParametes(optParams.toArray(new OptionalParameter[optParams.size()]));
         } else {
-            submitSm.setOptionalParametes();
+            Map<String, String> optinalParamaters = in.getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class);
+            if (optinalParamaters != null) {
+                List<OptionalParameter> optParams = createOptionalParametersByName(optinalParamaters);
+                submitSm.setOptionalParametes(optParams.toArray(new OptionalParameter[optParams.size()]));
+            } else {
+                submitSm.setOptionalParametes();
+            }
         }
 
         return submitSm;

http://git-wip-us.apache.org/repos/asf/camel/blob/8989fd3f/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java
index f427522..b440831 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java
@@ -139,7 +139,7 @@ public class SmppBindingTest {
         SmppMessage smppMessage = binding.createSmppMessage(deliverSm);
 
         assertEquals("Hello SMPP world!", smppMessage.getBody());
-        assertEquals(9, smppMessage.getHeaders().size());
+        assertEquals(10, smppMessage.getHeaders().size());
         assertEquals("2", smppMessage.getHeader(SmppConstants.ID));
         assertEquals(1, smppMessage.getHeader(SmppConstants.DELIVERED));
         // To avoid the test failure when running in different TimeZone
@@ -149,8 +149,8 @@ public class SmppBindingTest {
         assertEquals(1, smppMessage.getHeader(SmppConstants.SUBMITTED));
         assertEquals(DeliveryReceiptState.DELIVRD, smppMessage.getHeader(SmppConstants.FINAL_STATUS));
         assertEquals(SmppMessageType.DeliveryReceipt.toString(), smppMessage.getHeader(SmppConstants.MESSAGE_TYPE));
-        
-        Map<String, String> optionalParameters = smppMessage.getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class);
+
+        Map<String, Object> optionalParameters = smppMessage.getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class);
         assertEquals(6, optionalParameters.size());
         assertEquals("OctetString", optionalParameters.get("SOURCE_SUBADDRESS"));
         assertEquals("COctetStrin", optionalParameters.get("ADDITIONAL_STATUS_INFO_TEXT"));
@@ -158,6 +158,15 @@ public class SmppBindingTest {
         assertEquals(Short.valueOf((short) 1), optionalParameters.get("DEST_TELEMATICS_ID"));
         assertEquals(Integer.valueOf(1), optionalParameters.get("QOS_TIME_TO_LIVE"));
         assertNull("0x00", optionalParameters.get("ALERT_ON_MESSAGE_DELIVERY"));
+
+        Map<Short, Object> optionalParameter = smppMessage.getHeader(SmppConstants.OPTIONAL_PARAMETER, Map.class);
+        assertEquals(6, optionalParameter.size());
+        assertArrayEquals("OctetString".getBytes("UTF-8"), (byte[]) optionalParameter.get(Short.valueOf((short) 0x0202)));
+        assertEquals("COctetStrin", optionalParameter.get(Short.valueOf((short) 0x001D)));
+        assertEquals(Byte.valueOf((byte) 0x01), optionalParameter.get(Short.valueOf((short) 0x0005)));
+        assertEquals(Short.valueOf((short) 1), optionalParameter.get(Short.valueOf((short) 0x0008)));
+        assertEquals(Integer.valueOf(1), optionalParameter.get(Short.valueOf((short) 0x0017)));
+        assertNull("0x00", optionalParameter.get(Short.valueOf((short) 0x130C)));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/camel/blob/8989fd3f/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
index 5374753..8fe3193 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
@@ -196,7 +196,7 @@ public class SmppDataSmCommandTest {
         optionalParameters.put(Short.valueOf((short) 0x2153), Short.valueOf((short) 9));
         optionalParameters.put(Short.valueOf((short) 0x2154), Integer.valueOf(7400000));
         optionalParameters.put(Short.valueOf((short) 0x2155), null);
-        exchange.getIn().setHeader(SmppConstants.OPTIONAL_PARAMETERS, optionalParameters);
+        exchange.getIn().setHeader(SmppConstants.OPTIONAL_PARAMETER, optionalParameters);
         expect(session.dataShortMessage(eq("CMT"), eq(TypeOfNumber.UNKNOWN), eq(NumberingPlanIndicator.UNKNOWN), eq("1616"),
                 eq(TypeOfNumber.UNKNOWN), eq(NumberingPlanIndicator.UNKNOWN), eq("1717"), eq(new ESMClass()),
                 eq(new RegisteredDelivery((byte) 1)), eq(DataCoding.newInstance((byte) 0)),

http://git-wip-us.apache.org/repos/asf/camel/blob/8989fd3f/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java
index 3434d40..c6ff222 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java
@@ -506,7 +506,7 @@ public class SmppSubmitMultiCommandTest {
         optionalParameters.put(Short.valueOf((short) 0x2153), Short.valueOf((short) 9));
         optionalParameters.put(Short.valueOf((short) 0x2154), Integer.valueOf(7400000));
         optionalParameters.put(Short.valueOf((short) 0x2155), null);
-        exchange.getIn().setHeader(SmppConstants.OPTIONAL_PARAMETERS, optionalParameters);
+        exchange.getIn().setHeader(SmppConstants.OPTIONAL_PARAMETER, optionalParameters);
         exchange.getIn().setBody("short message body");
         expect(session.submitMultiple(eq("CMT"), eq(TypeOfNumber.NATIONAL), eq(NumberingPlanIndicator.NATIONAL), eq("1818"),
                 aryEq(new Address[]{new Address(TypeOfNumber.INTERNATIONAL, NumberingPlanIndicator.INTERNET, "1919")}),

http://git-wip-us.apache.org/repos/asf/camel/blob/8989fd3f/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java
index 9f32a95..c74ca76 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java
@@ -253,7 +253,7 @@ public class SmppSubmitSmCommandTest {
         optionalParameters.put(Short.valueOf((short) 0x2153), Short.valueOf((short) 9));
         optionalParameters.put(Short.valueOf((short) 0x2154), Integer.valueOf(7400000));
         optionalParameters.put(Short.valueOf((short) 0x2155), null);
-        exchange.getIn().setHeader(SmppConstants.OPTIONAL_PARAMETERS, optionalParameters);
+        exchange.getIn().setHeader(SmppConstants.OPTIONAL_PARAMETER, optionalParameters);
         expect(session.submitShortMessage(eq("CMT"), eq(TypeOfNumber.NATIONAL), eq(NumberingPlanIndicator.NATIONAL), eq("1818"),
                 eq(TypeOfNumber.INTERNATIONAL), eq(NumberingPlanIndicator.INTERNET), eq("1919"),
                 eq(new ESMClass()), eq((byte) 1), eq((byte) 2), eq("-300101001831100-"), eq("-300101003702200-"), eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS)),


[3/3] git commit: CAMEL-6655: SMPP - add support of Vendor Specific Optional Parameter

Posted by cm...@apache.org.
CAMEL-6655: SMPP - add support of Vendor Specific Optional Parameter


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/36b2c8c6
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/36b2c8c6
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/36b2c8c6

Branch: refs/heads/camel-2.10.x
Commit: 36b2c8c6d1b86cccb09de2df2adf53c12f8dcdee
Parents: 8989fd3
Author: cmueller <cm...@apache.org>
Authored: Sun Aug 25 16:24:15 2013 +0200
Committer: cmueller <cm...@apache.org>
Committed: Sun Aug 25 16:29:50 2013 +0200

----------------------------------------------------------------------
 .../camel/component/smpp/SmppDataSmCommand.java | 32 ++++++++++++++++++--
 .../component/smpp/SmppDataSmCommandTest.java   | 27 ++++++++++++++++-
 2 files changed, 56 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/36b2c8c6/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java
index a29a388..213af70 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.smpp;
 
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -24,6 +25,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.jsmpp.bean.DataCoding;
 import org.jsmpp.bean.DataSm;
+import org.jsmpp.bean.DeliverSm;
 import org.jsmpp.bean.ESMClass;
 import org.jsmpp.bean.NumberingPlanIndicator;
 import org.jsmpp.bean.OptionalParameter;
@@ -78,10 +80,11 @@ public class SmppDataSmCommand extends AbstractSmppCommand {
 
         Message message = getResponseMessage(exchange);
         message.setHeader(SmppConstants.ID, result.getMessageId());
-        message.setHeader(SmppConstants.OPTIONAL_PARAMETERS, getOptionalParametersAsMap(result.getOptionalParameters()));
+        message.setHeader(SmppConstants.OPTIONAL_PARAMETERS, createOptionalParameterByName(result.getOptionalParameters()));
+        message.setHeader(SmppConstants.OPTIONAL_PARAMETER, createOptionalParameterByCode(result.getOptionalParameters()));
     }
 
-    protected Map<String, String> getOptionalParametersAsMap(OptionalParameter[] optionalParameters) {
+    protected Map<String, String> createOptionalParameterByName(OptionalParameter[] optionalParameters) {
         if (optionalParameters == null) {
             return null;
         }
@@ -109,6 +112,31 @@ public class SmppDataSmCommand extends AbstractSmppCommand {
         return optParams;
     }
 
+    protected Map<java.lang.Short, Object> createOptionalParameterByCode(OptionalParameter[] optionalParameters) {
+        if (optionalParameters == null) {
+            return null;
+        }
+
+        Map<java.lang.Short, Object> optParams = new HashMap<java.lang.Short, Object>();
+        for (OptionalParameter optPara : optionalParameters) {
+            if (COctetString.class.isInstance(optPara)) {
+                optParams.put(java.lang.Short.valueOf(optPara.tag), ((COctetString) optPara).getValueAsString());
+            } else if (org.jsmpp.bean.OptionalParameter.OctetString.class.isInstance(optPara)) {
+                optParams.put(java.lang.Short.valueOf(optPara.tag), ((OctetString) optPara).getValue());
+            } else if (org.jsmpp.bean.OptionalParameter.Byte.class.isInstance(optPara)) {
+                optParams.put(java.lang.Short.valueOf(optPara.tag), java.lang.Byte.valueOf(((org.jsmpp.bean.OptionalParameter.Byte) optPara).getValue()));
+            } else if (org.jsmpp.bean.OptionalParameter.Short.class.isInstance(optPara)) {
+                optParams.put(java.lang.Short.valueOf(optPara.tag), java.lang.Short.valueOf(((org.jsmpp.bean.OptionalParameter.Short) optPara).getValue()));
+            } else if (org.jsmpp.bean.OptionalParameter.Int.class.isInstance(optPara)) {
+                optParams.put(java.lang.Short.valueOf(optPara.tag), Integer.valueOf(((org.jsmpp.bean.OptionalParameter.Int) optPara).getValue()));
+            } else if (Null.class.isInstance(optPara)) {
+                optParams.put(java.lang.Short.valueOf(optPara.tag), null);
+            }
+        }
+
+        return optParams;
+    }
+
     @SuppressWarnings({"unchecked"})
     protected DataSm createDataSm(Exchange exchange) {
         Message in = exchange.getIn();

http://git-wip-us.apache.org/repos/asf/camel/blob/36b2c8c6/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
index 8fe3193..e95da28 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
@@ -45,6 +45,7 @@ import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
+import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 
@@ -164,7 +165,9 @@ public class SmppDataSmCommandTest {
 
         verify(session);
 
+        assertEquals(3, exchange.getOut().getHeaders().size());
         assertEquals("1", exchange.getOut().getHeader(SmppConstants.ID));
+
         Map<String, String> optParamMap = exchange.getOut().getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class);
         assertEquals(6, optParamMap.size());
         assertEquals("1292", optParamMap.get("SOURCE_SUBADDRESS"));
@@ -174,8 +177,18 @@ public class SmppDataSmCommandTest {
         assertEquals("2", optParamMap.get("DEST_TELEMATICS_ID"));
         assertEquals("3600000", optParamMap.get("QOS_TIME_TO_LIVE"));
         assertNull(optParamMap.get("ALERT_ON_MESSAGE_DELIVERY"));
+
+        Map<Short, Object> optionalResultParameter = exchange.getOut().getHeader(SmppConstants.OPTIONAL_PARAMETER, Map.class);
+        assertEquals(6, optionalResultParameter.size());
+        assertArrayEquals("1292".getBytes("UTF-8"), (byte[]) optionalResultParameter.get(Short.valueOf((short) 0x0202)));
+        // FIXME: fix required in JSMPP. See http://code.google.com/p/jsmpp/issues/detail?id=140
+        //assertEquals("urgent", optionalResultParameter.get(Short.valueOf((short) 0x001D)));
+        assertEquals(Byte.valueOf((byte) 4), optionalResultParameter.get(Short.valueOf((short) 0x0005)));
+        assertEquals(Short.valueOf((short) 2), optionalResultParameter.get(Short.valueOf((short) 0x0008)));
+        assertEquals(Integer.valueOf(3600000), optionalResultParameter.get(Short.valueOf((short) 0x0017)));
+        assertNull(optionalResultParameter.get(Short.valueOf((short) 0x130C)));
     }
-    
+
     @SuppressWarnings("unchecked")
     @Test
     public void executeWithOptionalParameterNewStyle() throws Exception {
@@ -223,7 +236,9 @@ public class SmppDataSmCommandTest {
 
         verify(session);
 
+        assertEquals(3, exchange.getOut().getHeaders().size());
         assertEquals("1", exchange.getOut().getHeader(SmppConstants.ID));
+
         Map<String, String> optParamMap = exchange.getOut().getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class);
         assertEquals(6, optParamMap.size());
         assertEquals("1292", optParamMap.get("SOURCE_SUBADDRESS"));
@@ -233,5 +248,15 @@ public class SmppDataSmCommandTest {
         assertEquals("2", optParamMap.get("DEST_TELEMATICS_ID"));
         assertEquals("3600000", optParamMap.get("QOS_TIME_TO_LIVE"));
         assertNull(optParamMap.get("ALERT_ON_MESSAGE_DELIVERY"));
+
+        Map<Short, Object> optionalResultParameter = exchange.getOut().getHeader(SmppConstants.OPTIONAL_PARAMETER, Map.class);
+        assertEquals(6, optionalResultParameter.size());
+        assertArrayEquals("1292".getBytes("UTF-8"), (byte[]) optionalResultParameter.get(Short.valueOf((short) 0x0202)));
+        // FIXME: fix required in JSMPP. See http://code.google.com/p/jsmpp/issues/detail?id=140
+        //assertEquals("urgent", optionalResultParameter.get(Short.valueOf((short) 0x001D)));
+        assertEquals(Byte.valueOf((byte) 4), optionalResultParameter.get(Short.valueOf((short) 0x0005)));
+        assertEquals(Short.valueOf((short) 2), optionalResultParameter.get(Short.valueOf((short) 0x0008)));
+        assertEquals(Integer.valueOf(3600000), optionalResultParameter.get(Short.valueOf((short) 0x0017)));
+        assertNull(optionalResultParameter.get(Short.valueOf((short) 0x130C)));
     }
 }
\ No newline at end of file