]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.cms/src/org/argeo/slc/backup/vfs/AbstractAtomicBackup.java
Adapt to new build system
[gpl/argeo-slc.git] / org.argeo.slc.cms / src / org / argeo / slc / backup / vfs / AbstractAtomicBackup.java
1 package org.argeo.slc.backup.vfs;
2
3 import org.apache.commons.vfs2.FileObject;
4 import org.apache.commons.vfs2.FileSystemManager;
5 import org.apache.commons.vfs2.FileSystemOptions;
6 import org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder;
7
8 /**
9 * Simplify atomic backups implementation, especially by managing VFS.
10 */
11 public abstract class AbstractAtomicBackup implements AtomicBackup {
12 private String name;
13 private String compression = "bz2";
14
15 protected abstract void writeBackup(FileObject targetFo);
16
17 public AbstractAtomicBackup() {
18 }
19
20 public AbstractAtomicBackup(String name) {
21 this.name = name;
22 }
23
24 public void init() {
25 if (name == null)
26 throw new MaintenanceException("Atomic backup name must be set");
27 }
28
29 public void destroy() {
30
31 }
32
33 @Override
34 public String backup(FileSystemManager fileSystemManager,
35 String backupsBase, BackupContext backupContext,
36 FileSystemOptions opts) {
37 if (name == null)
38 throw new MaintenanceException("Atomic backup name must be set");
39
40 FileObject targetFo = null;
41 try {
42 if (backupsBase.startsWith("sftp:"))
43 SftpFileSystemConfigBuilder.getInstance()
44 .setStrictHostKeyChecking(opts, "no");
45 if (compression == null || compression.equals("none"))
46 targetFo = fileSystemManager.resolveFile(backupsBase + '/'
47 + backupContext.getRelativeFolder() + '/' + name, opts);
48 else if (compression.equals("bz2"))
49 targetFo = fileSystemManager.resolveFile("bz2:" + backupsBase
50 + '/' + backupContext.getRelativeFolder() + '/' + name
51 + ".bz2" + "!" + name, opts);
52 else if (compression.equals("gz"))
53 targetFo = fileSystemManager.resolveFile("gz:" + backupsBase
54 + '/' + backupContext.getRelativeFolder() + '/' + name
55 + ".gz" + "!" + name, opts);
56 else
57 throw new MaintenanceException("Unsupported compression "
58 + compression);
59
60 writeBackup(targetFo);
61
62 return targetFo.toString();
63 } catch (Exception e) {
64 throw new MaintenanceException("Cannot backup " + name + " to "
65 + targetFo, e);
66 } finally {
67 BackupUtils.closeFOQuietly(targetFo);
68 }
69 }
70
71 public void setName(String name) {
72 this.name = name;
73 }
74
75 public String getName() {
76 return name;
77 }
78
79 public void setCompression(String compression) {
80 this.compression = compression;
81 }
82 }