package jalview.rest; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jalview.api.AlignmentViewPanel; import jalview.bin.Console; import jalview.datamodel.AlignmentI; import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; import jalview.gui.Desktop; import jalview.gui.SequenceFetcher; import jalview.util.DBRefUtils; public class FetchSequencesEndpoint extends AbstractEndpointAsync { public FetchSequencesEndpoint(API api) { super(api, path, name, parameters, description); } private static final String path = "fetchsequences"; private static final String name = "Fetch Sequences"; private static final String parameters = "/"; private static final String description = "Fetch sequences from online resource"; private SequenceFetcher sf; @Override protected void initialise(HttpServletRequest request, HttpServletResponse response) { if (!checkParameters(request, response, 2)) { return; } String[] parameters = getEndpointPathParameters(request); String dbName = parameters[0]; String dbId = parameters[1]; setId(request, dbName + "::" + dbId); saveParameters(request); if (checkStatus(request, response)) return; String db = DBRefUtils.getCanonicalName(dbName); Desktop desktop = Desktop.instance; sf = new SequenceFetcher(desktop, db, dbId, false); setCompletableFuture(sf.ok_actionPerformed(true, getId())); } protected void processAsync(HttpServletRequest request, HttpServletResponse response, Map map) { // all the work being done by the SequenceFetcher! Console.warn("THIS SHOULD NOT BE RUN"); } @Override protected void atEnd() { sf.close_actionPerformed(null); } @Override protected String finishedResponseString(HttpServletRequest request, HttpServletResponse response) { AlignFrame af = getAlignFrameUsingId(request); if (af == null) return null; List aps = (List) af .getAlignPanels(); StringBuilder sb = new StringBuilder(); for (AlignmentViewPanel ap : aps) { AlignmentI al = ap.getAlignment(); if (al == null) continue; List seqs = (List) al.getSequences(); for (SequenceI seq : seqs) { if (sb.length() > 0) sb.append(","); sb.append(seq.getName()); seq.setStart(1000); } } sb.insert(0, "sequences="); sb.append("\n"); return sb.toString(); } }