--- /dev/null
+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