1 package org.vamsas.test.simpleclient;
3 import java.io.InputStream;
5 import org.vamsas.client.simpleclient.VamsasArchiveReader;
6 import org.vamsas.objects.core.Alignment;
7 import org.vamsas.objects.core.ApplicationData;
8 import org.vamsas.objects.core.DataSet;
9 import org.vamsas.objects.core.Entry;
10 import org.vamsas.objects.core.Provenance;
11 import org.vamsas.objects.core.Tree;
12 import org.vamsas.objects.core.VAMSAS;
13 import org.vamsas.objects.core.VamsasDocument;
15 * this class contains static methods for writing info to stdout about a vamsas document
16 * Methods have a 'cascade' switch to indicate if sub-objects should have info printed on them.
17 * Methods return true or false - indicating if the object was valid or not
18 * TODO: LATER: propagate true/false return so that an invalid vamsas object invalidates the whole document
22 public class ArchiveReports {
24 * print an informative summary on a VamsasDocument
25 * @param document - the document itself
26 * @param archive - document source archive for resolving any appData refs
29 public static boolean reportProvenance(Provenance p) {
31 System.out.println("No Provenance");
34 Entry[] pe = p.getEntry();
35 for (int i=0; i<pe.length; i++)
36 System.out.println(pe[i].getDate()+"\t'"+pe[i].getUser()+"'\t"+pe[i].getAction());
39 public static boolean reportDocument(VamsasDocument document, VamsasArchiveReader archive, boolean cascade) {
41 System.out.println("Vamsas Document version '"+document.getVersion()+"'");
42 reportProvenance(document.getProvenance());
43 System.out.print("Document contains "+document.getVAMSASCount()+" VAMSAS Elements and "+document.getApplicationDataCount()+" elements.\n");
44 if (document.getVAMSASCount()>0 && cascade)
45 rootReport(document.getVAMSAS(), true);
46 if (document.getApplicationDataCount()>0) {
47 System.out.print("There are "+document.getApplicationDataCount()+" ApplicationData references.\n");
48 ApplicationData appd[] = document.getApplicationData();
49 for (int i=0,j=appd.length; i<j; i++) {
50 System.out.print("Application "+i+": '"+appd[i].getName()+"'\nVersion '"+appd[i].getVersion()+"'\nURN: '"+appd[i].getUrn()+"'\n");
51 System.out.print("AppData is ");
52 if (appd[i].getAppDataChoice().getDataReference()!=null) {
53 String appData=appd[i].getAppDataChoice().getDataReference();
54 if (appData.length()>1) {
55 System.out.print("a reference ("+appData+")");
57 if ((jstrm=archive.getAppdataStream(appData))!=null)
58 System.out.println(" which resolves to a JarEntry.");
60 System.out.println(" which does not resolve to a JarEntry.");
61 System.err.println("Unresolved appdata reference '"+appData+"'");
64 System.out.println("an empty reference.");
67 System.out.println("an embedded chunk of "+appd[i].getAppDataChoice().getData().length+" bytes.");
74 System.out.print("Document Object is null");
80 * summarises all the datasets in a vamsas document.
85 public static boolean rootReport(VAMSAS[] roots, boolean cascade) {
87 for (int i=0; i<roots.length; i++) {
90 System.out.print("Vamsas Root "+i+" (id="
91 +((r.getId()!=null) ? r.getId():"<none>")
92 +") contains "+(ds=r.getDataSetCount())+" DataSets, "
93 + (tr=r.getTreeCount())+" Global trees\n");
95 for (int j=0; j<ds; j++) {
96 System.out.println("Dataset "+j);
97 cascade = datasetReport(r.getDataSet(j), true) && cascade ;
99 for (int j=0; j<tr; j++) {
100 System.out.println("Global tree "+j);
101 cascade = treeReport(r.getTree(j), true) && cascade;
109 public static boolean datasetReport(DataSet ds, boolean cascade) {
111 reportProvenance(ds.getProvenance());
112 System.out.println("Dataset contains : "+ds.getSequenceCount()
113 +" sequences, "+ds.getAlignmentCount()+" alignments and "+ds.getTreeCount()+" trees.");
115 alignmentReport(ds.getAlignment(), true);
118 public static boolean alignmentReport(Alignment[] al, boolean cascade) {
120 if (al!=null && al.length>0) {
121 for (int i=0; i<al.length; i++) {
122 System.out.println("Alignment "+i);
124 reportProvenance(al[i].getProvenance());
125 System.out.println("Involves "+al[i].getAlignmentSequenceCount()+" sequences, has "
126 +al[i].getAlignmentAnnotationsCount()+" annotations and "+al[i].getTreeCount()+" trees.");
128 for (int t=0; t<al[i].getTreeCount(); t++)
129 treeReport(al[i].getTree(t), true);
135 public static boolean treeReport(Tree t, boolean cascade) {
136 System.out.println("Tree: '"+t.getTitle()+"'");
137 return !cascade || reportProvenance(t.getProvenance());