/**
* Axelor Business Solutions
*
* Copyright (C) 2016 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.tool.net;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.axelor.apps.tool.exception.IExceptionMessage;
import com.axelor.apps.tool.file.FileTool;
import com.axelor.i18n.I18n;
import com.google.common.base.Strings;
public final class URLService {
final static int size = 1024;
private static final Logger LOG = LoggerFactory.getLogger(URLService.class);
/**
* Test la validité d'une url.
*
* @param url
* L'URL à tester.
*
* @return
*/
public static String notExist(String url) {
if(Strings.isNullOrEmpty(url)) {
return I18n.get(IExceptionMessage.URL_SERVICE_1);
}
try {
URL fileURL = new URL(url);
fileURL.openConnection().connect();
return null;
}
catch(java.net.MalformedURLException ex) {
ex.printStackTrace();
return String.format(I18n.get(IExceptionMessage.URL_SERVICE_2), url);
}
catch(java.io.IOException ex) {
ex.printStackTrace();
return String.format(I18n.get(IExceptionMessage.URL_SERVICE_3), url);
}
}
public static void fileUrl(File file, String fAddress, String localFileName, String destinationDir) throws IOException {
int ByteRead, ByteWritten = 0;
byte[] buf = new byte[size];
URL Url = new URL(fAddress);
OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file));
URLConnection urlConnection = Url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
while ((ByteRead = inputStream.read(buf)) != -1) {
outputStream.write(buf, 0, ByteRead);
ByteWritten += ByteRead;
}
LOG.info("Downloaded Successfully.");
LOG.debug("No of bytes :" + ByteWritten);
if ( inputStream != null ) { inputStream.close(); }
if ( outputStream != null ) { outputStream.close(); }
}
public static File fileDownload(String fAddress, String destinationDir, String fileName) throws IOException {
int slashIndex = fAddress.lastIndexOf('/');
int periodIndex = fAddress.lastIndexOf('.');
if ( periodIndex >= 1 && slashIndex >= 0 && slashIndex < fAddress.length() - 1 ) {
LOG.debug("Downloading file {} from {} to {}", fileName, fAddress, destinationDir);
File file = FileTool.create(destinationDir, fileName);
fileUrl(file, fAddress, fileName, destinationDir);
return file;
} else {
LOG.error("Destination path or filename is not well formatted.");
return null;
}
}
public static void fileDownload(File file, String fAddress, String destinationDir, String fileName) throws IOException {
int slashIndex = fAddress.lastIndexOf('/');
int periodIndex = fAddress.lastIndexOf('.');
if ( periodIndex >= 1 && slashIndex >= 0 && slashIndex < fAddress.length() - 1 ) {
LOG.debug("Downloading file {} from {} to {}", fileName, fAddress, destinationDir);
fileUrl(file, fAddress, fileName, destinationDir);
} else {
LOG.error("Destination path or filename is not well formatted.");
}
}
}