001/* 002 * SonarQube 003 * Copyright (C) 2009-2018 SonarSource SA 004 * mailto:info AT sonarsource DOT com 005 * 006 * This program is free software; you can redistribute it and/or 007 * modify it under the terms of the GNU Lesser General Public 008 * License as published by the Free Software Foundation; either 009 * version 3 of the License, or (at your option) any later version. 010 * 011 * This program is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014 * Lesser General Public License for more details. 015 * 016 * You should have received a copy of the GNU Lesser General Public License 017 * along with this program; if not, write to the Free Software Foundation, 018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 019 */ 020package org.sonar.api.utils; 021 022import org.sonar.api.batch.ScannerSide; 023import org.sonar.api.server.ServerSide; 024 025import java.io.File; 026import java.io.InputStream; 027import java.net.URI; 028 029/** 030 * This component is available in IoC container, so it should be injected through 031 * a constructor parameter. It is available in both batch and server. 032 */ 033@ScannerSide 034@ServerSide 035public abstract class HttpDownloader extends UriReader.SchemeProcessor { 036 037 /** 038 * Catch-all default timeout, replaced by 039 * {@link #DEFAULT_READ_TIMEOUT_IN_MILLISECONDS} 040 * {@link #DEFAULT_CONNECT_TIMEOUT_IN_MILLISECONDS} 041 * 042 * @deprecated since 7.0 043 */ 044 @Deprecated 045 public static final int TIMEOUT_MILLISECONDS = 20 * 1000; 046 047 /** 048 * @since 7.0 049 */ 050 public static final int DEFAULT_READ_TIMEOUT_IN_MILLISECONDS = 60 * 1000; 051 052 /** 053 * @since 7.0 054 */ 055 public static final int DEFAULT_CONNECT_TIMEOUT_IN_MILLISECONDS = 20 * 1000; 056 057 public abstract String downloadPlainText(URI uri, String encoding); 058 059 public abstract byte[] download(URI uri); 060 061 public abstract InputStream openStream(URI uri); 062 063 public abstract void download(URI uri, File toFile); 064 065 public static class HttpException extends RuntimeException { 066 private final URI uri; 067 private final int responseCode; 068 private final String responseContent; 069 070 public HttpException(URI uri, int responseContent) { 071 this(uri, responseContent, ""); 072 } 073 074 public HttpException(URI uri, int responseCode, String responseContent) { 075 super("Fail to download [" + uri + "]. Response code: " + responseCode); 076 this.uri = uri; 077 this.responseCode = responseCode; 078 this.responseContent = responseContent; 079 } 080 081 public int getResponseCode() { 082 return responseCode; 083 } 084 085 public URI getUri() { 086 return uri; 087 } 088 089 public String getResponseContent() { 090 return responseContent; 091 } 092 } 093}