1 16 package org.outerj.daisy.backupTool; 17 18 import java.io.File ; 19 import java.text.DateFormat ; 20 import java.text.DecimalFormat ; 21 import java.text.SimpleDateFormat ; 22 import java.util.ArrayList ; 23 import java.util.Date ; 24 import java.util.List ; 25 import java.util.Locale ; 26 27 import javax.xml.parsers.DocumentBuilder ; 28 import javax.xml.parsers.DocumentBuilderFactory ; 29 30 import org.w3c.dom.Document ; 31 import org.w3c.dom.Element ; 32 33 public class BackupInstance { 34 private final DateFormat dateFormat = new SimpleDateFormat ("EEE MMM dd hh:mm:ss z yyyy", Locale.US); 35 private String name; 36 private List entries; 37 private File directory; 38 private Date createDate; 39 private String serverVersion; 40 private File instanceFile; 41 private Document instanceDocument; 42 private boolean changed; 43 44 public BackupInstance(File backupBaseDir) throws Exception { 45 SimpleDateFormat dateFormat = new SimpleDateFormat ("yyyyMMdd"); 46 String dirName = dateFormat.format(new Date ()); 47 48 long seq = 0; 49 DecimalFormat df = new DecimalFormat ("000"); 50 do { 51 String dirNameSeq = dirName + "_" + df.format(seq); 52 directory = new File (backupBaseDir, dirNameSeq); 53 seq++; 54 } while (!directory.mkdir() && seq < 1000); 55 if (seq > 999) 56 throw new Exception ("Could not create directory with prefix " 57 + dirName); 58 59 entries = new ArrayList (); 60 name = directory.getName(); 61 createDate = new Date (); 62 serverVersion = BackupManager.getLocker().getServerVersion(); 63 } 64 65 public BackupInstance(File backupBaseDir, String backupName) throws Exception { 66 this.name = backupName; 67 directory = new File (backupBaseDir, this.name); 68 entries = new ArrayList (); 69 if (!directory.exists()) 70 throw new Exception ("Backup " + name + " does not exist at " + directory.getPath()); 71 72 instanceDocument = BackupHelper.parseFile(getInstanceFile()); 73 74 createDate = dateFormat.parse(BackupHelper.getStringFromDom(instanceDocument, "/backupInstance/@createDate")); 75 serverVersion = BackupHelper.getStringFromDom(instanceDocument, "/backupInstance/@serverVersion"); 76 } 77 78 public void addEntry(BackupEntry entry) { 79 entries.add(entry); 80 } 81 82 public BackupEntry getEntry(int index ) { 83 return (BackupEntry) entries.get(index); 84 } 85 86 public int entryCount() { 87 return entries.size(); 88 } 89 90 public void backup() { 91 92 } 93 public void restore() { 94 95 } 96 public File getDirectory() { 97 return directory; 98 } 99 public void setDirectory(File directory) { 100 changed = true; 101 this.directory = directory; 102 } 103 104 public Date getCreateDate() { 105 return createDate; 106 } 107 108 public String getName() { 109 return name; 110 } 111 112 public void setName(String name) { 113 changed = true; 114 this.name = name; 115 } 116 117 public String getServerVersion() { 118 return serverVersion; 119 } 120 121 public Document getInstanceDocument() throws Exception { 122 if (changed || instanceDocument == null) 123 instanceDocument = backupToDocument(); 124 return instanceDocument; 125 } 126 127 public File getInstanceFile() { 128 if (instanceFile == null || instanceFile.getParentFile().equals(getDirectory())) 129 instanceFile = new File (getDirectory(), "instance.xml"); 130 return instanceFile; 131 } 132 133 public void invalidate() { 134 changed = true; 135 } 136 137 private Document backupToDocument() throws Exception { 138 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 139 DocumentBuilder db = dbf.newDocumentBuilder(); 140 Document document = db.newDocument(); 141 142 Element backupElement = document.createElement("backupInstance"); 143 document.appendChild(backupElement); 144 backupElement.setAttribute("name", this.getName()); 145 backupElement.setAttribute("createDate", dateFormat.format(this.getCreateDate())); 146 backupElement.setAttribute("serverVersion", serverVersion); 147 148 for (int i = 0; i < this.entryCount(); i++) { 149 AbstractBackupEntry buEntry = (AbstractBackupEntry) this.getEntry(i); 150 if (buEntry.backupFile.exists()) { 151 Element entry = document.createElement("entry"); 152 backupElement.appendChild(entry); 153 entry.setAttribute("checksum", buEntry.generateDigest()); 154 entry.setAttribute("filename", buEntry.backupFile.getName()); 155 } 156 } 157 158 return document; 159 } 160 } 161 | Popular Tags |