Search in sources :

Example 1 with SubmitMulti

use of org.jsmpp.bean.SubmitMulti in project camel by apache.

the class SmppSubmitMultiCommand method createSubmitMulti.

protected SubmitMulti[] createSubmitMulti(Exchange exchange) throws SmppException {
    byte[][] segments = splitBody(exchange.getIn());
    ESMClass esmClass;
    // multipart message
    if (segments.length > 1) {
        esmClass = new ESMClass(MessageMode.DEFAULT, MessageType.DEFAULT, GSMSpecificFeature.UDHI);
    } else {
        esmClass = new ESMClass();
    }
    SubmitMulti template = createSubmitMultiTemplate(exchange);
    SubmitMulti[] submitMulties = new SubmitMulti[segments.length];
    for (int i = 0; i < segments.length; i++) {
        SubmitMulti submitMulti = SmppUtils.copySubmitMulti(template);
        submitMulti.setEsmClass(esmClass.value());
        submitMulti.setDataCoding(template.getDataCoding());
        submitMulti.setShortMessage(segments[i]);
        submitMulties[i] = submitMulti;
    }
    return submitMulties;
}
Also used : ESMClass(org.jsmpp.bean.ESMClass) SubmitMulti(org.jsmpp.bean.SubmitMulti)

Example 2 with SubmitMulti

use of org.jsmpp.bean.SubmitMulti in project camel by apache.

the class SmppSubmitMultiCommand method execute.

@Override
public void execute(Exchange exchange) throws SmppException {
    SubmitMulti[] submitMulties = createSubmitMulti(exchange);
    List<SubmitMultiResult> results = new ArrayList<SubmitMultiResult>(submitMulties.length);
    for (SubmitMulti submitMulti : submitMulties) {
        SubmitMultiResult result;
        if (log.isDebugEnabled()) {
            log.debug("Sending multiple short messages for exchange id '{}'...", exchange.getExchangeId());
        }
        try {
            result = session.submitMultiple(submitMulti.getServiceType(), TypeOfNumber.valueOf(submitMulti.getSourceAddrTon()), NumberingPlanIndicator.valueOf(submitMulti.getSourceAddrNpi()), submitMulti.getSourceAddr(), (Address[]) submitMulti.getDestAddresses(), new ESMClass(submitMulti.getEsmClass()), submitMulti.getProtocolId(), submitMulti.getPriorityFlag(), submitMulti.getScheduleDeliveryTime(), submitMulti.getValidityPeriod(), new RegisteredDelivery(submitMulti.getRegisteredDelivery()), new ReplaceIfPresentFlag(submitMulti.getReplaceIfPresentFlag()), DataCodings.newInstance(submitMulti.getDataCoding()), submitMulti.getSmDefaultMsgId(), submitMulti.getShortMessage(), submitMulti.getOptionalParameters());
            results.add(result);
        } catch (Exception e) {
            throw new SmppException(e);
        }
    }
    if (log.isDebugEnabled()) {
        log.debug("Sent multiple short messages for exchange id '{}' and received results '{}'", exchange.getExchangeId(), results);
    }
    List<String> messageIDs = new ArrayList<String>(results.size());
    // {messageID : [{destAddr : address, error : errorCode}]}
    Map<String, List<Map<String, Object>>> errors = new HashMap<String, List<Map<String, Object>>>();
    for (SubmitMultiResult result : results) {
        UnsuccessDelivery[] deliveries = result.getUnsuccessDeliveries();
        if (deliveries != null) {
            List<Map<String, Object>> undelivered = new ArrayList<Map<String, Object>>();
            for (UnsuccessDelivery delivery : deliveries) {
                Map<String, Object> error = new HashMap<String, Object>();
                error.put(SmppConstants.DEST_ADDR, delivery.getDestinationAddress().getAddress());
                error.put(SmppConstants.ERROR, delivery.getErrorStatusCode());
                undelivered.add(error);
            }
            if (!undelivered.isEmpty()) {
                errors.put(result.getMessageId(), undelivered);
            }
        }
        messageIDs.add(result.getMessageId());
    }
    Message message = getResponseMessage(exchange);
    message.setHeader(SmppConstants.ID, messageIDs);
    message.setHeader(SmppConstants.SENT_MESSAGE_COUNT, messageIDs.size());
    if (!errors.isEmpty()) {
        message.setHeader(SmppConstants.ERROR, errors);
    }
}
Also used : ReplaceIfPresentFlag(org.jsmpp.bean.ReplaceIfPresentFlag) Message(org.apache.camel.Message) HashMap(java.util.HashMap) ESMClass(org.jsmpp.bean.ESMClass) ArrayList(java.util.ArrayList) SubmitMultiResult(org.jsmpp.bean.SubmitMultiResult) RegisteredDelivery(org.jsmpp.bean.RegisteredDelivery) UnsuccessDelivery(org.jsmpp.bean.UnsuccessDelivery) ArrayList(java.util.ArrayList) List(java.util.List) SubmitMulti(org.jsmpp.bean.SubmitMulti) HashMap(java.util.HashMap) Map(java.util.Map)

