/**
*
*/
package vnet.sms.common.wme.acknowledge;
import static org.apache.commons.lang.Validate.notNull;
import java.io.Serializable;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.DownstreamMessageEvent;
import vnet.sms.common.messages.Acknowledgement;
import vnet.sms.common.messages.GsmPdu;
import vnet.sms.common.wme.MessageEventType;
/**
* @author obergner
*
*/
public class DownstreamSendMessageAcknowledgementEvent<ID extends Serializable, M extends GsmPdu>
extends DownstreamMessageEvent implements
SendMessageAcknowledgementEvent<ID, M> {
private final ID acknowledgedMessageReference;
private final MessageEventType acknowledgedMessageType;
private final Acknowledgement acknowledgement;
protected DownstreamSendMessageAcknowledgementEvent(
final ID acknowledgedMessageReference,
final MessageEventType acknowledgedMessageType,
final Channel channel, final M message,
final Acknowledgement acknowledgement) {
this(acknowledgedMessageReference, acknowledgedMessageType, channel,
Channels.future(channel, false), message, acknowledgement);
}
protected DownstreamSendMessageAcknowledgementEvent(
final ID acknowledgedMessageReference,
final MessageEventType acknowledgedMessageType,
final Channel channel, final ChannelFuture future, final M message,
final Acknowledgement acknowledgement) {
super(channel, future, message, channel.getRemoteAddress());
notNull(acknowledgedMessageReference,
"Argument 'acknowledgedMessageReference' must not be null");
notNull(acknowledgedMessageType,
"Argument 'acknowledgedMessageType' must not be null");
notNull(channel, "Argument 'channel' must not be null");
notNull(future, "Argument 'future' must not be null");
notNull(message, "Argument 'message' must not be null");
notNull(acknowledgement, "Argument 'acknowledgement' must not be null");
this.acknowledgedMessageReference = acknowledgedMessageReference;
this.acknowledgedMessageType = acknowledgedMessageType;
this.acknowledgement = acknowledgement;
}
/**
* @see vnet.sms.common.wme.acknowledge.SendMessageAcknowledgementEvent#getAcknowledgedMessageType()
*/
@Override
public MessageEventType getAcknowledgedMessageType() {
return this.acknowledgedMessageType;
}
/**
* @see vnet.sms.common.wme.acknowledge.SendMessageAcknowledgementEvent#getAcknowledgedMessageReference()
*/
@Override
public ID getAcknowledgedMessageReference() {
return this.acknowledgedMessageReference;
}
/**
* @see vnet.sms.common.wme.acknowledge.SendMessageAcknowledgementEvent#getAcknowledgement
* ()
*/
@Override
public Acknowledgement getAcknowledgement() {
return this.acknowledgement;
}
/**
* @see vnet.sms.common.wme.acknowledge.SendMessageAcknowledgementEvent#isAccepted()
*/
@Override
public boolean isAccepted() {
return this.acknowledgement.is(Acknowledgement.Status.ACK);
}
/**
* @see org.jboss.netty.channel.DownstreamMessageEvent#getMessage()
*/
@Override
public M getMessage() {
return (M) super.getMessage();
}
@Override
public String toString() {
return getClass().getSimpleName() + "@" + this.hashCode()
+ "[acknowledgedMessageReference: "
+ getAcknowledgedMessageReference() + "|message: "
+ getMessage() + "|acknowledgement: " + this.acknowledgement
+ "|channel: " + getChannel() + "|future: " + getFuture()
+ "|remoteAddress: " + getRemoteAddress() + "]";
}
}