As an administrator, I often need to put me back in time to check something on the domino infrastructure. My Domino Domain is very small so I can afford to make a backup of my names.nsf every week.
This class, creat a copy of each documents of the names.nsf, zip it and attach it to a document… enjoy !
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import lotus.domino.*;
import java.io.*;
import java.util.zip.*;
/* -----------------------------------------------------------------------------------------------------------------------
* Class : JavaAgent
* Date : 12.01.2011
* Author : Pierre Koerber
* Desc. : Permet de faire un backup du PAB et de le zipper.
*/
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// get the curr db
Database curDb ;
curDb = agentContext.getCurrentDatabase() ;
// (Your code goes here)
Database db ;
db = session.getDatabase(curDb.getServer(), "names.nsf") ;
DateTime timenow = session.createDateTime("Today");
timenow.setNow();
String sName = new String("") ;
String sZipName = new String("") ;
sName = db.getFilePath() ;
System.out.println("OS current temporary directory is " + System.getProperty("java.io.tmpdir"));
sName = System.getProperty("java.io.tmpdir") ;
sName = sName + "names_backup_" + timenow.getDateOnly().replace('.', '_') + ".nsf";
sZipName = System.getProperty("java.io.tmpdir") ;
sZipName = sZipName + "names_backup_" + timenow.getDateOnly().replace('.', '_') + ".zip";
// copy the database
System.out.println("Create a copy of the names.nsf =" + db.getServer() + "-" + db.getFilePath()) ;
this.deleteIfExist(sName) ;
Database newDb ;
newDb = db.createCopy("", sName) ;
// copy all the documents
DocumentCollection dc ;
Document d ;
dc = db.getAllDocuments() ;
d = dc.getFirstDocument() ;
while(d != null){
// No deletion stubs...
if (d.isDeleted() == false){
d.copyToDatabase(newDb) ;
}
d = dc.getNextDocument() ;
}
// Compress the stuff
System.out.println("Compressing file from " + sName + " to " + sZipName) ;
// delete the files if exist
this.deleteIfExist(sZipName) ;
// compress the database
this.doZipExt(sName,sZipName) ;
// create a document and attach the backup
System.out.println("Attach everything to the archive document") ;
Document doc ;
doc = curDb.createDocument() ;
doc.replaceItemValue("backupName", "Sauvegarde names.nsf of " + db.getServer() + " - " + timenow.getDateOnly()) ;
doc.replaceItemValue("Subject", doc.getItemValueString("backupName")) ;
doc.replaceItemValue("backupDate", timenow) ;
doc.replaceItemValue("agentName", agentContext.getCurrentAgent().getName()) ;
doc.replaceItemValue("Form", "backup") ;
lotus.domino.RichTextItem rt = doc.createRichTextItem("Body") ;
rt.embedObject(EmbeddedObject.EMBED_ATTACHMENT,null, sZipName, "archive") ;
// Save the document
doc.save(true, true);
// delete the database
this.deleteIfExist(sName) ;
this.deleteIfExist(sZipName) ;
System.out.println("Done");
} catch(Exception e) {
e.printStackTrace();
}
}
public void deleteIfExist(String sName){
File f = new File(sName) ;
if (f.exists()) {
System.out.println("File : " + sName + " deleted");
f.delete() ;
}
}
public void doZipExt(String sFileName, String sZipFileName) throws IOException{
System.out.println("Creating zip file :" + sZipFileName) ;
File sourceFile = new File(sFileName) ;
// Create our zip file
ZipOutputStream zipfile = new ZipOutputStream(new FileOutputStream(sZipFileName));
FileInputStream filetozip = new FileInputStream(sFileName);
zipfile.putNextEntry(new ZipEntry(sourceFile.getName()));
// Loop through the contents writing it to the zip file output stream.
int len;
byte[] buffer = new byte[1024];
while ((len = filetozip.read(buffer)) > 0) {
zipfile.write(buffer,0,len);
}
// Close the entry and the current file.
zipfile.closeEntry();
filetozip.close();
// When done, close the zip file.
zipfile.close();
}
}