package org.vamsas.test.simpleclient; import java.io.BufferedInputStream; import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; import java.io.ObjectOutputStream; import java.io.PrintWriter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.vamsas.client.simpleclient.*; import org.vamsas.objects.core.ApplicationData; import org.vamsas.objects.core.User; import org.vamsas.objects.core.VAMSAS; import org.vamsas.objects.core.VamsasDocument; import org.vamsas.test.objects.Core; public class VamsasArchive { /** * test the org.vamsas.simpleclient.vamsasArchive class */ static Log log = LogFactory.getLog(VamsasArchive.class); public static void main(String args[]) { try { File av; if (args.length>0) av = new File(args[0]); else av = new File("test/vamsas.zip"); log.info("Opening archive "+av); org.vamsas.client.simpleclient.VamsasArchive varchive = new org.vamsas.client.simpleclient.VamsasArchive(av, true); VAMSAS[] roots = (VAMSAS[]) varchive.getOriginalRoots(); if (roots!=null) { log.info("Report on Original roots in archive:"); ArchiveReports.rootReport(roots, true); } log.info("Getting current vamsas document."); VamsasDocument doc = varchive.getVamsasDocument(); ArchiveReports.reportDocument(doc, varchive.getOriginalArchiveReader(), true); // not modified document so references will still be valid // do some stuff log.info("Retrieving backup"); File backup = varchive.backupFile(); if (backup==null) log.info(av+" is a New Archive."); else log.info(av+" has been backed up as "+backup); if (backup!=null) { log.info("Backup "+backup+" is being written to."); // open another and... ApplicationData appdata = new ApplicationData(); appdata.setName("org.vamsas.test.simpleclient.VamsasArchive"); appdata.setData(new String("this is some test data.").getBytes()); User apuser = new User(); apuser.setFullname("arnold Bugger esq"); apuser.setOrganization("disOrganised"); String appdata_ref = "vamsas:org.vamsas.test.simpleclient.VamsasArchive/"+apuser.getOrganization()+"/"+apuser.getFullname(); File newf=new File(av.getAbsolutePath()+"_new.zip"); org.vamsas.client.simpleclient.VamsasArchive va = new org.vamsas.client.simpleclient.VamsasArchive(newf, true); log.info("Getting the document from the backup-original."); VamsasDocument vadoc; VamsasArchiveReader vread = va.getOriginalArchiveReader(); vadoc = doc; // putting original data into new archive. log.info("Got document. Adding stuff."); if (vread!=null) { if (vread.getAppdataStream(appdata_ref)!=null) { int i=0; while (vread.getAppdataStream(appdata_ref+"/"+Integer.toString(++i))!=null) ; appdata_ref+="/"+Integer.toString(i); } } log.info("Writing an apdata reference using AppDataStream interface."); apuser.setDataReference(appdata_ref); appdata.addUser(apuser); appdata.setVersion("noggin"); appdata.setUrn("program:/the.nog/"); // TODO: FIX schema - User.addUser is unsatisfiable! ObjectOutputStream apdos = new ObjectOutputStream(va.getAppDataStream(appdata_ref)); apdos.writeObject(appdata_ref); apdos.writeObject(apuser); // some random content apdos.close(); // this should *not* close the archive! log.info("Written Appdata Stream"); log.info("Preparing to write new document."); doc.addApplicationData(appdata); doc.addVAMSAS(Core.getDemoVamsas()); va.putVamsasDocument(doc); // gets stream and puts it. // TODO: verify that the vxml stream close method overridden ? va.closeArchive(); log.info("Dump of new vamsas document :"); va = new org.vamsas.client.simpleclient.VamsasArchive(newf, true); // TODO - refactor Reader class to have deserializing helpers ArchiveReports.reportDocument(va.getVamsasDocument(), va.getOriginalArchiveReader(), true); // backup.delete(); // tidy up } log.info("Now Cancelling write to original archive "+av); varchive.cancelArchive(); } catch (Exception e) { e.printStackTrace(System.err); } } }