1 package uk.ac.vamsas.test.simpleclient;
4 import java.io.ObjectOutputStream;
5 import java.io.RandomAccessFile;
6 import java.util.jar.JarFile;
8 import org.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
11 import uk.ac.vamsas.client.simpleclient.Lock;
12 import uk.ac.vamsas.client.simpleclient.SessionFile;
13 import uk.ac.vamsas.client.simpleclient.SimpleDocument;
14 import uk.ac.vamsas.client.simpleclient.VamsasArchiveReader;
15 import uk.ac.vamsas.client.simpleclient.VamsasFile;
16 import uk.ac.vamsas.objects.core.ApplicationData;
17 import uk.ac.vamsas.objects.core.User;
18 import uk.ac.vamsas.objects.core.VAMSAS;
19 import uk.ac.vamsas.objects.core.VamsasDocument;
20 import uk.ac.vamsas.test.objects.Core;
22 public class VamsasArchive {
24 * test the org.vamsas.simpleclient.vamsasArchive class
26 static Log log = LogFactory.getLog(VamsasArchive.class);
27 public static ApplicationData makeDemoAppdata(uk.ac.vamsas.client.simpleclient.VamsasArchive va, String apname, String userName, String userOrg) {
30 VamsasArchiveReader vread=null;
32 vread = va.getOriginalArchiveReader();
35 log.error("Failed to get original archive reader!",e);
38 ApplicationData appdata = new ApplicationData();
39 appdata.setName("uk.ac.vamsas.test.simpleclient.VamsasArchive");
40 appdata.setData(new String("this is some test data.").getBytes());
41 User apuser = new User();
42 apuser.setFullname(userName);
43 apuser.setOrganization(userOrg);
44 String appdata_ref = "vamsas:"+apname+"/"+apuser.getOrganization()+"/"+apuser.getFullname();
45 SimpleDocument sdoc = new SimpleDocument("test.simpleclient.VamsasArchive");
47 VamsasDocument orignalnew;
49 orignalnew = sdoc.getVamsasDocument(vread);
50 log.info("*** Dump follows ***");
52 ArchiveReports.reportDocument(orignalnew, vread, false, System.out);
53 log.info("*** Dump precedes ***");
54 } catch (Exception e) {
55 log.info("makeDemoAppdata: Problems accessing original document");
58 log.info("Reading (and avoiding references to) original data");
59 if (vread.getAppdataStream(appdata_ref)!=null) {
62 va.transferAppDataEntry(appdata_ref);
63 } catch (Exception e) {
64 log.warn("Exception when transferring appdata reference : "+appdata_ref, e);
67 while (vread.getAppdataStream(appdata_ref+"/"+Integer.toString(++i))!=null) {
69 // copy over another duplicate.
70 va.transferAppDataEntry(appdata_ref+"/"+Integer.toString(i));
71 } catch (Exception e) {
72 log.warn("Exception when transferring appdata reference : "+appdata_ref, e);
75 // this one must be unique!
76 appdata_ref+="/"+Integer.toString(i);
80 log.info("Adding new data stuff.");
81 log.info("Writing an apdata reference using AppDataStream interface.");
82 apuser.setDataReference(appdata_ref);
83 appdata.addUser(apuser);
84 appdata.setVersion("noggin");
85 //TODO: write instance appdata appdata.setUrn("program:/the.nog/");
87 ObjectOutputStream ost = new ObjectOutputStream(va.getAppDataStream(appdata_ref));
88 ost.writeObject(appdata);
90 } catch (Exception e) {
91 log.warn("Couldn't write appdata reference "+appdata_ref);
95 public static void main(String args[]) {
100 av = new File(args[0]);
102 av = new File("test/vamsas.zip");
104 RandomAccessFile raf = new RandomAccessFile(av, "r");
107 } catch (Exception f)
109 log.info("Couldn't random access file archive "+av, f);
112 JarFile jf = new JarFile(av, true, JarFile.OPEN_READ);
113 if (jf.getEntry("vamsasDocument.xml")!=null)
115 log.info("Valid archive "+av);
118 } catch (Exception f)
120 log.info("Couldn't access jar archive "+av, f);
122 log.info("Opening archive "+av);
123 uk.ac.vamsas.client.simpleclient.VamsasArchive varchive = new uk.ac.vamsas.client.simpleclient.VamsasArchive(av, true);
125 VAMSAS[] roots = (VAMSAS[]) varchive.getOriginalRoots();
128 log.info("Report on Original roots in archive:");
129 ArchiveReports.rootReport(roots, true, System.out);
131 log.info("Getting current vamsas document.");
132 VamsasDocument doc = varchive.getVamsasDocument();
133 ArchiveReports.reportDocument(doc, varchive.getOriginalArchiveReader(), true, System.out); // not modified document so references will still be valid
135 log.info("Retrieving backup");
136 File backup = varchive.backupFile();
138 log.info(av+" is a New Archive.");
140 log.info(av+" has been backed up as "+backup);
141 File newf=new File(av.getAbsolutePath()+"_new.zip");
142 VamsasFile sfile = new VamsasFile(newf);
143 /* if (newf.exists()) {
146 newf=new File(av.getAbsolutePath()+"_"+q+++"_new.zip");
148 while (newf.exists());
151 log.info("Removing existing "+newf);
155 log.info("Now writing new Archive into "+newf.getAbsolutePath());
156 uk.ac.vamsas.client.simpleclient.VamsasArchive va=null;
157 { // hold lock over deletion and write of new archive.
158 //Lock wlock = sfile.getLock();
159 //newf.delete(); // clear out old file.
161 va = new uk.ac.vamsas.client.simpleclient.VamsasArchive(newf, true, true, sfile);
162 // open another and...
163 ApplicationData appdata = makeDemoAppdata(va,
164 "uk.ac.vamsas.test.simpleclient.VamsasArchive", "arnold Bugger esq", "disOrganised");
165 log.info("Preparing to write new document.");
166 doc.addApplicationData(appdata);
167 doc.addVAMSAS(Core.getDemoVamsas());
168 va.putVamsasDocument(doc); // gets stream and puts it.
172 log.info("Dump of new vamsas document :");
173 log.info("Testing update: ");
175 Lock lock=sfile.getLock();
177 while ((lock=sfile.getLock())==null) {
178 log.info("Waiting for lock.");
181 VamsasArchiveReader vreader = new VamsasArchiveReader(sfile.getVamsasFile());// lock); // cannot do new JarFile on a locked file. // newf);
182 SimpleDocument sdoc = new SimpleDocument("testing new vamsas write");
183 ArchiveReports.reportDocument(sdoc.getVamsasDocument(vreader), vreader, true, System.out);
186 // backup.delete(); // tidy up
188 log.info("Now Cancelling write to original archive "+av);
189 if (varchive.cancelArchive())
190 log.info("Successfully cancelled.");
192 log.info("Didn't cancel.");
193 long t=System.currentTimeMillis()+200; while (t>System.currentTimeMillis());
194 log.info("Now testing archive update.");
195 va = new uk.ac.vamsas.client.simpleclient.VamsasArchive(newf, false, true, sfile);
196 doc = va.getVamsasDocument();
197 doc.addVAMSAS(Core.getDemoVamsas());
198 doc.addApplicationData(makeDemoAppdata(va,
199 "uk.ac.vamsas.test.simpleclient.VamsasArchive", "another old Bugger esq", "rescinded"));
200 if (va.transferRemainingAppDatas())
201 log.info("Remain appdatas were transferred.");
203 log.warn("No appdatas were transferred. This is wrong.");
204 va.putVamsasDocument(doc);
207 log.info("Testing update: ");
209 Lock lock=sfile.getLock();
211 while ((lock=sfile.getLock())==null)
212 log.info("Waiting for lock.");
213 // VamsasArchiveReader vreader = new VamsasArchiveReader(lock);
214 VamsasArchiveReader vreader = new VamsasArchiveReader(newf);
216 SimpleDocument sdoc = new SimpleDocument("testing vamsas update");
217 VamsasDocument finaldoc = sdoc.getVamsasDocument(vreader);
219 ArchiveReports.reportDocument(finaldoc, vreader, true, System.out);
221 log.error("Null Document Read from "+newf);
223 } catch (Exception e) {
224 e.printStackTrace(System.err);