/*
- * 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 2.5)
+ * Copyright (C) 2010 J Procter, AM Waterhouse, 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 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.
*
- * 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
+ * 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 Jalview. If not, see <http://www.gnu.org/licenses/>.
*/
package jalview.gui;
Desktop jdesktop = null; // our jalview desktop reference
+ private boolean inInitialUpdate = true;
+
// Cache.preferences for vamsas client session arena
// preferences for check for default session at startup.
// user and organisation stuff.
- public VamsasApplication(Desktop jdesktop, File sessionPath)
+ public VamsasApplication(Desktop jdesktop, File sessionPath,
+ String sessionName)
{
// JBPNote:
// we should create a session URI from the sessionPath and pass it to
// the clientFactory - but the vamsas api doesn't cope with that yet.
this.jdesktop = jdesktop;
- initClientSession(null, sessionPath);
+ initClientSession(null, sessionPath, sessionName);
}
private static uk.ac.vamsas.client.IClientFactory getClientFactory()
* null or a valid vamsas document file
* @return false if no vamsas connection was made
*/
- private boolean initClientSession(String sess, File vamsasDocument)
+ private void initClientSession(String sess, File vamsasDocument)
+ {
+ initClientSession(sess, vamsasDocument, null);
+ }
+
+ private boolean initClientSession(String sess, File vamsasDocument,
+ String newDocSessionName)
{
try
{
}
try
{
- vclient = clientfactory.openAsNewSessionIClient(app,
- vamsasDocument);
+ if (newDocSessionName != null)
+ {
+ vclient = clientfactory.openAsNewSessionIClient(app,
+ vamsasDocument, newDocSessionName);
+ }
+ else
+ {
+ vclient = clientfactory.openAsNewSessionIClient(app,
+ vamsasDocument);
+ }
} catch (InvalidSessionDocumentException e)
{
JOptionPane
addDocumentUpdateHandler();
addStoreDocumentHandler();
startSession();
+ inInitialUpdate = true;
Cache.log
.debug("Jalview loading the Vamsas Session for the first time.");
dealWithDocumentUpdate(false); // we don't push an update out to the
+ inInitialUpdate = false;
// document yet.
Cache.log.debug("... finished update for the first time.");
}
* bindings is made.
*
* @param doc
+ * @return number of views stored in document (updated and new views)
*/
- public void updateVamsasDocument(IClientDocument doc)
+ public int updateVamsasDocument(IClientDocument doc)
{
+ int storedviews = 0;
ensureJvVamsas();
errorsDuringUpdate = false;
errorsDuringAppUpdate = false;
if (frames == null)
{
- return;
+ return 0;
}
Hashtable skipList = new Hashtable();
Hashtable viewset = new Hashtable();
}
else
{
+ storedviews++;
// could try to eliminate sequenceSetId from skiplist ..
// (skipList.containsKey(af.getViewport().getSequenceSetId()))
// remember sequenceSetId so we can skip all the other views on
errorsDuringAppUpdate = true;
}
vds.clearSkipList();
+ return storedviews;
}
private Entry baseProvEntry()
*
* @param fromJalview
* true to update from jalview to the vamsas document
+ * @return total number of stored alignments in the document after the update
*/
- protected void dealWithDocumentUpdate(boolean fromJalview)
+ protected int dealWithDocumentUpdate(boolean fromJalview)
{
+ int storedviews = 0;
// called by update handler for document update.
Cache.log.debug("Updating jalview from changed vamsas document.");
disableGui(true);
}
if (fromJalview)
{
- this.updateVamsasDocument(cdoc);
+ storedviews += updateVamsasDocument(cdoc);
if (Cache.log.isDebugEnabled())
{
Cache.log
ee.printStackTrace(System.err);
// recover object map backup, since its probably corrupted with references
// to Vobjects that don't exist anymore.
- this.recover_objectMappingBackup();
+ recover_objectMappingBackup();
+ storedviews = 0;
}
Cache.log.debug("Finished updating from document change.");
disableGui(false);
+ return storedviews;
}
private void addDocumentUpdateHandler()
{
if (_backup_vobj2jv == null)
{
+ if (inInitialUpdate)
+ {
+ // nothing to recover so just
+ return;
+ }
+
throw new Error(
"IMPLEMENTATION ERROR: Cannot recover vamsas object mappings - no backup was made.");
}
if (jvobjs[o] == null)
{
// can't cope with selections for unmapped objects
- // continue;
+ continue;
}
if (type == null)
{
{
int[] prange = uk.ac.vamsas.objects.utils.Range
.getBounds(sm.getRanges());
- boolean rangeset = false;
- colsel = new ColumnSelection();
+ jselection.setStartRes(prange[0] - 1);
+ jselection.setEndRes(prange[1] - 1);
prange = uk.ac.vamsas.objects.utils.Range
.getIntervals(sm.getRanges());
+ colsel = new ColumnSelection();
for (int p = 0; p < prange.length; p += 2)
{
int d = (prange[p] <= prange[p + 1]) ? 1 : -1;
- if (!rangeset)
+ // try to join up adjacent columns to make a larger
+ // selection
+ // lower and upper bounds
+ int l = (d < 0) ? 1 : 0;
+ int u = (d > 0) ? 1 : 0;
+
+ if (jselection.getStartRes() > 0
+ && prange[p + l] == jselection.getStartRes())
{
- if (jselection != null)
- {
- // set the bounds of the selected area using the first
- // interval.
- jselection.setStartRes(prange[p] - 1);
- jselection.setEndRes(prange[p + 1] - 1);
- rangeset = true;
- }
+ jselection.setStartRes(prange[p + l] - 1);
}
- else
+ if (jselection.getEndRes() <= maxWidth
+ && prange[p + u] == (jselection.getEndRes() + 2))
{
- // try to join up adjacent columns to make a larger
- // selection
- // lower and upper bounds
- int l = (d < 0) ? 1 : 0;
- int u = (d > 0) ? 1 : 0;
-
- if (jselection.getStartRes() > 0
- && prange[p + l] == jselection
- .getStartRes())
- {
- jselection.setStartRes(prange[p + l] - 1);
- }
- if (jselection.getEndRes() <= maxWidth
- && prange[p + u] == (jselection.getEndRes() + 2))
- {
- jselection.setEndRes(prange[p + u] - 1);
- }
+ jselection.setEndRes(prange[p + u] - 1);
}
// mark all the columns in the range.
for (int sr = prange[p], er = prange[p + 1], de = er
{
Seg s = new Seg();
s.setStart(intervals[iv] + 1); // vamsas indices begin at
- // 1, not zero.
+ // 1, not zero.
s.setEnd(intervals[iv + 1] + 1);
s.setInclusive(true);
range.addSeg(s);