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.AppDataChoice;
+import org.vamsas.client.simpleclient.Lock;
+import org.vamsas.client.simpleclient.SessionFile;
+import org.vamsas.client.simpleclient.SimpleDocument;
+import org.vamsas.client.simpleclient.VamsasArchiveReader;
+import org.vamsas.client.simpleclient.VamsasFile;
import org.vamsas.objects.core.ApplicationData;
import org.vamsas.objects.core.User;
import org.vamsas.objects.core.VAMSAS;
/**
* test the org.vamsas.simpleclient.vamsasArchive class
*/
- static Log log = LogFactory.getLog(vamsasArchive.class);
-
+ static Log log = LogFactory.getLog(VamsasArchive.class);
+ public static ApplicationData makeDemoAppdata(org.vamsas.client.simpleclient.VamsasArchive va, String apname, String userName, String userOrg) {
+ if (va==null)
+ return null;
+ VamsasArchiveReader vread=null;
+ try {
+ vread = va.getOriginalArchiveReader();
+ }
+ catch (Exception e) {
+ log.error("Failed to get original archive reader!",e);
+ return null;
+ }
+ 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(userName);
+ apuser.setOrganization(userOrg);
+ String appdata_ref = "vamsas:"+apname+"/"+apuser.getOrganization()+"/"+apuser.getFullname();
+ SimpleDocument sdoc = new SimpleDocument("test.simpleclient.VamsasArchive");
+ if (vread!=null) {
+ VamsasDocument orignalnew;
+ try {
+ orignalnew = sdoc.getVamsasDocument(vread);
+ log.info("*** Dump follows ***");
+
+ ArchiveReports.reportDocument(orignalnew, vread, false, System.out);
+ log.info("*** Dump precedes ***");
+ } catch (Exception e) {
+ log.info("makeDemoAppdata: Problems accessing original document");
+ }
+
+ log.info("Reading (and avoiding references to) original data");
+ if (vread.getAppdataStream(appdata_ref)!=null) {
+ // transfer over
+ try {
+ va.transferAppDataEntry(appdata_ref);
+ } catch (Exception e) {
+ log.warn("Exception when transferring appdata reference : "+appdata_ref, e);
+ }
+ int i=0;
+ while (vread.getAppdataStream(appdata_ref+"/"+Integer.toString(++i))!=null) {
+ try {
+ // copy over another duplicate.
+ va.transferAppDataEntry(appdata_ref+"/"+Integer.toString(i));
+ } catch (Exception e) {
+ log.warn("Exception when transferring appdata reference : "+appdata_ref, e);
+ }
+ }
+ // this one must be unique!
+ 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/");
+ try {
+ ObjectOutputStream ost = new ObjectOutputStream(va.getAppDataStream(appdata_ref));
+ ost.writeObject(appdata);
+ ost.close();
+ } catch (Exception e) {
+ log.warn("Couldn't write appdata reference "+appdata_ref);
+ }
+ return appdata;
+ }
public static void main(String args[]) {
try {
if (roots!=null) {
log.info("Report on Original roots in archive:");
- ArchiveReports.rootReport(roots, true);
+ ArchiveReports.rootReport(roots, true, System.out);
}
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
+ ArchiveReports.reportDocument(doc, varchive.getOriginalArchiveReader(), true, System.out); // not modified document so references will still be valid
// do some stuff
log.info("Retrieving backup");
File backup = varchive.backupFile();
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.setAppDataChoice(new AppDataChoice());
- appdata.getAppDataChoice().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();
- org.vamsas.client.simpleclient.VamsasArchive va = new org.vamsas.client.simpleclient.VamsasArchive(backup, true);
- VamsasArchiveReader vread = va.getOriginalArchiveReader();
- if (vread.getAppdataStream(appdata_ref)!=null) {
- int i=0;
- while (vread.getAppdataStream(appdata_ref+"/"+Integer.toString(++i))!=null)
- ;
- appdata_ref+="/"+Integer.toString(i);
+ File newf=new File(av.getAbsolutePath()+"_new.zip");
+ VamsasFile sfile = new VamsasFile(newf);
+ /* if (newf.exists()) {
+ int q=1;
+ do {
+ newf=new File(av.getAbsolutePath()+"_"+q+++"_new.zip");
}
- log.info("Writing an apdata reference using AppDataStream interface.");
- apuser.setAppDataChoice(new AppDataChoice());
- apuser.getAppDataChoice().setDataReference(appdata_ref);
- 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!
+ while (newf.exists());
+ } */
+ log.info("Now writing new Archive into "+newf.getAbsolutePath());
+ org.vamsas.client.simpleclient.VamsasArchive va=null;
+ { // hold lock over deletion and write of new archive.
+ //Lock wlock = sfile.getLock();
+ //newf.delete(); // clear out old file.
+ va = new org.vamsas.client.simpleclient.VamsasArchive(newf, true, true); // , sfile);
+ // open another and...
+ ApplicationData appdata = makeDemoAppdata(va,
+ "org.vamsas.test.simpleclient.VamsasArchive", "arnold Bugger esq", "disOrganised");
log.info("Preparing to write new document.");
doc.addApplicationData(appdata);
doc.addVAMSAS(Core.getDemoVamsas());
- PrintWriter vxml = varchive.getDocumentOutputStream();
- doc.marshal(vxml);
- // TODO: verify that the vxml stream close method overridden ?
+ va.putVamsasDocument(doc); // gets stream and puts it.
va.closeArchive();
- log.info("Dump of new vamsas document :");
- va = new org.vamsas.client.simpleclient.VamsasArchive(backup, true); // TODO - refactor Reader class to have deserializing helpers
- ArchiveReports.reportDocument(va.getVamsasDocument(), va.getOriginalArchiveReader(), true);
- backup.delete(); // tidy up
+ sfile.unLock();
+ }
+ log.info("Dump of new vamsas document :");
+ log.info("Testing update: ");
+ {
+ Lock lock=sfile.getLock();
+ if (lock==null)
+ while ((lock=sfile.getLock())==null)
+ log.info("Waiting for lock.");
+ VamsasArchiveReader vreader = new VamsasArchiveReader(newf);
+ SimpleDocument sdoc = new SimpleDocument("testing new vamsas write");
+ ArchiveReports.reportDocument(sdoc.getVamsasDocument(vreader), vreader, true, System.out);
+ sfile.unLock();
+ }
+ // backup.delete(); // tidy up
+
+ log.info("Now Cancelling write to original archive "+av);
+ if (varchive.cancelArchive())
+ log.info("Successfully cancelled.");
+ else
+ log.info("Didn't cancel.");
+ long t=System.currentTimeMillis()+200; while (t>System.currentTimeMillis());
+ log.info("Now testing archive update.");
+ va = new org.vamsas.client.simpleclient.VamsasArchive(newf, false, true, sfile);
+ doc = va.getVamsasDocument();
+ doc.addVAMSAS(Core.getDemoVamsas());
+ doc.addApplicationData(makeDemoAppdata(va,
+ "org.vamsas.test.simpleclient.VamsasArchive", "another old Bugger esq", "rescinded"));
+ if (va.transferRemainingAppDatas())
+ log.info("Remain appdatas were transferred.");
+ else
+ log.warn("No appdatas were transferred. This is wrong.");
+ va.putVamsasDocument(doc);
+ va.closeArchive();
+ sfile.unLock();
+ System.exit(0);
+ log.info("Testing update: ");
+ {
+ Lock lock=sfile.getLock();
+ if (lock==null)
+ while ((lock=sfile.getLock())==null)
+ log.info("Waiting for lock.");
+ VamsasArchiveReader vreader = new VamsasArchiveReader(lock);
+ SimpleDocument sdoc = new SimpleDocument("testing vamsas update");
+ VamsasDocument finaldoc = sdoc.getVamsasDocument(vreader);
+ if (finaldoc!=null)
+ ArchiveReports.reportDocument(finaldoc, vreader, true, System.out);
+ else
+ log.error("Null Document Read from "+newf);
}
- log.info("Cancelling write to original archive "+av);
- varchive.cancelArchive();
-
} catch (Exception e) {
e.printStackTrace(System.err);
}