1 package org.vamsas.test.simpleclient;
4 import java.io.ObjectOutputStream;
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;
16 public class VamsasArchive {
18 * test the org.vamsas.simpleclient.vamsasArchive class
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) {
24 VamsasArchiveReader vread=null;
26 vread = va.getOriginalArchiveReader();
29 log.error("Failed to get original archive reader!",e);
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");
41 VamsasDocument orignalnew;
43 orignalnew = sdoc.getVamsasDocument(vread);
44 log.info("*** Dump follows ***");
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");
52 log.info("Reading (and avoiding references to) original data");
53 if (vread.getAppdataStream(appdata_ref)!=null) {
56 va.transferAppDataEntry(appdata_ref);
57 } catch (Exception e) {
58 log.warn("Exception when transferring appdata reference : "+appdata_ref, e);
61 while (vread.getAppdataStream(appdata_ref+"/"+Integer.toString(++i))!=null) {
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);
69 // this one must be unique!
70 appdata_ref+="/"+Integer.toString(i);
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/");
81 ObjectOutputStream ost = new ObjectOutputStream(va.getAppDataStream(appdata_ref));
82 ost.writeObject(appdata);
84 } catch (Exception e) {
85 log.warn("Couldn't write appdata reference "+appdata_ref);
89 public static void main(String args[]) {
94 av = new File(args[0]);
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);
100 VAMSAS[] roots = (VAMSAS[]) varchive.getOriginalRoots();
103 log.info("Report on Original roots in archive:");
104 ArchiveReports.rootReport(roots, true, System.out);
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
110 log.info("Retrieving backup");
111 File backup = varchive.backupFile();
113 log.info(av+" is a New Archive.");
115 log.info(av+" has been backed up as "+backup);
116 File newf=new File(av.getAbsolutePath()+"_new.zip");
120 newf=new File(av.getAbsolutePath()+"_"+q+++"_new.zip");
122 while (newf.exists());
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 ?
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);
143 // backup.delete(); // tidy up
145 log.info("Now Cancelling write to original archive "+av);
146 if (varchive.cancelArchive())
147 log.info("Successfully cancelled.");
149 log.info("Didn't cancel.");
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.");
160 log.warn("No appdatas were transferred. This is wrong.");
161 va.putVamsasDocument(doc);
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);