package javax.megaco.association;
import java.io.Serializable;
import javax.megaco.AssociationEvent;
import javax.megaco.ParameterNotSetException;
/**
* The class extends JAIN MEGACO Association Events. This represents the delete
* association request event. The event causes the stack initiate assoiation
* teardown procedures with the peer. This would case the stack to send a
* ServiceChange command with specified ServiceChangeMethod (e.g. Forced or
* Graceful) and ServiceChangeReason. After completion of the protocol
* procedure, the association is deleted with the peer and can no more be used
* for exchaging commands with the peer.
*/
public class DeleteAssocReq extends AssociationEvent implements Serializable {
protected SrvChngReason srvChangeReason = null;
protected SrvChngReason srvChngMethod = null;
protected LocalAddr srvChngAddress = null;
protected LocalAddr handOffMGCId = null;
protected String srvChngMethodExtension = null;
protected int srvChngDelay = -1;
public DeleteAssocReq(Object source, int assocHandle)
throws IllegalArgumentException {
super(source, assocHandle);
// TODO Auto-generated constructor stub
}
@Override
public int getAssocOperIdentifier() {
return AssocEventType.M_DELETE_ASSOC_REQ;
}
/**
* Gets the integer value which identifies the service change reason. The
* stack would use the same ServiceChange Reason in the ServiceChange
* command request sent to peer.
*
* @return Returns the integer value corresponding to the service change
* reason. If the ServiceChangeReason is not set, then this method
* would return value 0. The possible values are field constants
* defined for the class SrvChngReason.
*/
public int getSrvChangeReason() {
return srvChangeReason == null ? 0 : srvChangeReason
.getSrvChngReasonId();
}
/**
* This method sets the service change reason. This parameter is required on
* if the application is MG. The MG stack would use the same ServiceChange
* Reason in the ServiceChange command request sent to peer MGC.
*
* @param reason
* - The object reference to ServiceChange Reason.
* @throws IllegalArgumentException
* This exception is raised if the reference of Service Change
* Reason passed to this method is NULL.
*/
public void setSrvChangeReason(SrvChngReason reason)
throws IllegalArgumentException {
if (reason == null) {
throw new IllegalArgumentException("Change reason can not be null");
}
this.srvChangeReason = reason;
}
/**
* Gets the integer value which identifies the service change method. This
* parameter is required on if the application is MG. The MG stack would use
* the same ServiceChange Method in ServiceChange command request sent to
* peer MGC.
*
* @return Returns the integer value corresponding to the service change
* method. If the ServiceChangeMethod is not set, then this method
* would return value 0. The possible values are field constants
* defined for the class SrvChngMethod.
*/
public int getSrvChngMethod() {
return srvChngMethod == null ? 0 : srvChngMethod.getSrvChngReasonId();
}
/**
* This method sets the service change method. This parameter is required on
* if the application is MG. The MG stack would use the same ServiceChange
* Method in ServiceChange command request sent to peer MGC.
*
* @param method
* - The object reference to ServiceChange Method.
* @throws IllegalArgumentException
* This exception is raised if the reference of Service Change
* Reason passed to this method is NULL.
*/
public void setSrvChngMethod(SrvChngReason method)
throws IllegalArgumentException {
if (method == null) {
throw new IllegalArgumentException("Change method can not be null");
}
this.srvChngMethod = method;
}
/**
* Gets the object reference corresponding to the service change address.
* The stack would use the same ServiceChange Address in the ServiceChange
* command request sent to peer.
*
* @return Returns the service change address. If the service change address
* has not been specified for this class, then this method returns
* NULL.
*/
public LocalAddr getSrvChngAddress() {
return srvChngAddress;
}
/**
* This method sets the service change address. The stack would use the same
* ServiceChange Address in the ServiceChange command request sent to peer.
*
* @param srvChngAddress
* - The service change address.
* @throws IllegalArgumentException
* This exception is raised if the service change address
* specified is invalid.
*/
public void setSrvChngAddress(LocalAddr srvChngAddress)
throws IllegalArgumentException {
// FIXME: IllegalArgumentException
this.srvChngAddress = srvChngAddress;
}
/**
* Gets the identity of the MGC to which the association is to be handoffed.
* The stack would use the same ServiceChangeMGCId in the ServiceChange
* command request sent to peer.
*
* @return Returns the identity of the MGC to which the association is to be
* handoffed. If HandedOffMGCId is not specified for this class,
* then this method returns NULL.
*/
public LocalAddr getHandOffMGCId() {
return handOffMGCId;
}
/**
* This method sets the identity of the MGC to which the association is to
* be handoffed. This method is valid only if the application is MGC. The
* stack would use the same ServiceChangeMGCId in the ServiceChange command
* request sent to peer.
*
*
*
* @param handOffMGCId
* The identity of the MGC to which the association is to be
* handoffed.
* @throws IllegalArgumentException
* This exception is raised if the HandedOffMGCId specified is
* invalid.
*/
public void setHandOffMGCId(LocalAddr handOffMGCId)
throws IllegalArgumentException {
// FIXME: IllegalArgumentException
this.handOffMGCId = handOffMGCId;
}
/**
* Gets the string value of the extended service change method.
*
*
* @return Returns string value of the extended service change method. This
* is to be set only if the service change method is set to
* {@link javax.megaco.association.SrvChngMethod.M_EXTENSION}.
* @throws javax.megaco.association.MethodExtensionException
* javax.megaco.association.MethodExtensionException - Thrown if
* service change method has not been set to
* {@link javax.megaco.association.SrvChngMethod.M_EXTENSION}
*/
public java.lang.String getSrvChngMethodExtension()
throws javax.megaco.association.MethodExtensionException,
IllegalArgumentException {
if (getSrvChngMethod() != SrvChngMethod.M_EXTENSION) {
throw new MethodExtensionException(
"Changed Method is not equal to SrvChngMethod.{@link javax.megaco.association.SrvChngMethod.M_EXTENSION}");
}
return this.srvChngMethodExtension;
}
/**
* This method sets the extended service change method. This needs to be set
* if and only if the service change method is {@link javax.megaco.association.SrvChngMethod.M_EXTENSION}.
*
* @param extMethod
* - The string value of the extended service change method.
* @throws javax.megaco.association.MethodExtensionException
* - Thrown if service change method has not been set to
* {@link javax.megaco.association.SrvChngMethod.M_EXTENSION}.
* @throws IllegalArgumentException
* - Thrown if extension string does not follow the rules of the
* extension parameter, e.g, should start with X+ or X- etc.
*/
public void setSrvChngMethod(java.lang.String extMethod)
throws javax.megaco.association.MethodExtensionException,
IllegalArgumentException {
if (getSrvChngMethod() != SrvChngMethod.M_EXTENSION) {
throw new MethodExtensionException(
"Changed Method is not equal to SrvChngMethod.{@link javax.megaco.association.SrvChngMethod.M_EXTENSION}");
}
// FIXME IllegalArgumentException - Thrown if extension
// string does not follow the rules of the extension parameter, e.g,
// should start with X+ or X- etc.
this.srvChngMethodExtension = extMethod;
}
/**
* Gets the integer value of the delay parameter for the service change.
* This is in milliseconds. This method must be invoked after invoking the
* isSrvChngdelayPresent() method. The stack would use the same as the
* ServiceChangeDelay in the ServiceChange command request sent to peer.
*
* @return Returns the integer value of the delay value in milliseconds.
* @throws javax.megaco.ParameterNotSetException
* This exception is raised if the service change delay
* parameter has not been set.
*/
public int getSrvChngDelay() throws javax.megaco.ParameterNotSetException {
if (this.srvChngDelay == -1) {
throw new ParameterNotSetException();
}
return this.srvChngDelay;
}
/**
* Sets the integer value of the delay parameter for the service change.
* This is in milliseconds. This automatically sets the service change delay
* value to be present. The stack would use the same as the
* ServiceChangeDelay in the ServiceChange command request sent to peer.
*
*
* @param delay - The integer value of the delay value in milliseconds.
* @throws IllegalArgumentException This exception is raised if the value of service change delay passed to this method is less than 0.
*/
public void setSrvChngDelay(int delay)
throws IllegalArgumentException {
if(delay<0)
{
throw new IllegalArgumentException("Delay can not be less than zero");
}
this.srvChngDelay=delay;
}
/**
* Returns TRUE if the service change delay parameter is present.
* @return TRUE if service change delay parameter has been set, else returns FALSE.
*/
public boolean isSrvChngDelayPresent()
{
return this.srvChngDelay!=-1;
}
}