-package uk.ac.vamsas.test.simpleclient;
-
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-
-
-import uk.ac.vamsas.client.ClientDocument;
-import uk.ac.vamsas.client.Vobject;
-import uk.ac.vamsas.client.simpleclient.VamsasArchiveReader;
-import uk.ac.vamsas.objects.core.Alignment;
-import uk.ac.vamsas.objects.core.AppData;
-import uk.ac.vamsas.objects.core.ApplicationData;
-import uk.ac.vamsas.objects.core.DataSet;
-import uk.ac.vamsas.objects.core.Entry;
-import uk.ac.vamsas.objects.core.Instance;
-import uk.ac.vamsas.objects.core.Provenance;
-import uk.ac.vamsas.objects.core.Tree;
-import uk.ac.vamsas.objects.core.User;
-import uk.ac.vamsas.objects.core.VAMSAS;
-import uk.ac.vamsas.objects.core.VamsasDocument;
-/**
- * this class contains static methods for writing info to stdout about a vamsas document
- * Methods have a 'cascade' switch to indicate if sub-objects should have info printed on them.
- * Methods return true or false - indicating if the Vobject was valid or not
- * TODO: LATER: propagate true/false return so that an invalid vamsas Vobject invalidates the whole document
- * @author jimp
- *
- */
-public class ArchiveReports {
- /**
- * print an informative summary on a VamsasDocument
- * @param outstr TODO
- * @param document - the document itself
- * @param archive - document source archive for resolving any appData refs
- * @return
- */
- public static boolean reportProvenance(Provenance p, PrintStream outstr) {
- if (p==null) {
- outstr.println("No Provenance");
- return false;
- }
- Entry[] pe = p.getEntry();
- for (int i=0; i<pe.length; i++) {
- outstr.print(pe[i].getDate()+"\t'"+pe[i].getUser()+"'\t"+pe[i].getApp()+"\t'"+pe[i].getAction()+"' ");
- outputVobjectState(pe[i], outstr);
- }
- return true;
- }
- public static boolean appDataEntryReport(AppData appD, VamsasArchiveReader archive, boolean cascade, PrintStream outstr) {
- if (appD!=null) {
- boolean nulldata=false;
- if (appD.getDataReference()!=null) {
- String appData=appD.getDataReference();
- if (appData==null) { outstr.println("Empty DataReference - not valid ?"); }
- else
- if (appData.length()>1) {
- outstr.print("a reference ("+appData+")");
- InputStream jstrm;
- if ((jstrm=archive.getAppdataStream(appData))!=null)
- outstr.println(" which resolves to a JarEntry.");
- else {
- outstr.println(" which does not resolve to a JarEntry.");
- outstr.println("Unresolved appdata reference '"+appData+"'");
- }
- } else {
- nulldata=true;
- }
- } else {
- if (appD.getData()==null)
- nulldata &= true;
- else
- outstr.println("an embedded chunk of "+appD.getData().length+" bytes.");
- }
- if (nulldata)
- outstr.println("Null AppData reference/data chunk.");
- }
- return true;
- }
-
- public static boolean appDataReport(ApplicationData appD, VamsasArchiveReader archive, boolean cascade, PrintStream outstr) {
- if (appD!=null) {
- // Report on root appData
- appDataEntryReport(appD, archive, cascade, outstr);
- if (appD.getInstanceCount()>0) {
- Instance inst[] = appD.getInstance();
- for (int i=0,j=inst.hashCode(); i<j; i++) {
- outstr.println("Data for App Instance URN: '"+inst[i].getUrn());
- appDataEntryReport(inst[i],archive,cascade,outstr);
- }
- }
- if (appD.getUserCount()>0) {
- User users[] = appD.getUser();
- for (int i=0,j=users.length; i<j; i++) {
- outstr.println("Data for User '"+users[i].getFullname()+"' of '"+users[i].getOrganization()+"'");
- appDataEntryReport(users[i], archive, cascade, outstr);
- }
- }
- }
-
- return true;
- }
- public static boolean reportDocument(VamsasDocument document, VamsasArchiveReader archive, boolean cascade, PrintStream outstr) {
- if (document!=null) {
- outstr.println("Vamsas Document version '"+document.getVersion()+"'");
- reportProvenance(document.getProvenance(), outstr);
- outstr.print("Document contains "+document.getVAMSASCount()+" VAMSAS Elements and "+document.getApplicationDataCount()+" Application data elements.\n");
- if (document.getVAMSASCount()>0 && cascade)
- rootReport(document.getVAMSAS(), true, outstr);
- if (document.getApplicationDataCount()>0) {
- outstr.print("There are "+document.getApplicationDataCount()+" ApplicationData references.\n");
- ApplicationData appd[] = document.getApplicationData();
- for (int i=0,j=appd.length; i<j; i++) {
- outstr.print("Application "+i+": '"+appd[i].getName()+"'\nVersion '"+appd[i].getVersion()+"'\n");
- outstr.print("AppData is :");
- appDataReport(appd[i], archive, cascade, outstr);
- }
-
- }
- return true;
- } else {
- outstr.println("Document Object is null");
- }
- return false;
- }
-
- /**
- * summarises all the datasets in a vamsas document.
- * @param roots
- * @param cascade TODO
- * @param outstr TODO
- * @return
- */
- public static boolean rootReport(VAMSAS[] roots, boolean cascade, PrintStream outstr) {
- if (roots!=null) {
- for (int i=0; i<roots.length; i++) {
- VAMSAS r = roots[i];
- int ds, tr;
- outstr.print("Vamsas Root "+i+" (id="
- +((r.getId()!=null) ? r.getId():"<none>")
- +") contains "+(ds=r.getDataSetCount())+" DataSets, "
- + (tr=r.getTreeCount())+" Global trees\n");
- outputVobjectState(r, outstr);
- if (cascade) {
- for (int j=0; j<ds; j++) {
- outstr.println("Dataset "+j);
- cascade = datasetReport(r.getDataSet(j), true, outstr) && cascade ;
- }
- for (int j=0; j<tr; j++) {
- outstr.println("Global tree "+j);
- cascade = treeReport(r.getTree(j), true, outstr) && cascade;
- }
- }
- }
- return true;
- }
- return false;
- }
- public static void outputVobjectState(Vobject v, PrintStream outstr) {
- outstr.print(" (Object is: ");
- boolean comma=false;
- if (v.is__stored_in_document()) {
- outstr.print(" stored");
- comma=true;
- }
- if (v.isNewInDocument()) {
- if (comma)
- outstr.print(",");
- comma=true;
- outstr.print(" new in document");
- }
- if (v.isUpdated()) {
- if (comma)
- outstr.print(",");
- comma=true;
- outstr.print(" updated since last read");
- }
- outstr.println(")");
- }
- public static boolean datasetReport(DataSet ds, boolean cascade, PrintStream outstr) {
- if (cascade)
- reportProvenance(ds.getProvenance(), outstr);
- outputVobjectState(ds, outstr);
- outstr.println("Dataset contains : "+ds.getSequenceCount()
- +" sequences, "+ds.getAlignmentCount()+" alignments and "+ds.getTreeCount()+" trees.");
- if (cascade)
- alignmentReport(ds.getAlignment(), true, outstr);
- return true;
- }
- public static boolean alignmentReport(Alignment[] al, boolean cascade, PrintStream outstr) {
- boolean val=true;
- if (al!=null && al.length>0) {
- for (int i=0; i<al.length; i++) {
- outstr.println("Alignment "+i+(al[i].isRegistered() ? " ("+al[i].getVorbaId()+")" : " (unregistered)"));
- outputVobjectState(al[i], outstr);
- if (cascade)
- reportProvenance(al[i].getProvenance(), outstr);
- outstr.println("Involves "+al[i].getAlignmentSequenceCount()+" sequences, has "
- +al[i].getAlignmentAnnotationCount()+" annotations and "+al[i].getTreeCount()+" trees.");
- if (cascade) {
- for (int t=0; t<al[i].getTreeCount(); t++)
- treeReport(al[i].getTree(t), true, outstr);
- }
- }
- }
- return val;
- }
- public static boolean treeReport(Tree t, boolean cascade, PrintStream outstr) {
- outstr.print("Tree: '"+t.getTitle()+"' ");
- outputVobjectState(t, outstr);
- return !cascade || reportProvenance(t.getProvenance(), outstr);
- }
-
-}
+/*\r
+ * This file is part of the Vamsas Client version 0.1. \r
+ * Copyright 2009 by Jim Procter, Iain Milne, Pierre Marguerite, \r
+ * Andrew Waterhouse and Dominik Lindner.\r
+ * \r
+ * Earlier versions have also been incorporated into Jalview version 2.4 \r
+ * since 2008, and TOPALi version 2 since 2007.\r
+ * \r
+ * The Vamsas Client is free software: you can redistribute it and/or modify\r
+ * it under the terms of the GNU Lesser General Public License as published by\r
+ * the Free Software Foundation, either version 3 of the License, or\r
+ * (at your option) any later version.\r
+ * \r
+ * The Vamsas Client is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU Lesser General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU Lesser General Public License\r
+ * along with the Vamsas Client. If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
+package uk.ac.vamsas.test.simpleclient;\r
+\r
+import java.io.InputStream;\r
+import java.io.PrintStream;\r
+import java.io.PrintWriter;\r
+\r
+import uk.ac.vamsas.client.ClientDocument;\r
+import uk.ac.vamsas.client.Vobject;\r
+import uk.ac.vamsas.client.simpleclient.VamsasArchiveReader;\r
+import uk.ac.vamsas.objects.core.Alignment;\r
+import uk.ac.vamsas.objects.core.AppData;\r
+import uk.ac.vamsas.objects.core.ApplicationData;\r
+import uk.ac.vamsas.objects.core.DataSet;\r
+import uk.ac.vamsas.objects.core.Entry;\r
+import uk.ac.vamsas.objects.core.Instance;\r
+import uk.ac.vamsas.objects.core.Provenance;\r
+import uk.ac.vamsas.objects.core.Tree;\r
+import uk.ac.vamsas.objects.core.User;\r
+import uk.ac.vamsas.objects.core.VAMSAS;\r
+import uk.ac.vamsas.objects.core.VamsasDocument;\r
+\r
+/**\r
+ * this class contains static methods for writing info to stdout about a vamsas\r
+ * document Methods have a 'cascade' switch to indicate if sub-objects should\r
+ * have info printed on them. Methods return true or false - indicating if the\r
+ * Vobject was valid or not TODO: LATER: propagate true/false return so that an\r
+ * invalid vamsas Vobject invalidates the whole document\r
+ * \r
+ * @author jimp\r
+ * \r
+ */\r
+public class ArchiveReports {\r
+ /**\r
+ * print an informative summary on a VamsasDocument\r
+ * \r
+ * @param outstr\r
+ * TODO\r
+ * @param document\r
+ * - the document itself\r
+ * @param archive\r
+ * - document source archive for resolving any appData refs\r
+ * @return\r
+ */\r
+ public static boolean reportProvenance(Provenance p, PrintStream outstr) {\r
+ if (p == null) {\r
+ outstr.println("No Provenance");\r
+ return false;\r
+ }\r
+ Entry[] pe = p.getEntry();\r
+ for (int i = 0; i < pe.length; i++) {\r
+ outstr.print(pe[i].getDate() + "\t'" + pe[i].getUser() + "'\t"\r
+ + pe[i].getApp() + "\t'" + pe[i].getAction() + "' ");\r
+ outputVobjectState(pe[i], outstr);\r
+ }\r
+ return true;\r
+ }\r
+\r
+ public static boolean appDataEntryReport(AppData appD,\r
+ VamsasArchiveReader archive, boolean cascade, PrintStream outstr) {\r
+ if (appD != null) {\r
+ boolean nulldata = false;\r
+ if (appD.getDataReference() != null) {\r
+ String appData = appD.getDataReference();\r
+ if (appData == null) {\r
+ outstr.println("Empty DataReference - not valid ?");\r
+ } else if (appData.length() > 1) {\r
+ outstr.print("a reference (" + appData + ")");\r
+ InputStream jstrm;\r
+ if ((jstrm = archive.getAppdataStream(appData)) != null)\r
+ outstr.println(" which resolves to a JarEntry.");\r
+ else {\r
+ outstr.println(" which does not resolve to a JarEntry.");\r
+ outstr.println("Unresolved appdata reference '" + appData + "'");\r
+ }\r
+ } else {\r
+ nulldata = true;\r
+ }\r
+ } else {\r
+ if (appD.getData() == null)\r
+ nulldata &= true;\r
+ else\r
+ outstr.println("an embedded chunk of " + appD.getData().length\r
+ + " bytes.");\r
+ }\r
+ if (nulldata)\r
+ outstr.println("Null AppData reference/data chunk.");\r
+ }\r
+ return true;\r
+ }\r
+\r
+ public static boolean appDataReport(ApplicationData appD,\r
+ VamsasArchiveReader archive, boolean cascade, PrintStream outstr) {\r
+ if (appD != null) {\r
+ // Report on root appData\r
+ appDataEntryReport(appD, archive, cascade, outstr);\r
+ if (appD.getInstanceCount() > 0) {\r
+ Instance inst[] = appD.getInstance();\r
+ for (int i = 0, j = inst.hashCode(); i < j; i++) {\r
+ outstr.println("Data for App Instance URN: '" + inst[i].getUrn());\r
+ appDataEntryReport(inst[i], archive, cascade, outstr);\r
+ }\r
+ }\r
+ if (appD.getUserCount() > 0) {\r
+ User users[] = appD.getUser();\r
+ for (int i = 0, j = users.length; i < j; i++) {\r
+ outstr.println("Data for User '" + users[i].getFullname() + "' of '"\r
+ + users[i].getOrganization() + "'");\r
+ appDataEntryReport(users[i], archive, cascade, outstr);\r
+ }\r
+ }\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
+ public static boolean reportDocument(VamsasDocument document,\r
+ VamsasArchiveReader archive, boolean cascade, PrintStream outstr) {\r
+ if (document != null) {\r
+ outstr.println("Vamsas Document version '" + document.getVersion() + "'");\r
+ reportProvenance(document.getProvenance(), outstr);\r
+ outstr.print("Document contains " + document.getVAMSASCount()\r
+ + " VAMSAS Elements and " + document.getApplicationDataCount()\r
+ + " Application data elements.\n");\r
+ if (document.getVAMSASCount() > 0 && cascade)\r
+ rootReport(document.getVAMSAS(), true, outstr);\r
+ if (document.getApplicationDataCount() > 0) {\r
+ outstr.print("There are " + document.getApplicationDataCount()\r
+ + " ApplicationData references.\n");\r
+ ApplicationData appd[] = document.getApplicationData();\r
+ for (int i = 0, j = appd.length; i < j; i++) {\r
+ outstr.print("Application " + i + ": '" + appd[i].getName()\r
+ + "'\nVersion '" + appd[i].getVersion() + "'\n");\r
+ outstr.print("AppData is :");\r
+ appDataReport(appd[i], archive, cascade, outstr);\r
+ }\r
+\r
+ }\r
+ return true;\r
+ } else {\r
+ outstr.println("Document Object is null");\r
+ }\r
+ return false;\r
+ }\r
+\r
+ /**\r
+ * summarises all the datasets in a vamsas document.\r
+ * \r
+ * @param roots\r
+ * @param cascade\r
+ * TODO\r
+ * @param outstr\r
+ * TODO\r
+ * @return\r
+ */\r
+ public static boolean rootReport(VAMSAS[] roots, boolean cascade,\r
+ PrintStream outstr) {\r
+ if (roots != null) {\r
+ for (int i = 0; i < roots.length; i++) {\r
+ VAMSAS r = roots[i];\r
+ int ds, tr;\r
+ outstr.print("Vamsas Root " + i + " (id="\r
+ + ((r.getId() != null) ? r.getId() : "<none>") + ") contains "\r
+ + (ds = r.getDataSetCount()) + " DataSets, "\r
+ + (tr = r.getTreeCount()) + " Global trees\n");\r
+ outputVobjectState(r, outstr);\r
+ if (cascade) {\r
+ for (int j = 0; j < ds; j++) {\r
+ outstr.println("Dataset " + j);\r
+ cascade = datasetReport(r.getDataSet(j), true, outstr) && cascade;\r
+ }\r
+ for (int j = 0; j < tr; j++) {\r
+ outstr.println("Global tree " + j);\r
+ cascade = treeReport(r.getTree(j), true, outstr) && cascade;\r
+ }\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+\r
+ public static void outputVobjectState(Vobject v, PrintStream outstr) {\r
+ outstr.print(" (Object is: ");\r
+ boolean comma = false;\r
+ if (v.is__stored_in_document()) {\r
+ outstr.print(" stored");\r
+ comma = true;\r
+ }\r
+ if (v.isNewInDocument()) {\r
+ if (comma)\r
+ outstr.print(",");\r
+ comma = true;\r
+ outstr.print(" new in document");\r
+ }\r
+ if (v.isUpdated()) {\r
+ if (comma)\r
+ outstr.print(",");\r
+ comma = true;\r
+ outstr.print(" updated since last read");\r
+ }\r
+ outstr.println(")");\r
+ }\r
+\r
+ public static boolean datasetReport(DataSet ds, boolean cascade,\r
+ PrintStream outstr) {\r
+ if (cascade)\r
+ reportProvenance(ds.getProvenance(), outstr);\r
+ outputVobjectState(ds, outstr);\r
+ outstr.println("Dataset contains : " + ds.getSequenceCount()\r
+ + " sequences, " + ds.getAlignmentCount() + " alignments and "\r
+ + ds.getTreeCount() + " trees.");\r
+ if (cascade)\r
+ alignmentReport(ds.getAlignment(), true, outstr);\r
+ return true;\r
+ }\r
+\r
+ public static boolean alignmentReport(Alignment[] al, boolean cascade,\r
+ PrintStream outstr) {\r
+ boolean val = true;\r
+ if (al != null && al.length > 0) {\r
+ for (int i = 0; i < al.length; i++) {\r
+ outstr.println("Alignment "\r
+ + i\r
+ + (al[i].isRegistered() ? " (" + al[i].getVorbaId() + ")"\r
+ : " (unregistered)"));\r
+ outputVobjectState(al[i], outstr);\r
+ if (cascade)\r
+ reportProvenance(al[i].getProvenance(), outstr);\r
+ outstr.println("Involves " + al[i].getAlignmentSequenceCount()\r
+ + " sequences, has " + al[i].getAlignmentAnnotationCount()\r
+ + " annotations and " + al[i].getTreeCount() + " trees.");\r
+ if (cascade) {\r
+ for (int t = 0; t < al[i].getTreeCount(); t++)\r
+ treeReport(al[i].getTree(t), true, outstr);\r
+ }\r
+ }\r
+ }\r
+ return val;\r
+ }\r
+\r
+ public static boolean treeReport(Tree t, boolean cascade, PrintStream outstr) {\r
+ outstr.print("Tree: '" + t.getTitle() + "' ");\r
+ outputVobjectState(t, outstr);\r
+ return !cascade || reportProvenance(t.getProvenance(), outstr);\r
+ }\r
+\r
+}\r