VamsasArchive tested. Locked IO routines to be implemented in ArchiveFile
[vamsas.git] / src / org / vamsas / test / simpleclient / VamsasArchive.java
index 3f0da4c..354f9af 100644 (file)
@@ -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");
@@ -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,42 @@ 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();
-      
+      } */
+      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, wlock);
+        // 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.");
+        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);
@@ -149,7 +162,7 @@ public class VamsasArchive {
         log.info("Didn't cancel.");
       
       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, true);
       doc = va.getVamsasDocument();
       doc.addVAMSAS(Core.getDemoVamsas());
       doc.addApplicationData(makeDemoAppdata(va, 
@@ -161,9 +174,17 @@ public class VamsasArchive {
       va.putVamsasDocument(doc);
       va.closeArchive();
       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(newf);
+        SimpleDocument sdoc = new SimpleDocument("testing vamsas update");
+        ArchiveReports.reportDocument(sdoc.getVamsasDocument(vreader), vreader, true, System.out);
+        lock.release();
+        lock = null;
+      }
     } catch (Exception e) {
       e.printStackTrace(System.err);
     }