/**
* Start time:12:57:29 2009-09-04<br>
* Project: mobicents-isup-stack<br>
*
* @author <a href="mailto:baranowb@gmail.com">Bartosz Baranowski </a>
*/
package org.mobicents.ss7.isup.impl;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import org.mobicents.ss7.isup.ISUPServerTransaction;
import org.mobicents.ss7.isup.ISUPTransaction;
import org.mobicents.ss7.isup.TransactionID;
import org.mobicents.ss7.isup.message.ISUPMessage;
/**
* Start time:12:57:29 2009-09-04<br>
* Project: mobicents-isup-stack<br>
*
* @author <a href="mailto:baranowb@gmail.com">Bartosz Baranowski </a>
*/
public abstract class ISUPTransactionImpl implements ISUPTransaction {
private static final AtomicLong txID = new AtomicLong(0);
protected final TransactionID transactionID = new TransactionID(txID.incrementAndGet());
protected ISUPMessage message;
protected ISUPProviderImpl provider;
protected ISUPStackImpl stack;
protected Future generalTimeoutFuture;
public ISUPTransactionImpl(ISUPMessage message, ISUPProviderImpl provider, ISUPStackImpl stack) {
super();
this.message = message;
this.provider = provider;
this.stack = stack;
this.generalTimeoutFuture = stack.getExecutors().schedule(new ISUPTransactionTimeoutTask(this), stack.getTransactionGeneralTimeout(), TimeUnit.MILLISECONDS);
}
public ISUPProviderImpl getProvider() {
return provider;
}
public void setProvider(ISUPProviderImpl provider) {
this.provider = provider;
}
public ISUPStackImpl getStack() {
return stack;
}
public void setStack(ISUPStackImpl stack) {
this.stack = stack;
}
public void setMessage(ISUPMessage message) {
this.message = message;
}
/*
* (non-Javadoc)
*
* @see org.mobicents.ss7.isup.ISUPTransaction#getMessage()
*/
public ISUPMessage getOriginalMessage() {
return this.message;
}
/*
* (non-Javadoc)
*
* @see org.mobicents.ss7.isup.ISUPTransaction#getTransactionID()
*/
public TransactionID getTransactionID() {
return this.transactionID;
}
/*
* (non-Javadoc)
*
* @see org.mobicents.ss7.isup.ISUPTransaction#isServerTransaction()
*/
public boolean isServerTransaction() {
return this instanceof ISUPServerTransaction;
}
protected void cancelGeneralTimer() {
if (this.generalTimeoutFuture != null) {
this.generalTimeoutFuture.cancel(false);
this.generalTimeoutFuture = null;
}
}
protected abstract void doGeneralTimeout();
private class ISUPTransactionTimeoutTask implements Runnable {
private ISUPTransactionImpl transaction;
public ISUPTransactionTimeoutTask(ISUPTransactionImpl transaction) {
super();
this.transaction = transaction;
}
public void run() {
transaction.doGeneralTimeout();
}
}
}