blob: 40630abf7180367eca148e024a2767f194fc3334 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.ivy.util.url;
import org.apache.ivy.util.CopyProgressListener;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
/**
* This interface is responsible for handling some URL manipulation (stream opening, downloading,
* check reachability, ...).
* <p>
*
* @deprecated Starting 2.5.0, the {@link TimeoutConstrainedURLHandler} is preferred in favour of this interface
*/
@Deprecated
public interface URLHandler {
/**
* Using the slower REQUEST method for getting the basic URL infos. Use this when getting
* errors behind a problematic/special proxy or firewall chain.
*/
int REQUEST_METHOD_GET = 1;
/**
* Using the faster HEAD method for getting the basic URL infos. Works for most common
* networks.
*/
int REQUEST_METHOD_HEAD = 2;
class URLInfo {
private long contentLength;
private long lastModified;
private boolean available;
private String bodyCharset;
protected URLInfo(boolean available, long contentLength, long lastModified) {
this(available, contentLength, lastModified, null);
}
protected URLInfo(boolean available, long contentLength, long lastModified,
String bodyCharset) {
this.available = available;
this.contentLength = contentLength;
this.lastModified = lastModified;
this.bodyCharset = bodyCharset;
}
public boolean isReachable() {
return available;
}
public long getContentLength() {
return contentLength;
}
public long getLastModified() {
return lastModified;
}
public String getBodyCharset() {
return bodyCharset;
}
}
URLInfo UNAVAILABLE = new URLInfo(false, 0, 0);
/**
* Please prefer getURLInfo when several infos are needed.
*
* @param url the url to check
* @return true if the target is reachable
*/
boolean isReachable(URL url);
/**
* Please prefer getURLInfo when several infos are needed.
*
* @param url the url to check
* @param timeout the timeout in milliseconds
* @return true if the target is reachable
*/
boolean isReachable(URL url, int timeout);
/**
* Please prefer getURLInfo when several infos are needed.
*
* @param url the url to check
* @return the length of the target if the given url is reachable, 0 otherwise. No error code
* in case of http urls.
*/
long getContentLength(URL url);
/**
* @param url the url to check
* @param timeout the maximum time before considering an url is not reachable a
* timeout of zero indicates no timeout
* @return the length of the target if the given url is reachable, 0 otherwise. No error code
* in case of http urls.
*/
long getContentLength(URL url, int timeout);
/**
* Please prefer getURLInfo when several infos are needed.
*
* @param url the url to check
* @return last modified timestamp of the given url
*/
long getLastModified(URL url);
/**
* Please prefer getURLInfo when several infos are needed.
*
* @param url the url to check
* @param timeout the timeout in milliseconds
* @return last modified timestamp of the given url
*/
long getLastModified(URL url, int timeout);
/**
* @param url The url from which information is retrieved.
* @return The URLInfo extracted from the given url, or {@link #UNAVAILABLE} instance when the
* url is not reachable.
*/
URLInfo getURLInfo(URL url);
/**
* @param url The url from which information is retrieved.
* @param timeout The timeout in milliseconds.
* @return The URLInfo extracted from the given url, or {@link #UNAVAILABLE} when the url is
* not reachable, never null.
*/
URLInfo getURLInfo(URL url, int timeout);
/**
* @param url ditto
* @return InputStream
* @throws IOException if something goes wrong
*/
InputStream openStream(URL url) throws IOException;
/**
* @param src URL
* @param dest File
* @param l CopyProgressListener
* @throws IOException if something goes wrong
*/
void download(URL src, File dest, CopyProgressListener l) throws IOException;
/**
* @param src File
* @param dest URL
* @param l CopyProgressListener
* @throws IOException if something goes wrong
*/
void upload(File src, URL dest, CopyProgressListener l) throws IOException;
void setRequestMethod(int requestMethod);
}