found cyclic dependency problems in schema and in VorbaId mechanism.
[vamsas.git] / src / org / vamsas / test / simpleclient / VamsasArchive.java
1 package org.vamsas.test.simpleclient;
2
3 import java.io.BufferedInputStream;
4 import java.io.File;
5 import java.io.InputStream;
6 import java.io.InputStreamReader;
7 import java.io.ObjectOutputStream;
8 import java.io.PrintWriter;
9
10 import org.apache.commons.logging.Log;
11 import org.apache.commons.logging.LogFactory;
12 import org.vamsas.client.simpleclient.*;
13 import org.vamsas.objects.core.AppDataChoice;
14 import org.vamsas.objects.core.ApplicationData;
15 import org.vamsas.objects.core.User;
16 import org.vamsas.objects.core.VAMSAS;
17 import org.vamsas.objects.core.VamsasDocument;
18 import org.vamsas.test.objects.Core;
19
20 public class VamsasArchive {
21   /**
22    * test the org.vamsas.simpleclient.vamsasArchive class
23    */
24   static Log log = LogFactory.getLog(VamsasArchive.class);
25   
26   public static void main(String args[]) {
27     
28     try {
29       File av;
30       if (args.length>0)
31         av = new File(args[0]);
32       else
33         av = new File("test/vamsas.zip");
34       log.info("Opening archive "+av);
35       org.vamsas.client.simpleclient.VamsasArchive varchive = new org.vamsas.client.simpleclient.VamsasArchive(av, true);
36       
37       VAMSAS[] roots = (VAMSAS[]) varchive.getOriginalRoots();
38       
39       if (roots!=null) {
40         log.info("Report on Original roots in archive:");
41         ArchiveReports.rootReport(roots, true);
42       }
43       log.info("Getting current vamsas document.");
44       VamsasDocument doc = varchive.getVamsasDocument();
45       ArchiveReports.reportDocument(doc, varchive.getOriginalArchiveReader(), true); // not modified document so references will still be valid
46       // do some stuff
47       log.info("Retrieving backup");
48       File backup = varchive.backupFile();
49       if (backup==null)
50         log.info(av+" is a New Archive.");
51       else 
52         log.info(av+" has been backed up as "+backup);
53       if (backup!=null) {
54         log.info("Backup "+backup+" is being written to.");
55         // open another and...
56         ApplicationData appdata = new ApplicationData();
57         appdata.setName("org.vamsas.test.simpleclient.VamsasArchive");
58         appdata.setAppDataChoice(new AppDataChoice());
59         appdata.getAppDataChoice().setData(new String("this is some test data.").getBytes());
60         User apuser = new User();
61         apuser.setFullname("arnold Bugger esq");
62         apuser.setOrganization("disOrganised");
63         String appdata_ref = "vamsas:org.vamsas.test.simpleclient.VamsasArchive/"+apuser.getOrganization()+"/"+apuser.getFullname();
64         org.vamsas.client.simpleclient.VamsasArchive va = new org.vamsas.client.simpleclient.VamsasArchive(backup, true);
65         log.info("Getting the document from the backup-original.");
66         VamsasDocument vadoc;
67         VamsasArchiveReader vread = va.getOriginalArchiveReader();
68         
69         vadoc = va.getVamsasDocument();
70         log.info("Got document. Adding stuff.");
71         
72         if (vread.getAppdataStream(appdata_ref)!=null) {
73           int i=0;
74           while (vread.getAppdataStream(appdata_ref+"/"+Integer.toString(++i))!=null)
75               ;
76           appdata_ref+="/"+Integer.toString(i);
77         }
78         log.info("Writing an apdata reference using AppDataStream interface.");
79         apuser.setAppDataChoice(new AppDataChoice());
80         apuser.getAppDataChoice().setDataReference(appdata_ref);
81         appdata.addUser(apuser);
82         // TODO: FIX CYCLIC __ensure+instance_ids
83         // TODO: FIX schema - User.addUser is unsatisfiable!
84         apuser.addUser(apuser);
85         ObjectOutputStream apdos = new ObjectOutputStream(va.getAppDataStream(appdata_ref));
86         apdos.writeObject(appdata_ref);
87         apdos.writeObject(apuser); // some random content
88         apdos.close(); // this should *not* close the archive!
89         log.info("Written Appdata Stream");
90         log.info("Preparing to write new document.");
91         doc.addApplicationData(appdata);
92         doc.addVAMSAS(Core.getDemoVamsas());
93         va.putVamsasDocument(doc); // gets stream and puts it.
94         // TODO: verify that the vxml stream close method overridden ?
95         va.closeArchive();
96         log.info("Dump of new vamsas document :");
97         va = new org.vamsas.client.simpleclient.VamsasArchive(backup, true); // TODO - refactor Reader class to have deserializing helpers
98         ArchiveReports.reportDocument(va.getVamsasDocument(), va.getOriginalArchiveReader(), true);
99         // backup.delete(); // tidy up
100       }
101       log.info("Now Cancelling write to original archive "+av);
102       varchive.cancelArchive();
103
104     } catch (Exception e) {
105       e.printStackTrace(System.err);
106     }
107   }
108 }