1 package jalview.gbtest;
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.net.BindException;
7 import java.util.HashMap;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
12 import jalview.bin.Cache;
13 import jalview.datamodel.SearchResults;
14 import jalview.datamodel.SequenceI;
15 import jalview.gui.AlignFrame;
16 import jalview.gui.Desktop;
17 import jalview.gui.SeqPanel;
18 import jalview.gui.SequenceFetcher;
19 import jalview.httpserver.AbstractRequestHandler;
20 import jalview.structure.SelectionSource;
21 import jalview.util.DBRefUtils;
23 public class TestListener extends AbstractRequestHandler
24 implements SelectionSource
27 private String MY_PATH = "TEST";
29 private static String viewgene = "viewgene";
31 private static String highlight = "highlight";
33 private HashMap<String, Thread> threadMap = new HashMap<>();
35 private HashMap<String, AlignFrame> alignFrames = new HashMap<>();
38 * Constructor that registers this as an Http request handler on path
39 * /chimeraN, where N is incremented for each instance. Call getUri to get the
40 * resulting URI for this handler.
42 * @param chimeraBinding
43 * @throws BindException
44 * if no free port can be assigned
46 public TestListener() throws BindException
53 protected void processRequest(HttpServletRequest request,
54 HttpServletResponse response) throws IOException
58 try // debugging try -- remove later!
60 URI reqUri = URI.create(request.getRequestURI());
62 Cache.warn("*** request.getRequestURI()=" + request.getRequestURI());
63 Cache.warn("*** reqUri=" + reqUri.toASCIIString());
65 "*** request.getContextPath()=" + request.getContextPath());
66 Cache.warn("*** request.getPathInfo()=" + request.getPathInfo());
68 String pathInfo = request.getPathInfo();
69 Cache.warn("*** pathInfo=" + pathInfo);
70 if (pathInfo.startsWith("/" + viewgene + "/"))
73 String temp = pathInfo.substring(viewgene.length() + 2);
74 String ensemblId = temp.indexOf("/") > -1
75 ? temp.substring(0, temp.indexOf("/"))
77 Cache.warn("*** temp=" + temp);
78 Cache.warn("*** ensemblId=" + ensemblId);
80 // Check whether this ensembl search has already been started
81 // and hasn't finished.
82 StringBuilder idSB = new StringBuilder();
83 // Commenting out HttpSession -- there's no SessionManager (causes
85 // HttpSession session = request.getSession(true);
86 // idSB.append(session == null ? "NOSESSION" : session.getId());
89 // idSB.append(viewgene);
91 idSB.append(ensemblId);
93 String id = request.getParameter("id") == null ? idSB.toString()
94 : request.getParameter("id");
96 Thread worker = threadMap.get(id);
99 String db = DBRefUtils.getCanonicalName("ensembl");
100 Desktop desktop = Desktop.instance;
101 SequenceFetcher sf = new SequenceFetcher(desktop, db, ensemblId);
102 sf.closeDialog(true);
103 sf.saveAlignFrame(id, alignFrames);
104 worker = sf.ok_actionPerformed(true);
105 threadMap.put(id, worker);
107 AlignFrame af = alignFrames.get(id);
108 PrintWriter pw = response.getWriter();
109 pw.println("id=" + id);
110 pw.println("state=" + worker.getState().toString());
111 pw.println("alignframe=" + (af == null ? null : af.getTitle()));
117 else if (pathInfo.startsWith("/" + highlight + "/"))
119 String temp = pathInfo.substring(highlight.length() + 2);
120 String id = temp.indexOf("/") > -1
121 ? temp.substring(0, temp.indexOf("/"))
123 AlignFrame af = alignFrames.get(id);
124 Cache.warn("*** temp=" + temp);
125 Cache.warn("*** id=" + id);
126 PrintWriter pw = response.getWriter();
127 pw.println("id=" + id);
128 pw.println("state=" + threadMap.get(id).getState().toString());
129 pw.println("alignframe=" + (af == null ? null : af.getTitle()));
132 pw.println("error=alignframe not ready");
135 String startS = request.getParameter("start");
136 String endS = request.getParameter("end");
139 if (startS != null || endS != null)
143 start = Integer.parseInt(startS);
144 end = Integer.parseInt(endS);
145 } catch (NumberFormatException e)
147 Cache.warn(Cache.getStackTraceString(e));
148 pw.println("error=couldn't parse start and end");
152 pw.println("start=" + start);
153 pw.println("end=" + end);
155 SeqPanel seqPanel = af.alignPanel.getSeqPanel();
156 SequenceI[] seqs = af.getViewport().getSequenceSelection();
157 SequenceI seq = seqs.length > 0 ? seqs[0] : null;
158 SearchResults sr = new SearchResults();
159 sr.addResult(seq, start, end);
160 seqPanel.highlightSequence(sr);
162 } catch (Exception e)
164 Cache.warn(Cache.getStackTraceString(e));
170 * Returns a display name for this service
173 public String getName()
175 return "TestListener";