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