package javax.megaco.message.descriptor; import java.io.Serializable; import javax.megaco.ParameterNotSetException; import javax.megaco.association.LocalAddr; import javax.megaco.association.MethodExtensionException; import javax.megaco.association.SrvChngMethod; import javax.megaco.association.SrvChngReason; import javax.megaco.message.Descriptor; import javax.megaco.message.DescriptorType; /** * The class extends JAIN MEGACO Descriptor. This class represents the service * change descriptor defined in the MEGACO protocol. This descriptor describes * the service change method, reason, delay, address, profile, mgcid, version, * the timestamp and any extension to it. Among these the service change method * is mandatory. */ public class SrvChngDescriptor extends Descriptor implements Serializable { private SrvChngMethod srvChngMethod; private String svcChngMethodExtension; private SrvChngReason srvChngReason; private Integer srvChngDelay; private LocalAddr srvChngAddress; private String srvChngProfile; private LocalAddr handOffMGCId; private Integer protocolVersion; private String dateValue; private String timeValue; private String parameterExtension; /** * Constructs a SrvChng Descriptor. The service change descriptor class * contain service change method and atleast one of service change method, * reason, delay, address, profile, mgcid, version, the timestamp and any * extension parameter. */ public SrvChngDescriptor() { super.descriptorId = DescriptorType.M_SERVICE_CHANGE_DESC; } /** * This method cannot be overridden by the derived class. This method * returns that the descriptor identifier is of type descriptor SrvChng. * This method overrides the corresponding method of the base class * Descriptor. * * @return Returns an integer value that identifies this service change * object as the type of service change descriptor. It returns the * the value M_SERVICE_CHANGE_DESC of a Service Change Descriptor. */ public int getDescriptorId() { return super.descriptorId; } /** * Gets the integer value which identifies the service change method. * * @return Returns the integer value of service change method. The values of * the service change method are defined in SrvChngMethod. The * service change method is to be mandatorily set. If Service Change * method is not set then this method would return null. */ public SrvChngMethod getSrvChngMethod() { return this.srvChngMethod; } /** * This method sets the service change method. The values of the service * change method are defined in SrvChngMethod. The service change method is * to be mandatorily set. * * @param method * The object reference of service change method. * @throws IllegalArgumentException * : This exception is raised if the reference of Service Change * Method passed to this method is NULL. */ public void setSrvChngMethod(SrvChngMethod method) throws IllegalArgumentException { if (method == null) { throw new IllegalArgumentException("SrvChngMethod must not be null."); } this.srvChngMethod = method; } /** * 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 * - Thrown if service change method has not been set to * {@link javax.megaco.association.SrvChngMethod.M_EXTENSION}. */ public java.lang.String getSvcChngMethodExtension() throws javax.megaco.association.MethodExtensionException { if (this.srvChngMethod == null || this.srvChngMethod.getSrvChngMethodId() != srvChngMethod.M_EXTENSION) { throw new MethodExtensionException("SrvChngMethod must be set to: SVC_CHNG_METHOD_EXTENSION"); } return this.svcChngMethodExtension; } /** * 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 setSvcChngMethodExtension(java.lang.String extMethod) throws javax.megaco.association.MethodExtensionException, IllegalArgumentException { if (this.srvChngMethod == null || this.srvChngMethod.getSrvChngMethodId() != srvChngMethod.M_EXTENSION) { throw new MethodExtensionException("SrvChngMethod must be set to: SVC_CHNG_METHOD_EXTENSION"); } DescriptorUtils.checkMethodExtensionRules(extMethod); this.svcChngMethodExtension = extMethod; } /** * Gets the integer value which identifies the service change reason. * * @return Returns the object reference corresponding to the service change * reason. The values of the service change reason are defined in * SrvChngReason. If the ServiceChangeReason is not set, then this * method would return value null. */ public SrvChngReason getSrvChngReason() { return this.srvChngReason; } /** * This method sets the service change reason. The values of the service * change reason are defined in SrvChngReason. * * @param reasonCode * The object reference to the corresponding service change * reason. * @throws IllegalArgumentException * - Thrown if the reference of ServiceChange reason passed to * this method is NULL. */ public void setSrvChngReason(SrvChngReason reasonCode) throws IllegalArgumentException { if (reasonCode == null) { throw new IllegalArgumentException("SrvChngReason must not be null."); } this.srvChngReason = reasonCode; } /** * Gets the service change delay value received from peer in the service * change. * * @return Returns the service change delay parameter as an integer value. * @throws javax.megaco.ParameterNotSetException * - Thrown if service change delay parameter has not been set. */ public int getSrvChngDelay() throws javax.megaco.ParameterNotSetException { if (!isSrvChngDelayPresent()) { throw new ParameterNotSetException("SrvChngDelay is not present."); } return this.srvChngDelay.intValue(); } /** * This method sets the service change delay value. * * @param delay * The service change delay as an integer value. * @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 must be greater than zero."); } this.srvChngDelay = new Integer(delay); } /** * Identifies whether the service change delay is present. * * @return Returns true if the service change delay is present. */ public boolean isSrvChngDelayPresent() { return this.srvChngDelay != null; } /** * Gets the service change address. If the service change command has been * received from peer, then it refers to the the new transport address the * peer intends to use subsequently. * * @return Returns the service change address. If the service change address * is missing, then the method would return NULL. */ public LocalAddr getSrvChngAddress() { return this.srvChngAddress; } /** * This method sets the service change address. This is not a mandatory * parameter. * * @param LocalAddr * The object reference of service change address. * @throws IllegalArgumentException * - Thrown if a parameter in service change address is set such * that it is invalid. */ public void setSrvChngAddress(LocalAddr localAddr) throws IllegalArgumentException { // FIXME: not present in jdoc if (localAddr == null) { throw new IllegalArgumentException("LocalAddr must not be null."); } // FIXME: add error checks? this.srvChngAddress = localAddr; } /** * Gets the service change profile value received from peer in the service * change. * * @return Returns the service change profile parameter as a string value. * If the service change profile is not set then it returns a NULL * value. */ public java.lang.String getSrvChngProfile() { return this.srvChngProfile; } /** * This method sets the service change profile value. * * @param profile * The service change profile as a string value. * @throws IllegalArgumentException * - Thrown if service change profile parameter has invalid * format. */ public void setSrvChngProfile(java.lang.String profile) throws IllegalArgumentException { if (profile == null) { throw new IllegalArgumentException("profile must not be null."); } DescriptorUtils.checkSrvcChngProfileRules(profile); this.srvChngProfile = profile; } /** * Gets the identity of the MGC to which the association is to be handoffed. * As specified in the protocol, in case of failure of MGC, it would handoff * the control of the MG to the new MGC. This is conveyed using service * change command on ROOT termination, with service change method set to * M_HANDOFF and transport parameters of the new MGC * specified in the mgcidToTry field of the service change descriptor. This * mgcidToTry field of the service change descriptor is represented using * HandedOffMGCId field on this class. * * @return Returns the identity of the MGC to which the association is to be * handoffed. */ public LocalAddr getHandOffMGCId() { return this.handOffMGCId; } /** * This method sets the identity of the MGC to which the association is to * be handoffed. * * As specified in the protocol, in case of failure of MGC, it would handoff * the control of the MG to the new MGC. This is conveyed using service * change command on ROOT termination, with service change method set to * M_HANDOFF and transport parameters of the new MGC * specified in the mgcidToTry field of the service change descriptor. This * mgcidToTry field of the service change descriptor is represented using * HandedOffMGCId field on this class. * * @param mgcidToTry * The identity of the MGC to which the association is to be * handoffed. * @throws IllegalArgumentException * - Thrown if a parameter in mgc Id is set such that it is * invalid. */ public void setHandOffMGCId(LocalAddr mgcidToTry) throws IllegalArgumentException { // FIXME: not present in jdoc if (mgcidToTry == null) { throw new IllegalArgumentException("LocalAddr must not be null."); } if (srvChngMethod == null || srvChngMethod.getSrvChngMethodId() != srvChngMethod.M_HANDOFF) { throw new IllegalArgumentException("SrvChngMethodId must be set to: SVC_CHNG_METHOD_HANDOFF."); } // FIXME: add error checks? this.handOffMGCId = mgcidToTry; } /** * Gets the protocol version value received from peer in the service change. * This is ther protocol version after negotiation. * * @return Returns the protocol version parameter as an integer value. * @throws javax.megaco.ParameterNotSetException * - Thrown if protocol version has not been set. */ public int getProtocolVersion() throws javax.megaco.ParameterNotSetException { if (!isProtocolVersionPresent()) { throw new ParameterNotSetException("Protocol Version has not been set."); } return this.protocolVersion.intValue(); } /** * This method sets the protocol version value. * * @param version * The protocol version as an integer value. * @throws IllegalArgumentException * - Thrown if service change version parameter is less than or * equal to 0. */ public void setProtocolVersion(int version) throws IllegalArgumentException { if (version <= 0) { throw new IllegalArgumentException("Protocol Version must be greater than zero."); } this.protocolVersion = new Integer(version); } /** * Identifies whether the protocol version is present. * * @return Returns true if the protocol version is present. */ public boolean isProtocolVersionPresent() { return this.protocolVersion != null; } /** * Gets the string value of the date value of timestamp in service change * descriptor. * * @return Returns string value of the date value of timestamp in service * change. If the date value of timestamp in service change is not * set then a NULL value is returned. */ public java.lang.String getDateValue() { return this.dateValue; } /** * This method sets the date value of timestamp in service change * descriptor. * * @param dateValue * The string value of the date value of timestamp in service * change descriptor. * @throws IllegalArgumentException * - Thrown if date value of timestamp in service change * descriptor is not of 8 digit length. */ public void setDateValue(java.lang.String dateValue) throws IllegalArgumentException { if (dateValue == null) { new IllegalArgumentException("DateValue must nto be null."); } DescriptorUtils.checkTimeStampRules(dateValue); this.dateValue = dateValue; } /** * Gets the string value of the time value of timestamp in service change * descriptor. * * @return Returns string value of the time value of timestamp in service * change descriptor. If the time value of timestamp in service * change descriptor is not set then a NULL value is returned. */ public java.lang.String getTimeValue() { return this.timeValue; } /** * This method sets the time value of timestamp in service change * descriptor. * * @param timeValue * The string value of the time value of timestamp in service * change descriptor. * @throws IllegalArgumentException * - Thrown if time value of timestamp in service change * descriptor is not of 8 digit length. */ public void setTimeValue(java.lang.String timeValue) throws IllegalArgumentException { if (timeValue == null) { new IllegalArgumentException("TimeValue must nto be null."); } DescriptorUtils.checkTimeStampRules(timeValue); this.timeValue = timeValue; } /** * Gets the string value of the extended service change parameter. * * @return Returns string value of the extended service change parameter. If * the service change parameter is not set then this a NULL value is * returned. */ public java.lang.String getParameterExtension() { return this.parameterExtension; } /** * This method sets the extended service change parameter. * * @param extMethod * The string value of the extended service change parameter. * @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 setParameterExtention(java.lang.String extMethod) throws IllegalArgumentException { if (extMethod == null) { new IllegalArgumentException("ExtMethod must nto be null."); } DescriptorUtils.checkMethodExtensionRules(extMethod); this.parameterExtension = extMethod; } }