/**
 * 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
 * 
 *   http://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.maven.mercury.spi.http.client.deploy;

/**
 * DeployCallback
 * <p/>
 * Classes that implement this method will be notified when a given job has
 * been completed and validated.
 */
public interface DeployCallback
{
    /**
     * Callback for asynchronous version of Retriever.retrieve.
     *
     * @param response empty if all artifacts retrieved ok, list of exceptions otherwise
     */
    void onComplete( DeployResponse response );
}
