X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Forg%2Fvamsas%2Ftest%2Fsimpleclient%2FVamsasArchive.java;h=09ddf347801959d979ccb2a675359331c44722c1;hb=7700d838b129db99edacb208b3153546795a33c7;hp=3f0da4c4196a0bd168482c4bea24579168e0b075;hpb=9778c09c639e26835897ca55d89c9ba65382eec3;p=vamsas.git diff --git a/src/org/vamsas/test/simpleclient/VamsasArchive.java b/src/org/vamsas/test/simpleclient/VamsasArchive.java index 3f0da4c..09ddf34 100644 --- a/src/org/vamsas/test/simpleclient/VamsasArchive.java +++ b/src/org/vamsas/test/simpleclient/VamsasArchive.java @@ -5,8 +5,11 @@ import java.io.ObjectOutputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +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; @@ -43,7 +46,7 @@ public class VamsasArchive { orignalnew = sdoc.getVamsasDocument(vread); log.info("*** Dump follows ***"); - ArchiveReports.reportDocument(orignalnew, vread, false); + ArchiveReports.reportDocument(orignalnew, vread, false, System.out); log.info("*** Dump precedes ***"); } catch (Exception e) { log.info("makeDemoAppdata: Problems accessing original document"); @@ -76,7 +79,7 @@ public class VamsasArchive { apuser.setDataReference(appdata_ref); appdata.addUser(apuser); appdata.setVersion("noggin"); - appdata.setUrn("program:/the.nog/"); + //TODO: write instance appdata appdata.setUrn("program:/the.nog/"); try { ObjectOutputStream ost = new ObjectOutputStream(va.getAppDataStream(appdata_ref)); ost.writeObject(appdata); @@ -101,11 +104,11 @@ public class VamsasArchive { 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(); @@ -114,32 +117,50 @@ public class VamsasArchive { else log.info(av+" has been backed up as "+backup); File newf=new File(av.getAbsolutePath()+"_new.zip"); - if (newf.exists()) { + VamsasFile sfile = new VamsasFile(newf); + /* if (newf.exists()) { int q=1; do { newf=new File(av.getAbsolutePath()+"_"+q+++"_new.zip"); } while (newf.exists()); - } - 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 = 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()); - // 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(); - + } */ + if (newf.exists()) { + log.info("Removing existing "+newf); + newf.delete(); + } + + 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. + sfile.getLock(); + 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()); + va.putVamsasDocument(doc); // gets stream and puts it. + va.closeArchive(); + sfile.unLock(); + } log.info("Dump of new vamsas document :"); log.info("Testing update: "); - VamsasArchiveReader vreader = new VamsasArchiveReader(newf); - SimpleDocument sdoc = new SimpleDocument("testing new vamsas write"); - ArchiveReports.reportDocument(sdoc.getVamsasDocument(vreader), vreader, true); - + { + Lock lock=sfile.getLock(); + if (lock==null) + while ((lock=sfile.getLock())==null) { + log.info("Waiting for lock."); + Thread.sleep(100); + } + VamsasArchiveReader vreader = new VamsasArchiveReader(sfile.getVamsasFile());// lock); // cannot do new JarFile on a locked file. // 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); @@ -147,9 +168,9 @@ public class VamsasArchive { 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, true); // TODO - refactor Reader class to have deserializing helpers + va = new org.vamsas.client.simpleclient.VamsasArchive(newf, false, true, sfile); doc = va.getVamsasDocument(); doc.addVAMSAS(Core.getDemoVamsas()); doc.addApplicationData(makeDemoAppdata(va, @@ -160,10 +181,23 @@ public class VamsasArchive { log.warn("No appdatas were transferred. This is wrong."); va.putVamsasDocument(doc); va.closeArchive(); + sfile.unLock(); log.info("Testing update: "); - vreader = new VamsasArchiveReader(newf); - sdoc = new SimpleDocument("testing vamsas update"); - ArchiveReports.reportDocument(sdoc.getVamsasDocument(vreader), vreader, true); + { + Lock lock=sfile.getLock(); + if (lock==null) + while ((lock=sfile.getLock())==null) + log.info("Waiting for lock."); + // VamsasArchiveReader vreader = new VamsasArchiveReader(lock); + VamsasArchiveReader vreader = new VamsasArchiveReader(newf); + + 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); + } } catch (Exception e) { e.printStackTrace(System.err); }