Example 3 with SubmitMulti

use of org.jsmpp.bean.SubmitMulti in project camel by apache.

the class SmppSubmitMultiCommand method createSubmitMultiTemplate.

@SuppressWarnings({ "unchecked" })
protected SubmitMulti createSubmitMultiTemplate(Exchange exchange) {
    Message in = exchange.getIn();
    SubmitMulti submitMulti = new SubmitMulti();
    if (in.getHeaders().containsKey(SmppConstants.DATA_CODING)) {
        submitMulti.setDataCoding(in.getHeader(SmppConstants.DATA_CODING, Byte.class));
    } else if (in.getHeaders().containsKey(SmppConstants.ALPHABET)) {
        submitMulti.setDataCoding(in.getHeader(SmppConstants.ALPHABET, Byte.class));
    } else {
        submitMulti.setDataCoding(config.getDataCoding());
    }
    byte destAddrTon;
    if (in.getHeaders().containsKey(SmppConstants.DEST_ADDR_TON)) {
        destAddrTon = in.getHeader(SmppConstants.DEST_ADDR_TON, Byte.class);
    } else {
        destAddrTon = config.getDestAddrTon();
    }
    byte destAddrNpi;
    if (in.getHeaders().containsKey(SmppConstants.DEST_ADDR_NPI)) {
        destAddrNpi = in.getHeader(SmppConstants.DEST_ADDR_NPI, Byte.class);
    } else {
        destAddrNpi = config.getDestAddrNpi();
    }
    List<String> destAddresses;
    if (in.getHeaders().containsKey(SmppConstants.DEST_ADDR)) {
        destAddresses = in.getHeader(SmppConstants.DEST_ADDR, List.class);
    } else {
        destAddresses = Arrays.asList(config.getDestAddr());
    }
    Address[] addresses = new Address[destAddresses.size()];
    int addrNum = 0;
    for (String destAddr : destAddresses) {
        Address addr = new Address(destAddrTon, destAddrNpi, destAddr);
        addresses[addrNum++] = addr;
    }
    submitMulti.setDestAddresses(addresses);
    if (in.getHeaders().containsKey(SmppConstants.SOURCE_ADDR)) {
        submitMulti.setSourceAddr(in.getHeader(SmppConstants.SOURCE_ADDR, String.class));
    } else {
        submitMulti.setSourceAddr(config.getSourceAddr());
    }
    if (in.getHeaders().containsKey(SmppConstants.SOURCE_ADDR_TON)) {
        submitMulti.setSourceAddrTon(in.getHeader(SmppConstants.SOURCE_ADDR_TON, Byte.class));
    } else {
        submitMulti.setSourceAddrTon(config.getSourceAddrTon());
    }
    if (in.getHeaders().containsKey(SmppConstants.SOURCE_ADDR_NPI)) {
        submitMulti.setSourceAddrNpi(in.getHeader(SmppConstants.SOURCE_ADDR_NPI, Byte.class));
    } else {
        submitMulti.setSourceAddrNpi(config.getSourceAddrNpi());
    }
    if (in.getHeaders().containsKey(SmppConstants.SERVICE_TYPE)) {
        submitMulti.setServiceType(in.getHeader(SmppConstants.SERVICE_TYPE, String.class));
    } else {
        submitMulti.setServiceType(config.getServiceType());
    }
    if (in.getHeaders().containsKey(SmppConstants.REGISTERED_DELIVERY)) {
        submitMulti.setRegisteredDelivery(in.getHeader(SmppConstants.REGISTERED_DELIVERY, Byte.class));
    } else {
        submitMulti.setRegisteredDelivery(config.getRegisteredDelivery());
    }
    if (in.getHeaders().containsKey(SmppConstants.PROTOCOL_ID)) {
        submitMulti.setProtocolId(in.getHeader(SmppConstants.PROTOCOL_ID, Byte.class));
    } else {
        submitMulti.setProtocolId(config.getProtocolId());
    }
    if (in.getHeaders().containsKey(SmppConstants.PRIORITY_FLAG)) {
        submitMulti.setPriorityFlag(in.getHeader(SmppConstants.PRIORITY_FLAG, Byte.class));
    } else {
        submitMulti.setPriorityFlag(config.getPriorityFlag());
    }
    if (in.getHeaders().containsKey(SmppConstants.SCHEDULE_DELIVERY_TIME)) {
        submitMulti.setScheduleDeliveryTime(SmppUtils.formatTime(in.getHeader(SmppConstants.SCHEDULE_DELIVERY_TIME, Date.class)));
    }
    if (in.getHeaders().containsKey(SmppConstants.VALIDITY_PERIOD)) {
        Object validityPeriod = in.getHeader(SmppConstants.VALIDITY_PERIOD);
        if (validityPeriod instanceof String) {
            submitMulti.setValidityPeriod((String) validityPeriod);
        } else if (validityPeriod instanceof Date) {
            submitMulti.setValidityPeriod(SmppUtils.formatTime((Date) validityPeriod));
        }
    }
    if (in.getHeaders().containsKey(SmppConstants.REPLACE_IF_PRESENT_FLAG)) {
        submitMulti.setReplaceIfPresentFlag(in.getHeader(SmppConstants.REPLACE_IF_PRESENT_FLAG, Byte.class));
    } else {
        submitMulti.setReplaceIfPresentFlag(config.getReplaceIfPresentFlag());
    }
    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 {
        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;
}
Also used : Message(org.apache.camel.Message) Address(org.jsmpp.bean.Address) Date(java.util.Date) OptionalParameter(org.jsmpp.bean.OptionalParameter) ArrayList(java.util.ArrayList) List(java.util.List) SubmitMulti(org.jsmpp.bean.SubmitMulti)

Example 4 with SubmitMulti

use of org.jsmpp.bean.SubmitMulti in project camel by apache.

the class SmppUtils method copySubmitMulti.

public static SubmitMulti copySubmitMulti(SubmitMulti src) {
    SubmitMulti dest = new SubmitMulti();
    dest.setCommandId(src.getCommandId());
    dest.setCommandLength(src.getCommandLength());
    dest.setCommandStatus(src.getCommandStatus());
    dest.setDataCoding(src.getDataCoding());
    dest.setDestAddresses(src.getDestAddresses());
    dest.setEsmClass(src.getEsmClass());
    dest.setOptionalParameters(src.getOptionalParameters());
    dest.setPriorityFlag(src.getPriorityFlag());
    dest.setProtocolId(src.getProtocolId());
    dest.setRegisteredDelivery(src.getRegisteredDelivery());
    dest.setReplaceIfPresentFlag(src.getReplaceIfPresentFlag());
    dest.setScheduleDeliveryTime(src.getScheduleDeliveryTime());
    dest.setSequenceNumber(src.getSequenceNumber());
    dest.setServiceType(src.getServiceType());
    dest.setShortMessage(src.getShortMessage());
    dest.setSmDefaultMsgId(src.getSmDefaultMsgId());
    dest.setSourceAddr(src.getSourceAddr());
    dest.setSourceAddrNpi(src.getSourceAddrNpi());
    dest.setSourceAddrTon(src.getSourceAddrTon());
    dest.setValidityPeriod(src.getValidityPeriod());
    return dest;
}
Also used : SubmitMulti(org.jsmpp.bean.SubmitMulti)

Aggregations

SubmitMulti (org.jsmpp.bean.SubmitMulti)4 ArrayList (java.util.ArrayList)2 List (java.util.List)2 Message (org.apache.camel.Message)2 ESMClass (org.jsmpp.bean.ESMClass)2 Date (java.util.Date)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 Address (org.jsmpp.bean.Address)1 OptionalParameter (org.jsmpp.bean.OptionalParameter)1 RegisteredDelivery (org.jsmpp.bean.RegisteredDelivery)1 ReplaceIfPresentFlag (org.jsmpp.bean.ReplaceIfPresentFlag)1 SubmitMultiResult (org.jsmpp.bean.SubmitMultiResult)1 UnsuccessDelivery (org.jsmpp.bean.UnsuccessDelivery)1