1 package uk.ac.vamsas.test.simpleclient;
3 import java.io.InputStream;
4 import java.io.PrintStream;
5 import java.io.PrintWriter;
8 import uk.ac.vamsas.client.ClientDocument;
9 import uk.ac.vamsas.client.Vobject;
10 import uk.ac.vamsas.client.simpleclient.VamsasArchiveReader;
11 import uk.ac.vamsas.objects.core.Alignment;
12 import uk.ac.vamsas.objects.core.AppData;
13 import uk.ac.vamsas.objects.core.ApplicationData;
14 import uk.ac.vamsas.objects.core.DataSet;
15 import uk.ac.vamsas.objects.core.Entry;
16 import uk.ac.vamsas.objects.core.Instance;
17 import uk.ac.vamsas.objects.core.Provenance;
18 import uk.ac.vamsas.objects.core.Tree;
19 import uk.ac.vamsas.objects.core.User;
20 import uk.ac.vamsas.objects.core.VAMSAS;
21 import uk.ac.vamsas.objects.core.VamsasDocument;
23 * this class contains static methods for writing info to stdout about a vamsas document
24 * Methods have a 'cascade' switch to indicate if sub-objects should have info printed on them.
25 * Methods return true or false - indicating if the Vobject was valid or not
26 * TODO: LATER: propagate true/false return so that an invalid vamsas Vobject invalidates the whole document
30 public class ArchiveReports {
32 * print an informative summary on a VamsasDocument
34 * @param document - the document itself
35 * @param archive - document source archive for resolving any appData refs
38 public static boolean reportProvenance(Provenance p, PrintStream outstr) {
40 outstr.println("No Provenance");
43 Entry[] pe = p.getEntry();
44 for (int i=0; i<pe.length; i++) {
45 outstr.print(pe[i].getDate()+"\t'"+pe[i].getUser()+"'\t"+pe[i].getApp()+"\t'"+pe[i].getAction()+"' ");
46 outputVobjectState(pe[i], outstr);
50 public static boolean appDataEntryReport(AppData appD, VamsasArchiveReader archive, boolean cascade, PrintStream outstr) {
52 boolean nulldata=false;
53 if (appD.getDataReference()!=null) {
54 String appData=appD.getDataReference();
55 if (appData==null) { outstr.println("Empty DataReference - not valid ?"); }
57 if (appData.length()>1) {
58 outstr.print("a reference ("+appData+")");
60 if ((jstrm=archive.getAppdataStream(appData))!=null)
61 outstr.println(" which resolves to a JarEntry.");
63 outstr.println(" which does not resolve to a JarEntry.");
64 outstr.println("Unresolved appdata reference '"+appData+"'");
70 if (appD.getData()==null)
73 outstr.println("an embedded chunk of "+appD.getData().length+" bytes.");
76 outstr.println("Null AppData reference/data chunk.");
81 public static boolean appDataReport(ApplicationData appD, VamsasArchiveReader archive, boolean cascade, PrintStream outstr) {
83 // Report on root appData
84 appDataEntryReport(appD, archive, cascade, outstr);
85 if (appD.getInstanceCount()>0) {
86 Instance inst[] = appD.getInstance();
87 for (int i=0,j=inst.hashCode(); i<j; i++) {
88 outstr.println("Data for App Instance URN: '"+inst[i].getUrn());
89 appDataEntryReport(inst[i],archive,cascade,outstr);
92 if (appD.getUserCount()>0) {
93 User users[] = appD.getUser();
94 for (int i=0,j=users.length; i<j; i++) {
95 outstr.println("Data for User '"+users[i].getFullname()+"' of '"+users[i].getOrganization()+"'");
96 appDataEntryReport(users[i], archive, cascade, outstr);
103 public static boolean reportDocument(VamsasDocument document, VamsasArchiveReader archive, boolean cascade, PrintStream outstr) {
104 if (document!=null) {
105 outstr.println("Vamsas Document version '"+document.getVersion()+"'");
106 reportProvenance(document.getProvenance(), outstr);
107 outstr.print("Document contains "+document.getVAMSASCount()+" VAMSAS Elements and "+document.getApplicationDataCount()+" Application data elements.\n");
108 if (document.getVAMSASCount()>0 && cascade)
109 rootReport(document.getVAMSAS(), true, outstr);
110 if (document.getApplicationDataCount()>0) {
111 outstr.print("There are "+document.getApplicationDataCount()+" ApplicationData references.\n");
112 ApplicationData appd[] = document.getApplicationData();
113 for (int i=0,j=appd.length; i<j; i++) {
114 outstr.print("Application "+i+": '"+appd[i].getName()+"'\nVersion '"+appd[i].getVersion()+"'\n");
115 outstr.print("AppData is :");
116 appDataReport(appd[i], archive, cascade, outstr);
122 outstr.println("Document Object is null");
128 * summarises all the datasets in a vamsas document.
130 * @param cascade TODO
134 public static boolean rootReport(VAMSAS[] roots, boolean cascade, PrintStream outstr) {
136 for (int i=0; i<roots.length; i++) {
139 outstr.print("Vamsas Root "+i+" (id="
140 +((r.getId()!=null) ? r.getId():"<none>")
141 +") contains "+(ds=r.getDataSetCount())+" DataSets, "
142 + (tr=r.getTreeCount())+" Global trees\n");
143 outputVobjectState(r, outstr);
145 for (int j=0; j<ds; j++) {
146 outstr.println("Dataset "+j);
147 cascade = datasetReport(r.getDataSet(j), true, outstr) && cascade ;
149 for (int j=0; j<tr; j++) {
150 outstr.println("Global tree "+j);
151 cascade = treeReport(r.getTree(j), true, outstr) && cascade;
159 public static void outputVobjectState(Vobject v, PrintStream outstr) {
160 outstr.print(" (Object is: ");
162 if (v.is__stored_in_document()) {
163 outstr.print(" stored");
166 if (v.isNewInDocument()) {
170 outstr.print(" new in document");
176 outstr.print(" updated since last read");
180 public static boolean datasetReport(DataSet ds, boolean cascade, PrintStream outstr) {
182 reportProvenance(ds.getProvenance(), outstr);
183 outputVobjectState(ds, outstr);
184 outstr.println("Dataset contains : "+ds.getSequenceCount()
185 +" sequences, "+ds.getAlignmentCount()+" alignments and "+ds.getTreeCount()+" trees.");
187 alignmentReport(ds.getAlignment(), true, outstr);
190 public static boolean alignmentReport(Alignment[] al, boolean cascade, PrintStream outstr) {
192 if (al!=null && al.length>0) {
193 for (int i=0; i<al.length; i++) {
194 outstr.println("Alignment "+i+(al[i].isRegistered() ? " ("+al[i].getVorbaId()+")" : " (unregistered)"));
195 outputVobjectState(al[i], outstr);
197 reportProvenance(al[i].getProvenance(), outstr);
198 outstr.println("Involves "+al[i].getAlignmentSequenceCount()+" sequences, has "
199 +al[i].getAlignmentAnnotationCount()+" annotations and "+al[i].getTreeCount()+" trees.");
201 for (int t=0; t<al[i].getTreeCount(); t++)
202 treeReport(al[i].getTree(t), true, outstr);
208 public static boolean treeReport(Tree t, boolean cascade, PrintStream outstr) {
209 outstr.print("Tree: '"+t.getTitle()+"' ");
210 outputVobjectState(t, outstr);
211 return !cascade || reportProvenance(t.getProvenance(), outstr);