package org.vamsas.test.simpleclient; import java.io.File; import java.io.ObjectOutputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.vamsas.client.simpleclient.VamsasArchiveReader; 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) { File newf=new File(av.getAbsolutePath()+"_new.zip"); log.info("Now writing new Archive "+newf.getAbsolutePath()); org.vamsas.client.simpleclient.VamsasArchive va = new org.vamsas.client.simpleclient.VamsasArchive(newf, true); // 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(); VamsasArchiveReader vread = va.getOriginalArchiveReader(); if (vread!=null) { log.info("Reading (and avoiding references to) original data in "+newf); 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("Adding new data stuff."); log.info("Writing an apdata reference using AppDataStream interface."); apuser.setDataReference(appdata_ref); appdata.addUser(apuser); appdata.setVersion("noggin"); appdata.setUrn("program:/the.nog/"); 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()); // TODO: ensure all jar entries are transferred over (at least those that are referenced - make a flag for 'tidy zip manifest'. 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); log.info("Cancelling write (which was necessary to dump new vamsas document!)"); va.cancelArchive(); // backup.delete(); // tidy up } log.info("Now Cancelling write to original archive "+av); varchive.cancelArchive(); } catch (Exception e) { e.printStackTrace(System.err); } } }