X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fuk%2Fac%2Fvamsas%2Fclient%2Fsimpleclient%2FClientDocument.java;fp=src%2Fuk%2Fac%2Fvamsas%2Fclient%2Fsimpleclient%2FClientDocument.java;h=dde96321791690ab0ba2dc49df86f344ec31765f;hb=5156a824b13ecd091af9f84870f41d83eb59bd71;hp=0000000000000000000000000000000000000000;hpb=43135da6463e5329abbe98a4892c50c6cd1edcfa;p=vamsas.git diff --git a/src/uk/ac/vamsas/client/simpleclient/ClientDocument.java b/src/uk/ac/vamsas/client/simpleclient/ClientDocument.java new file mode 100644 index 0000000..dde9632 --- /dev/null +++ b/src/uk/ac/vamsas/client/simpleclient/ClientDocument.java @@ -0,0 +1,510 @@ +/* + * + */ +package uk.ac.vamsas.client.simpleclient; + +import java.io.IOException; +import java.util.Vector; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +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.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; + +/** + * 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 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 sclient - the simpleclient instance + */ + protected ClientDocument(VamsasDocument doc, VamsasArchive docHandler, IdFactory Factory, SimpleClient sclient) { + super(Factory.getVorbaIdHash(), Factory); + + + /** + * prepare Application-side dataset from the vamsas Document archive + */ + this.sclient = sclient; + archive = docHandler; + this.doc = doc; + updatedObjects=null; /// TODO: correct this line + } + + /* + * (non-Javadoc) + * + * @see org.vamsas.client.IClientDocument#getObject(org.vamsas.client.VorbaId) + */ + 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; + } + + /* + * (non-Javadoc) + * + * @see org.vamsas.client.IClientDocument#getObjects(org.vamsas.client.VorbaId[]) + */ + 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