X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Forg%2Fvamsas%2Fclient%2FClientDocument.java;h=66eaef0bfed29344215200811fba9f616c80d9d7;hb=20c2d5a36516f2684b272c52c72bf67a65f58388;hp=2a3ce45ce8f66ad2f98f9d09034e7cc6f251dafd;hpb=a54f7d71affe4e9cd7a7b0f6137e44f5b82b7a9d;p=vamsas.git diff --git a/src/org/vamsas/client/ClientDocument.java b/src/org/vamsas/client/ClientDocument.java index 2a3ce45..66eaef0 100644 --- a/src/org/vamsas/client/ClientDocument.java +++ b/src/org/vamsas/client/ClientDocument.java @@ -5,22 +5,52 @@ package org.vamsas.client; import java.util.Hashtable; +import org.vamsas.objects.core.VAMSAS; +import org.vamsas.objects.core.VamsasDocument; + /** - * @author jimp - * Contains a collection of vamsas objects and reference - * to a specified ClientHandle's information. + * @author jimp Contains a collection of vamsas objects and reference to a + * specified ClientHandle's information. */ public class ClientDocument implements IClientDocument { - IClient vorba; - /* (non-Javadoc) + protected IClient vorba; + protected org.vamsas.objects.core.VAMSAS[] roots; + protected byte[] appData; + + /** + * collection of org.vamsas.client.object references + */ + protected Hashtable vamsasObjects; + + /* + * (non-Javadoc) + * * @see org.vamsas.client.IClientDocument#getApplicationData() */ + + /** + * + * @param data + * @param doc + * @param objects + * @param vorba + */ + protected ClientDocument(byte[] data, VAMSAS[] roots, Hashtable objects, IClient vorba) { + // TODO Auto-generated constructor stub + appData = data; + this.roots =roots; + vamsasObjects = objects; + this.vorba = vorba; + } + public byte[] getApplicationData() { // Look up client byte stash using client and user handle - - return null; + return appData; } - /* (non-Javadoc) + + /* + * (non-Javadoc) + * * @see org.vamsas.client.IClientDocument#getObject(org.vamsas.client.VorbaId) */ public object getObject(VorbaId id) { @@ -28,44 +58,112 @@ public class ClientDocument implements IClientDocument { // retrieve object and return return null; } - /* (non-Javadoc) + + /* + * (non-Javadoc) + * * @see org.vamsas.client.IClientDocument#getObjects(org.vamsas.client.VorbaId[]) */ public object[] getObjects(VorbaId[] ids) { // getObject in bulk return null; } - /* (non-Javadoc) + + /* + * (non-Javadoc) + * * @see org.vamsas.client.IClientDocument#getVamsasRoots() */ public object[] getVamsasRoots() { // extract root objects - return null; + if (roots == null) + return new VAMSAS[] { new VAMSAS() }; + return roots; + } + + /** + * update the document with new roots. + */ + public void setVamsasRoots(VAMSAS[] newroots) { + // extract root objects + if (newroots != null) { + // check newroots for objects that were present in the old document + // check to see if the 'old' objects have been modified + // if they have ? we overwrite them with their new version, ensuring that + // provenance is updated. + // if they haven't ? do nothing ? + + for (int i = 0, k = newroots.length; i < k; i++) { + if (newroots[i].isRegistered()) { + // easy - just check if anything has changed and do provenance + object oldversion = getObject(newroots[i].getVorbaId()); + if (oldversion instanceof VAMSAS) { + // TODO: appropriate merging behaviour when two clients have + // modified the same registered object independently + if (newroots[i].get__last_hash() != newroots[i].hashCode()) { + // client has modified this object since last retrieval. + if (newroots[i].get__last_hash() != oldversion.get__last_hash()) { + // object has been modified by another client since this + // client's + // last access to document. + } + } + } else { + throw new Error( + "SimpleClient error when using setVamsasRoots : The vorbaId for object " + + i + + " does not refer to an object of type VAMSAS in the current document!"); + } + } else { + if (!newroots[i].is__stored_in_document()) { + // check if object is modified + if (newroots[i].get__last_hash() != newroots[i].hashCode()) { + // it is - so we add newroots[i] as a new object, with updated + // provenance. + } else { + // do nothing + newroots[i] = null; + } + } else { + // just add newroots[i] as a new object in the document + // - with appropriate provenance. + } + } + } + } } - /* (non-Javadoc) + + /* + * (non-Javadoc) + * * @see org.vamsas.client.IClientDocument#registerObject(org.vamsas.client.object) */ - public VorbaId registerObject(object unregistered) { - // TODO Auto-generated method stub - return null; +public VorbaId registerObject(object unregistered) { + if (!unregistered.isRegistered()) + unregistered.setVorbaId(unregistered.__vorba.makeVorbaId()); + return unregistered.getVorbaId(); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.vamsas.client.IClientDocument#registerObjects(org.vamsas.client.object[]) */ public VorbaId[] registerObjects(object[] unregistered) { - // TODO Auto-generated method stub + if (unregistered!=null) { + VorbaId ids[] = new VorbaId[unregistered.length]; + for (int i=0,k=unregistered.length; i