1 package org.apache.archiva.transaction;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.util.ArrayList;
25 import java.util.List;
26
27 import org.codehaus.plexus.digest.Digester;
28
29
30
31
32
33 public class FileTransaction
34 {
35 private List<AbstractTransactionEvent> events = new ArrayList<>();
36
37 public void commit()
38 throws TransactionException
39 {
40 List<TransactionEvent> toRollback = new ArrayList<TransactionEvent>( events.size() );
41
42 for ( TransactionEvent event : events )
43 {
44 try
45 {
46 event.commit();
47
48 toRollback.add( event );
49 }
50 catch ( IOException e )
51 {
52 try
53 {
54 rollback( toRollback );
55
56 throw new TransactionException( "Unable to commit file transaction", e );
57 }
58 catch ( IOException ioe )
59 {
60 throw new TransactionException(
61 "Unable to commit file transaction, and rollback failed with error: '" + ioe.getMessage() + "'",
62 e );
63 }
64 }
65 }
66 }
67
68 private void rollback( List<TransactionEvent> toRollback )
69 throws IOException
70 {
71 for ( TransactionEvent event : toRollback )
72 {
73 event.rollback();
74 }
75 }
76
77
78
79
80
81
82 public void copyFile( File source, File destination, List<? extends Digester> digesters )
83 {
84 events.add( new CopyFileEvent( source, destination, digesters ) );
85 }
86
87
88
89
90
91
92 public void createFile( String content, File destination, List<? extends Digester> digesters )
93 {
94 events.add( new CreateFileEvent( content, destination, digesters ) );
95 }
96 }