/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)
- * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * 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
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
/**
* @throws IOException
- * or other if clientfactory instantiation failed.
+ * or other if clientfactory instantiation failed.
* @return list of current sessions or null if no session exists.
*/
public static String[] getSessionList() throws Exception
* session
*
* @param sess
- * null or a valid session url
+ * null or a valid session url
* @param vamsasDocument
- * null or a valid vamsas document file
+ * null or a valid vamsas document file
* @return false if no vamsas connection was made
*/
private boolean initClientSession(String sess, File vamsasDocument)
Cache.log.info("Jalview updating to the Vamsas Session.");
dealWithDocumentUpdate(true);
- /*
- * IClientDocument cdoc=null; try { cdoc = vclient.getClientDocument(); }
- * catch (Exception e) { Cache.log.error("Failed to get client document
- * for update."); // RAISE A WARNING DIALOG disableGui(false); return; }
- * updateVamsasDocument(cdoc); updateJalviewGui();
- * cdoc.setVamsasRoots(cdoc.getVamsasRoots()); // propagate update flags
- * back vclient.updateDocument(cdoc);
- */
Cache.log.info("Jalview finished updating to the Vamsas Session.");
- // TODO Auto-generated method stub
}
});
udthread.start();
}
+ /**
+ * leave a session, prompting the user to save if necessary
+ */
public void end_session()
{
+ end_session(true);
+ }
+
+ private boolean promptUser = true;
+
+ /**
+ * leave a session, optionally prompting the user to save if necessary
+ *
+ * @param promptUser
+ * when true enable prompting by this application
+ */
+
+ public void end_session(boolean promptUser)
+ {
if (!inSession())
throw new Error("Jalview not connected to Vamsas session.");
Cache.log.info("Jalview disconnecting from the Vamsas Session.");
{
if (joinedSession)
{
+ boolean ourprompt = this.promptUser;
+ this.promptUser = promptUser;
vclient.finalizeClient();
Cache.log.info("Jalview has left the session.");
+ this.promptUser = ourprompt; // restore default value
}
else
{
* do a vamsas document update or update jalview from the vamsas document
*
* @param fromJalview
- * true to update from jalview to the vamsas document
+ * true to update from jalview to the vamsas document
*/
protected void dealWithDocumentUpdate(boolean fromJalview)
{
{
public void propertyChange(PropertyChangeEvent evt)
{
- Cache.log
- .debug("Asking user if the vamsas session should be stored.");
- int reply = JOptionPane
- .showInternalConfirmDialog(
- Desktop.desktop,
- "The current VAMSAS session has unsaved data - do you want to save it ?",
- "VAMSAS Session Shutdown",
- JOptionPane.YES_NO_OPTION,
- JOptionPane.QUESTION_MESSAGE);
-
- if (reply == JOptionPane.YES_OPTION)
+ if (client.promptUser)
{
- Cache.log.debug("Prompting for vamsas store filename.");
- Desktop.instance.vamsasSave_actionPerformed(null);
- Cache.log.debug("Finished attempt at storing document.");
+ Cache.log
+ .debug("Asking user if the vamsas session should be stored.");
+ int reply = JOptionPane
+ .showInternalConfirmDialog(
+ Desktop.desktop,
+ "The current VAMSAS session has unsaved data - do you want to save it ?",
+ "VAMSAS Session Shutdown",
+ JOptionPane.YES_NO_OPTION,
+ JOptionPane.QUESTION_MESSAGE);
+
+ if (reply == JOptionPane.YES_OPTION)
+ {
+ Cache.log.debug("Prompting for vamsas store filename.");
+ Desktop.instance.vamsasSave_actionPerformed(null);
+ Cache.log
+ .debug("Finished attempt at storing document.");
+ }
+ Cache.log
+ .debug("finished dealing with REQUESTTOCLOSE event.");
+ }
+ else
+ {
+ Cache.log
+ .debug("Ignoring store document request (promptUser==false)");
}
- Cache.log
- .debug("finished dealing with REQUESTTOCLOSE event.");
}
});
Cache.log.debug("Added Jalview handler for vamsas document updates.");
* IO failed
*
* @throws Error
- * if backup_objectMapping was not called.
+ * if backup_objectMapping was not called.
*/
public void recover_objectMappingBackup()
{
// we only care about AlignmentSequence selections
SelectionMessage sm = (SelectionMessage) message;
sm.validate();
- System.err.println("Received\n"+sm.getRawMessage());
- Object[] jvobjs = sm.getVorbaIDs()==null ? null : new Object[sm.getVorbaIDs().length];
- if (jvobjs==null)
+ System.err.println("Received\n" + sm.getRawMessage());
+ Object[] jvobjs = sm.getVorbaIDs() == null ? null
+ : new Object[sm.getVorbaIDs().length];
+ if (jvobjs == null)
{
- // TODO: rationalise : can only clear a selection over a referred to object
- ssm.sendSelection(null,null,me);
+ // TODO: rationalise : can only clear a selection over a
+ // referred to object
+ ssm.sendSelection(null, null, me);
return;
}
Class type = null;
if (jvobjs[o] == null)
{
// can't cope with selections for unmapped objects
- //continue;
+ // continue;
}
if (type == null)
{
;
if (type != jvobjs[o].getClass())
{
- send=false;
+ send = false;
// discard - can't cope with selections over mixed objects
- //continue;
+ // continue;
}
}
SequenceGroup jselection = null;
{
if (jvobjs.length == 1)
{
- // TODO if (sm.isNone())// send a message to select the specified columns over the
+ // TODO if (sm.isNone())// send a message to select the
+ // specified columns over the
// given
// alignment
SequenceI seq;
boolean aligned = ((jalview.datamodel.Sequence) jvobjs[0])
.getDatasetSequence() != null;
- int maxWidth=0;
+ int maxWidth = 0;
if (aligned)
{
jselection = new SequenceGroup();
- jselection.addSequence(seq =
- (jalview.datamodel.Sequence) jvobjs[0], false);
+ jselection.addSequence(
+ seq = (jalview.datamodel.Sequence) jvobjs[0],
+ false);
maxWidth = seq.getLength();
}
- for (int c = 1; aligned && jvobjs.length > 1 && c < jvobjs.length; c++)
+ for (int c = 1; aligned && jvobjs.length > 1
+ && c < jvobjs.length; c++)
{
if (((jalview.datamodel.Sequence) jvobjs[c])
.getDatasetSequence() == null)
else
{
jselection.addSequence(
- seq = (jalview.datamodel.Sequence) jvobjs[c], false);
- if (maxWidth<seq.getLength())
+ seq = (jalview.datamodel.Sequence) jvobjs[c],
+ false);
+ if (maxWidth < seq.getLength())
{
maxWidth = seq.getLength();
}
-
+
}
}
if (!aligned)
// select the associated ranges on them.
if (sm.getRanges() != null)
{
- int[] prange = uk.ac.vamsas.objects.utils.Range.getBounds(sm.getRanges());
- boolean rangeset=false;
+ int[] prange = uk.ac.vamsas.objects.utils.Range
+ .getBounds(sm.getRanges());
+ boolean rangeset = false;
colsel = new ColumnSelection();
- prange = uk.ac.vamsas.objects.utils.Range.getIntervals(sm.getRanges());
- for (int p=0;p<prange.length;p+=2)
+ prange = uk.ac.vamsas.objects.utils.Range
+ .getIntervals(sm.getRanges());
+ for (int p = 0; p < prange.length; p += 2)
{
- int d = (prange[p]<=prange[p+1]) ? 1 : -1;
+ int d = (prange[p] <= prange[p + 1]) ? 1 : -1;
if (!rangeset)
{
- if (jselection!=null)
+ 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;
+ // set the bounds of the selected area using the first
+ // interval.
+ jselection.setStartRes(prange[p] - 1);
+ jselection.setEndRes(prange[p + 1] - 1);
+ rangeset = true;
}
- } else {
- // try to join up adjacent columns to make a larger selection
+ }
+ else
+ {
+ // 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())
+ 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);
+ jselection.setStartRes(prange[p + l] - 1);
}
- if (jselection.getEndRes()<=maxWidth && prange[p+u]==(jselection.getEndRes()+2))
+ 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+d; sr!=de; sr+=d)
+ for (int sr = prange[p], er = prange[p + 1], de = er
+ + d; sr != de; sr += d)
{
- colsel.addElement(sr-1);
+ colsel.addElement(sr - 1);
}
}
}
VorbaId v = (VorbaId) jv2vobj.get(seq);
if (v != null)
{
- Cache.log.debug("Mouse over " + v.getId() + " bound to "
- + seq + " at " + index);
+ // this should really be a trace message.
+ // Cache.log.debug("Mouse over " + v.getId() + " bound to "
+ // + seq + " at " + index);
last = seq;
i = index;
MouseOverMessage message = new MouseOverMessage(v.getId(),
public void selection(SequenceGroup seqsel,
ColumnSelection colsel, SelectionSource source)
{
- if (vobj2jv==null)
+ if (vobj2jv == null)
{
- Cache.log.warn("Selection listener still active for dead session.");
+ Cache.log
+ .warn("Selection listener still active for dead session.");
// not in a session.
return;
}
if (source != me)
{
- AlignmentI visal=null;
+ AlignmentI visal = null;
if (source instanceof AlignViewport)
{
visal = ((AlignViewport) source).getAlignment();
if (source instanceof AlignViewport)
{
// the empty selection.
- sm = new SelectionMessage("jalview", new String[] { ((AlignViewport)source).getSequenceSetId()}, null, true);
- } else {
+ sm = new SelectionMessage("jalview", new String[]
+ { ((AlignViewport) source).getSequenceSetId() }, null,
+ true);
+ }
+ else
+ {
// the empty selection.
sm = new SelectionMessage("jalview", null, null, true);
}
t = null;
}
Input range = null;
- if (seqsel!=null && colsel != null)
+ if (seqsel != null && colsel != null)
{
// deparse the colsel into positions on the vamsas alignment
// sequences
range = new Input();
- if (colsel.getSelected()!=null && colsel.getSelected().size()>0 && visal!=null && seqsel.getSize()==visal.getHeight())
+ if (colsel.getSelected() != null
+ && colsel.getSelected().size() > 0
+ && visal != null
+ && seqsel.getSize() == visal.getHeight())
{
- // gather selected columns outwith the sequence positions too
+ // gather selected columns outwith the sequence positions
+ // too
Enumeration cols = colsel.getSelected().elements();
while (cols.hasMoreElements())
{
int ival = ((Integer) cols.nextElement()).intValue();
Pos p = new Pos();
- p.setI(ival+1);
+ p.setI(ival + 1);
range.addPos(p);
}
- } else {
- int[] intervals = colsel.getVisibleContigs(seqsel.getStartRes(), seqsel.getEndRes()+1);
- for (int iv=0;iv<intervals.length; iv+=2)
+ }
+ else
+ {
+ int[] intervals = colsel.getVisibleContigs(seqsel
+ .getStartRes(), seqsel.getEndRes() + 1);
+ for (int iv = 0; iv < intervals.length; iv += 2)
{
Seg s = new Seg();
- s.setStart(intervals[iv]+1); // vamsas indices begin at 1, not zero.
- s.setEnd(intervals[iv+1]+1);
+ s.setStart(intervals[iv] + 1); // vamsas indices begin at
+ // 1, not zero.
+ s.setEnd(intervals[iv + 1] + 1);
s.setInclusive(true);
range.addSeg(s);
}
}
}
- sm = new SelectionMessage("jalview", vobj, range);
+ if (vobj.length > 0)
+ {
+ sm = new SelectionMessage("jalview", vobj, range);
+ }
+ else
+ {
+ sm = null;
+ }
+ }
+ if (sm != null)
+ {
+ sm.validate(); // debug
+ Cache.log.debug("Selection Message\n" + sm.getRawMessage());
+ pm.sendMessage(sm);
}
- sm.validate(); // debug
- Cache.log.debug("Selection Message\n"+sm.getRawMessage());
- pm.sendMessage(sm);
}
}
}
}
}
+
+ public String getCurrentSession()
+ {
+ if (vclient != null)
+ {
+ return (vclient.getSessionUrn());
+ }
+ return null;
+ }
}