blob: 5626d3783bded77c5047b3cc808a38092e92bfb8 [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.plugins.repository;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.ivy.core.module.descriptor.Artifact;
/**
* Represents a collection of resources available to Ivy. Ivy uses one or more repositories as both
* a source of resources for Ivy enabled build systems and as a distribution center for resources
* generated by Ivy enabled build systems.
* <p>A repository supports the following fundamental operations</p>
* <ul>
* <li>retrieving a resource from the repository.</li>
* <li>transferring a resource to the repository.</li>
* <li>retrieving a listing of resources.</li>
* </ul>
* <h3>Resource Retrieval</h3>
* <p>{@link #get} retrieves a resource specified by a provided identifier creating a new file.</p>
* <h3>Resource Publication</h3>
* <p>{@link #put} transfers a file to the repository.</p>
* <h2>resource Listing</h2>
* <p>
* {@link #list} returns a listing of file like objects belonging to a specified parent directory.
* </p>
*/
public interface Repository {
/**
* Return the resource associated with a specified identifier. If the resource does not exist,
* it should return a Resource with exists() returning false. An IOException should only be
* thrown when a real IO problem occurs, like the impossibility to connect to a server.
*
* @param source
* A string identifying the resource.
* @return The resource associated with the resource identifier.
* @throws IOException
* On error while trying to get resource.
*/
Resource getResource(String source) throws IOException;
/**
* Fetch a resource from the repository.
*
* @param source
* A string identifying the resource to be fetched.
* @param destination
* Where to place the fetched resource.
* @throws IOException
* On retrieval failure.
*/
void get(String source, File destination) throws IOException;
/**
* Transfer a resource to the repository
*
* @param artifact
* The artifact to be transferred.
* @param source
* The local file to be transferred.
* @param destination
* Where to transfer the resource.
* @param overwrite
* Whether the transfer should overwrite an existing resource.
* @throws IOException
* On publication failure.
*/
void put(Artifact artifact, File source, String destination, boolean overwrite)
throws IOException;
/**
* Return a listing of resources names
*
* @param parent
* The parent directory from which to generate the listing.
* @return A listing of the parent directory's file content
* @throws IOException
* On listing failure.
*/
List<String> list(String parent) throws IOException;
/**
* Add a listener to the repository.
*
* @param listener
* The listener to attach to the repository.
*/
void addTransferListener(TransferListener listener);
/**
* Remove a listener on the repository
*
* @param listener
* The listener to remove
*/
void removeTransferListener(TransferListener listener);
/**
* Determine if a given listener is attached to the repository.
*
* @param listener
* The listener being queried
* @return <code>true</code> if the provided listener is attached to the repository,
* <code>false</code> if not.
*/
boolean hasTransferListener(TransferListener listener);
/**
* Get the repository's file separator string.
*
* @return The repository's file separator delimiter
*/
String getFileSeparator();
/**
* Normalize a string.
*
* @param source
* The string to normalize.
* @return The normalized string.
*/
String standardize(String source);
/**
* Return the name of the repository
*
* @return String name
*/
String getName();
}