JAL-1645 Version-Rel Version 2.9 Year-Rel 2015 Licensing glob
[jalview.git] / src / jalview / io / vamsas / LocalDocSyncObject.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9)
3  * Copyright (C) 2015 The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
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.
11  *  
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.
16  * 
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.
20  */
21 package jalview.io.vamsas;
22
23 import uk.ac.vamsas.client.Vobject;
24
25 /**
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. ..
29  * abandoned. Nov 2008
30  * 
31  * @author JimP
32  */
33 public abstract class LocalDocSyncObject extends DatastoreItem
34 {
35   /**
36    * 
37    * @return null or the local object that is being worked on.
38    */
39   public abstract Object getLObject();
40
41   /**
42    * 
43    * @return null or the document object that is being worked on
44    */
45   public abstract Vobject getVObject();
46
47   /**
48    * endpoint for synchronize when all opreations are finished.
49    */
50   public abstract void nextObject();
51
52   /**
53    * called if the local object can be safely updated from the bound document
54    * object. public abstract void updateToDoc();
55    */
56
57   /**
58    * called if the associated document object can be safely updated with the
59    * local changes public abstract void updateToDoc();
60    */
61
62   /**
63    * @return true if the local object is modified
64    */
65   public abstract boolean locallyModified();
66
67   /**
68    * 
69    * @return true if the bound document object is modified
70    */
71   public abstract boolean documentModified();
72
73   /**
74    * 
75    * @return true if the document object is locked w.r.t. this object's update.
76    */
77   public abstract boolean documentObjectLocked();
78
79   /**
80    * 
81    * @return a new datastore item instance which binds the local object to a new
82    *         document object
83    */
84   public abstract LocalDocSyncObject newDocumentObject(); // could make this
85
86   // constructor(Lobject)
87
88   /**
89    * 
90    * @return a new datastore item instance which binds the document object to a
91    *         new local object.
92    */
93   public abstract LocalDocSyncObject newLocalObject(); // make this
94
95   // constructor(Vobject)
96
97   /**
98    * apply the update/commit logic as defined in the vamsas paper
99    * 
100    * @param documentIsUpdated
101    *          true if a document update event is being handled
102    */
103   public void synchronize(boolean documentIsUpdated)
104   {
105     Object Lobject = getLObject();
106     Vobject Vobject = getVObject();
107     if (Lobject == null)
108     {
109       // no local binding for document object
110       newLocalObject().synchronize(documentIsUpdated);
111       return;
112     }
113     if (Vobject == null)
114     {
115       // no document binding for local object
116       newDocumentObject().synchronize(documentIsUpdated);
117     }
118     // Check binding is valid
119     if (getjv2vObj(Lobject) != Vobject)
120     {
121       // no local binding for document object
122       newLocalObject().synchronize(documentIsUpdated);
123       // no document binding for local object
124       newDocumentObject().synchronize(documentIsUpdated);
125     }
126   }
127 }