2 * This file is part of the Vamsas Client version 0.2.
\r
3 * Copyright 2010 by Jim Procter, Iain Milne, Pierre Marguerite,
\r
4 * Andrew Waterhouse and Dominik Lindner.
\r
6 * Earlier versions have also been incorporated into Jalview version 2.4
\r
7 * since 2008, and TOPALi version 2 since 2007.
\r
9 * The Vamsas Client is free software: you can redistribute it and/or modify
\r
10 * it under the terms of the GNU Lesser General Public License as published by
\r
11 * the Free Software Foundation, either version 3 of the License, or
\r
12 * (at your option) any later version.
\r
14 * The Vamsas Client is distributed in the hope that it will be useful,
\r
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
17 * GNU Lesser General Public License for more details.
\r
19 * You should have received a copy of the GNU Lesser General Public License
\r
20 * along with the Vamsas Client. If not, see <http://www.gnu.org/licenses/>.
\r
22 package uk.ac.vamsas.test.simpleclient;
\r
24 import java.io.InputStream;
\r
25 import java.io.PrintStream;
\r
26 import java.io.PrintWriter;
\r
28 import uk.ac.vamsas.client.ClientDocument;
\r
29 import uk.ac.vamsas.client.Vobject;
\r
30 import uk.ac.vamsas.client.simpleclient.VamsasArchiveReader;
\r
31 import uk.ac.vamsas.objects.core.Alignment;
\r
32 import uk.ac.vamsas.objects.core.AppData;
\r
33 import uk.ac.vamsas.objects.core.ApplicationData;
\r
34 import uk.ac.vamsas.objects.core.DataSet;
\r
35 import uk.ac.vamsas.objects.core.Entry;
\r
36 import uk.ac.vamsas.objects.core.Instance;
\r
37 import uk.ac.vamsas.objects.core.Provenance;
\r
38 import uk.ac.vamsas.objects.core.Tree;
\r
39 import uk.ac.vamsas.objects.core.User;
\r
40 import uk.ac.vamsas.objects.core.VAMSAS;
\r
41 import uk.ac.vamsas.objects.core.VamsasDocument;
\r
44 * this class contains static methods for writing info to stdout about a vamsas
\r
45 * document Methods have a 'cascade' switch to indicate if sub-objects should
\r
46 * have info printed on them. Methods return true or false - indicating if the
\r
47 * Vobject was valid or not TODO: LATER: propagate true/false return so that an
\r
48 * invalid vamsas Vobject invalidates the whole document
\r
53 public class ArchiveReports {
\r
55 * print an informative summary on a VamsasDocument
\r
60 * - the document itself
\r
62 * - document source archive for resolving any appData refs
\r
65 public static boolean reportProvenance(Provenance p, PrintStream outstr) {
\r
67 outstr.println("No Provenance");
\r
70 Entry[] pe = p.getEntry();
\r
71 for (int i = 0; i < pe.length; i++) {
\r
72 outstr.print(pe[i].getDate() + "\t'" + pe[i].getUser() + "'\t"
\r
73 + pe[i].getApp() + "\t'" + pe[i].getAction() + "' ");
\r
74 outputVobjectState(pe[i], outstr);
\r
79 public static boolean appDataEntryReport(AppData appD,
\r
80 VamsasArchiveReader archive, boolean cascade, PrintStream outstr) {
\r
82 boolean nulldata = false;
\r
83 if (appD.getDataReference() != null) {
\r
84 String appData = appD.getDataReference();
\r
85 if (appData == null) {
\r
86 outstr.println("Empty DataReference - not valid ?");
\r
87 } else if (appData.length() > 1) {
\r
88 outstr.print("a reference (" + appData + ")");
\r
90 if ((jstrm = archive.getAppdataStream(appData)) != null)
\r
91 outstr.println(" which resolves to a JarEntry.");
\r
93 outstr.println(" which does not resolve to a JarEntry.");
\r
94 outstr.println("Unresolved appdata reference '" + appData + "'");
\r
100 if (appD.getData() == null)
\r
103 outstr.println("an embedded chunk of " + appD.getData().length
\r
107 outstr.println("Null AppData reference/data chunk.");
\r
112 public static boolean appDataReport(ApplicationData appD,
\r
113 VamsasArchiveReader archive, boolean cascade, PrintStream outstr) {
\r
114 if (appD != null) {
\r
115 // Report on root appData
\r
116 appDataEntryReport(appD, archive, cascade, outstr);
\r
117 if (appD.getInstanceCount() > 0) {
\r
118 Instance inst[] = appD.getInstance();
\r
119 for (int i = 0, j = inst.hashCode(); i < j; i++) {
\r
120 outstr.println("Data for App Instance URN: '" + inst[i].getUrn());
\r
121 appDataEntryReport(inst[i], archive, cascade, outstr);
\r
124 if (appD.getUserCount() > 0) {
\r
125 User users[] = appD.getUser();
\r
126 for (int i = 0, j = users.length; i < j; i++) {
\r
127 outstr.println("Data for User '" + users[i].getFullname() + "' of '"
\r
128 + users[i].getOrganization() + "'");
\r
129 appDataEntryReport(users[i], archive, cascade, outstr);
\r
137 public static boolean reportDocument(VamsasDocument document,
\r
138 VamsasArchiveReader archive, boolean cascade, PrintStream outstr) {
\r
139 if (document != null) {
\r
140 outstr.println("Vamsas Document version '" + document.getVersion() + "'");
\r
141 reportProvenance(document.getProvenance(), outstr);
\r
142 outstr.print("Document contains " + document.getVAMSASCount()
\r
143 + " VAMSAS Elements and " + document.getApplicationDataCount()
\r
144 + " Application data elements.\n");
\r
145 if (document.getVAMSASCount() > 0 && cascade)
\r
146 rootReport(document.getVAMSAS(), true, outstr);
\r
147 if (document.getApplicationDataCount() > 0) {
\r
148 outstr.print("There are " + document.getApplicationDataCount()
\r
149 + " ApplicationData references.\n");
\r
150 ApplicationData appd[] = document.getApplicationData();
\r
151 for (int i = 0, j = appd.length; i < j; i++) {
\r
152 outstr.print("Application " + i + ": '" + appd[i].getName()
\r
153 + "'\nVersion '" + appd[i].getVersion() + "'\n");
\r
154 outstr.print("AppData is :");
\r
155 appDataReport(appd[i], archive, cascade, outstr);
\r
161 outstr.println("Document Object is null");
\r
167 * summarises all the datasets in a vamsas document.
\r
176 public static boolean rootReport(VAMSAS[] roots, boolean cascade,
\r
177 PrintStream outstr) {
\r
178 if (roots != null) {
\r
179 for (int i = 0; i < roots.length; i++) {
\r
180 VAMSAS r = roots[i];
\r
182 outstr.print("Vamsas Root " + i + " (id="
\r
183 + ((r.getId() != null) ? r.getId() : "<none>") + ") contains "
\r
184 + (ds = r.getDataSetCount()) + " DataSets, "
\r
185 + (tr = r.getTreeCount()) + " Global trees\n");
\r
186 outputVobjectState(r, outstr);
\r
188 for (int j = 0; j < ds; j++) {
\r
189 outstr.println("Dataset " + j);
\r
190 cascade = datasetReport(r.getDataSet(j), true, outstr) && cascade;
\r
192 for (int j = 0; j < tr; j++) {
\r
193 outstr.println("Global tree " + j);
\r
194 cascade = treeReport(r.getTree(j), true, outstr) && cascade;
\r
203 public static void outputVobjectState(Vobject v, PrintStream outstr) {
\r
204 outstr.print(" (Object is: ");
\r
205 boolean comma = false;
\r
206 if (v.is__stored_in_document()) {
\r
207 outstr.print(" stored");
\r
210 if (v.isNewInDocument()) {
\r
214 outstr.print(" new in document");
\r
216 if (v.isUpdated()) {
\r
220 outstr.print(" updated since last read");
\r
222 outstr.println(")");
\r
225 public static boolean datasetReport(DataSet ds, boolean cascade,
\r
226 PrintStream outstr) {
\r
228 reportProvenance(ds.getProvenance(), outstr);
\r
229 outputVobjectState(ds, outstr);
\r
230 outstr.println("Dataset contains : " + ds.getSequenceCount()
\r
231 + " sequences, " + ds.getAlignmentCount() + " alignments and "
\r
232 + ds.getTreeCount() + " trees.");
\r
234 alignmentReport(ds.getAlignment(), true, outstr);
\r
238 public static boolean alignmentReport(Alignment[] al, boolean cascade,
\r
239 PrintStream outstr) {
\r
240 boolean val = true;
\r
241 if (al != null && al.length > 0) {
\r
242 for (int i = 0; i < al.length; i++) {
\r
243 outstr.println("Alignment "
\r
245 + (al[i].isRegistered() ? " (" + al[i].getVorbaId() + ")"
\r
246 : " (unregistered)"));
\r
247 outputVobjectState(al[i], outstr);
\r
249 reportProvenance(al[i].getProvenance(), outstr);
\r
250 outstr.println("Involves " + al[i].getAlignmentSequenceCount()
\r
251 + " sequences, has " + al[i].getAlignmentAnnotationCount()
\r
252 + " annotations and " + al[i].getTreeCount() + " trees.");
\r
254 for (int t = 0; t < al[i].getTreeCount(); t++)
\r
255 treeReport(al[i].getTree(t), true, outstr);
\r
262 public static boolean treeReport(Tree t, boolean cascade, PrintStream outstr) {
\r
263 outstr.print("Tree: '" + t.getTitle() + "' ");
\r
264 outputVobjectState(t, outstr);
\r
265 return !cascade || reportProvenance(t.getProvenance(), outstr);
\r