e820c526eafd67371ab101f823fe8cc6ae774583
[vamsas.git] / src / org / vamsas / test / simpleclient / VamsasArchive.java
1 package org.vamsas.test.simpleclient;
2
3 import java.io.BufferedInputStream;
4 import java.io.File;
5 import java.io.InputStream;
6 import java.io.InputStreamReader;
7 import java.io.ObjectOutputStream;
8 import java.io.PrintWriter;
9
10 import org.apache.commons.logging.Log;
11 import org.apache.commons.logging.LogFactory;
12 import org.vamsas.client.SimpleClient;
13 import org.vamsas.client.simpleclient.*;
14 import org.vamsas.objects.core.AppDataChoice;
15 import org.vamsas.objects.core.ApplicationData;
16 import org.vamsas.objects.core.User;
17 import org.vamsas.objects.core.VAMSAS;
18 import org.vamsas.objects.core.VamsasDocument;
19 import org.vamsas.test.objects.Core;
20
21 public class VamsasArchive {
22   /**
23    * test the org.vamsas.simpleclient.vamsasArchive class
24    */
25   static Log log = LogFactory.getLog("org.vamsas.test.simpleclient.vamsasArchive");
26   
27   public static void main(String args[]) {
28     
29     try {
30       File av;
31       if (args.length>0)
32         av = new File(args[0]);
33       else
34         av = new File("test/vamsas.zip");
35       log.info("Opening archive "+av);
36       org.vamsas.client.simpleclient.VamsasArchive varchive = new org.vamsas.client.simpleclient.VamsasArchive(av, true);
37       
38       VAMSAS[] roots = (VAMSAS[]) varchive.getOriginalRoots();
39       
40       if (roots!=null) {
41         log.info("Report on Original roots in archive:");
42         ArchiveReports.rootReport(roots, true);
43       }
44       log.info("Getting current vamsas document.");
45       VamsasDocument doc = varchive.getVamsasDocument();
46       ArchiveReports.reportDocument(doc, varchive.getOriginalArchiveReader(), true); // not modified document so references will still be valid
47       // do some stuff
48       log.info("Retrieving backup");
49       File backup = varchive.backupFile();
50       if (backup==null)
51         log.info(av+" is a New Archive.");
52       else 
53         log.info(av+" has been backed up as "+backup);
54       if (backup!=null) {
55         log.info("Backup "+backup+" is being written to.");
56         // open another and...
57         ApplicationData appdata = new ApplicationData();
58         appdata.setName("org.vamsas.test.simpleclient.VamsasArchive");
59         appdata.setAppDataChoice(new AppDataChoice());
60         appdata.getAppDataChoice().setData(new String("this is some test data.").getBytes());
61         User apuser = new User();
62         apuser.setFullname("arnold Bugger esq");
63         apuser.setOrganization("disOrganised");
64         String appdata_ref = "vamsas:org.vamsas.test.simpleclient.VamsasArchive/"+apuser.getOrganization()+"/"+apuser.getFullname();
65         org.vamsas.client.simpleclient.VamsasArchive va = new org.vamsas.client.simpleclient.VamsasArchive(backup, true);
66         VamsasArchiveReader vread = va.getOriginalArchiveReader();
67         if (vread.getAppdataStream(appdata_ref)!=null) {
68           int i=0;
69           while (vread.getAppdataStream(appdata_ref+"/"+Integer.toString(++i))!=null)
70               ;
71           appdata_ref+="/"+Integer.toString(i);
72         }
73         log.info("Writing an apdata reference using AppDataStream interface.");
74         apuser.setAppDataChoice(new AppDataChoice());
75         apuser.getAppDataChoice().setDataReference(appdata_ref);
76         ObjectOutputStream apdos = new ObjectOutputStream(va.getAppDataStream(appdata_ref));
77         apdos.writeObject(appdata_ref);
78         apdos.writeObject(apuser); // some random content
79         apdos.close(); // this should *not* close the archive!
80         log.info("Preparing to write new document.");
81         doc.addApplicationData(appdata);
82         doc.addVAMSAS(Core.getDemoVamsas());
83         PrintWriter vxml = varchive.getDocumentOutputStream();
84         doc.marshal(vxml);
85         // TODO: verify that the vxml stream close method overridden ?
86         va.closeArchive();
87         log.info("Dump of new vamsas document :");
88         va = new org.vamsas.client.simpleclient.VamsasArchive(backup, true); // TODO - refactor Reader class to have deserializing helpers
89         ArchiveReports.reportDocument(va.getVamsasDocument(), va.getOriginalArchiveReader(), true);
90         backup.delete(); // tidy up
91       }
92       log.info("Cancelling write to original archive "+av);
93       varchive.cancelArchive();
94
95     } catch (Exception e) {
96       e.printStackTrace(System.err);
97     }
98   }
99 }