001 package org.codehaus.mojo.wagon.shared;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
005 * agreements. See the NOTICE file distributed with this work for additional information regarding
006 * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance with the License. You may obtain a
008 * copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software distributed under the License
013 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
014 * or implied. See the License for the specific language governing permissions and limitations under
015 * the License.
016 */
017
018 import java.io.File;
019 import java.io.IOException;
020
021 import org.apache.maven.plugin.logging.Log;
022 import org.apache.maven.shared.model.fileset.FileSet;
023 import org.apache.maven.wagon.Wagon;
024 import org.apache.maven.wagon.WagonException;
025 import org.codehaus.plexus.util.FileUtils;
026
027 /**
028 * Copy a set of file from a wagon repo to another wagon repo
029 *
030 * @plexus.component role="org.codehaus.mojo.wagon.shared.WagonCopy" role-hint="default"
031 */
032
033 public class DefaultWagonCopy
034 implements WagonCopy
035 {
036 /**
037 * @plexus.requirement role="org.codehaus.mojo.wagon.shared.WagonDownload"
038 */
039 private WagonDownload downloader;
040
041 /**
042 * @plexus.requirement role="org.codehaus.mojo.wagon.shared.WagonUpload"
043 */
044 private WagonUpload uploader;
045
046 public void copy( Wagon src, WagonFileSet wagonFileSet, Wagon target, boolean optimize, Log logger )
047 throws WagonException, IOException
048 {
049 if ( wagonFileSet == null )
050 {
051 wagonFileSet = new WagonFileSet();
052 }
053
054 boolean removeDownloadDir = false;
055
056 if ( wagonFileSet.getDownloadDirectory() == null )
057 {
058 File downloadSrcDir = File.createTempFile( "wagon", "wagon" );
059 downloadSrcDir.delete();
060 wagonFileSet.setDownloadDirectory( downloadSrcDir );
061 removeDownloadDir = true;
062 }
063
064 try
065 {
066 this.downloader.download( src, wagonFileSet, logger );
067
068 FileSet localFileSet = new FileSet();
069 localFileSet.setDirectory( wagonFileSet.getDownloadDirectory().getAbsolutePath() );
070 localFileSet.setOutputDirectory( wagonFileSet.getOutputDirectory() );
071
072 this.uploader.upload( target, localFileSet, optimize, logger );
073 }
074 finally
075 {
076 if ( removeDownloadDir )
077 {
078 FileUtils.deleteDirectory( wagonFileSet.getDownloadDirectory() );
079 }
080 }
081
082 }
083 }