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.plugins.repository;
019:
020: import java.io.IOException;
021: import java.io.InputStream;
022:
023: /**
024: * Represents a resource in an Ivy {@link Repository}. The resource interface allows one to obtain
025: * the following information about a resource:
026: * <ul>
027: * <li>resource name/identifier in repository syntax</li>
028: * <li>date the resource was last modified.</li>
029: * <li>size of the resource in bytes.</li>
030: * <li>if the resource is available.</li>
031: * </ul>
032: * </p>
033: * <h4>Implementation Notes</h4>
034: * In implementing the interface you need to ensure the following behaviors:
035: * <ul>
036: * <li>All of the methods specified in the interface fail by returning an empty value
037: * (<code>false</code>, <code>0</code>, <code>""</code>).
038: * In other words, the specified interface methods should not throw RuntimeExceptions. </li>
039: * <li>Failure conditions should be logged using the {@link org.apache.ivy.util.Message#verbose}
040: * method. </li>
041: * <li>Failure of one of the interface's specified methods results in all other interface specified
042: * methods returning an empty value (<code>false</code>, <code>0</code>, <code>""</code>).</li>
043: * </ul>
044: * </p>
045: */
046:
047: public interface Resource {
048: /**
049: * Get the name of the resource.
050: *
051: * @return the repositorie's assigned resource name/identifier.
052: */
053: public String getName();
054:
055: /**
056: * Get the date the resource was last modified
057: *
058: * @return A <code>long</code> value representing the time the file was last modified,
059: * measured in milliseconds since the epoch (00:00:00 GMT, January 1, 1970), or
060: * <code>0L</code> if the file does not exist or if an I/O error occurs.
061: */
062: public long getLastModified();
063:
064: /**
065: * Get the resource size
066: *
067: * @return a <code>long</code> value representing the size of the resource in bytes.
068: */
069: public long getContentLength();
070:
071: /**
072: * Determine if the resource is available.
073: * </p>
074: * Note that this method only checks for availability, not for actual existence.
075: *
076: * @return <code>boolean</code> value indicating if the resource is available.
077: */
078: public boolean exists();
079:
080: /**
081: * Is this resource local to this host, i.e. is it on the file system?
082: *
083: * @return <code>boolean</code> value indicating if the resource is local.
084: */
085: public boolean isLocal();
086:
087: /**
088: * Clones this resource with a new resource with a different name
089: *
090: * @param cloneName
091: * the name of the clone
092: * @return the cloned resource
093: */
094: public Resource clone(String cloneName);
095:
096: /**
097: * Opens a stream on this resource
098: *
099: * @return the opened input stream
100: */
101: public InputStream openStream() throws IOException;
102: }
|