]> source.dussan.org Git - archiva.git/blob
52b72f0ed486488a38a553420e65104c27c4c852
[archiva.git] /
1 package org.apache.maven.archiva.transaction;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *   http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.codehaus.plexus.digest.Digester;
23 import org.codehaus.plexus.util.FileUtils;
24
25 import java.io.File;
26 import java.io.IOException;
27 import java.util.Iterator;
28 import java.util.List;
29
30 /**
31  * Event to copy a file.
32  *
33  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
34  * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
35  * @version $Id$
36  */
37 public class CopyFileEvent
38     extends AbstractTransactionEvent
39 {
40     private final File source;
41
42     private final File destination;
43
44     /**
45      * 
46      * @param source
47      * @param destination
48      * @param digesters {@link List}&lt;{@link Digester}> digesters to use for checksumming 
49      */
50     public CopyFileEvent( File source, File destination, List digesters )
51     {
52         super( digesters );
53         this.source = source;
54         this.destination = destination;
55     }
56
57     public void commit()
58         throws IOException
59     {
60         createBackup( destination );
61
62         mkDirs( destination.getParentFile() );
63
64         FileUtils.copyFile( source, destination );
65
66         createChecksums( destination, true );
67         copyChecksums();
68
69         copyChecksum( "asc" );
70     }
71
72     /**
73      * Copy checksums of source file with all digesters if exist
74      * 
75      * @throws IOException
76      */
77     private void copyChecksums()
78         throws IOException
79     {
80         Iterator it = getDigesters().iterator();
81         while ( it.hasNext() )
82         {
83             Digester digester = (Digester) it.next();
84             copyChecksum( getDigesterFileExtension( digester ) );
85         }
86     }
87
88     /**
89      * Copy checksum of source file with extension provided if exists
90      * 
91      * @param extension
92      * @return whether the checksum exists or not 
93      * @throws IOException
94      */
95     private boolean copyChecksum( String extension )
96         throws IOException
97     {
98         File checksumSource = new File( source.getAbsolutePath() + "." + extension );
99         if ( checksumSource.exists() )
100         {
101             File checksumDestination = new File( destination.getAbsolutePath() + "." + extension );
102             FileUtils.copyFile( checksumSource, checksumDestination );
103             return true;
104         }
105         return false;
106     }
107
108     public void rollback()
109         throws IOException
110     {
111         destination.delete();
112
113         revertFilesCreated();
114
115         revertMkDirs();
116
117         restoreBackups();
118     }
119 }