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.io;
18  
19  import java.io.IOException;
20  import java.io.InputStream;
21  import java.io.OutputStream;
22  import java.net.URI;
23  import java.net.URL;
24  import java.net.URLConnection;
25  import java.security.Permission;
26  import java.util.List;
27  import java.util.Map;
28  import java.util.Objects;
29  
30  /**
31   * Delegates to a URLConnection while implementing AutoCloseable.
32   */
33  final class CloseableURLConnection extends URLConnection implements AutoCloseable {
34  
35      static CloseableURLConnection open(final URI uri) throws IOException {
36          return open(Objects.requireNonNull(uri, "uri").toURL());
37      }
38  
39      static CloseableURLConnection open(final URL url) throws IOException {
40          return new CloseableURLConnection(url.openConnection());
41      }
42  
43      private final URLConnection urlConnection;
44  
45      CloseableURLConnection(final URLConnection urlConnection) {
46          super(Objects.requireNonNull(urlConnection, "urlConnection").getURL());
47          this.urlConnection = urlConnection;
48      }
49  
50      @Override
51      public void addRequestProperty(final String key, final String value) {
52          urlConnection.addRequestProperty(key, value);
53      }
54  
55      @Override
56      public void close() {
57          IOUtils.close(urlConnection);
58      }
59  
60      @Override
61      public void connect() throws IOException {
62          urlConnection.connect();
63      }
64  
65      @Override
66      public boolean equals(final Object obj) {
67          return urlConnection.equals(obj);
68      }
69  
70      @Override
71      public boolean getAllowUserInteraction() {
72          return urlConnection.getAllowUserInteraction();
73      }
74  
75      @Override
76      public int getConnectTimeout() {
77          return urlConnection.getConnectTimeout();
78      }
79  
80      @Override
81      public Object getContent() throws IOException {
82          return urlConnection.getContent();
83      }
84  
85      @Override
86      public Object getContent(@SuppressWarnings("rawtypes") final Class[] classes) throws IOException {
87          return urlConnection.getContent(classes);
88      }
89  
90      @Override
91      public String getContentEncoding() {
92          return urlConnection.getContentEncoding();
93      }
94  
95      @Override
96      public int getContentLength() {
97          return urlConnection.getContentLength();
98      }
99  
100     @Override
101     public long getContentLengthLong() {
102         return urlConnection.getContentLengthLong();
103     }
104 
105     @Override
106     public String getContentType() {
107         return urlConnection.getContentType();
108     }
109 
110     @Override
111     public long getDate() {
112         return urlConnection.getDate();
113     }
114 
115     @Override
116     public boolean getDefaultUseCaches() {
117         return urlConnection.getDefaultUseCaches();
118     }
119 
120     @Override
121     public boolean getDoInput() {
122         return urlConnection.getDoInput();
123     }
124 
125     @Override
126     public boolean getDoOutput() {
127         return urlConnection.getDoOutput();
128     }
129 
130     @Override
131     public long getExpiration() {
132         return urlConnection.getExpiration();
133     }
134 
135     @Override
136     public String getHeaderField(final int n) {
137         return urlConnection.getHeaderField(n);
138     }
139 
140     @Override
141     public String getHeaderField(final String name) {
142         return urlConnection.getHeaderField(name);
143     }
144 
145     @Override
146     public long getHeaderFieldDate(final String name, final long Default) {
147         return urlConnection.getHeaderFieldDate(name, Default);
148     }
149 
150     @Override
151     public int getHeaderFieldInt(final String name, final int Default) {
152         return urlConnection.getHeaderFieldInt(name, Default);
153     }
154 
155     @Override
156     public String getHeaderFieldKey(final int n) {
157         return urlConnection.getHeaderFieldKey(n);
158     }
159 
160     @Override
161     public long getHeaderFieldLong(final String name, final long Default) {
162         return urlConnection.getHeaderFieldLong(name, Default);
163     }
164 
165     @Override
166     public Map<String, List<String>> getHeaderFields() {
167         return urlConnection.getHeaderFields();
168     }
169 
170     @Override
171     public long getIfModifiedSince() {
172         return urlConnection.getIfModifiedSince();
173     }
174 
175     @Override
176     public InputStream getInputStream() throws IOException {
177         return urlConnection.getInputStream();
178     }
179 
180     @Override
181     public long getLastModified() {
182         return urlConnection.getLastModified();
183     }
184 
185     @Override
186     public OutputStream getOutputStream() throws IOException {
187         return urlConnection.getOutputStream();
188     }
189 
190     @Override
191     public Permission getPermission() throws IOException {
192         return urlConnection.getPermission();
193     }
194 
195     @Override
196     public int getReadTimeout() {
197         return urlConnection.getReadTimeout();
198     }
199 
200     @Override
201     public Map<String, List<String>> getRequestProperties() {
202         return urlConnection.getRequestProperties();
203     }
204 
205     @Override
206     public String getRequestProperty(final String key) {
207         return urlConnection.getRequestProperty(key);
208     }
209 
210     @Override
211     public URL getURL() {
212         return urlConnection.getURL();
213     }
214 
215     @Override
216     public boolean getUseCaches() {
217         return urlConnection.getUseCaches();
218     }
219 
220     @Override
221     public int hashCode() {
222         return urlConnection.hashCode();
223     }
224 
225     @Override
226     public void setAllowUserInteraction(final boolean allowUserInteraction) {
227         urlConnection.setAllowUserInteraction(allowUserInteraction);
228     }
229 
230     @Override
231     public void setConnectTimeout(final int timeout) {
232         urlConnection.setConnectTimeout(timeout);
233     }
234 
235     @Override
236     public void setDefaultUseCaches(final boolean defaultUseCaches) {
237         urlConnection.setDefaultUseCaches(defaultUseCaches);
238     }
239 
240     @Override
241     public void setDoInput(final boolean doInput) {
242         urlConnection.setDoInput(doInput);
243     }
244 
245     @Override
246     public void setDoOutput(final boolean doOutput) {
247         urlConnection.setDoOutput(doOutput);
248     }
249 
250     @Override
251     public void setIfModifiedSince(final long ifModifiedSince) {
252         urlConnection.setIfModifiedSince(ifModifiedSince);
253     }
254 
255     @Override
256     public void setReadTimeout(final int timeout) {
257         urlConnection.setReadTimeout(timeout);
258     }
259 
260     @Override
261     public void setRequestProperty(final String key, final String value) {
262         urlConnection.setRequestProperty(key, value);
263     }
264 
265     @Override
266     public void setUseCaches(final boolean useCaches) {
267         urlConnection.setUseCaches(useCaches);
268     }
269 
270     @Override
271     public String toString() {
272         return urlConnection.toString();
273     }
274 
275 }