X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fuk%2Fac%2Fvamsas%2Ftest%2Fsimpleclient%2FArchiveReports.java;h=83989afe42c78b329c7979f8bae0025de0944237;hb=844ccad5a3fcbedec17b2af66d460f31abc7cff1;hp=94d06bfd5277d5602a7b91daf3258f10afe7898e;hpb=3b92275c26c14a678519f1d7d2ffaa477eb76cdb;p=vamsas.git diff --git a/src/uk/ac/vamsas/test/simpleclient/ArchiveReports.java b/src/uk/ac/vamsas/test/simpleclient/ArchiveReports.java index 94d06bf..83989af 100644 --- a/src/uk/ac/vamsas/test/simpleclient/ArchiveReports.java +++ b/src/uk/ac/vamsas/test/simpleclient/ArchiveReports.java @@ -1,187 +1,268 @@ -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; i1) { - 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(); i0) { - User users[] = appD.getUser(); - for (int i=0,j=users.length; i0 && 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") - +") contains "+(ds=r.getDataSetCount())+" DataSets, " - + (tr=r.getTreeCount())+" Global trees\n"); - if (cascade) { - for (int j=0; j0) { - for (int i=0; i. + */ +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() : "") + ") 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); + } + +}