]> source.dussan.org Git - archiva.git/blob
d890e66d2112576a0081340f6cfcdc53303ea23e
[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 java.io.File;
23 import java.io.IOException;
24 import java.util.ArrayList;
25 import java.util.Iterator;
26 import java.util.List;
27
28 /**
29  * Implement commit/rollback semantics for a set of files.
30  *
31  */
32 public class FileTransaction
33 {
34     private List events = new ArrayList();
35
36     public void commit()
37         throws TransactionException
38     {
39         List toRollback = new ArrayList( events.size() );
40
41         for ( Iterator i = events.iterator(); i.hasNext(); )
42         {
43             TransactionEvent event = (TransactionEvent) i.next();
44
45             try
46             {
47                 event.commit();
48
49                 toRollback.add( event );
50             }
51             catch ( IOException e )
52             {
53                 try
54                 {
55                     rollback( toRollback );
56
57                     throw new TransactionException( "Unable to commit file transaction", e );
58                 }
59                 catch ( IOException ioe )
60                 {
61                     throw new TransactionException(
62                         "Unable to commit file transaction, and rollback failed with error: '" + ioe.getMessage() + "'",
63                         e );
64                 }
65             }
66         }
67     }
68
69     private void rollback( List toRollback )
70         throws IOException
71     {
72         for ( Iterator i = toRollback.iterator(); i.hasNext(); )
73         {
74             TransactionEvent event = (TransactionEvent) i.next();
75
76             event.rollback();
77         }
78     }
79
80     /**
81      * @param source
82      * @param destination
83      * @param digesters   {@link List}<{@link org.codehaus.plexus.digest.Digester}> digesters to use for checksumming
84      */
85     public void copyFile( File source, File destination, List digesters )
86     {
87         events.add( new CopyFileEvent( source, destination, digesters ) );
88     }
89
90     /**
91      * @param content
92      * @param destination
93      * @param digesters   {@link List}<{@link org.codehaus.plexus.digest.Digester}> digesters to use for checksumming
94      */
95     public void createFile( String content, File destination, List digesters )
96     {
97         events.add( new CreateFileEvent( content, destination, digesters ) );
98     }
99 }