/*
* Conditions Of Use
*
* This software was developed by employees of the National Institute of
* Standards and Technology (NIST), an agency of the Federal Government.
* Pursuant to title 15 Untied States Code Section 105, works of NIST
* employees are not subject to copyright protection in the United States
* and are considered to be in the public domain. As a result, a formal
* license is not needed to use the software.
*
* This software is provided by NIST as a service and is expressly
* provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
* AND DATA ACCURACY. NIST does not warrant or make any representations
* regarding the use of the software or the results thereof, including but
* not limited to the correctness, accuracy, reliability or usefulness of
* the software.
*
* Permission to use this software is contingent upon your acceptance
* of the terms of this agreement
*
* .
*
*/
/*******************************************************************************
* Product of NIST/ITL Advanced Networking Technologies Division (ANTD). *
*******************************************************************************/
package gov.nist.javax.sip.header;
import javax.sip.InvalidArgumentException;
import javax.sip.header.SubscriptionStateHeader;
import java.text.ParseException;
/**
*SubscriptionState header
*
* @version 1.2 $Revision: 1.7 $ $Date: 2009/07/17 18:57:39 $
*
* @author Olivier Deruelle <br/>
*
*
*/
public class SubscriptionState
extends ParametersHeader
implements SubscriptionStateHeader {
/**
* Comment for <code>serialVersionUID</code>
*/
private static final long serialVersionUID = -6673833053927258745L;
protected int expires;
protected int retryAfter;
protected String reasonCode;
protected String state;
/** Creates a new instance of SubscriptionState */
public SubscriptionState() {
super(SIPHeaderNames.SUBSCRIPTION_STATE);
expires = -1;
retryAfter = -1;
}
/**
* Sets the relative expires value of the SubscriptionStateHeader. The
* expires value MUST be greater than zero and MUST be less than 2**31.
*
* @param expires - the new expires value of this SubscriptionStateHeader.
* @throws InvalidArgumentException if supplied value is less than zero.
*/
public void setExpires(int expires) throws InvalidArgumentException {
if (expires < 0)
throw new InvalidArgumentException(
"JAIN-SIP "
+ "Exception, SubscriptionState, setExpires(), the expires parameter is < 0");
this.expires = expires;
}
/**
* Gets the expires value of the SubscriptionStateHeader. This expires value is
* relative time.
*
* @return the expires value of the SubscriptionStateHeader.
*/
public int getExpires() {
return expires;
}
/**
* Sets the retry after value of the SubscriptionStateHeader. The retry after value
* MUST be greater than zero and MUST be less than 2**31.
*
* @param retryAfter - the new retry after value of this SubscriptionStateHeader
* @throws InvalidArgumentException if supplied value is less than zero.
*/
public void setRetryAfter(int retryAfter) throws InvalidArgumentException {
if (retryAfter <= 0)
throw new InvalidArgumentException(
"JAIN-SIP "
+ "Exception, SubscriptionState, setRetryAfter(), the retryAfter parameter is <=0");
this.retryAfter = retryAfter;
}
/**
* Gets the retry after value of the SubscriptionStateHeader. This retry after
* value is relative time.
*
* @return the retry after value of the SubscriptionStateHeader.
*/
public int getRetryAfter() {
return retryAfter;
}
/**
* Gets the reason code of SubscriptionStateHeader.
*
* @return the comment of this SubscriptionStateHeader, return null if no reason code
* is available.
*/
public String getReasonCode() {
return reasonCode;
}
/**
* Sets the reason code value of the SubscriptionStateHeader.
*
* @param reasonCode - the new reason code string value of the SubscriptionStateHeader.
* @throws ParseException which signals that an error has been reached
* unexpectedly while parsing the reason code.
*/
public void setReasonCode(String reasonCode) throws ParseException {
if (reasonCode == null)
throw new NullPointerException(
"JAIN-SIP "
+ "Exception, SubscriptionState, setReasonCode(), the reasonCode parameter is null");
this.reasonCode = reasonCode;
}
/**
* Gets the state of SubscriptionStateHeader.
*
* @return the state of this SubscriptionStateHeader.
*/
public String getState() {
return state;
}
/**
* Sets the state value of the SubscriptionStateHeader.
*
* @param state - the new state string value of the SubscriptionStateHeader.
* @throws ParseException which signals that an error has been reached
* unexpectedly while parsing the state.
*/
public void setState(String state) throws ParseException {
if (state == null)
throw new NullPointerException(
"JAIN-SIP "
+ "Exception, SubscriptionState, setState(), the state parameter is null");
this.state = state;
}
/** Just the encoded body of the header.
* @return the string encoded header body.
*/
public String encodeBody() {
return encodeBody(new StringBuffer()).toString();
}
protected StringBuffer encodeBody(StringBuffer buffer) {
if (state != null)
buffer.append(state);
if (reasonCode != null)
buffer.append(";reason=").append(reasonCode);
if (expires != -1)
buffer.append(";expires=").append(expires);
if (retryAfter != -1)
buffer.append(";retry-after=").append(retryAfter);
if (!parameters.isEmpty()) {
buffer.append(SEMICOLON);
parameters.encode(buffer);
}
return buffer;
}
}