CloseableURLConnection.java

  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. import java.io.IOException;
  19. import java.io.InputStream;
  20. import java.io.OutputStream;
  21. import java.net.URI;
  22. import java.net.URL;
  23. import java.net.URLConnection;
  24. import java.security.Permission;
  25. import java.util.List;
  26. import java.util.Map;
  27. import java.util.Objects;

  28. /**
  29.  * Delegates to a URLConnection while implementing AutoCloseable.
  30.  */
  31. final class CloseableURLConnection extends URLConnection implements AutoCloseable {

  32.     static CloseableURLConnection open(final URI uri) throws IOException {
  33.         return open(Objects.requireNonNull(uri, "uri").toURL());
  34.     }

  35.     static CloseableURLConnection open(final URL url) throws IOException {
  36.         return new CloseableURLConnection(url.openConnection());
  37.     }

  38.     private final URLConnection urlConnection;

  39.     CloseableURLConnection(final URLConnection urlConnection) {
  40.         super(Objects.requireNonNull(urlConnection, "urlConnection").getURL());
  41.         this.urlConnection = urlConnection;
  42.     }

  43.     @Override
  44.     public void addRequestProperty(final String key, final String value) {
  45.         urlConnection.addRequestProperty(key, value);
  46.     }

  47.     @Override
  48.     public void close() {
  49.         IOUtils.close(urlConnection);
  50.     }

  51.     @Override
  52.     public void connect() throws IOException {
  53.         urlConnection.connect();
  54.     }

  55.     @Override
  56.     public boolean equals(final Object obj) {
  57.         return urlConnection.equals(obj);
  58.     }

  59.     @Override
  60.     public boolean getAllowUserInteraction() {
  61.         return urlConnection.getAllowUserInteraction();
  62.     }

  63.     @Override
  64.     public int getConnectTimeout() {
  65.         return urlConnection.getConnectTimeout();
  66.     }

  67.     @Override
  68.     public Object getContent() throws IOException {
  69.         return urlConnection.getContent();
  70.     }

  71.     @Override
  72.     public Object getContent(@SuppressWarnings("rawtypes") final Class[] classes) throws IOException {
  73.         return urlConnection.getContent(classes);
  74.     }

  75.     @Override
  76.     public String getContentEncoding() {
  77.         return urlConnection.getContentEncoding();
  78.     }

  79.     @Override
  80.     public int getContentLength() {
  81.         return urlConnection.getContentLength();
  82.     }

  83.     @Override
  84.     public long getContentLengthLong() {
  85.         return urlConnection.getContentLengthLong();
  86.     }

  87.     @Override
  88.     public String getContentType() {
  89.         return urlConnection.getContentType();
  90.     }

  91.     @Override
  92.     public long getDate() {
  93.         return urlConnection.getDate();
  94.     }

  95.     @Override
  96.     public boolean getDefaultUseCaches() {
  97.         return urlConnection.getDefaultUseCaches();
  98.     }

  99.     @Override
  100.     public boolean getDoInput() {
  101.         return urlConnection.getDoInput();
  102.     }

  103.     @Override
  104.     public boolean getDoOutput() {
  105.         return urlConnection.getDoOutput();
  106.     }

  107.     @Override
  108.     public long getExpiration() {
  109.         return urlConnection.getExpiration();
  110.     }

  111.     @Override
  112.     public String getHeaderField(final int n) {
  113.         return urlConnection.getHeaderField(n);
  114.     }

  115.     @Override
  116.     public String getHeaderField(final String name) {
  117.         return urlConnection.getHeaderField(name);
  118.     }

  119.     @Override
  120.     public long getHeaderFieldDate(final String name, final long Default) {
  121.         return urlConnection.getHeaderFieldDate(name, Default);
  122.     }

  123.     @Override
  124.     public int getHeaderFieldInt(final String name, final int Default) {
  125.         return urlConnection.getHeaderFieldInt(name, Default);
  126.     }

  127.     @Override
  128.     public String getHeaderFieldKey(final int n) {
  129.         return urlConnection.getHeaderFieldKey(n);
  130.     }

  131.     @Override
  132.     public long getHeaderFieldLong(final String name, final long Default) {
  133.         return urlConnection.getHeaderFieldLong(name, Default);
  134.     }

  135.     @Override
  136.     public Map<String, List<String>> getHeaderFields() {
  137.         return urlConnection.getHeaderFields();
  138.     }

  139.     @Override
  140.     public long getIfModifiedSince() {
  141.         return urlConnection.getIfModifiedSince();
  142.     }

  143.     @Override
  144.     public InputStream getInputStream() throws IOException {
  145.         return urlConnection.getInputStream();
  146.     }

  147.     @Override
  148.     public long getLastModified() {
  149.         return urlConnection.getLastModified();
  150.     }

  151.     @Override
  152.     public OutputStream getOutputStream() throws IOException {
  153.         return urlConnection.getOutputStream();
  154.     }

  155.     @Override
  156.     public Permission getPermission() throws IOException {
  157.         return urlConnection.getPermission();
  158.     }

  159.     @Override
  160.     public int getReadTimeout() {
  161.         return urlConnection.getReadTimeout();
  162.     }

  163.     @Override
  164.     public Map<String, List<String>> getRequestProperties() {
  165.         return urlConnection.getRequestProperties();
  166.     }

  167.     @Override
  168.     public String getRequestProperty(final String key) {
  169.         return urlConnection.getRequestProperty(key);
  170.     }

  171.     @Override
  172.     public URL getURL() {
  173.         return urlConnection.getURL();
  174.     }

  175.     @Override
  176.     public boolean getUseCaches() {
  177.         return urlConnection.getUseCaches();
  178.     }

  179.     @Override
  180.     public int hashCode() {
  181.         return urlConnection.hashCode();
  182.     }

  183.     @Override
  184.     public void setAllowUserInteraction(final boolean allowUserInteraction) {
  185.         urlConnection.setAllowUserInteraction(allowUserInteraction);
  186.     }

  187.     @Override
  188.     public void setConnectTimeout(final int timeout) {
  189.         urlConnection.setConnectTimeout(timeout);
  190.     }

  191.     @Override
  192.     public void setDefaultUseCaches(final boolean defaultUseCaches) {
  193.         urlConnection.setDefaultUseCaches(defaultUseCaches);
  194.     }

  195.     @Override
  196.     public void setDoInput(final boolean doInput) {
  197.         urlConnection.setDoInput(doInput);
  198.     }

  199.     @Override
  200.     public void setDoOutput(final boolean doOutput) {
  201.         urlConnection.setDoOutput(doOutput);
  202.     }

  203.     @Override
  204.     public void setIfModifiedSince(final long ifModifiedSince) {
  205.         urlConnection.setIfModifiedSince(ifModifiedSince);
  206.     }

  207.     @Override
  208.     public void setReadTimeout(final int timeout) {
  209.         urlConnection.setReadTimeout(timeout);
  210.     }

  211.     @Override
  212.     public void setRequestProperty(final String key, final String value) {
  213.         urlConnection.setRequestProperty(key, value);
  214.     }

  215.     @Override
  216.     public void setUseCaches(final boolean useCaches) {
  217.         urlConnection.setUseCaches(useCaches);
  218.     }

  219.     @Override
  220.     public String toString() {
  221.         return urlConnection.toString();
  222.     }

  223. }