package org.vamsas.test.simpleclient; import java.util.Hashtable; 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.VorbaId; import org.vamsas.client.simpleclient.ClientDocument; import org.vamsas.client.simpleclient.VamsasArchive; import org.vamsas.client.simpleclient.VamsasArchiveReader; import org.vamsas.objects.core.Entry; import org.vamsas.objects.core.VAMSAS; import org.vamsas.objects.core.VamsasDocument; import org.vamsas.objects.utils.ProvenanceStuff; // simple holder to pass to client. public class ClientDoc { protected boolean isModified=false; private Log log = LogFactory.getLog(ClientDoc.class); protected VamsasDocument doc; public org.vamsas.objects.core.VAMSAS[] _VamsasRoots; protected VamsasArchive iohandler=null; protected VamsasArchiveReader reader=null; private String user=null; private String app=null; /** * @param doc * @param iohandler * @param reader * @param app * @param user */ public ClientDoc(VamsasDocument doc, VamsasArchive iohandler, VamsasArchiveReader reader, String app, String user, Hashtable objrefs) { super(); this.doc = doc; this.iohandler = iohandler; this.reader = reader; this.app = app; this.user = user; this.objrefs = objrefs; _VamsasRoots = doc.getVAMSAS(); } // AppDataOutputStream appd; //AppDataOutputStream userd; /* (non-Javadoc) * @see java.lang.Object#finalize() */ protected Entry getProvenanceEntry(String action) { // VAMSAS: modify schema to allow referencing of user field (plus other issues, ClientUrn field, machine readable action, input parameters, additional data generated notes Entry prov = ProvenanceStuff.newProvenanceEntry(app, user, action); return prov; } public VAMSAS[] getVamsasRoots() { if (doc==null) { log.debug("Null document for getVamsasRoots(), returning null"); return null; } if (iohandler==null) { // LATER: decide on read-only status of ClientDocument object log.warn("getVamsasRoots() called on possibly read-only document."); } if (_VamsasRoots!=null) return _VamsasRoots; VAMSAS[] roots = doc.getVAMSAS(); if (roots == null) { // Make a new one to return to client to get filled. _VamsasRoots = new VAMSAS[] { new VAMSAS() }; // Do provenance now. just in case. doc.getProvenance().addEntry(getProvenanceEntry("Created new document root [id="+_VamsasRoots[0].getId()+"]")); doc.addVAMSAS(_VamsasRoots[0]); } else { _VamsasRoots = new VAMSAS[roots.length]; for (int r=0;r-1) { if (isValidUpdate(newr[k], original[i])) { modified=true; rts.add(newr[k]); newr[k]=null; } else { // LATER: try harder to merge ducument roots. log.warn("Couldn't merge new VAMSAS root "+newr[k].getId()); newr[k] = null; // LATER: this means we ignore mangled roots. NOT GOOD } } else { // add in order. rts.add(original[i]); } } // add remaining (new) roots for (int i=0,j=newr.length; i