1 package uk.ac.vamsas.test.simpleclient;
4 import java.io.ObjectOutputStream;
6 import org.apache.commons.logging.Log;
7 import org.apache.commons.logging.LogFactory;
9 import uk.ac.vamsas.client.simpleclient.Lock;
10 import uk.ac.vamsas.client.simpleclient.SessionFile;
11 import uk.ac.vamsas.client.simpleclient.SimpleDocument;
12 import uk.ac.vamsas.client.simpleclient.VamsasArchiveReader;
13 import uk.ac.vamsas.client.simpleclient.VamsasFile;
14 import uk.ac.vamsas.objects.core.ApplicationData;
15 import uk.ac.vamsas.objects.core.User;
16 import uk.ac.vamsas.objects.core.VAMSAS;
17 import uk.ac.vamsas.objects.core.VamsasDocument;
18 import uk.ac.vamsas.test.objects.Core;
20 public class VamsasArchive {
22 * test the org.vamsas.simpleclient.vamsasArchive class
24 static Log log = LogFactory.getLog(VamsasArchive.class);
25 public static ApplicationData makeDemoAppdata(uk.ac.vamsas.client.simpleclient.VamsasArchive va, String apname, String userName, String userOrg) {
28 VamsasArchiveReader vread=null;
30 vread = va.getOriginalArchiveReader();
33 log.error("Failed to get original archive reader!",e);
36 ApplicationData appdata = new ApplicationData();
37 appdata.setName("uk.ac.vamsas.test.simpleclient.VamsasArchive");
38 appdata.setData(new String("this is some test data.").getBytes());
39 User apuser = new User();
40 apuser.setFullname(userName);
41 apuser.setOrganization(userOrg);
42 String appdata_ref = "vamsas:"+apname+"/"+apuser.getOrganization()+"/"+apuser.getFullname();
43 SimpleDocument sdoc = new SimpleDocument("test.simpleclient.VamsasArchive");
45 VamsasDocument orignalnew;
47 orignalnew = sdoc.getVamsasDocument(vread);
48 log.info("*** Dump follows ***");
50 ArchiveReports.reportDocument(orignalnew, vread, false, System.out);
51 log.info("*** Dump precedes ***");
52 } catch (Exception e) {
53 log.info("makeDemoAppdata: Problems accessing original document");
56 log.info("Reading (and avoiding references to) original data");
57 if (vread.getAppdataStream(appdata_ref)!=null) {
60 va.transferAppDataEntry(appdata_ref);
61 } catch (Exception e) {
62 log.warn("Exception when transferring appdata reference : "+appdata_ref, e);
65 while (vread.getAppdataStream(appdata_ref+"/"+Integer.toString(++i))!=null) {
67 // copy over another duplicate.
68 va.transferAppDataEntry(appdata_ref+"/"+Integer.toString(i));
69 } catch (Exception e) {
70 log.warn("Exception when transferring appdata reference : "+appdata_ref, e);
73 // this one must be unique!
74 appdata_ref+="/"+Integer.toString(i);
78 log.info("Adding new data stuff.");
79 log.info("Writing an apdata reference using AppDataStream interface.");
80 apuser.setDataReference(appdata_ref);
81 appdata.addUser(apuser);
82 appdata.setVersion("noggin");
83 //TODO: write instance appdata appdata.setUrn("program:/the.nog/");
85 ObjectOutputStream ost = new ObjectOutputStream(va.getAppDataStream(appdata_ref));
86 ost.writeObject(appdata);
88 } catch (Exception e) {
89 log.warn("Couldn't write appdata reference "+appdata_ref);
93 public static void main(String args[]) {
98 av = new File(args[0]);
100 av = new File("test/vamsas.zip");
101 log.info("Opening archive "+av);
102 uk.ac.vamsas.client.simpleclient.VamsasArchive varchive = new uk.ac.vamsas.client.simpleclient.VamsasArchive(av, true);
104 VAMSAS[] roots = (VAMSAS[]) varchive.getOriginalRoots();
107 log.info("Report on Original roots in archive:");
108 ArchiveReports.rootReport(roots, true, System.out);
110 log.info("Getting current vamsas document.");
111 VamsasDocument doc = varchive.getVamsasDocument();
112 ArchiveReports.reportDocument(doc, varchive.getOriginalArchiveReader(), true, System.out); // not modified document so references will still be valid
114 log.info("Retrieving backup");
115 File backup = varchive.backupFile();
117 log.info(av+" is a New Archive.");
119 log.info(av+" has been backed up as "+backup);
120 File newf=new File(av.getAbsolutePath()+"_new.zip");
121 VamsasFile sfile = new VamsasFile(newf);
122 /* if (newf.exists()) {
125 newf=new File(av.getAbsolutePath()+"_"+q+++"_new.zip");
127 while (newf.exists());
130 log.info("Removing existing "+newf);
134 log.info("Now writing new Archive into "+newf.getAbsolutePath());
135 uk.ac.vamsas.client.simpleclient.VamsasArchive va=null;
136 { // hold lock over deletion and write of new archive.
137 //Lock wlock = sfile.getLock();
138 //newf.delete(); // clear out old file.
140 va = new uk.ac.vamsas.client.simpleclient.VamsasArchive(newf, true, true, sfile);
141 // open another and...
142 ApplicationData appdata = makeDemoAppdata(va,
143 "uk.ac.vamsas.test.simpleclient.VamsasArchive", "arnold Bugger esq", "disOrganised");
144 log.info("Preparing to write new document.");
145 doc.addApplicationData(appdata);
146 doc.addVAMSAS(Core.getDemoVamsas());
147 va.putVamsasDocument(doc); // gets stream and puts it.
151 log.info("Dump of new vamsas document :");
152 log.info("Testing update: ");
154 Lock lock=sfile.getLock();
156 while ((lock=sfile.getLock())==null) {
157 log.info("Waiting for lock.");
160 VamsasArchiveReader vreader = new VamsasArchiveReader(sfile.getVamsasFile());// lock); // cannot do new JarFile on a locked file. // newf);
161 SimpleDocument sdoc = new SimpleDocument("testing new vamsas write");
162 ArchiveReports.reportDocument(sdoc.getVamsasDocument(vreader), vreader, true, System.out);
165 // backup.delete(); // tidy up
167 log.info("Now Cancelling write to original archive "+av);
168 if (varchive.cancelArchive())
169 log.info("Successfully cancelled.");
171 log.info("Didn't cancel.");
172 long t=System.currentTimeMillis()+200; while (t>System.currentTimeMillis());
173 log.info("Now testing archive update.");
174 va = new uk.ac.vamsas.client.simpleclient.VamsasArchive(newf, false, true, sfile);
175 doc = va.getVamsasDocument();
176 doc.addVAMSAS(Core.getDemoVamsas());
177 doc.addApplicationData(makeDemoAppdata(va,
178 "uk.ac.vamsas.test.simpleclient.VamsasArchive", "another old Bugger esq", "rescinded"));
179 if (va.transferRemainingAppDatas())
180 log.info("Remain appdatas were transferred.");
182 log.warn("No appdatas were transferred. This is wrong.");
183 va.putVamsasDocument(doc);
186 log.info("Testing update: ");
188 Lock lock=sfile.getLock();
190 while ((lock=sfile.getLock())==null)
191 log.info("Waiting for lock.");
192 // VamsasArchiveReader vreader = new VamsasArchiveReader(lock);
193 VamsasArchiveReader vreader = new VamsasArchiveReader(newf);
195 SimpleDocument sdoc = new SimpleDocument("testing vamsas update");
196 VamsasDocument finaldoc = sdoc.getVamsasDocument(vreader);
198 ArchiveReports.reportDocument(finaldoc, vreader, true, System.out);
200 log.error("Null Document Read from "+newf);
202 } catch (Exception e) {
203 e.printStackTrace(System.err);