X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Forg%2Fvamsas%2Fclient%2Fsimpleclient%2FSimpleDocBinding.java;fp=src%2Forg%2Fvamsas%2Fclient%2Fsimpleclient%2FSimpleDocBinding.java;h=c0c80849d4f8e9c0fd6781a2637d7d6ab8350f2f;hb=e15b38a5b95e0aa5b11707728abb539c073fe27c;hp=0000000000000000000000000000000000000000;hpb=bfd813ba38e1d432d49a311422ade5ba33203a43;p=vamsas.git diff --git a/src/org/vamsas/client/simpleclient/SimpleDocBinding.java b/src/org/vamsas/client/simpleclient/SimpleDocBinding.java new file mode 100644 index 0000000..c0c8084 --- /dev/null +++ b/src/org/vamsas/client/simpleclient/SimpleDocBinding.java @@ -0,0 +1,138 @@ +package org.vamsas.client.simpleclient; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Vector; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.vamsas.client.Vobject; +import org.vamsas.client.VorbaIdFactory; +import org.vamsas.client.VorbaXmlBinder; +import org.vamsas.objects.core.VAMSAS; +import org.vamsas.objects.core.VamsasDocument; +import org.vamsas.objects.utils.AppDataReference; +import org.vamsas.objects.utils.DocumentStuff; +import org.vamsas.objects.utils.ProvenanceStuff; +import org.vamsas.objects.utils.document.VersionEntries; + +/** + * Base class for SimpleClient Vamsas Document Object Manipulation + * holds static vamsasDocument from XML routines and + * state objects for a particular unmarshalled Document instance. + * @author jimp + */ + + +public class SimpleDocBinding { + + protected VorbaIdFactory vorba; + protected static Log log = LogFactory.getLog(SimpleDocBinding.class); + + /** + * @return Returns the vorba. + */ + public VorbaIdFactory getVorba() { + return vorba; + } + + /** + * @param vorba The vorba to set. + */ + public void setVorba(VorbaIdFactory vorba) { + this.vorba = vorba; + } + + /** + * Uses VorbaXmlBinder to retrieve the VamsasDocument from the given stream + */ + public VamsasDocument getVamsasDocument(VamsasArchiveReader oReader) throws IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException { + if (oReader!=null) { + // check the factory + if (vorba==null) { + log.error("Invalid SimpleDocument construction - no VorbaIdFactory defined!"); + return null; + } + + if (oReader.isValid()) { + // Read vamsasDocument.xsd instance + InputStreamReader vdoc = new InputStreamReader(oReader.getVamsasDocumentStream()); + Object unmarsh[] = VorbaXmlBinder.getVamsasObjects(vdoc, vorba, new VamsasDocument()); + if (unmarsh==null) + log.fatal("Couldn't unmarshall document!"); + + Vobject vobjs = (Vobject) unmarsh[0]; + if (vobjs!=null) { + VamsasDocument doc=(VamsasDocument) vobjs; + if (doc!=null) + return doc; + } + log.debug("Found no VamsasDocument object in properly formatted Vamsas Archive."); + } else { + // deprecated data handler (vamsas.xsd instance) + InputStream vxmlis = oReader.getVamsasXmlStream(); + if (vxmlis!=null) { // Might be an old vamsas file. + BufferedInputStream ixml = new BufferedInputStream(oReader.getVamsasXmlStream()); + InputStreamReader vxml = new InputStreamReader(ixml); + Object unmarsh[] = VorbaXmlBinder.getVamsasObjects(vxml, vorba, new VAMSAS()); + + if (unmarsh==null) + log.fatal("Couldn't unmarshall document!"); + + VAMSAS root[]= new VAMSAS[] { null}; + root[0] = (VAMSAS) unmarsh[0]; + + if (root[0]==null) { + log.debug("Found no VAMSAS object in VamsasXML stream."); + } else { + log.debug("Making new VamsasDocument from VamsasXML stream."); + VamsasDocument doc = DocumentStuff.newVamsasDocument(root, + ProvenanceStuff.newProvenance( + vorba.getUserHandle().getFullName(), + "Vamsas Document constructed from vamsas.xml"), VersionEntries.ALPHA_VERSION); + // VAMSAS: decide on 'system' operations provenance form + // LATER: implement classes for translating Vorba properties into provenance user fields. + // VAMSAS: decide on machine readable info embedding in provenance should be done + root[0]=null; + root=null; + return doc; + } + } + } + } + // otherwise - there was no valid original document to read. + return null; + } + + /** + * Extract all jarEntries in an archive referenced by the vamsas document + * LATER: a family of methods for finding extraneous jarEntries , and invalid appDataReferences + * @param doc + * @param oReader + * @return array of the subset of JarEntry names that are referenced in doc + */ + public Vector getReferencedEntries(VamsasDocument doc, VamsasArchiveReader oReader) { + if (oReader==null) + return null; + if (doc==null) { + try { doc = getVamsasDocument(oReader); } + catch (Exception e) { log.warn("Failed to get document from "+oReader.jfile.getName()); }; + } + Vector docrefs = AppDataReference.getAppDataReferences(doc); + if (docrefs==null) + return null; + Vector entries = oReader.getExtraEntries(); + if (entries!=null && docrefs.size()>0) { + int i=0, j=entries.size(); + do { + if (!docrefs.contains(entries.get(i))) { + entries.remove(i); + j--; + } else + i++; + } while (i