/**
* This file is part of muCommander, http://www.mucommander.com
* Copyright (C) 2002-2016 Maxence Bernard
*
* muCommander is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* muCommander 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.mucommander.commons.file.compat;
import com.mucommander.commons.file.AbstractFile;
import com.mucommander.commons.file.FileFactory;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
/**
* @author Maxence Bernard
*/
class CompatURLConnection extends URLConnection {
protected AbstractFile file;
public CompatURLConnection(URL url) throws IOException {
super(url);
// Not connected yet
}
public CompatURLConnection(URL url, AbstractFile file) throws IOException {
super(url);
if(file!=null) {
this.file = file;
connected = true;
}
}
/**
* Checks if this <code>URLConnection</code> is connected and if it isn't, calls {@link #connect()} to connect it.
*
* @throws IOException if an error occurred while connecting this URLConnection
*/
private void checkConnected() throws IOException {
if(!connected)
connect();
}
//////////////////////////////////
// URLConnection implementation //
//////////////////////////////////
/**
* Creates the {@link AbstractFile} instance corresponding to the URL location, only if no <code>AbstractFile</code>
* has been specified when this <code>CompatURLConnection</code> was created.
*
* @throws IOException if an error occurred while instanciating the AbstractFile
*/
@Override
public void connect() throws IOException {
if(!connected) {
file = FileFactory.getFile(url.toString(), true);
connected = true;
}
}
////////////////////////
// Overridden methods //
////////////////////////
@Override
public InputStream getInputStream() throws IOException {
checkConnected();
return file.getInputStream();
}
@Override
public OutputStream getOutputStream() throws IOException {
checkConnected();
return file.getOutputStream();
}
@Override
public long getLastModified() {
try {
checkConnected();
return file.getDate();
}
catch(IOException e) {
return 0;
}
}
@Override
public long getDate() {
return getLastModified();
}
@Override
public int getContentLength() {
try {
checkConnected();
return (int)file.getSize();
}
catch(IOException e) {
return -1;
}
}
}