001 /*
002 * #%L
003 * License Maven Plugin
004 * %%
005 * Copyright (C) 2010 - 2011 CodeLutin, Codehaus, Tony Chemit
006 * %%
007 * This program is free software: you can redistribute it and/or modify
008 * it under the terms of the GNU Lesser General Public License as
009 * published by the Free Software Foundation, either version 3 of the
010 * License, or (at your option) any later version.
011 *
012 * This program is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
015 * GNU General Lesser Public License for more details.
016 *
017 * You should have received a copy of the GNU General Lesser Public
018 * License along with this program. If not, see
019 * <http://www.gnu.org/licenses/lgpl-3.0.html>.
020 * #L%
021 */
022 package org.codehaus.mojo.license;
023
024 import java.io.*;
025 import java.net.URL;
026 import java.net.URLConnection;
027
028 /**
029 * Utilities for downloading remote license files.
030 *
031 * @author pgier
032 * @since 1.0
033 */
034 public class LicenseDownloader
035 {
036
037 /**
038 * Defines the connection timeout in milliseconds when attempting to download license files.
039 */
040 public static final int DEFAULT_CONNECTION_TIMEOUT = 5000;
041
042 public static void downloadLicense( String licenseUrlString, File outputFile )
043 throws IOException
044 {
045 InputStream licenseInputStream = null;
046 FileOutputStream fos = null;
047
048 try
049 {
050 URL licenseUrl = new URL( licenseUrlString );
051 URLConnection connection = licenseUrl.openConnection();
052 connection.setConnectTimeout( DEFAULT_CONNECTION_TIMEOUT );
053 connection.setReadTimeout( DEFAULT_CONNECTION_TIMEOUT );
054 licenseInputStream = connection.getInputStream();
055 fos = new FileOutputStream( outputFile );
056 copyStream( licenseInputStream, fos );
057 licenseInputStream.close();
058 fos.close();
059 }
060 finally
061 {
062 FileUtil.tryClose( licenseInputStream );
063 FileUtil.tryClose( fos );
064 }
065
066 }
067
068 /**
069 * Copy data from one stream to another.
070 *
071 * @param inStream
072 * @param outStream
073 * @throws IOException
074 */
075 private static void copyStream( InputStream inStream, OutputStream outStream )
076 throws IOException
077 {
078 byte[] buf = new byte[1024];
079 int len;
080 while ( ( len = inStream.read( buf ) ) > 0 )
081 {
082 outStream.write( buf, 0, len );
083 }
084 }
085
086 }