View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.chain.web.servlet;
18  
19  
20  import java.util.ArrayList;
21  import java.util.Collection;
22  import java.util.Enumeration;
23  import java.util.HashSet;
24  import java.util.Iterator;
25  import java.util.List;
26  import java.util.Map;
27  import java.util.Set;
28  import javax.servlet.http.HttpServletRequest;
29  import org.apache.commons.chain.web.MapEntry;
30  
31  
32  /**
33   * <p>Private implementation of <code>Map</code> for servlet request
34   * name-values[].</p>
35   *
36   * @author Craig R. McClanahan
37   * @version $Revision: 480477 $ $Date: 2006-11-29 08:34:52 +0000 (Wed, 29 Nov 2006) $
38   */
39  
40  final class ServletHeaderValuesMap implements Map {
41  
42  
43      public ServletHeaderValuesMap(HttpServletRequest request) {
44          this.request = request;
45      }
46  
47  
48      private HttpServletRequest request = null;
49  
50  
51      public void clear() {
52          throw new UnsupportedOperationException();
53      }
54  
55  
56      public boolean containsKey(Object key) {
57          return (request.getHeader(key(key)) != null);
58      }
59  
60  
61      public boolean containsValue(Object value) {
62          if (!(value instanceof String[])) {
63              return (false);
64          }
65          String[] test = (String[]) value;
66          Iterator values = values().iterator();
67          while (values.hasNext()) {
68              String[] actual = (String[]) values.next();
69              if (test.length == actual.length) {
70                  boolean matched = true;
71                  for (int i = 0; i < test.length; i++) {
72                      if (!test[i].equals(actual[i])) {
73                          matched = false;
74                          break;
75                      }
76                  }
77                  if (matched) {
78                      return (true);
79                  }
80              }
81          }
82          return (false);
83      }
84  
85  
86      public Set entrySet() {
87          Set set = new HashSet();
88          Enumeration keys = request.getHeaderNames();
89          String key;
90          while (keys.hasMoreElements()) {
91              key = (String) keys.nextElement();
92              set.add(new MapEntry(key, request.getHeaders(key), false));
93          }
94          return (set);
95      }
96  
97  
98      public boolean equals(Object o) {
99          return (request.equals(o));
100     }
101 
102 
103     public Object get(Object key) {
104         List list = new ArrayList();
105         Enumeration values = request.getHeaders(key(key));
106         while (values.hasMoreElements()) {
107             list.add((String) values.nextElement());
108         }
109         return (((String[]) list.toArray(new String[list.size()])));
110     }
111 
112 
113     public int hashCode() {
114         return (request.hashCode());
115     }
116 
117 
118     public boolean isEmpty() {
119         return (size() < 1);
120     }
121 
122 
123     public Set keySet() {
124         Set set = new HashSet();
125         Enumeration keys = request.getHeaderNames();
126         while (keys.hasMoreElements()) {
127             set.add(keys.nextElement());
128         }
129         return (set);
130     }
131 
132 
133     public Object put(Object key, Object value) {
134         throw new UnsupportedOperationException();
135     }
136 
137 
138     public void putAll(Map map) {
139         throw new UnsupportedOperationException();
140     }
141 
142 
143     public Object remove(Object key) {
144         throw new UnsupportedOperationException();
145     }
146 
147 
148     public int size() {
149         int n = 0;
150         Enumeration keys = request.getHeaderNames();
151         while (keys.hasMoreElements()) {
152             keys.nextElement();
153             n++;
154         }
155         return (n);
156     }
157 
158 
159     public Collection values() {
160         List list = new ArrayList();
161         Enumeration keys = request.getHeaderNames();
162         while (keys.hasMoreElements()) {
163             String key = (String) keys.nextElement();
164             List list1 = new ArrayList();
165             Enumeration values = request.getHeaders(key);
166             while (values.hasMoreElements()) {
167                 list1.add((String) values.nextElement());
168             }
169             list.add(((String[]) list1.toArray(new String[list1.size()])));
170         }
171         return (list);
172     }
173 
174 
175     private String key(Object key) {
176         if (key == null) {
177             throw new IllegalArgumentException();
178         } else if (key instanceof String) {
179             return ((String) key);
180         } else {
181             return (key.toString());
182         }
183     }
184 
185 
186 }