/* * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4) * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ 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); } } }