1 package org.vamsas.test.simpleclient;
3 import java.io.InputStream;
5 import org.vamsas.client.object;
6 import org.vamsas.client.simpleclient.VamsasArchiveReader;
7 import org.vamsas.objects.core.Alignment;
8 import org.vamsas.objects.core.AppData;
9 import org.vamsas.objects.core.ApplicationData;
10 import org.vamsas.objects.core.DataSet;
11 import org.vamsas.objects.core.Entry;
12 import org.vamsas.objects.core.Provenance;
13 import org.vamsas.objects.core.Tree;
14 import org.vamsas.objects.core.User;
15 import org.vamsas.objects.core.VAMSAS;
16 import org.vamsas.objects.core.VamsasDocument;
18 * this class contains static methods for writing info to stdout about a vamsas document
19 * Methods have a 'cascade' switch to indicate if sub-objects should have info printed on them.
20 * Methods return true or false - indicating if the object was valid or not
21 * TODO: LATER: propagate true/false return so that an invalid vamsas object invalidates the whole document
25 public class ArchiveReports {
27 * print an informative summary on a VamsasDocument
28 * @param document - the document itself
29 * @param archive - document source archive for resolving any appData refs
32 public static boolean reportProvenance(Provenance p) {
34 System.out.println("No Provenance");
37 Entry[] pe = p.getEntry();
38 for (int i=0; i<pe.length; i++)
39 System.out.println(pe[i].getDate()+"\t'"+pe[i].getUser()+"'\t"+pe[i].getAction());
42 public static boolean appDataEntryReport(AppData appD, VamsasArchiveReader archive, boolean cascade) {
44 boolean nulldata=false;
45 if (appD.getDataReference()!=null) {
46 String appData=appD.getDataReference();
47 if (appData==null) { System.out.println("Empty DataReference - not valid ?"); }
49 if (appData.length()>1) {
50 System.out.print("a reference ("+appData+")");
52 if ((jstrm=archive.getAppdataStream(appData))!=null)
53 System.out.println(" which resolves to a JarEntry.");
55 System.out.println(" which does not resolve to a JarEntry.");
56 System.err.println("Unresolved appdata reference '"+appData+"'");
62 if (appD.getData()==null)
65 System.out.println("an embedded chunk of "+appD.getData().length+" bytes.");
68 System.out.println("Null AppData reference/data chunk.");
73 public static boolean appDataReport(ApplicationData appD, VamsasArchiveReader archive, boolean cascade) {
75 // Report on root appData
76 appDataEntryReport(appD, archive, cascade);
77 if (appD.getUserCount()>0) {
78 User users[] = appD.getUser();
79 for (int i=0,j=users.length; i<j; i++) {
80 System.out.println("Data for User '"+users[i].getFullname()+"' of '"+users[i].getOrganization()+"'");
81 appDataEntryReport(users[i], archive, cascade);
88 public static boolean reportDocument(VamsasDocument document, VamsasArchiveReader archive, boolean cascade) {
90 System.out.println("Vamsas Document version '"+document.getVersion()+"'");
91 reportProvenance(document.getProvenance());
92 System.out.print("Document contains "+document.getVAMSASCount()+" VAMSAS Elements and "+document.getApplicationDataCount()+" Application data elements.\n");
93 if (document.getVAMSASCount()>0 && cascade)
94 rootReport(document.getVAMSAS(), true);
95 if (document.getApplicationDataCount()>0) {
96 System.out.print("There are "+document.getApplicationDataCount()+" ApplicationData references.\n");
97 ApplicationData appd[] = document.getApplicationData();
98 for (int i=0,j=appd.length; i<j; i++) {
99 System.out.print("Application "+i+": '"+appd[i].getName()+"'\nVersion '"+appd[i].getVersion()+"'\nURN: '"+appd[i].getUrn()+"'\n");
100 System.out.print("AppData is :");
101 appDataReport(appd[i], archive, cascade);
107 System.out.print("Document Object is null");
113 * summarises all the datasets in a vamsas document.
115 * @param cascade TODO
118 public static boolean rootReport(VAMSAS[] roots, boolean cascade) {
120 for (int i=0; i<roots.length; i++) {
123 System.out.print("Vamsas Root "+i+" (id="
124 +((r.getId()!=null) ? r.getId():"<none>")
125 +") contains "+(ds=r.getDataSetCount())+" DataSets, "
126 + (tr=r.getTreeCount())+" Global trees\n");
128 for (int j=0; j<ds; j++) {
129 System.out.println("Dataset "+j);
130 cascade = datasetReport(r.getDataSet(j), true) && cascade ;
132 for (int j=0; j<tr; j++) {
133 System.out.println("Global tree "+j);
134 cascade = treeReport(r.getTree(j), true) && cascade;
142 public static boolean datasetReport(DataSet ds, boolean cascade) {
144 reportProvenance(ds.getProvenance());
145 System.out.println("Dataset contains : "+ds.getSequenceCount()
146 +" sequences, "+ds.getAlignmentCount()+" alignments and "+ds.getTreeCount()+" trees.");
148 alignmentReport(ds.getAlignment(), true);
151 public static boolean alignmentReport(Alignment[] al, boolean cascade) {
153 if (al!=null && al.length>0) {
154 for (int i=0; i<al.length; i++) {
155 System.out.println("Alignment "+i);
157 reportProvenance(al[i].getProvenance());
158 System.out.println("Involves "+al[i].getAlignmentSequenceCount()+" sequences, has "
159 +al[i].getAlignmentAnnotationsCount()+" annotations and "+al[i].getTreeCount()+" trees.");
161 for (int t=0; t<al[i].getTreeCount(); t++)
162 treeReport(al[i].getTree(t), true);
168 public static boolean treeReport(Tree t, boolean cascade) {
169 System.out.println("Tree: '"+t.getTitle()+"'");
170 return !cascade || reportProvenance(t.getProvenance());