package jalview.io.vamsas; import uk.ac.vamsas.client.Vobject; /** * Implement the basic logic for synchronising changes to or from the Vamsas Document * @author JimP */ public abstract class LocalDocSyncObject extends DatastoreItem { /** * * @return null or the local object that is being worked on. */ public abstract Object getLObject(); /** * * @return null or the document object that is being worked on */ public abstract Vobject getVObject(); /** * endpoint for synchronize when all opreations are finished. */ public abstract void nextObject(); /** * called if the local object can be safely updated from the bound document object. */ public abstract void updateFromDoc(); /** * called if the associated document object can be safely updated with the local changes */ public abstract void updateToDoc(); /** * @return true if the local object is modified */ public abstract boolean locallyModified(); /** * * @return true if the bound document object is modified */ public abstract boolean documentModified(); /** * * @return true if the document object is locked w.r.t. this object's update. */ public abstract boolean documentObjectLocked(); /** * * @return a new datastore item instance which binds the local object to a new document object */ public abstract LocalDocSyncObject newDocumentObject(); // could make this constructor(Lobject) /** * * @return a new datastore item instance which binds the document object to a new local object. */ public abstract LocalDocSyncObject newLocalObject(); // make this constructor(Vobject) /** * apply the update/commit logic as defined in the vamsas paper * @param documentIsUpdated true if a document update event is being handled */ public void synchronize(boolean documentIsUpdated) { Object Lobject = getLObject(); Vobject Vobject = getVObject(); if (Lobject==null) { // no local binding for document object newLocalObject().synchronize(documentIsUpdated); return; } if (Vobject==null) { // no document binding for local object newDocumentObject().synchronize(documentIsUpdated); } // Check binding is valid if (getjv2vObj(Lobject)!=Vobject) { // no local binding for document object newLocalObject().synchronize(documentIsUpdated); // no document binding for local object newDocumentObject().synchronize(documentIsUpdated); } } }