Coverage Report - org.webslinger.servlet.HttpHeadersImpl
 
Classes in this File Line Coverage Branch Coverage Complexity
HttpHeadersImpl
17%
6/35
17%
1/6
0
HttpHeadersImpl$HeaderValue
0%
0/11
0%
0/2
0
 
 1  
 package org.webslinger.servlet;
 2  
 
 3  
 import java.io.Serializable;
 4  
 import java.util.ArrayList;
 5  
 import java.util.Collections;
 6  
 import java.util.Date;
 7  
 import java.util.Enumeration;
 8  
 import java.util.HashMap;
 9  
 import java.util.Iterator;
 10  
 
 11  
 import org.apache.commons.collections.iterators.IteratorEnumeration;
 12  
 import org.webslinger.io.HttpUtil;
 13  
 
 14  1512
 public class HttpHeadersImpl implements HttpHeaders, Serializable {
 15  1512
     protected final HashMap<String, HeaderValue> headers = new HashMap<String, HeaderValue>();
 16  
 
 17  
     protected String getFirst(String name) {
 18  230
         HeaderValue hv = headers.get(name.toLowerCase());
 19  230
         return hv != null ? (String) hv.values.get(0) : null;
 20  
     }
 21  
 
 22  
     public void addDateHeader(String name, long date) {
 23  0
         addHeader(name, HttpUtil.formatDate(date));
 24  0
     }
 25  
 
 26  
     public void addHeader(String name, String value) {
 27  0
         HeaderValue hv = headers.get(name.toLowerCase());
 28  0
         if (hv == null) {
 29  0
             headers.put(name.toLowerCase(), new HeaderValue(name, value));
 30  
         } else {
 31  0
             hv.values.add(value);
 32  
         }
 33  0
     }
 34  
 
 35  
     public void addIntHeader(String name, int value) {
 36  0
         addHeader(name, Integer.toString(value));
 37  0
     }
 38  
 
 39  
     public boolean containsHeader(String name) {
 40  0
         return headers.containsKey(name);
 41  
     }
 42  
 
 43  
     public long getDateHeader(String name) {
 44  0
         String value = getFirst(name);
 45  0
         if (value == null) return -1;
 46  0
         Date date = HttpUtil.parseDate(value);
 47  0
         if (date != null) return date.getTime();
 48  0
         throw new IllegalArgumentException("not a date(" + name + ", " + value + ")");
 49  
     }
 50  
 
 51  
     public String getHeader(String name) {
 52  230
         return getFirst(name);
 53  
     }
 54  
 
 55  
     public Enumeration<String> getHeaderNames() {
 56  0
         return new IteratorEnumeration(headers.keySet().iterator());
 57  
     }
 58  
 
 59  
     public Enumeration<String> getHeaders(String name) {
 60  0
         HeaderValue hv = headers.get(name.toLowerCase());
 61  0
         if (hv == null) return new IteratorEnumeration(Collections.EMPTY_LIST.iterator());
 62  0
         return new IteratorEnumeration(hv.values.iterator());
 63  
     }
 64  
 
 65  
     public int getIntHeader(String name) {
 66  0
         String value = getFirst(name);
 67  0
         if (value == null) return -1;
 68  0
         return Integer.parseInt(value);
 69  
     }
 70  
 
 71  
     public void setDateHeader(String name, long date) {
 72  0
         setHeader(name, HttpUtil.formatDate(date));
 73  0
     }
 74  
 
 75  
     public void setHeader(String name, String value) {
 76  0
         headers.put(name.toLowerCase(), new HeaderValue(name, value));
 77  0
     }
 78  
 
 79  
     public void setIntHeader(String name, int value) {
 80  0
         setHeader(name, Integer.toString(value));
 81  0
     }
 82  
 
 83  0
     protected static final class HeaderValue implements Serializable {
 84  
         private final String name;
 85  0
         private final ArrayList<String> values = new ArrayList<String>();
 86  
 
 87  0
         protected HeaderValue(String name, String firstValue) {
 88  0
             this.name = name;
 89  0
             values.add(firstValue);
 90  0
         }
 91  
 
 92  
         public boolean equals(Object o) {
 93  0
             if (!(o instanceof HeaderValue)) return false;
 94  0
             HeaderValue other = (HeaderValue) o;
 95  0
             return name.toLowerCase().equals(other.name.toLowerCase())
 96  
                     && values.equals(other.values);
 97  
         }
 98  
 
 99  
         public int hashCode() {
 100  0
             return HeaderValue.class.hashCode() ^ name.hashCode();
 101  
         }
 102  
 
 103  
         public String toString() {
 104  0
             return "HV(" + name + ':' + values + ')';
 105  
         }
 106  
     }
 107  
 
 108  
     public String toString() {
 109  0
         return headers.values().toString();
 110  
     }
 111  
 }