content: /*******************************************************************************
  * Product of NIST/ITL Advanced Networking Technologies Division (ANTD).        *
  *******************************************************************************/
  package gov2.nist.javax2.sip.header.extensions;
  import java.text.ParseException;
  
  import gov2.nist.javax2.sip.header.*;
  
  import javax2.sip.header.ExtensionHeader;
  
  /**
   * Replaces SIPHeader.
   * ToDo: add support for early-only flag.
   *
   * @author P, Musgrave <pmusgrave@mkcnetworks.com>  <br/>
   *
   * @version JAIN-SIP-1.2
   *
   *
   */
  
  public class Replaces
      extends ParametersHeader implements ExtensionHeader, ReplacesHeader {
  
      // TODO: Need a unique UID
      private static final long serialVersionUID = 8765762413224043300L;
  
      // TODO: When the MinSEHeader is added to javax2 - move this there...pmusgrave
      public static final String NAME = "Replaces";
  
      /**
       * callIdentifier field
       */
      public CallIdentifier callIdentifier;
      public String callId;
  
      /**
       * Default constructor
       */
      public Replaces() {
          super(NAME);
      }
  
      /** Constructor given the call Identifier.
       *@param callId string call identifier (should be localid@host)
       *@throws IllegalArgumentException if call identifier is bad.
       */
      public Replaces(String callId) throws IllegalArgumentException {
          super(NAME);
          this.callIdentifier = new CallIdentifier(callId);
      }
  
      /**
       * Encode the body part of this header (i.e. leave out the hdrName).
       * @return String encoded body part of the header.
       */
      public String encodeBody() {
          if (callId == null)
              return null;
          else {
              String retVal = callId;
              if (!parameters.isEmpty()) {
                  retVal += SEMICOLON + parameters.encode();
              }
              return retVal;
          }
      }
  
      /**
       * get the CallId field. This does the same thing as encodeBody
       *
       * @return String the encoded body part of the
       */
      public String getCallId() {
          return callId;
      }
  
      /**
       * get the call Identifer member.
       * @return CallIdentifier
       */
      public CallIdentifier getCallIdentifer() {
          return callIdentifier;
      }
  
      /**
       * set the CallId field
       * @param cid String to set. This is the body part of the Call-Id
       *  header. It must have the form localId@host or localId.
       * @throws IllegalArgumentException if cid is null, not a token, or is
       * not a token@token.
       */
      public void setCallId(String cid) {
          callId = cid;
      }
  
      /**
       * Set the callIdentifier member.
       * @param cid CallIdentifier to set (localId@host).
       */
      public void setCallIdentifier(CallIdentifier cid) {
          callIdentifier = cid;
      }
  
      /**
       * Get the to-tag parameter from the address parm list.
       * @return tag field
       */
      public String getToTag() {
          if (parameters == null)
              return null;
          return getParameter(ParameterNames.TO_TAG);
      }
      /**
       * Set the to-tag member
       * @param t tag to set. From tags are mandatory.
       */
      public void setToTag(String t) throws ParseException {
          if (t == null)
              throw new NullPointerException("null tag ");
          else if (t.trim().equals(""))
              throw new ParseException("bad tag", 0);
          this.setParameter(ParameterNames.TO_TAG, t);
      }
      /** Boolean function
       * @return true if the Tag exist
       */
      public boolean hasToTag() {
          return hasParameter(ParameterNames.TO_TAG);
      }
  
      /** remove Tag member
       */
      public void removeToTag() {
          parameters.delete(ParameterNames.TO_TAG);
      }
      /**
       * Get the from-tag parameter from the address parm list.
       * @return tag field
       */
      public String getFromTag() {
          if (parameters == null)
              return null;
          return getParameter(ParameterNames.FROM_TAG);
      }
      /**
       * Set the to-tag member
       * @param t tag to set. From tags are mandatory.
       */
      public void setFromTag(String t) throws ParseException {
          if (t == null)
              throw new NullPointerException("null tag ");
          else if (t.trim().equals(""))
              throw new ParseException("bad tag", 0);
          this.setParameter(ParameterNames.FROM_TAG, t);
      }
      /** Boolean function
       * @return true if the Tag exist
       */
      public boolean hasFromTag() {
          return hasParameter(ParameterNames.FROM_TAG);
      }
  
      /** remove Tag member
       */
      public void removeFromTag() {
          parameters.delete(ParameterNames.FROM_TAG);
      }
  
  
  
      public void setValue(String value) throws ParseException {
          // not implemented.
          throw new ParseException(value,0);
  
      }
  
  //  public Object clone() {
  //      CallID retval = (CallID) super.clone();
  //      if (this.callIdentifier != null)
  //          retval.setCallIdentifier( (CallIdentifier) this.callIdentifier.clone() );
  //      return retval;
  //  }
  }
  /*
   * $Log: Replaces.java,v $
   * Revision 1.3  2009/07/17 18:57:42  emcho
   * Converts indentation tabs to spaces so that we have a uniform indentation policy in the whole project.
   *
   * Revision 1.2  2006/10/27 20:58:31  mranga
   * Issue number:
   * Obtained from:
   * Submitted by:
   * Reviewed by:   mranga
   * doc fixups
   * CVS: ----------------------------------------------------------------------
   * CVS: Issue number:
   * CVS:   If this change addresses one or more issues,
   * CVS:   then enter the issue number(s) here.
   * CVS: Obtained from:
   * CVS:   If this change has been taken from another system,
   * CVS:   then name the system in this line, otherwise delete it.
   * CVS: Submitted by:
   * CVS:   If this code has been contributed to the project by someone else; i.e.,
   * CVS:   they sent us a patch or a set of diffs, then include their name/email
   * CVS:   address here. If this is your work then delete this line.
   * CVS: Reviewed by:
   * CVS:   If we are doing pre-commit code reviews and someone else has
   * CVS:   reviewed your changes, include their name(s) here.
   * CVS:   If you have not had it reviewed then delete this line.
   *
   * Revision 1.1  2006/10/12 11:57:51  pmusgrave
   * Issue number:  79, 80
   * Submitted by:  pmusgrave@newheights.com
   * Reviewed by:   mranga
   *
   * Revision 1.3  2006/07/19 15:05:20  pmusgrave
   * Modify encodeBody so it uses callId and not CallIdentifier
   *
   * Revision 1.2  2006/04/17 23:41:31  pmusgrave
   * Add Session Timer and Replaces headers
   *
   * Revision 1.1.1.1  2006/03/15 16:00:07  pmusgrave
   * Source with additions
   *
   * Revision 1.3  2005/04/16 20:38:48  dmuresan
   * Canonical clone() implementations for the GenericObject and GenericObjectList hierarchies
   *
   * Revision 1.2  2004/01/22 13:26:29  sverker
   * Issue number:
   * Obtained from:
   * Submitted by:  sverker
   * Reviewed by:   mranga
   *
   * Major reformat of code to conform with style guide. Resolved compiler and javadoc warnings. Added CVS tags.
   *
   * CVS: ----------------------------------------------------------------------
   * CVS: Issue number:
   * CVS:   If this change addresses one or more issues,
   * CVS:   then enter the issue number(s) here.
   * CVS: Obtained from:
   * CVS:   If this change has been taken from another system,
   * CVS:   then name the system in this line, otherwise delete it.
   * CVS: Submitted by:
   * CVS:   If this code has been contributed to the project by someone else; i.e.,
   * CVS:   they sent us a patch or a set of diffs, then include their name/email
   * CVS:   address here. If this is your work then delete this line.
   * CVS: Reviewed by:
   * CVS:   If we are doing pre-commit code reviews and someone else has
   * CVS:   reviewed your changes, include their name(s) here.
   * CVS:   If you have not had it reviewed then delete this line.
   *
   */
  
  