/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.component.smpp;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import org.apache.camel.impl.DefaultMessage;
import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ObjectHelper;
import org.jsmpp.bean.AlertNotification;
import org.jsmpp.bean.Alphabet;
import org.jsmpp.bean.Command;
import org.jsmpp.bean.DataSm;
import org.jsmpp.bean.DeliverSm;
import org.jsmpp.bean.MessageRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Represents a {@link org.apache.camel.Message} for working with SMPP
*/
public class SmppMessage extends DefaultMessage {
private static final Logger LOG = LoggerFactory.getLogger(SmppMessage.class);
private Command command;
private SmppConfiguration configuration;
public SmppMessage(SmppConfiguration configuration) {
this.configuration = configuration;
}
public SmppMessage(AlertNotification command, SmppConfiguration configuration) {
this.command = command;
this.configuration = configuration;
}
public SmppMessage(DeliverSm command, SmppConfiguration configuration) {
this.command = command;
this.configuration = configuration;
}
public SmppMessage(DataSm dataSm, SmppConfiguration configuration) {
this.command = dataSm;
this.configuration = configuration;
}
@Override
public SmppMessage newInstance() {
return new SmppMessage(this.configuration);
}
public boolean isAlertNotification() {
return command instanceof AlertNotification;
}
public boolean isDataSm() {
return command instanceof DataSm;
}
public boolean isDeliverSm() {
return command instanceof DeliverSm && !((DeliverSm) command).isSmscDeliveryReceipt();
}
public boolean isDeliveryReceipt() {
return command instanceof DeliverSm && ((DeliverSm) command).isSmscDeliveryReceipt();
}
@Override
protected Object createBody() {
if (command instanceof MessageRequest) {
MessageRequest msgRequest = (MessageRequest)command;
byte[] shortMessage = msgRequest.getShortMessage();
if (shortMessage == null || shortMessage.length == 0) {
return null;
}
Alphabet alphabet = Alphabet.parseDataCoding(msgRequest.getDataCoding());
if (SmppUtils.is8Bit(alphabet)) {
return shortMessage;
}
String encoding = IOHelper.getCharsetName(getExchange(), false);
if (ObjectHelper.isEmpty(encoding) || !Charset.isSupported(encoding)) {
encoding = configuration.getEncoding();
}
try {
return new String(shortMessage, encoding);
} catch (UnsupportedEncodingException e) {
LOG.info("Unsupported encoding \"{}\". Using system default encoding.", encoding);
}
return new String(shortMessage);
}
return null;
}
@Override
public String toString() {
if (command != null) {
return "SmppMessage: " + command;
} else {
return "SmppMessage: " + getBody();
}
}
/**
* Returns the underlying jSMPP command
*
* @return command
*/
public Command getCommand() {
return command;
}
}