]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.backup/src/org/simantics/backup/Backups.java
Merged svn branch
[simantics/platform.git] / bundles / org.simantics.backup / src / org / simantics / backup / Backups.java
1 package org.simantics.backup;\r
2 \r
3 import java.nio.file.Path;\r
4 import java.util.ArrayList;\r
5 import java.util.Collection;\r
6 import java.util.List;\r
7 import java.util.concurrent.Future;\r
8 \r
9 /**\r
10  * @author Tuukka Lehtonen\r
11  */\r
12 public class Backups {\r
13 \r
14     /**\r
15      * \r
16      * @param providers\r
17      * @throws BackupException\r
18      */\r
19     public static void lock(List<IBackupProvider> providers) throws BackupException {\r
20         int i = 0;\r
21         int count = providers.size();\r
22         try {\r
23             for (; i < count; ++i) {\r
24                 providers.get(i).lock();\r
25             }\r
26         } catch (BackupException e) {\r
27             for (int j = i-1; j >= 0; --j) {\r
28                 try {\r
29                     providers.get(j).unlock();\r
30                 } catch (BackupException ex) {\r
31                     // TODO: proper logging.\r
32                     ex.printStackTrace();\r
33                 }\r
34             }\r
35             throw e;\r
36         }\r
37     }\r
38 \r
39     public static List<Future<BackupException>> syncBackup(List<IBackupProvider> providers, Path targetPath, int revision) throws BackupException {\r
40         // Initiate all backup providers, possibly to execute concurrently.\r
41         List<Future<BackupException>> futures = new ArrayList<>(providers.size());\r
42         for (IBackupProvider provider : providers)\r
43             futures.add( provider.backup(targetPath, revision) );\r
44 \r
45         return futures;\r
46     }\r
47 \r
48     public static void unlock(Collection<IBackupProvider> providers) {\r
49         for (IBackupProvider provider : providers) {\r
50             try {\r
51                 provider.unlock();\r
52             } catch (BackupException e) {\r
53                 // TODO: proper logging\r
54                 e.printStackTrace();\r
55             }\r
56         }\r
57     }\r
58 \r
59 //    private static class BackupResultFuture implements Future<BackupException> {\r
60 //\r
61 //        public static final BackupResultFuture SUCCESS = new BackupResultFuture(null);\r
62 //\r
63 //        private final BackupException e;\r
64 //\r
65 //        public BackupResultFuture(BackupException e) {\r
66 //            this.e = e;\r
67 //        }\r
68 //\r
69 //        @Override\r
70 //        public boolean cancel(boolean mayInterruptIfRunning) {\r
71 //            return false;\r
72 //        }\r
73 //\r
74 //        @Override\r
75 //        public boolean isCancelled() {\r
76 //            return false;\r
77 //        }\r
78 //\r
79 //        @Override\r
80 //        public boolean isDone() {\r
81 //            return true;\r
82 //        }\r
83 //\r
84 //        @Override\r
85 //        public BackupException get() throws InterruptedException, ExecutionException {\r
86 //            return e;\r
87 //        }\r
88 //\r
89 //        @Override\r
90 //        public BackupException get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\r
91 //            return e;\r
92 //        }\r
93 //\r
94 //    }\r
95 \r
96 }\r