2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
21 package jalview.io.vamsas;
23 import uk.ac.vamsas.client.Vobject;
26 * Implement the basic logic for synchronising changes to or from the Vamsas
27 * Document. This is a more generic and normalised framework than the one
28 * implemented in DatastoreItem, but probably more tedious to implement. ..
33 public abstract class LocalDocSyncObject extends DatastoreItem
37 * @return null or the local object that is being worked on.
39 public abstract Object getLObject();
43 * @return null or the document object that is being worked on
45 public abstract Vobject getVObject();
48 * endpoint for synchronize when all opreations are finished.
50 public abstract void nextObject();
53 * called if the local object can be safely updated from the bound document
54 * object. public abstract void updateToDoc();
58 * called if the associated document object can be safely updated with the
59 * local changes public abstract void updateToDoc();
63 * @return true if the local object is modified
65 public abstract boolean locallyModified();
69 * @return true if the bound document object is modified
71 public abstract boolean documentModified();
75 * @return true if the document object is locked w.r.t. this object's update.
77 public abstract boolean documentObjectLocked();
81 * @return a new datastore item instance which binds the local object to a new
84 public abstract LocalDocSyncObject newDocumentObject(); // could make this
86 // constructor(Lobject)
90 * @return a new datastore item instance which binds the document object to a
93 public abstract LocalDocSyncObject newLocalObject(); // make this
95 // constructor(Vobject)
98 * apply the update/commit logic as defined in the vamsas paper
100 * @param documentIsUpdated
101 * true if a document update event is being handled
103 public void synchronize(boolean documentIsUpdated)
105 Object Lobject = getLObject();
106 Vobject Vobject = getVObject();
109 // no local binding for document object
110 newLocalObject().synchronize(documentIsUpdated);
115 // no document binding for local object
116 newDocumentObject().synchronize(documentIsUpdated);
118 // Check binding is valid
119 if (getjv2vObj(Lobject) != Vobject)
121 // no local binding for document object
122 newLocalObject().synchronize(documentIsUpdated);
123 // no document binding for local object
124 newDocumentObject().synchronize(documentIsUpdated);