001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018: package org.apache.ivy.util.url;
019:
020: import java.io.File;
021: import java.io.IOException;
022: import java.io.InputStream;
023: import java.net.URL;
024:
025: import org.apache.ivy.util.CopyProgressListener;
026:
027: /**
028: * This interface is responsible for handling some URL manipulation (stream opening, downloading,
029: * check reachability, ...).
030: */
031: public interface URLHandler {
032: public static class URLInfo {
033: private long contentLength;
034:
035: private long lastModified;
036:
037: private boolean available;
038:
039: protected URLInfo(boolean available, long contentLength,
040: long lastModified) {
041: this .available = available;
042: this .contentLength = contentLength;
043: this .lastModified = lastModified;
044: }
045:
046: public boolean isReachable() {
047: return available;
048: }
049:
050: public long getContentLength() {
051: return contentLength;
052: }
053:
054: public long getLastModified() {
055: return lastModified;
056: }
057: }
058:
059: public static final URLInfo UNAVAILABLE = new URLInfo(false, 0, 0);
060:
061: /**
062: * Please prefer getURLInfo when several infos are needed.
063: *
064: * @param url
065: * the url to check
066: * @return true if the target is reachable
067: */
068: public boolean isReachable(URL url);
069:
070: /**
071: * Please prefer getURLInfo when several infos are needed.
072: *
073: * @param url
074: * the url to check
075: * @return true if the target is reachable
076: */
077: public boolean isReachable(URL url, int timeout);
078:
079: /**
080: * Returns the length of the target if the given url is reachable, and without error code in
081: * case of http urls. Please prefer getURLInfo when several infos are needed.
082: *
083: * @param url
084: * the url to check
085: * @return the length of the target if available, 0 if not reachable
086: */
087: public long getContentLength(URL url);
088:
089: /**
090: * Returns the length of the target if the given url is reachable, and without error code in
091: * case of http urls.
092: *
093: * @param url
094: * the url to check
095: * @param timeout
096: * the maximum time before considering an url is not reachable a timeout of zero
097: * indicates no timeout
098: * @return the length of the target if available, 0 if not reachable
099: */
100: public long getContentLength(URL url, int timeout);
101:
102: /**
103: * Please prefer getURLInfo when several infos are needed.
104: *
105: * @param url
106: * the url to check
107: * @return last modified timestamp of the given url
108: */
109: public long getLastModified(URL url);
110:
111: /**
112: * Please prefer getURLInfo when several infos are needed.
113: *
114: * @param url
115: * the url to check
116: * @return last modified timestamp of the given url
117: */
118: public long getLastModified(URL url, int timeout);
119:
120: /**
121: * Returns the URLInfo of the given url or a {@link #UNAVAILABLE} instance,
122: * if the url is not reachable.
123: *
124: * @param url The url from which information is retrieved.
125: * @return The URLInfo extracted from the given url, or {@link #UNAVAILABLE} when
126: * the url is not available.
127: */
128: public URLInfo getURLInfo(URL url);
129:
130: /**
131: * never returns null, return UNAVAILABLE when url is not reachable
132: *
133: * @param url The url from which information is retrieved.
134: * @param timeout The timeout in milliseconds.
135: * @return The URLInfo extracted from the given url, or {@link #UNAVAILABLE} when
136: * the url is not available.
137: */
138: public URLInfo getURLInfo(URL url, int timeout);
139:
140: public InputStream openStream(URL url) throws IOException;
141:
142: public void download(URL src, File dest, CopyProgressListener l)
143: throws IOException;
144: }
|