/* * */ 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 uk.ac.vamsas.client.ClientHandle; import uk.ac.vamsas.client.IClientAppdata; import uk.ac.vamsas.client.IClientDocument; import uk.ac.vamsas.client.UserHandle; import uk.ac.vamsas.client.Vobject; import uk.ac.vamsas.client.VorbaId; import uk.ac.vamsas.objects.core.ApplicationData; import uk.ac.vamsas.objects.core.User; import uk.ac.vamsas.objects.core.VAMSAS; import uk.ac.vamsas.objects.core.VamsasDocument; import uk.ac.vamsas.objects.utils.AppDataReference; import uk.ac.vamsas.test.objects.Core; /** * Maintains a collection of vamsas objects, appdatas and states, * and provides api for a SimpleClient's client. * TODO: test and migrate ArchiveClient.getAppData methods to here and retest in ExampleApplication * @author jimp */ public class ClientDocument extends uk.ac.vamsas.client.ClientDocument implements IClientDocument { private static Log log = LogFactory.getLog(ClientDocument.class); private VamsasDocument doc; protected SimpleClient sclient; protected VamsasArchive iohandler = 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; } /** * * prepare Application-side dataset from the vamsas Document iohandler * @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 iohandler */ this.sclient = sclient; iohandler = docHandler; this.doc = doc; _VamsasRoots=doc.getVAMSAS(); } /* * (non-Javadoc) * * @see uk.ac.vamsas.client.IClientDocument#getObject(uk.ac.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 uk.ac.vamsas.client.IClientDocument#getObjects(uk.ac.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