/**
*
*/
package vnet.sms.common.wme.receive;
import static org.apache.commons.lang.Validate.notNull;
import java.io.Serializable;
import org.jboss.netty.channel.UpstreamMessageEvent;
import vnet.sms.common.messages.GsmPdu;
import vnet.sms.common.wme.MessageEventType;
import vnet.sms.common.wme.WindowedMessageEvent;
/**
* @author obergner
*
*/
public abstract class UpstreamWindowedMessageEvent<ID extends Serializable, M extends GsmPdu>
extends UpstreamMessageEvent implements WindowedMessageEvent<ID, M> {
private final ID messageReference;
private final MessageEventType type;
protected UpstreamWindowedMessageEvent(final ID messageReference,
final MessageEventType type,
final UpstreamMessageEvent upstreamMessageEvent, final M message) {
super(upstreamMessageEvent.getChannel(), message, upstreamMessageEvent
.getRemoteAddress());
notNull(messageReference,
"Argument 'messageReference' must not be null");
notNull(type, "Argument 'type' must not be null");
this.messageReference = messageReference;
this.type = type;
}
/**
* @see vnet.sms.common.wme.WindowedMessageEvent#getMessageReference()
*/
@Override
public ID getMessageReference() {
return this.messageReference;
}
/**
* @see vnet.sms.common.wme.WindowedMessageEvent#getMessageType()
*/
@Override
public MessageEventType getMessageType() {
return this.type;
}
/**
* @see vnet.sms.common.wme.WindowedMessageEvent#getMessage()
*/
@Override
public M getMessage() {
return (M) super.getMessage();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime
* result
+ ((this.messageReference == null) ? 0 : this.messageReference
.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final UpstreamWindowedMessageEvent<? extends Serializable, ? extends GsmPdu> other = (UpstreamWindowedMessageEvent<? extends Serializable, ? extends GsmPdu>) obj;
if (this.messageReference == null) {
if (other.messageReference != null) {
return false;
}
} else if (!this.messageReference.equals(other.messageReference)) {
return false;
}
return true;
}
@Override
public String toString() {
return getClass().getSimpleName() + "@" + hashCode()
+ "[messageReference: " + this.messageReference + "|type: "
+ getMessageType() + "|message: " + getMessage() + "|channel: "
+ getChannel() + "|remoteAddress: " + getRemoteAddress() + "]";
}
}