001/* 002 * SonarQube 003 * Copyright (C) 2009-2016 SonarSource SA 004 * mailto:contact 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 public static final int TIMEOUT_MILLISECONDS = 20 * 1000; 037 038 public abstract String downloadPlainText(URI uri, String encoding); 039 040 public abstract byte[] download(URI uri); 041 042 public abstract InputStream openStream(URI uri); 043 044 public abstract void download(URI uri, File toFile); 045 046 public static class HttpException extends RuntimeException { 047 private final URI uri; 048 private final int responseCode; 049 private final String responseContent; 050 051 public HttpException(URI uri, int responseContent) { 052 this(uri, responseContent, ""); 053 } 054 055 public HttpException(URI uri, int responseCode, String responseContent) { 056 super("Fail to download [" + uri + "]. Response code: " + responseCode); 057 this.uri = uri; 058 this.responseCode = responseCode; 059 this.responseContent = responseContent; 060 } 061 062 public int getResponseCode() { 063 return responseCode; 064 } 065 066 public URI getUri() { 067 return uri; 068 } 069 070 public String getResponseContent() { 071 return responseContent; 072 } 073 } 074}