X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Forg%2Fvamsas%2Ftest%2Fsimpleclient%2FVamsasArchive.java;h=c98b4b7863ead63e220243aeae3e78aa0c7c3fcc;hb=3b92275c26c14a678519f1d7d2ffaa477eb76cdb;hp=5799fbe6e08e28b650fdc89777d473f7e057f36e;hpb=1d13d8eee5fe2cbee46086c115dbe8bd1f3882b8;p=vamsas.git diff --git a/src/org/vamsas/test/simpleclient/VamsasArchive.java b/src/org/vamsas/test/simpleclient/VamsasArchive.java index 5799fbe..c98b4b7 100644 --- a/src/org/vamsas/test/simpleclient/VamsasArchive.java +++ b/src/org/vamsas/test/simpleclient/VamsasArchive.java @@ -1,28 +1,95 @@ 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.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; +import uk.ac.vamsas.client.simpleclient.Lock; +import uk.ac.vamsas.client.simpleclient.SessionFile; +import uk.ac.vamsas.client.simpleclient.SimpleDocument; +import uk.ac.vamsas.client.simpleclient.VamsasArchiveReader; +import uk.ac.vamsas.client.simpleclient.VamsasFile; +import uk.ac.vamsas.objects.core.ApplicationData; +import uk.ac.vamsas.objects.core.User; +import uk.ac.vamsas.objects.core.VAMSAS; +import uk.ac.vamsas.objects.core.VamsasDocument; + public class VamsasArchive { /** * 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(uk.ac.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"); + //TODO: write instance appdata 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 { @@ -32,17 +99,17 @@ public class VamsasArchive { 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); + uk.ac.vamsas.client.simpleclient.VamsasArchive varchive = new uk.ac.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); + 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(); @@ -50,47 +117,88 @@ public class VamsasArchive { 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()); + } */ + if (newf.exists()) { + log.info("Removing existing "+newf); + newf.delete(); + } + + log.info("Now writing new Archive into "+newf.getAbsolutePath()); + uk.ac.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 uk.ac.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."); + 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); + 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 uk.ac.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(); + 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); + 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); } - log.info("Cancelling write to original archive "+av); - varchive.cancelArchive(); - } catch (Exception e) { e.printStackTrace(System.err); }