91dc35efb89c6860d2a2ed54a0c7a865b55f62cf
[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.objects.core.ApplicationData;
14 import org.vamsas.objects.core.User;
15 import org.vamsas.objects.core.VAMSAS;
16 import org.vamsas.objects.core.VamsasDocument;
17 import org.vamsas.test.objects.Core;
18
19 public class VamsasArchive {
20   /**
21    * test the org.vamsas.simpleclient.vamsasArchive class
22    */
23   static Log log = LogFactory.getLog(VamsasArchive.class);
24   
25   public static void main(String args[]) {
26     
27     try {
28       File av;
29       if (args.length>0)
30         av = new File(args[0]);
31       else
32         av = new File("test/vamsas.zip");
33       log.info("Opening archive "+av);
34       org.vamsas.client.simpleclient.VamsasArchive varchive = new org.vamsas.client.simpleclient.VamsasArchive(av, true);
35       
36       VAMSAS[] roots = (VAMSAS[]) varchive.getOriginalRoots();
37       
38       if (roots!=null) {
39         log.info("Report on Original roots in archive:");
40         ArchiveReports.rootReport(roots, true);
41       }
42       log.info("Getting current vamsas document.");
43       VamsasDocument doc = varchive.getVamsasDocument();
44       ArchiveReports.reportDocument(doc, varchive.getOriginalArchiveReader(), true); // not modified document so references will still be valid
45       // do some stuff
46       log.info("Retrieving backup");
47       File backup = varchive.backupFile();
48       if (backup==null)
49         log.info(av+" is a New Archive.");
50       else 
51         log.info(av+" has been backed up as "+backup);
52       if (backup!=null) {
53         log.info("Backup "+backup+" is being written to.");
54         // open another and...
55         ApplicationData appdata = new ApplicationData();
56         appdata.setName("org.vamsas.test.simpleclient.VamsasArchive");
57         appdata.setData(new String("this is some test data.").getBytes());
58         User apuser = new User();
59         apuser.setFullname("arnold Bugger esq");
60         apuser.setOrganization("disOrganised");
61         String appdata_ref = "vamsas:org.vamsas.test.simpleclient.VamsasArchive/"+apuser.getOrganization()+"/"+apuser.getFullname();
62
63         
64         File newf=new File(av.getAbsolutePath()+"_new.zip");
65         org.vamsas.client.simpleclient.VamsasArchive va = new org.vamsas.client.simpleclient.VamsasArchive(newf, true);
66         log.info("Getting the document from the backup-original.");
67         VamsasDocument vadoc;
68         VamsasArchiveReader vread = va.getOriginalArchiveReader();
69         
70         vadoc = doc; // putting original data into new archive.
71         log.info("Got document. Adding stuff.");
72         if (vread!=null) {
73           if (vread.getAppdataStream(appdata_ref)!=null) {
74             int i=0;
75             while (vread.getAppdataStream(appdata_ref+"/"+Integer.toString(++i))!=null)
76               ;
77             appdata_ref+="/"+Integer.toString(i);
78           }
79         }
80         log.info("Writing an apdata reference using AppDataStream interface.");
81         apuser.setDataReference(appdata_ref);
82         appdata.addUser(apuser);
83         appdata.setVersion("noggin");
84         appdata.setUrn("program:/the.nog/");
85         // TODO: FIX schema - User.addUser is unsatisfiable!
86         ObjectOutputStream apdos = new ObjectOutputStream(va.getAppDataStream(appdata_ref));
87         apdos.writeObject(appdata_ref);
88         apdos.writeObject(apuser); // some random content
89         apdos.close(); // this should *not* close the archive!
90         log.info("Written Appdata Stream");
91         log.info("Preparing to write new document.");
92         doc.addApplicationData(appdata);
93         doc.addVAMSAS(Core.getDemoVamsas());
94         
95         va.putVamsasDocument(doc); // gets stream and puts it.
96         // TODO: verify that the vxml stream close method overridden ?
97         va.closeArchive();
98         
99         log.info("Dump of new vamsas document :");
100         va = new org.vamsas.client.simpleclient.VamsasArchive(newf, true); // TODO - refactor Reader class to have deserializing helpers
101         ArchiveReports.reportDocument(va.getVamsasDocument(), va.getOriginalArchiveReader(), true);
102         // backup.delete(); // tidy up
103       }
104       log.info("Now Cancelling write to original archive "+av);
105       varchive.cancelArchive();
106
107     } catch (Exception e) {
108       e.printStackTrace(System.err);
109     }
110   }
111 }