X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2Fvamsas%2FDatastoreItem.java;h=56d9fa4229d913bc1fcf68218b6decbc404de4f9;hb=ec8f3cedf60fb1feed6d34de6b49f6bfa78b9dd8;hp=738d14fd34b1c9cad12b26a86e98e4da0de3792b;hpb=541455bb84cb67379faedfe280096ec5cb91fb21;p=jalview.git diff --git a/src/jalview/io/vamsas/DatastoreItem.java b/src/jalview/io/vamsas/DatastoreItem.java index 738d14f..56d9fa4 100644 --- a/src/jalview/io/vamsas/DatastoreItem.java +++ b/src/jalview/io/vamsas/DatastoreItem.java @@ -1,39 +1,37 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) - * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * - * 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 file is part of Jalview. * - * 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. + * Jalview 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 3 + * of the License, or (at your option) any later version. + * + * Jalview 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 + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.io.vamsas; import jalview.bin.Cache; -import jalview.datamodel.DBRefEntry; -import jalview.gui.TreePanel; import jalview.io.VamsasAppDatastore; +import jalview.util.MessageManager; import java.util.Enumeration; import java.util.Hashtable; import java.util.IdentityHashMap; import java.util.Vector; -import org.apache.commons.logging.Log; - import uk.ac.vamsas.client.IClientDocument; import uk.ac.vamsas.client.Vobject; import uk.ac.vamsas.client.VorbaId; -import uk.ac.vamsas.objects.core.DbRef; import uk.ac.vamsas.objects.core.Entry; import uk.ac.vamsas.objects.core.Provenance; import uk.ac.vamsas.objects.core.Seg; @@ -56,14 +54,18 @@ public abstract class DatastoreItem Hashtable vobj2jv; IdentityHashMap jv2vobj; - - boolean tojalview=false; + + boolean tojalview = false; + /** * shared log instance */ - protected static org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(DatastoreItem.class); + protected static org.apache.log4j.Logger log = org.apache.log4j.Logger + .getLogger(DatastoreItem.class); + /** * note: this is taken verbatim from jalview.io.VamsasAppDatastore + * * @return the Vobject bound to Jalview datamodel object */ protected Vobject getjv2vObj(Object jvobj) @@ -74,8 +76,8 @@ public abstract class DatastoreItem } if (Cache.log.isDebugEnabled()) { - Cache.log.debug("Returning null VorbaID binding for jalview object " - + jvobj); + Cache.log.debug( + "Returning null VorbaID binding for jalview object " + jvobj); } return null; } @@ -93,8 +95,8 @@ public abstract class DatastoreItem if (id == null) { id = cdoc.registerObject(vobj); - Cache.log - .debug("Registering new object and returning null for getvObj2jv"); + Cache.log.debug( + "Registering new object and returning null for getvObj2jv"); return null; } if (vobj2jv.containsKey(vobj.getVorbaId())) @@ -105,8 +107,9 @@ public abstract class DatastoreItem } /** - * note: this is taken verbatim from jalview.io.VamsasAppDatastore - * with added call to updateRegistryEntry + * note: this is taken verbatim from jalview.io.VamsasAppDatastore with added + * call to updateRegistryEntry + * * @param jvobj * @param vobj */ @@ -121,7 +124,8 @@ public abstract class DatastoreItem { Cache.log.error("Failed to get id for " + (vobj.isRegisterable() ? "registerable" - : "unregisterable") + " object " + vobj); + : "unregisterable") + + " object " + vobj); } } if (vobj2jv.containsKey(vobj.getVorbaId()) @@ -129,16 +133,18 @@ public abstract class DatastoreItem { Cache.log.debug( "Warning? Overwriting existing vamsas id binding for " - + vobj.getVorbaId(), new Exception( - "Overwriting vamsas id binding.")); + + vobj.getVorbaId(), + new Exception(MessageManager.getString( + "exception.overwriting_vamsas_id_binding"))); } else if (jv2vobj.containsKey(jvobj) && !((VorbaId) jv2vobj.get(jvobj)).equals(vobj.getVorbaId())) { Cache.log.debug( "Warning? Overwriting existing jalview object binding for " - + jvobj, new Exception( - "Overwriting jalview object binding.")); + + jvobj, + new Exception(MessageManager.getString( + "exception.overwriting_jalview_id_binding"))); } /* * Cache.log.error("Attempt to make conflicting object binding! "+vobj+" id " @@ -151,19 +157,22 @@ public abstract class DatastoreItem vobj2jv.put(vobj.getVorbaId(), jvobj); // JBPNote - better implementing a hybrid invertible hash. jv2vobj.put(jvobj, vobj.getVorbaId()); - if (jvobj==this.jvobj || vobj==this.vobj) + if (jvobj == this.jvobj || vobj == this.vobj) { - updateRegistryEntry(jvobj,vobj); + updateRegistryEntry(jvobj, vobj); } } + /** - * update the vobj and jvobj references and the registry entry for this datastore object - * called by bindjvvobj and replacejvobjmapping + * update the vobj and jvobj references and the registry entry for this + * datastore object called by bindjvvobj and replacejvobjmapping */ - private void updateRegistryEntry(Object jvobj,Vobject vobj) + private void updateRegistryEntry(Object jvobj, Vobject vobj) { - if (this.jvobj!=null && this.vobj!=null) { - Cache.log.debug("updating dsobj registry. ("+this.getClass().getName()+")"); + if (this.jvobj != null && this.vobj != null) + { + Cache.log.debug("updating dsobj registry. (" + + this.getClass().getName() + ")"); } this.jvobj = jvobj; this.vobj = vobj; @@ -172,10 +181,12 @@ public abstract class DatastoreItem /** * replaces oldjvobject with newjvobject in the Jalview Object <> VorbaID - * binding tables - * note: originally taken verbatim from jalview.io.VamsasAppDatastore with added call to updateRegistryEntry + * binding tables note: originally taken verbatim from + * jalview.io.VamsasAppDatastore with added call to updateRegistryEntry + * * @param oldjvobject - * @param newjvobject (may be null to forget the oldjvobject's document mapping) + * @param newjvobject + * (may be null to forget the oldjvobject's document mapping) * */ protected void replaceJvObjMapping(Object oldjvobject, Object newjvobject) @@ -183,15 +194,16 @@ public abstract class DatastoreItem Object vobject = jv2vobj.remove(oldjvobject); if (vobject == null) { - throw new Error( - "IMPLEMENTATION ERROR: old jalview object is not bound ! (" - + oldjvobject + ")"); + throw new Error(MessageManager.formatMessage( + "error.implementation_error_old_jalview_object_not_bound", + new String[] + { oldjvobject.toString() })); } - if (newjvobject!=null) + if (newjvobject != null) { jv2vobj.put(newjvobject, vobject); vobj2jv.put(vobject, newjvobject); - updateRegistryEntry(newjvobject,(Vobject) vobject); + updateRegistryEntry(newjvobject, vobj); } } @@ -206,79 +218,105 @@ public abstract class DatastoreItem initDatastoreItem(datastore); // TODO Auto-generated constructor stub } + /** - * construct and initialise datastore object and retrieve object bound to vobj2 and validate it against boundType + * construct and initialise datastore object and retrieve object bound to + * vobj2 and validate it against boundType + * * @param datastore2 * @param vobj2 * @param boundType */ - public DatastoreItem(VamsasAppDatastore datastore2, Vobject vobj2, Class boundType) + public DatastoreItem(VamsasAppDatastore datastore2, Vobject vobj2, + Class boundType) { this(datastore2); vobj = vobj2; jvobj = getvObj2jv(vobj2); - tojalview=true; - if (jvobj!=null && !(boundType.isAssignableFrom(jvobj.getClass()))) + tojalview = true; + if (jvobj != null && !(boundType.isAssignableFrom(jvobj.getClass()))) { - throw new Error("Implementation Error: Vamsas Document Class "+vobj.getClass()+" should bind to a "+boundType+" (found a "+jvobj.getClass()+")"); + throw new Error(MessageManager.formatMessage( + "error.implementation_error_vamsas_doc_class_should_bind_to_type", + new String[] + { vobj.getClass().toString(), boundType.toString(), + jvobj.getClass().toString() })); } dsReg.registerDsObj(this); } + /** - * construct and initialise datastore object and retrieve document object bound to Jalview object jvobj2 and validate it against boundType - * @param datastore2 the datastore - * @param jvobj2 the jalview object - * @param boundToType - the document object class that the bound object should be assignable from + * construct and initialise datastore object and retrieve document object + * bound to Jalview object jvobj2 and validate it against boundType + * + * @param datastore2 + * the datastore + * @param jvobj2 + * the jalview object + * @param boundToType + * - the document object class that the bound object should be + * assignable from */ - public DatastoreItem(VamsasAppDatastore datastore2, Object jvobj2, Class boundToType) + public DatastoreItem(VamsasAppDatastore datastore2, Object jvobj2, + Class boundToType) { this(datastore2); jvobj = jvobj2; - tojalview=false; + tojalview = false; vobj = getjv2vObj(jvobj); - if (vobj!=null && !(boundToType.isAssignableFrom(vobj.getClass()))) + if (vobj != null && !(boundToType.isAssignableFrom(vobj.getClass()))) { - throw new Error("Implementation Error: Jalview Class "+jvobj2.getClass()+" should bind to a "+boundToType+" (found a "+vobj.getClass()+")"); + throw new Error(MessageManager.formatMessage( + "error.implementation_error_vamsas_doc_class_should_bind_to_type", + new String[] + { jvobj2.getClass().toString(), boundToType.toString(), + vobj.getClass().toString() })); } dsReg.registerDsObj(this); } + /** - * create a new vobj to be added to the document - * for the jalview object jvobj + * create a new vobj to be added to the document for the jalview object jvobj * (jvobj!=null, vobj==null) */ public abstract void addToDocument(); + /** - * handle a conflict where both an existing vobj has been updated - * and a local jalview object has been updated. This method - * is only called from doSync, when an incoming update from the vamsas - * session conflicts with local modifications made by the Jalview user. - * (jvobj!=null, vobj!=null) + * handle a conflict where both an existing vobj has been updated and a local + * jalview object has been updated. This method is only called from doSync, + * when an incoming update from the vamsas session conflicts with local + * modifications made by the Jalview user. (jvobj!=null, vobj!=null) */ public abstract void conflict(); + /** - * update an existing vobj in the document with the data and settings from jvobj - * (jvobj!=null, vobj!=null) + * update an existing vobj in the document with the data and settings from + * jvobj (jvobj!=null, vobj!=null) */ public abstract void updateToDoc(); + /** - * update the local jalview object with the data from an existing vobj in the document - * (jvobj!=null, vobj!=null) + * update the local jalview object with the data from an existing vobj in the + * document (jvobj!=null, vobj!=null) */ public abstract void updateFromDoc(); + /** - * create a new local jvobj bound to the vobj in the document. - * (jvobj==null, vobj!=null) + * create a new local jvobj bound to the vobj in the document. (jvobj==null, + * vobj!=null) */ public abstract void addFromDocument(); - boolean addtodoc=false, conflicted=false,updated=false,addfromdoc=false,success=false; + + boolean addtodoc = false, conflicted = false, updated = false, + addfromdoc = false, success = false; private boolean updatedtodoc; private boolean updatedfromdoc; + /** - * Sync jalview to document. Enact addToDocument, conflict or update dependent on - * existence of a vobj bound to the local jvobj. + * Sync jalview to document. Enact addToDocument, conflict or update dependent + * on existence of a vobj bound to the local jvobj. */ protected void doSync() { @@ -286,7 +324,7 @@ public abstract class DatastoreItem if (vobj == null) { log.debug("adding new vobject to document."); - addtodoc=true; + addtodoc = true; addToDocument(); } else @@ -294,22 +332,23 @@ public abstract class DatastoreItem if (vobj.isUpdated()) { log.debug("Handling update conflict for existing bound vobject."); - conflicted=true; + conflicted = true; conflict(); } else { log.debug("updating existing vobject in document."); - updatedtodoc=true; + updatedtodoc = true; updateToDoc(); } } // no exceptions were encountered... - success=true; + success = true; } + /** - * Update jalview from document. enact addFromDocument if no local jvobj exists, or update iff jvobj - * exists and the vobj.isUpdated() flag is set. + * Update jalview from document. enact addFromDocument if no local jvobj + * exists, or update iff jvobj exists and the vobj.isUpdated() flag is set. */ protected void doJvUpdate() { @@ -317,7 +356,7 @@ public abstract class DatastoreItem if (jvobj == null) { log.debug("adding new vobject to Jalview from Document"); - addfromdoc=true; + addfromdoc = true; addFromDocument(); } else @@ -325,17 +364,19 @@ public abstract class DatastoreItem if (vobj.isUpdated()) { log.debug("updating Jalview from existing bound vObject"); - updatedfromdoc=true; + updatedfromdoc = true; updateFromDoc(); } } } VamsasAppDatastore datastore = null; + /** * object in vamsas document */ protected Vobject vobj = null; + /** * local jalview object */ @@ -347,8 +388,8 @@ public abstract class DatastoreItem { datastore = ds; dsReg = ds.getDatastoreRegisty(); - initDatastoreItem(ds.getProvEntry(), ds.getClientDocument(), ds - .getVamsasObjectBinding(), ds.getJvObjectBinding()); + initDatastoreItem(ds.getProvEntry(), ds.getClientDocument(), + ds.getVamsasObjectBinding(), ds.getJvObjectBinding()); } private void initDatastoreItem(Entry provEntry, IClientDocument cdoc, @@ -383,7 +424,7 @@ public abstract class DatastoreItem * * @param visSeg * @param ensureDirection - * when true - always ensure start is less than end. + * when true - always ensure start is less than end. * @return int[] { start, end, direction} where direction==1 for range running * from end to start. */ @@ -402,8 +443,7 @@ public abstract class DatastoreItem end = start; start = t; } - return new int[] - { start, end, pol < 0 ? 1 : 0 }; + return new int[] { start, end, pol < 0 ? 1 : 0 }; } /** @@ -416,9 +456,9 @@ public abstract class DatastoreItem jalview.datamodel.Provenance jprov = new jalview.datamodel.Provenance(); for (int i = 0; i < prov.getEntryCount(); i++) { - jprov.addEntry(prov.getEntry(i).getUser(), prov.getEntry(i) - .getAction(), prov.getEntry(i).getDate(), prov.getEntry(i) - .getId()); + jprov.addEntry(prov.getEntry(i).getUser(), + prov.getEntry(i).getAction(), prov.getEntry(i).getDate(), + prov.getEntry(i).getId()); } return jprov; @@ -463,7 +503,6 @@ public abstract class DatastoreItem p.addEntry(dummyPEntry(action)); } - /** * @return true if jalview was being updated from the vamsas document */ @@ -495,6 +534,7 @@ public abstract class DatastoreItem { return updatedfromdoc; } + /** * @return true if updateToDoc() was called */