]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.backup/src/org/simantics/backup/Backups.java
added org.simantics.backup
[simantics/platform.git] / bundles / org.simantics.backup / src / org / simantics / backup / Backups.java
diff --git a/bundles/org.simantics.backup/src/org/simantics/backup/Backups.java b/bundles/org.simantics.backup/src/org/simantics/backup/Backups.java
new file mode 100644 (file)
index 0000000..b684296
--- /dev/null
@@ -0,0 +1,96 @@
+package org.simantics.backup;\r
+\r
+import java.nio.file.Path;\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.List;\r
+import java.util.concurrent.Future;\r
+\r
+/**\r
+ * @author Tuukka Lehtonen\r
+ */\r
+public class Backups {\r
+\r
+    /**\r
+     * \r
+     * @param providers\r
+     * @throws BackupException\r
+     */\r
+    public static void lock(List<IBackupProvider> providers) throws BackupException {\r
+        int i = 0;\r
+        int count = providers.size();\r
+        try {\r
+            for (; i < count; ++i) {\r
+                providers.get(i).lock();\r
+            }\r
+        } catch (BackupException e) {\r
+            for (int j = i-1; j >= 0; --j) {\r
+                try {\r
+                    providers.get(j).unlock();\r
+                } catch (BackupException ex) {\r
+                    // TODO: proper logging.\r
+                    ex.printStackTrace();\r
+                }\r
+            }\r
+            throw e;\r
+        }\r
+    }\r
+\r
+    public static List<Future<BackupException>> syncBackup(List<IBackupProvider> providers, Path targetPath, int revision) throws BackupException {\r
+        // Initiate all backup providers, possibly to execute concurrently.\r
+        List<Future<BackupException>> futures = new ArrayList<>(providers.size());\r
+        for (IBackupProvider provider : providers)\r
+            futures.add( provider.backup(targetPath, revision) );\r
+\r
+        return futures;\r
+    }\r
+\r
+    public static void unlock(Collection<IBackupProvider> providers) {\r
+        for (IBackupProvider provider : providers) {\r
+            try {\r
+                provider.unlock();\r
+            } catch (BackupException e) {\r
+                // TODO: proper logging\r
+                e.printStackTrace();\r
+            }\r
+        }\r
+    }\r
+\r
+//    private static class BackupResultFuture implements Future<BackupException> {\r
+//\r
+//        public static final BackupResultFuture SUCCESS = new BackupResultFuture(null);\r
+//\r
+//        private final BackupException e;\r
+//\r
+//        public BackupResultFuture(BackupException e) {\r
+//            this.e = e;\r
+//        }\r
+//\r
+//        @Override\r
+//        public boolean cancel(boolean mayInterruptIfRunning) {\r
+//            return false;\r
+//        }\r
+//\r
+//        @Override\r
+//        public boolean isCancelled() {\r
+//            return false;\r
+//        }\r
+//\r
+//        @Override\r
+//        public boolean isDone() {\r
+//            return true;\r
+//        }\r
+//\r
+//        @Override\r
+//        public BackupException get() throws InterruptedException, ExecutionException {\r
+//            return e;\r
+//        }\r
+//\r
+//        @Override\r
+//        public BackupException get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\r
+//            return e;\r
+//        }\r
+//\r
+//    }\r
+\r
+}\r