94d702bd97949e4c82b9af0977e0885b1311d964
[vamsas.git] / src / org / vamsas / test / simpleclient / VamsasArchive.java
1 package org.vamsas.test.simpleclient;
2
3 import java.io.File;
4 import java.io.ObjectOutputStream;
5
6 import org.apache.commons.logging.Log;
7 import org.apache.commons.logging.LogFactory;
8 import org.vamsas.client.simpleclient.SimpleDocument;
9 import org.vamsas.client.simpleclient.VamsasArchiveReader;
10 import org.vamsas.objects.core.ApplicationData;
11 import org.vamsas.objects.core.User;
12 import org.vamsas.objects.core.VAMSAS;
13 import org.vamsas.objects.core.VamsasDocument;
14 import org.vamsas.test.objects.Core;
15
16 public class VamsasArchive {
17   /**
18    * test the org.vamsas.simpleclient.vamsasArchive class
19    */
20   static Log log = LogFactory.getLog(VamsasArchive.class);
21   public static ApplicationData makeDemoAppdata(org.vamsas.client.simpleclient.VamsasArchive va, String apname, String userName, String userOrg) {
22     if (va==null)
23       return null;
24     VamsasArchiveReader vread=null;
25     try {
26       vread = va.getOriginalArchiveReader();
27     }
28     catch (Exception e) {
29       log.error("Failed to get original archive reader!",e);
30       return null;
31     }
32     ApplicationData appdata = new ApplicationData();
33     appdata.setName("org.vamsas.test.simpleclient.VamsasArchive");
34     appdata.setData(new String("this is some test data.").getBytes());
35     User apuser = new User();
36     apuser.setFullname(userName);
37     apuser.setOrganization(userOrg);
38     String appdata_ref = "vamsas:"+apname+"/"+apuser.getOrganization()+"/"+apuser.getFullname();
39     SimpleDocument sdoc = new SimpleDocument("test.simpleclient.VamsasArchive");
40     if (vread!=null) {
41       VamsasDocument orignalnew;
42       try {
43         orignalnew = sdoc.getVamsasDocument(vread);
44         log.info("*** Dump follows ***");
45         
46         ArchiveReports.reportDocument(orignalnew, vread, false, System.out);
47         log.info("*** Dump precedes ***");
48       } catch (Exception e) {
49         log.info("makeDemoAppdata: Problems accessing original document");
50       }
51       
52       log.info("Reading (and avoiding references to) original data");
53       if (vread.getAppdataStream(appdata_ref)!=null) {
54         // transfer over
55         try {
56           va.transferAppDataEntry(appdata_ref);
57         } catch (Exception e) {
58           log.warn("Exception when transferring appdata reference : "+appdata_ref, e);
59         }
60         int i=0;
61         while (vread.getAppdataStream(appdata_ref+"/"+Integer.toString(++i))!=null) {
62           try {
63             // copy over another duplicate.
64             va.transferAppDataEntry(appdata_ref+"/"+Integer.toString(i));
65           } catch (Exception e) {
66             log.warn("Exception when transferring appdata reference : "+appdata_ref, e);
67           }
68         }
69         // this one must be unique!
70         appdata_ref+="/"+Integer.toString(i);
71       }
72     }
73     
74     log.info("Adding new data stuff.");
75     log.info("Writing an apdata reference using AppDataStream interface.");
76     apuser.setDataReference(appdata_ref);
77     appdata.addUser(apuser);
78     appdata.setVersion("noggin");
79     appdata.setUrn("program:/the.nog/");
80     try {
81       ObjectOutputStream ost = new ObjectOutputStream(va.getAppDataStream(appdata_ref));
82       ost.writeObject(appdata);
83       ost.close();
84     } catch (Exception e) {
85       log.warn("Couldn't write appdata reference "+appdata_ref);
86     }
87     return appdata;
88   }
89   public static void main(String args[]) {
90     
91     try {
92       File av;
93       if (args.length>0)
94         av = new File(args[0]);
95       else
96         av = new File("test/vamsas.zip");
97       log.info("Opening archive "+av);
98       org.vamsas.client.simpleclient.VamsasArchive varchive = new org.vamsas.client.simpleclient.VamsasArchive(av, true);
99       
100       VAMSAS[] roots = (VAMSAS[]) varchive.getOriginalRoots();
101       
102       if (roots!=null) {
103         log.info("Report on Original roots in archive:");
104         ArchiveReports.rootReport(roots, true, System.out);
105       }
106       log.info("Getting current vamsas document.");
107       VamsasDocument doc = varchive.getVamsasDocument();
108       ArchiveReports.reportDocument(doc, varchive.getOriginalArchiveReader(), true, System.out); // not modified document so references will still be valid
109       // do some stuff
110       log.info("Retrieving backup");
111       File backup = varchive.backupFile();
112       if (backup==null)
113         log.info(av+" is a New Archive.");
114       else 
115         log.info(av+" has been backed up as "+backup);
116       File newf=new File(av.getAbsolutePath()+"_new.zip");
117       if (newf.exists()) {
118         int q=1;
119         do {
120           newf=new File(av.getAbsolutePath()+"_"+q+++"_new.zip");
121         }
122         while (newf.exists()); 
123       } 
124       log.info("Now writing new Archive "+newf.getAbsolutePath());
125       org.vamsas.client.simpleclient.VamsasArchive va = new org.vamsas.client.simpleclient.VamsasArchive(newf, true);
126       // open another and...
127       ApplicationData appdata = makeDemoAppdata(va, 
128           "org.vamsas.test.simpleclient.VamsasArchive", "arnold Bugger esq", "disOrganised");
129       log.info("Preparing to write new document.");
130       doc.addApplicationData(appdata);
131       doc.addVAMSAS(Core.getDemoVamsas());
132       // TODO: ensure all jar entries are transferred over (at least those that are referenced - make a flag for 'tidy zip manifest'.
133       va.putVamsasDocument(doc); // gets stream and puts it.
134       // TODO: verify that the vxml stream close method overridden ?
135       va.closeArchive();
136       
137       log.info("Dump of new vamsas document :");
138       log.info("Testing update: ");
139       VamsasArchiveReader vreader = new VamsasArchiveReader(newf);
140       SimpleDocument sdoc = new SimpleDocument("testing new vamsas write");
141       ArchiveReports.reportDocument(sdoc.getVamsasDocument(vreader), vreader, true, System.out);
142       
143       // backup.delete(); // tidy up
144       
145       log.info("Now Cancelling write to original archive "+av);
146       if (varchive.cancelArchive())
147         log.info("Successfully cancelled.");
148       else
149         log.info("Didn't cancel.");
150       
151       log.info("Now testing archive update.");
152       va = new org.vamsas.client.simpleclient.VamsasArchive(newf, true); // TODO - refactor Reader class to have deserializing helpers
153       doc = va.getVamsasDocument();
154       doc.addVAMSAS(Core.getDemoVamsas());
155       doc.addApplicationData(makeDemoAppdata(va, 
156           "org.vamsas.test.simpleclient.VamsasArchive", "another old Bugger esq", "rescinded"));
157       if (va.transferRemainingAppDatas())
158         log.info("Remain appdatas were transferred.");
159       else
160         log.warn("No appdatas were transferred. This is wrong.");
161       va.putVamsasDocument(doc);
162       va.closeArchive();
163       log.info("Testing update: ");
164       vreader = new VamsasArchiveReader(newf);
165       sdoc = new SimpleDocument("testing vamsas update");
166       ArchiveReports.reportDocument(sdoc.getVamsasDocument(vreader), vreader, true, System.out);
167     } catch (Exception e) {
168       e.printStackTrace(System.err);
169     }
170   }
171 }