X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Forg%2Fvamsas%2Fclient%2Fsimpleclient%2FClientDocument.java;h=3b654f8bf7e4dfa9ddbab641ef902845c1a6b09c;hb=5156a824b13ecd091af9f84870f41d83eb59bd71;hp=a6bb78c731c7e19c4a8b03404a9a2d1806865088;hpb=35705585bd17903407fdcbd561b9bc5ae5bcd0b0;p=vamsas.git diff --git a/src/org/vamsas/client/simpleclient/ClientDocument.java b/src/org/vamsas/client/simpleclient/ClientDocument.java index a6bb78c..3b654f8 100644 --- a/src/org/vamsas/client/simpleclient/ClientDocument.java +++ b/src/org/vamsas/client/simpleclient/ClientDocument.java @@ -3,78 +3,64 @@ */ package org.vamsas.client.simpleclient; -import java.util.Hashtable; +import java.io.IOException; import java.util.Vector; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.vamsas.client.IClient; +import org.vamsas.client.ClientHandle; import org.vamsas.client.IClientAppdata; import org.vamsas.client.IClientDocument; +import org.vamsas.client.UserHandle; +import org.vamsas.client.Vobject; import org.vamsas.client.VorbaId; -import org.vamsas.client.object; -import org.vamsas.objects.core.AppData; import org.vamsas.objects.core.ApplicationData; import org.vamsas.objects.core.User; import org.vamsas.objects.core.VAMSAS; import org.vamsas.objects.core.VamsasDocument; import org.vamsas.objects.utils.AppDataReference; +import org.vamsas.test.objects.Core; /** - * @author jimp Contains a collection of vamsas objects and reference to a - * specified ClientHandle's information. + * Maintains a collection of vamsas objects, appdatas and states, and provides api for a SimpleClient's client. + * @author jimp */ public class ClientDocument extends org.vamsas.client.ClientDocument implements IClientDocument { private static Log log = LogFactory.getLog(ClientDocument.class); private VamsasDocument doc; - protected IClient vorba; - protected ApplicationData appsglobal=null; - protected User usersdata=null; - protected byte[] appData=null; + protected SimpleClient sclient; protected VamsasArchive archive = null; /** + * indicate if new data has been incorporated + */ + private boolean isModified = false; + /** + * Public method for internal use by SimpleClient. + * @return true if document has been modified. + */ + public boolean isModified() { + return isModified; + } + private Vector updatedObjects=null; + /** * * prepare Application-side dataset from the vamsas Document archive * @param doc - the dataset * @param docHandler - the sessionFile IO handler * @param Factory - the source of current and new vorbaIds - * @param vorba - the client instance + * @param sclient - the simpleclient instance */ - protected ClientDocument(VamsasDocument doc, VamsasArchive docHandler, IdFactory Factory, IClient vorba) { + protected ClientDocument(VamsasDocument doc, VamsasArchive docHandler, IdFactory Factory, SimpleClient sclient) { super(Factory.getVorbaIdHash(), Factory); + /** * prepare Application-side dataset from the vamsas Document archive */ - this.vorba = vorba; + this.sclient = sclient; archive = docHandler; this.doc = doc; - extractAppData(); - } - /** - * gets appropriate app data for the application, if it exists in this dataset - * - */ - private void extractAppData() { - Vector apldataset = AppDataReference.getUserandApplicationsData( - doc, vorbafactory.getUserHandle(), vorbafactory.getClientHandle()); - if (apldataset!=null) { - if (apldataset.size()>0) { - AppData clientdat = (AppData) apldataset.get(0); - if (clientdat instanceof ApplicationData) { - appsglobal = (ApplicationData) clientdat; - if (apldataset.size()>1) { - clientdat = (AppData) apldataset.get(1); - if (clientdat instanceof User) - usersdata = (User) clientdat; - if (apldataset.size()>2) - log.info("Ignoring additional ("+(apldataset.size()-2)+") AppDatas returned by document appdata query."); - } - } else { - log.warn("Unexpected entry in AppDataReference query: id="+clientdat.getVorbaId()+" type="+clientdat.getClass().getName()); - } - } - } + updatedObjects=null; /// TODO: correct this line } /* @@ -82,9 +68,14 @@ public class ClientDocument extends org.vamsas.client.ClientDocument implements * * @see org.vamsas.client.IClientDocument#getObject(org.vamsas.client.VorbaId) */ - public object getObject(VorbaId id) { - // TODO: look up id in document object - // retrieve object and return + public Vobject getObject(VorbaId id) { + if (vamsasObjects==null) { + log.debug("getObject called on null objrefs list."); + return null; + } + if (vamsasObjects.containsKey(id)) + return (Vobject) vamsasObjects.get(id); + log.debug("Returning null Vobject reference for id "+id.getId()); return null; } @@ -93,27 +84,93 @@ public class ClientDocument extends org.vamsas.client.ClientDocument implements * * @see org.vamsas.client.IClientDocument#getObjects(org.vamsas.client.VorbaId[]) */ - public object[] getObjects(VorbaId[] ids) { - // TODO: getObject in bulk - return null; + public Vobject[] getObjects(VorbaId[] ids) { + if (vamsasObjects==null) { + log.debug("getObject[] called on null vamsasObjects list."); + return null; + } + Vobject[] vo = new Vobject[ids.length]; + for (int i=0,j=ids.length; i-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