Home | History | Annotate | Download | only in header
      1 /*
      2 * Conditions Of Use
      3 *
      4 * This software was developed by employees of the National Institute of
      5 * Standards and Technology (NIST), an agency of the Federal Government.
      6 * Pursuant to title 15 Untied States Code Section 105, works of NIST
      7 * employees are not subject to copyright protection in the United States
      8 * and are considered to be in the public domain.  As a result, a formal
      9 * license is not needed to use the software.
     10 *
     11 * This software is provided by NIST as a service and is expressly
     12 * provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
     13 * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
     14 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
     15 * AND DATA ACCURACY.  NIST does not warrant or make any representations
     16 * regarding the use of the software or the results thereof, including but
     17 * not limited to the correctness, accuracy, reliability or usefulness of
     18 * the software.
     19 *
     20 * Permission to use this software is contingent upon your acceptance
     21 * of the terms of this agreement
     22 *
     23 * .
     24 *
     25 */
     26 /*******************************************************************************
     27 * Product of NIST/ITL Advanced Networking Technologies Division (ANTD).        *
     28 *******************************************************************************/
     29 package gov.nist.javax.sip.header;
     30 
     31 import javax.sip.InvalidArgumentException;
     32 
     33 /**
     34  * Accept header : The top level header is actually AcceptList which is a list of
     35  * Accept headers.
     36  *
     37  * @version 1.2 $Revision: 1.9 $ $Date: 2009/07/17 18:57:24 $
     38  *
     39  * @since 1.1
     40  *
     41  * @author M. Ranganathan   <br/>
     42  *
     43  *
     44  *
     45  */
     46 public final class Accept
     47     extends ParametersHeader
     48     implements javax.sip.header.AcceptHeader {
     49 
     50     /**
     51      * Comment for <code>serialVersionUID</code>
     52      */
     53     private static final long serialVersionUID = -7866187924308658151L;
     54 
     55     /** mediaRange field
     56      */
     57     protected MediaRange mediaRange;
     58 
     59     /** default constructor
     60      */
     61     public Accept() {
     62         super(NAME);
     63     }
     64 
     65     /** returns true if this header allows all ContentTypes,
     66       * false otherwise.
     67       * @return Boolean
     68       */
     69     public boolean allowsAllContentTypes() {
     70         if (mediaRange == null)
     71             return false;
     72         else
     73             return mediaRange.type.compareTo(STAR) == 0;
     74     }
     75 
     76     /**
     77      * returns true if this header allows all ContentSubTypes,
     78      * false otherwise.
     79      * @return boolean
     80      */
     81     public boolean allowsAllContentSubTypes() {
     82         if (mediaRange == null) {
     83             return false;
     84         } else
     85             return mediaRange.getSubtype().compareTo(STAR) == 0;
     86     }
     87 
     88     /** Encode the value of this header into cannonical form.
     89     *@return encoded value of the header as a string.
     90     */
     91     protected String encodeBody() {
     92         return encodeBody(new StringBuffer()).toString();
     93     }
     94 
     95     protected StringBuffer encodeBody(StringBuffer buffer) {
     96         if (mediaRange != null)
     97             mediaRange.encode(buffer);
     98         if (parameters != null && !parameters.isEmpty()) {
     99             buffer.append(';');
    100             parameters.encode(buffer);
    101         }
    102         return buffer;
    103     }
    104 
    105     /** get the MediaRange field
    106      * @return MediaRange
    107      */
    108     public MediaRange getMediaRange() {
    109         return mediaRange;
    110     }
    111 
    112     /** get the contentType field
    113      * @return String
    114      */
    115     public String getContentType() {
    116         if (mediaRange == null)
    117             return null;
    118         else
    119             return mediaRange.getType();
    120     }
    121 
    122     /** get the ContentSubType fiels
    123      * @return String
    124      */
    125     public String getContentSubType() {
    126         if (mediaRange == null)
    127             return null;
    128         else
    129             return mediaRange.getSubtype();
    130     }
    131 
    132     /**
    133      * Get the q value.
    134      * @return float
    135      */
    136     public float getQValue() {
    137         return getParameterAsFloat(ParameterNames.Q);
    138     }
    139 
    140     /**
    141      * Return true if the q value has been set.
    142      * @return boolean
    143      */
    144     public boolean hasQValue() {
    145         return super.hasParameter(ParameterNames.Q);
    146 
    147     }
    148 
    149     /**
    150      *Remove the q value.
    151      */
    152     public void removeQValue() {
    153         super.removeParameter(ParameterNames.Q);
    154     }
    155 
    156     /** set the ContentSubType field
    157      * @param subtype String to set
    158      */
    159     public void setContentSubType(String subtype) {
    160         if (mediaRange == null)
    161             mediaRange = new MediaRange();
    162         mediaRange.setSubtype(subtype);
    163     }
    164 
    165     /** set the ContentType field
    166      * @param type String to set
    167      */
    168     public void setContentType(String type) {
    169         if (mediaRange == null)
    170             mediaRange = new MediaRange();
    171         mediaRange.setType(type);
    172     }
    173 
    174     /**
    175      * Set the q value
    176      * @param qValue float to set
    177      * @throws IllegalArgumentException if qValue is <0.0 or >1.0
    178      */
    179     public void setQValue(float qValue) throws InvalidArgumentException {
    180         if (qValue == -1)
    181             super.removeParameter(ParameterNames.Q);
    182         super.setParameter(ParameterNames.Q, qValue);
    183 
    184     }
    185 
    186     /**
    187          * Set the mediaRange member
    188          * @param m MediaRange field
    189          */
    190     public void setMediaRange(MediaRange m) {
    191         mediaRange = m;
    192     }
    193 
    194     public Object clone() {
    195         Accept retval = (Accept) super.clone();
    196         if (this.mediaRange != null)
    197             retval.mediaRange = (MediaRange) this.mediaRange.clone();
    198         return retval;
    199     }
    200 
    201 }
    202