package javax.megaco.message.descriptor;
import java.io.Serializable;
import javax.megaco.MethodInvocationException;
import javax.megaco.message.Descriptor;
import javax.megaco.message.DescriptorType;
import javax.megaco.message.Termination;
/**
* The class extends JAIN MEGACO Descriptor. This class describes the mux
* descriptor.
*/
public class MuxDescriptor extends Descriptor implements Serializable {
private MuxType muxType;
private Termination[] termList;
private String extMux;
/**
* Constructs a Mux Descriptor with the mux type and the termination id
* list.
*
* @param muxType
* - This specifies an object identifier of the mux type to be
* specified for the mux descriptor.
* @param termList
* - This specifies list of termination ids for the specified mux
* type.
* @throws IllegalArgumentException
* : This exception is raised if the reference of MuxType or
* Termination Id list passed to this method is NULL.
*/
public MuxDescriptor(MuxType muxType, Termination[] termList) throws IllegalArgumentException {
super.descriptorId = DescriptorType.M_MUX_DESC;
if (muxType == null) {
throw new IllegalArgumentException("MuxType must not be null");
}
if (termList == null) {
throw new IllegalArgumentException("Termination[] must not be null");
}
if (termList.length == 0) {
throw new IllegalArgumentException("Termination[] lmust not be empty");
}
this.muxType = muxType;
this.termList = termList;
}
/**
* This method cannot be overridden by the derived class. This method
* returns that the descriptor identifier is of type Mux descriptor. This
* method overrides the corresponding method of the base class Descriptor.
*
* @return Returns an integer value that identifies this object as the type
* of Mux descriptor. It returns that it is Mux Descriptor i.e.,
* M_MUX_DESC.
*/
public int getDescriptorId() {
return super.descriptorId;
}
/**
* This method cannot be overridden by the derived class. This method
* returns the identity of the mux type. The constants for the mux type are
* defined in MuxType.
*
* @return Returns value that identifies Mux type. It returns one of the
* values defined in, MuxType.
*/
public final MuxType getMuxType() {
return this.muxType;
}
/**
* This method returns the extension string of the mux type. The extension
* string should be prefixed with "X-" or "X+". The extension characters
* following the prefix should be at most of 6 characters. The extension
* string would be set only when the mux type specifies MUX_TYPE_EXTENSION.
*
* @return Gets the string for the extension of the mux type. The extension
* string would be set only when the mux type specifies
* {@link MuxType.EXT}.
* @throws IllegalStateException
* if the method has been called when the mux type denotes
* anything other than {@link MuxType.EXT}.
*/
public java.lang.String getExtensionString() throws IllegalStateException {
if (this.muxType.getMuxType() != muxType.M_EXT) {
throw new IllegalStateException("MuxType must be: EXT");
}
return this.extMux;
}
/**
* Sets the string for the extension of the mux type. Should be set only
* when the mux type specifies MUX_TYPE_EXT.
*
* @param extMux
* - Sets the string for the extension of the mux type. The
* extension string should be prefixed with "X-" or "X+". The
* extension characters following the prefix should be at most of
* 6 characters. The extension string would be set only when the
* mux type specifies {@link MuxType.EXT}.
* @throws IllegalArgumentException
* if the extension string is not in proper format. It should be
* prefixed with either "X+" or "X-" followed by at most 6
* characters.
* @throws IllegalStateException
* if the method has been called when the mux type denotes
* anything other than {@link MuxType.EXT}.
*/
public void setExtensionString(java.lang.String extMux) throws IllegalArgumentException, IllegalStateException {
if (this.muxType.getMuxType() != muxType.M_EXT) {
throw new IllegalStateException("MuxType must be: EXT");
}
if (extMux == null) {
new IllegalArgumentException("ExtMux must not be null");
}
DescriptorUtils.checkMethodExtensionRules(extMux);
if (extMux.length() > 8) {
throw new IllegalArgumentException("ExtMux must not be longer than 8 characters.");
}
this.extMux = extMux;
}
/**
* Gets the list of termination ids for which the mux type is specified.
*
* @return Returns the list of termination ids for which the muxt type is
* specified.
*/
public final Termination[] getTerminationIdList() {
return this.termList;
}
}