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*/ 26package gov.nist.javax.sip.message; 27 28import gov.nist.javax.sip.header.*; 29import java.util.ListIterator; 30import 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 */ 38public 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