]> source.dussan.org Git - archiva.git/blob
ceb3686608aa262f92f4c7cfe235d4f846ab488f
[archiva.git] /
1 package org.apache.maven.repository.converter.transaction;
2
3 /*
4  * Copyright 2005-2006 The Apache Software Foundation.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 import org.apache.maven.repository.converter.RepositoryConversionException;
20
21 import java.io.File;
22 import java.io.IOException;
23 import java.util.ArrayList;
24 import java.util.Iterator;
25 import java.util.List;
26
27 /**
28  * Implement commit/rollback semantics for a set of files.
29  *
30  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
31  */
32 public class FileTransaction
33 {
34     private List events = new ArrayList();
35
36     public void commit()
37         throws RepositoryConversionException
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 RepositoryConversionException( "Unable to commit file transaction", e );
58                 }
59                 catch ( IOException ioe )
60                 {
61                     throw new RepositoryConversionException(
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     public void copyFile( File source, File destination )
81     {
82         events.add( new CopyFileEvent( source, destination ) );
83     }
84
85     public void createFile( String content, File destination )
86     {
87         events.add( new CreateFileEvent( content, destination ) );
88     }
89 }