/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.commons.io; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; import java.net.URL; import java.net.URLConnection; import java.security.Permission; import java.util.List; import java.util.Map; import java.util.Objects; /** * Delegates to a URLConnection while implementing AutoCloseable. */ final class CloseableURLConnection extends URLConnection implements AutoCloseable { static CloseableURLConnection open(final URI uri) throws IOException { return open(Objects.requireNonNull(uri, "uri").toURL()); } static CloseableURLConnection open(final URL url) throws IOException { return new CloseableURLConnection(url.openConnection()); } private final URLConnection urlConnection; CloseableURLConnection(final URLConnection urlConnection) { super(Objects.requireNonNull(urlConnection, "urlConnection").getURL()); this.urlConnection = urlConnection; } @Override public void addRequestProperty(final String key, final String value) { urlConnection.addRequestProperty(key, value); } @Override public void close() { IOUtils.close(urlConnection); } @Override public void connect() throws IOException { urlConnection.connect(); } @Override public boolean equals(final Object obj) { return urlConnection.equals(obj); } @Override public boolean getAllowUserInteraction() { return urlConnection.getAllowUserInteraction(); } @Override public int getConnectTimeout() { return urlConnection.getConnectTimeout(); } @Override public Object getContent() throws IOException { return urlConnection.getContent(); } @Override public Object getContent(@SuppressWarnings("rawtypes") final Class[] classes) throws IOException { return urlConnection.getContent(classes); } @Override public String getContentEncoding() { return urlConnection.getContentEncoding(); } @Override public int getContentLength() { return urlConnection.getContentLength(); } @Override public long getContentLengthLong() { return urlConnection.getContentLengthLong(); } @Override public String getContentType() { return urlConnection.getContentType(); } @Override public long getDate() { return urlConnection.getDate(); } @Override public boolean getDefaultUseCaches() { return urlConnection.getDefaultUseCaches(); } @Override public boolean getDoInput() { return urlConnection.getDoInput(); } @Override public boolean getDoOutput() { return urlConnection.getDoOutput(); } @Override public long getExpiration() { return urlConnection.getExpiration(); } @Override public String getHeaderField(final int n) { return urlConnection.getHeaderField(n); } @Override public String getHeaderField(final String name) { return urlConnection.getHeaderField(name); } @Override public long getHeaderFieldDate(final String name, final long Default) { return urlConnection.getHeaderFieldDate(name, Default); } @Override public int getHeaderFieldInt(final String name, final int Default) { return urlConnection.getHeaderFieldInt(name, Default); } @Override public String getHeaderFieldKey(final int n) { return urlConnection.getHeaderFieldKey(n); } @Override public long getHeaderFieldLong(final String name, final long Default) { return urlConnection.getHeaderFieldLong(name, Default); } @Override public Map> getHeaderFields() { return urlConnection.getHeaderFields(); } @Override public long getIfModifiedSince() { return urlConnection.getIfModifiedSince(); } @Override public InputStream getInputStream() throws IOException { return urlConnection.getInputStream(); } @Override public long getLastModified() { return urlConnection.getLastModified(); } @Override public OutputStream getOutputStream() throws IOException { return urlConnection.getOutputStream(); } @Override public Permission getPermission() throws IOException { return urlConnection.getPermission(); } @Override public int getReadTimeout() { return urlConnection.getReadTimeout(); } @Override public Map> getRequestProperties() { return urlConnection.getRequestProperties(); } @Override public String getRequestProperty(final String key) { return urlConnection.getRequestProperty(key); } @Override public URL getURL() { return urlConnection.getURL(); } @Override public boolean getUseCaches() { return urlConnection.getUseCaches(); } @Override public int hashCode() { return urlConnection.hashCode(); } @Override public void setAllowUserInteraction(final boolean allowUserInteraction) { urlConnection.setAllowUserInteraction(allowUserInteraction); } @Override public void setConnectTimeout(final int timeout) { urlConnection.setConnectTimeout(timeout); } @Override public void setDefaultUseCaches(final boolean defaultUseCaches) { urlConnection.setDefaultUseCaches(defaultUseCaches); } @Override public void setDoInput(final boolean doInput) { urlConnection.setDoInput(doInput); } @Override public void setDoOutput(final boolean doOutput) { urlConnection.setDoOutput(doOutput); } @Override public void setIfModifiedSince(final long ifModifiedSince) { urlConnection.setIfModifiedSince(ifModifiedSince); } @Override public void setReadTimeout(final int timeout) { urlConnection.setReadTimeout(timeout); } @Override public void setRequestProperty(final String key, final String value) { urlConnection.setRequestProperty(key, value); } @Override public void setUseCaches(final boolean useCaches) { urlConnection.setUseCaches(useCaches); } @Override public String toString() { return urlConnection.toString(); } }