Home | History | Annotate | Download | only in message
      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 package gov.nist.javax.sip.message;
     27 
     28 import gov.nist.javax.sip.header.*;
     29 import java.util.ListIterator;
     30 import java.util.NoSuchElementException;
     31 
     32 /**
     33  * Iterator over lists of headers. Allows for uniform removal handling for singleton headers.
     34  * @author M. Ranganathan
     35  * @version 1.2 $Revision: 1.8 $ $Date: 2009/07/17 18:57:53 $
     36  * @since 1.1
     37  */
     38 public class HeaderIterator implements ListIterator {
     39     private boolean toRemove;
     40     private int index;
     41     private SIPMessage sipMessage;
     42     private SIPHeader sipHeader;
     43 
     44     protected HeaderIterator(SIPMessage sipMessage, SIPHeader sipHeader) {
     45         this.sipMessage = sipMessage;
     46         this.sipHeader = sipHeader;
     47     }
     48 
     49     public Object next() throws NoSuchElementException {
     50         if (sipHeader == null || index == 1)
     51             throw new NoSuchElementException();
     52         toRemove = true;
     53         index = 1;
     54         return (Object) sipHeader;
     55     }
     56 
     57     public Object previous() throws NoSuchElementException {
     58         if (sipHeader == null || index == 0)
     59             throw new NoSuchElementException();
     60         toRemove = true;
     61         index = 0;
     62         return (Object) sipHeader;
     63     }
     64 
     65     public int nextIndex() {
     66         return 1;
     67     }
     68 
     69     public int previousIndex() {
     70         return index == 0 ? -1 : 0;
     71     }
     72 
     73     public void set(Object header) {
     74         throw new UnsupportedOperationException();
     75     }
     76 
     77     public void add(Object header) {
     78         throw new UnsupportedOperationException();
     79     }
     80 
     81     public void remove() throws IllegalStateException {
     82         if (this.sipHeader == null)
     83             throw new IllegalStateException();
     84         if (toRemove) {
     85             this.sipHeader = null;
     86             this.sipMessage.removeHeader(sipHeader.getName());
     87         } else {
     88             throw new IllegalStateException();
     89         }
     90     }
     91 
     92     public boolean hasNext() {
     93         return index == 0;
     94     }
     95 
     96     public boolean hasPrevious() {
     97         return index == 1;
     98     }
     99 }
    100