*/
public boolean canShowProducts()
{
+ if (viewport == null)
+ return false;
SequenceI[] seqs = viewport.getAlignment().getSequencesArray();
AlignmentI dataset = viewport.getAlignment().getDataset();
alignFrameMap = new HashMap<>();
alignFrameMap.put(id, this);
}
+
+ public static void removeFromAlignFrameCache(String id)
+ {
+ if (alignFrameMap == null)
+ return;
+ alignFrameMap.remove(id);
+ }
}
class PrintThread extends Thread
public void ok_actionPerformed(ActionEvent e, Map<String, String> options)
{
+ ok_actionPerformed(e, options, null);
+ }
+
+ public void ok_actionPerformed(ActionEvent e, Map<String, String> options,
+ String restCacheId)
+ {
String text = getText();
if (text.trim().length() < 1)
{
} catch (Exception ex)
{
}
+
+ // cache for future REST calls
+ if (restCacheId != null)
+ {
+ af.cacheAlignFrameFromRestId(restCacheId);
+ }
}
}
else
* @return sequence position of residue at column, or adjacent residue if at a
* gap
*/
- int setStatusMessage(SequenceI sequence, final int column, int seqIndex)
+ public int setStatusMessage(SequenceI sequence, final int column,
+ int seqIndex)
{
char sequenceChar = sequence.getCharAt(column);
int pos = sequence.findPosition(column);
{
// dumpRequest(request); // debug
processRequest(request, response);
+ } catch (Exception e)
+ {
+ Console.debug("Exception.", e);
} catch (Throwable t)
{
/*
}
}
- protected AlignFrame getAlignFrameFromId(HttpServletRequest request)
+ protected AlignFrame getAlignFrameUsingId(HttpServletRequest request)
{
- return getAlignFrameFromId(request, "fromId");
+ return getAlignFrameUsingFromId(request, getId(request));
}
- protected AlignFrame getAlignFrameFromId(HttpServletRequest request,
+ protected AlignFrame getAlignFrameUsingFromId(HttpServletRequest request)
+ {
+ return getAlignFrameUsingFromId(request, "fromId");
+ }
+
+ protected AlignFrame getAlignFrameUsingFromId(HttpServletRequest request,
String idParam)
{
AlignFrame[] afs = getAlignFrames(request, idParam, false);
import javax.servlet.http.HttpServletResponse;
import jalview.bin.Console;
+import jalview.gui.AlignFrame;
import jalview.rest.RestHandler.Status;
public abstract class AbstractEndpointAsync extends AbstractEndpoint
private Status tempStatus = null;
+ protected void removeFromCaches(HttpServletRequest request)
+ {
+ removeFromCaches(getId(request));
+ }
+
+ protected void removeFromCaches(String id)
+ {
+ CompletableFuture cf = cfMap.get(id);
+ if (cf == null || cf.isDone())
+ cfMap.remove(id);
+ AlignFrame.removeFromAlignFrameCache(id);
+ API.getStatusMap().remove(getId());
+ }
+
protected void setCompletableFuture(CompletableFuture<Void> cf)
{
this.cf = cf;
// subclass method
initialise(request, response);
+ Console.debug("**** STATUS=" + getStatus());
if (checkStatus(request, response, Status.STARTED))
{
+ /*
+ // double check alignframe
+ Console.debug("**** STATUS2=" + getStatus());
+ if (getStatus().compareTo(Status.IN_PROGRESS) > 0
+ && getAlignFrameUsingId(request) == null)
+ {
+ Console.debug("**** STATUS3=" + getStatus());
+ // delete key from cache
+ Console.debug("Cannot find cached AlignFrame for '" + getId()
+ + "', deleting key from cache");
+ removeFromCaches(getId());
+ this.changeStatus(null);
+ this.setCompletableFuture(null);
+ }
+ else
+ {
+ */
String alreadyFinishedString = null;
if (getStatus() == Status.FINISHED)
{
}
returnStatus(request, response, alreadyFinishedString);
return;
+ /*
+ }
+ */
}
if (getCompletableFuture() == null)
protected String finishedResponseString(HttpServletRequest request,
HttpServletResponse response)
{
- AlignFrame af = getAlignFrameFromId(request, "id");
+ AlignFrame af = getAlignFrameUsingId(request);
if (af == null)
return null;
List<AlignmentViewPanel> aps = (List<AlignmentViewPanel>) af
return;
}
- af = getAlignFrameFromId(request);
+ af = getAlignFrameUsingFromId(request);
if (af == null)
{
returnError(request, response, "Could not find results");
AlignFrame[] alignFrames = getAlignFrames(request, true);
if (alignFrames == null)
{
- returnError(request, response, "could not find results");
+ returnError(request, response, "Could not find AlignFrame for '"
+ + getRequestUrl(request) + "'");
return;
}
for (int i = 0; i < alignFrames.length; i++)
try
{
SequenceI seqN = seqs.get(sequenceNum);
+ Console.debug("Found sequence " + seqN.getName() + ":"
+ + seqN.getDisplayId(false));
ssmMap.put(seqN, ssm);
} catch (IndexOutOfBoundsException e)
{
}
Console.debug("Highlighting sequence '" + seq.getName()
+ "' at position " + pos);
- ssm.mouseOverSequence(seq, pos, -1, null);
+ ssm.mouseOverSequence(seq, pos, -1, null, true);
}
}
Map<String, String> options = getOptions(request);
- cap.ok_actionPerformed(null, options);
+ cap.ok_actionPerformed(null, options, getId());
cap.cancel_actionPerformed(null);
}
else if (fileString != null)
import jalview.datamodel.SequenceI;
import jalview.ext.jmol.JmolParser;
import jalview.gui.IProgressIndicator;
+import jalview.gui.SeqPanel;
import jalview.io.AppletFormatAdapter;
import jalview.io.DataSourceType;
import jalview.io.StructureFile;
public void mouseOverSequence(SequenceI seq, int indexpos, int seqPos,
VamsasSource source)
{
+ mouseOverSequence(seq, indexpos, seqPos, source, false);
+ }
+
+ public void mouseOverSequence(SequenceI seq, int indexpos, int seqPos,
+ VamsasSource source, boolean setStatusMessage)
+ {
boolean hasSequenceListeners = handlingVamsasMo
|| !seqmappings.isEmpty();
SearchResultsI results = null;
{
seqPos = seq.findPosition(indexpos);
}
-
+
// precompute so we can also relay structure highlights
if (results == null)
{
- results = MappingUtils.buildSearchResults(seq, seqPos,
- seqmappings);
+ results = MappingUtils.buildSearchResults(seq, seqPos, seqmappings);
}
if (handlingVamsasMo)
{
}
+ Console.debug("MOUSEOVER SEARCH RESULTS: "
+ + (results.isEmpty() ? "EMPTY" : results.getCount()));
+
for (int i = 0; i < listeners.size(); i++)
{
Object listener = listeners.elementAt(i);
StructureListener sl = (StructureListener) listener;
// TODO: consider merging highlightStructure variants second call
// functionally same as first if seq/seqPos is part of the searchResults
- if (highlightStructure(sl, seq, seqPos)==0 && relaySeqMappings)
+ if (highlightStructure(sl, seq, seqPos) == 0 && relaySeqMappings)
{
// structure highlights for mapped sequences
- highlightStructure(sl,results);
+ highlightStructure(sl, results);
}
}
else
if (listener instanceof SequenceListener)
{
final SequenceListener seqListener = (SequenceListener) listener;
+ if (setStatusMessage && seqListener instanceof SeqPanel)
+ {
+ SeqPanel sp = (SeqPanel) seqListener;
+ // THIS IS HIGHLY SUSPECT, ONLY IN FOR DEMO OF
+ // jalview.rest.HighlightSequenceEndpoint
+ sp.setStatusMessage(seq, seqPos - 1, -1);
+ }
if (hasSequenceListeners
&& seqListener.getVamsasSource() != source)
{
}
/**
- * highlights positions in a structure viewer corresponding to one or more positions on sequences
+ * highlights positions in a structure viewer corresponding to one or more
+ * positions on sequences
+ *
* @param sl
* @param searchResults
* @return 0 or number of structure regions highlighted
*/
- public int highlightStructure(StructureListener sl, SearchResultsI searchResults)
+ public int highlightStructure(StructureListener sl,
+ SearchResultsI searchResults)
{
int atomNo;
List<AtomSpec> atoms = new ArrayList<>();
- for (SearchResultMatchI sr: searchResults.getResults())
+ for (SearchResultMatchI sr : searchResults.getResults())
{
SequenceI seq = sr.getSequence();
for (StructureMapping sm : mappings)
|| sm.sequence.getDatasetSequence() == seq
.getDatasetSequence())))
{
- for (int index=sr.getStart();index<=sr.getEnd();index++)
+ for (int index = sr.getStart(); index <= sr.getEnd(); index++)
{
atomNo = sm.getAtomNum(index);
sl.highlightAtoms(atoms);
return atoms.size();
}
+
/**
* Send suitable messages to a StructureListener to highlight atoms
* corresponding to the given sequence position(s)