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.Lock;
9 import org.vamsas.client.simpleclient.SessionFile;
10 import org.vamsas.client.simpleclient.SimpleDocument;
11 import org.vamsas.client.simpleclient.VamsasArchiveReader;
12 import org.vamsas.client.simpleclient.VamsasFile;
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;
19 public class VamsasArchive {
21 * test the org.vamsas.simpleclient.vamsasArchive class
23 static Log log = LogFactory.getLog(VamsasArchive.class);
24 public static ApplicationData makeDemoAppdata(org.vamsas.client.simpleclient.VamsasArchive va, String apname, String userName, String userOrg) {
27 VamsasArchiveReader vread=null;
29 vread = va.getOriginalArchiveReader();
32 log.error("Failed to get original archive reader!",e);
35 ApplicationData appdata = new ApplicationData();
36 appdata.setName("org.vamsas.test.simpleclient.VamsasArchive");
37 appdata.setData(new String("this is some test data.").getBytes());
38 User apuser = new User();
39 apuser.setFullname(userName);
40 apuser.setOrganization(userOrg);
41 String appdata_ref = "vamsas:"+apname+"/"+apuser.getOrganization()+"/"+apuser.getFullname();
42 SimpleDocument sdoc = new SimpleDocument("test.simpleclient.VamsasArchive");
44 VamsasDocument orignalnew;
46 orignalnew = sdoc.getVamsasDocument(vread);
47 log.info("*** Dump follows ***");
49 ArchiveReports.reportDocument(orignalnew, vread, false, System.out);
50 log.info("*** Dump precedes ***");
51 } catch (Exception e) {
52 log.info("makeDemoAppdata: Problems accessing original document");
55 log.info("Reading (and avoiding references to) original data");
56 if (vread.getAppdataStream(appdata_ref)!=null) {
59 va.transferAppDataEntry(appdata_ref);
60 } catch (Exception e) {
61 log.warn("Exception when transferring appdata reference : "+appdata_ref, e);
64 while (vread.getAppdataStream(appdata_ref+"/"+Integer.toString(++i))!=null) {
66 // copy over another duplicate.
67 va.transferAppDataEntry(appdata_ref+"/"+Integer.toString(i));
68 } catch (Exception e) {
69 log.warn("Exception when transferring appdata reference : "+appdata_ref, e);
72 // this one must be unique!
73 appdata_ref+="/"+Integer.toString(i);
77 log.info("Adding new data stuff.");
78 log.info("Writing an apdata reference using AppDataStream interface.");
79 apuser.setDataReference(appdata_ref);
80 appdata.addUser(apuser);
81 appdata.setVersion("noggin");
82 //TODO: write instance appdata appdata.setUrn("program:/the.nog/");
84 ObjectOutputStream ost = new ObjectOutputStream(va.getAppDataStream(appdata_ref));
85 ost.writeObject(appdata);
87 } catch (Exception e) {
88 log.warn("Couldn't write appdata reference "+appdata_ref);
92 public static void main(String args[]) {
97 av = new File(args[0]);
99 av = new File("test/vamsas.zip");
100 log.info("Opening archive "+av);
101 org.vamsas.client.simpleclient.VamsasArchive varchive = new org.vamsas.client.simpleclient.VamsasArchive(av, true);
103 VAMSAS[] roots = (VAMSAS[]) varchive.getOriginalRoots();
106 log.info("Report on Original roots in archive:");
107 ArchiveReports.rootReport(roots, true, System.out);
109 log.info("Getting current vamsas document.");
110 VamsasDocument doc = varchive.getVamsasDocument();
111 ArchiveReports.reportDocument(doc, varchive.getOriginalArchiveReader(), true, System.out); // not modified document so references will still be valid
113 log.info("Retrieving backup");
114 File backup = varchive.backupFile();
116 log.info(av+" is a New Archive.");
118 log.info(av+" has been backed up as "+backup);
119 File newf=new File(av.getAbsolutePath()+"_new.zip");
120 VamsasFile sfile = new VamsasFile(newf);
121 /* if (newf.exists()) {
124 newf=new File(av.getAbsolutePath()+"_"+q+++"_new.zip");
126 while (newf.exists());
129 log.info("Removing existing "+newf);
133 log.info("Now writing new Archive into "+newf.getAbsolutePath());
134 org.vamsas.client.simpleclient.VamsasArchive va=null;
135 { // hold lock over deletion and write of new archive.
136 //Lock wlock = sfile.getLock();
137 //newf.delete(); // clear out old file.
139 va = new org.vamsas.client.simpleclient.VamsasArchive(newf, true, true, sfile);
140 // open another and...
141 ApplicationData appdata = makeDemoAppdata(va,
142 "org.vamsas.test.simpleclient.VamsasArchive", "arnold Bugger esq", "disOrganised");
143 log.info("Preparing to write new document.");
144 doc.addApplicationData(appdata);
145 doc.addVAMSAS(Core.getDemoVamsas());
146 va.putVamsasDocument(doc); // gets stream and puts it.
150 log.info("Dump of new vamsas document :");
151 log.info("Testing update: ");
153 Lock lock=sfile.getLock();
155 while ((lock=sfile.getLock())==null) {
156 log.info("Waiting for lock.");
159 VamsasArchiveReader vreader = new VamsasArchiveReader(sfile.getVamsasFile());// lock); // cannot do new JarFile on a locked file. // newf);
160 SimpleDocument sdoc = new SimpleDocument("testing new vamsas write");
161 ArchiveReports.reportDocument(sdoc.getVamsasDocument(vreader), vreader, true, System.out);
164 // backup.delete(); // tidy up
166 log.info("Now Cancelling write to original archive "+av);
167 if (varchive.cancelArchive())
168 log.info("Successfully cancelled.");
170 log.info("Didn't cancel.");
171 long t=System.currentTimeMillis()+200; while (t>System.currentTimeMillis());
172 log.info("Now testing archive update.");
173 va = new org.vamsas.client.simpleclient.VamsasArchive(newf, false, true, sfile);
174 doc = va.getVamsasDocument();
175 doc.addVAMSAS(Core.getDemoVamsas());
176 doc.addApplicationData(makeDemoAppdata(va,
177 "org.vamsas.test.simpleclient.VamsasArchive", "another old Bugger esq", "rescinded"));
178 if (va.transferRemainingAppDatas())
179 log.info("Remain appdatas were transferred.");
181 log.warn("No appdatas were transferred. This is wrong.");
182 va.putVamsasDocument(doc);
185 log.info("Testing update: ");
187 Lock lock=sfile.getLock();
189 while ((lock=sfile.getLock())==null)
190 log.info("Waiting for lock.");
191 // VamsasArchiveReader vreader = new VamsasArchiveReader(lock);
192 VamsasArchiveReader vreader = new VamsasArchiveReader(newf);
194 SimpleDocument sdoc = new SimpleDocument("testing vamsas update");
195 VamsasDocument finaldoc = sdoc.getVamsasDocument(vreader);
197 ArchiveReports.reportDocument(finaldoc, vreader, true, System.out);
199 log.error("Null Document Read from "+newf);
201 } catch (Exception e) {
202 e.printStackTrace(System.err);