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.analysis.SeqsetUtils;
13 import jalview.bin.Cache;
14 import jalview.datamodel.AlignmentI;
15 import jalview.datamodel.SearchResults;
16 import jalview.datamodel.SequenceI;
17 import jalview.gui.AlignFrame;
18 import jalview.gui.Desktop;
19 import jalview.gui.SeqPanel;
20 import jalview.gui.SequenceFetcher;
21 import jalview.httpserver.AbstractRequestHandler;
22 import jalview.structure.SelectionSource;
23 import jalview.structure.VamsasSource;
24 import jalview.util.DBRefUtils;
26 public class TestListener extends AbstractRequestHandler
27 implements SelectionSource, VamsasSource
30 private String MY_PATH = "TEST";
32 private static String viewgene = "viewgene";
34 private static String highlight = "highlight";
36 private HashMap<String, Thread> threadMap = new HashMap<>();
38 private HashMap<String, AlignFrame> alignFrames = new HashMap<>();
41 * Constructor that registers this as an Http request handler on path
42 * /chimeraN, where N is incremented for each instance. Call getUri to get the
43 * resulting URI for this handler.
45 * @param chimeraBinding
46 * @throws BindException
47 * if no free port can be assigned
49 public TestListener() throws BindException
56 protected void processRequest(HttpServletRequest request,
57 HttpServletResponse response) throws IOException
61 try // debugging try -- remove later!
63 URI reqUri = URI.create(request.getRequestURI());
65 Cache.warn("*** request.getRequestURI()=" + request.getRequestURI());
66 Cache.warn("*** reqUri=" + reqUri.toASCIIString());
68 "*** request.getContextPath()=" + request.getContextPath());
69 Cache.warn("*** request.getPathInfo()=" + request.getPathInfo());
71 String pathInfo = request.getPathInfo();
72 Cache.warn("*** pathInfo=" + pathInfo);
73 if (pathInfo.startsWith("/" + viewgene + "/"))
76 String temp = pathInfo.substring(viewgene.length() + 2);
77 String ensemblId = temp.indexOf("/") > -1
78 ? temp.substring(0, temp.indexOf("/"))
80 Cache.warn("*** temp=" + temp);
81 Cache.warn("*** ensemblId=" + ensemblId);
83 // Check whether this ensembl search has already been started
84 // and hasn't finished.
85 StringBuilder idSB = new StringBuilder();
86 // Commenting out HttpSession -- there's no SessionManager (causes
88 // HttpSession session = request.getSession(true);
89 // idSB.append(session == null ? "NOSESSION" : session.getId());
92 // idSB.append(viewgene);
94 idSB.append(ensemblId);
96 String id = request.getParameter("id") == null ? idSB.toString()
97 : request.getParameter("id");
99 Thread worker = threadMap.get(id);
102 String db = DBRefUtils.getCanonicalName("ensembl");
103 Desktop desktop = Desktop.instance;
104 SequenceFetcher sf = new SequenceFetcher(desktop, db, ensemblId);
105 sf.closeDialog(true);
106 sf.saveAlignFrame(id, alignFrames);
107 worker = sf.ok_actionPerformed(true);
108 threadMap.put(id, worker);
110 AlignFrame af = alignFrames.get(id);
111 PrintWriter pw = response.getWriter();
112 pw.println("id=" + id);
113 pw.println("state=" + worker.getState().toString());
114 pw.println("alignframe=" + (af == null ? null : af.getTitle()));
120 else if (pathInfo.startsWith("/" + highlight + "/"))
122 String temp = pathInfo.substring(highlight.length() + 2);
123 String id = temp.indexOf("/") > -1
124 ? temp.substring(0, temp.indexOf("/"))
126 AlignFrame af = alignFrames.get(id);
127 Cache.warn("*** temp=" + temp);
128 Cache.warn("*** id=" + id);
129 PrintWriter pw = response.getWriter();
130 pw.println("id=" + id);
131 pw.println("state=" + threadMap.get(id).getState().toString());
132 pw.println("alignframe=" + (af == null ? null : af.getTitle()));
135 pw.println("error=alignframe not ready");
138 String startS = request.getParameter("start");
139 String endS = request.getParameter("end");
142 if (startS != null || endS != null)
146 start = Integer.parseInt(startS);
147 end = Integer.parseInt(endS);
148 } catch (NumberFormatException e)
150 Cache.warn(Cache.getStackTraceString(e));
151 pw.println("error=couldn't parse start and end");
155 pw.println("start=" + start);
156 pw.println("end=" + end);
158 SeqPanel seqPanel = af.alignPanel.getSeqPanel();
159 SequenceI[] seqs = af.getViewport().getSequenceSelection();
160 SequenceI seq = seqs.length > 0 ? seqs[0] : null;
161 SearchResults sr = new SearchResults();
162 sr.addResult(seq, start, end);
163 seqPanel.highlightSequence(sr);
165 else if (pathInfo.startsWith("/ensembl/"))
167 String temp = pathInfo.substring("/ensembl/".length());
168 String id = temp.indexOf("/") > -1
169 ? temp.substring(0, temp.indexOf("/"))
171 // id is an ensembl gene ID - we look through our alignFrames to find a sequence
172 SequenceI ensDatasetSeq = null;
174 // ideally Desktop.getDataSets() to find all datasets with this one..
175 for (AlignFrame _af: alignFrames.values())
177 AlignmentI ds = _af.getCurrentView().getAlignment().getDataset();
178 if ((ensDatasetSeq = ds.findName(id)) !=null) {
183 if (ensDatasetSeq!=null)
185 Cache.warn("*** temp=" + temp);
186 Cache.warn("*** id=" + id);
187 PrintWriter pw = response.getWriter();
188 pw.println("id=" + id);
189 pw.println("alignframe=" + (af == null ? null : af.getTitle()));
192 pw.println("error=alignframe not ready");
195 String startS = request.getParameter("start");
196 String endS = request.getParameter("end");
199 if (startS != null || endS != null)
204 start = Integer.parseInt(startS);
208 end = Integer.parseInt(endS);
210 } catch (NumberFormatException e)
212 Cache.warn(Cache.getStackTraceString(e));
213 pw.println("error=couldn't parse start and end");
217 pw.println("start=" + start);
218 pw.println("end=" + end);
219 // highlight start for now
220 af.getCurrentView().getStructureSelectionManager().mouseOverSequence(ensDatasetSeq, start, -1, this);
223 } catch (Exception e)
225 Cache.warn(Cache.getStackTraceString(e));
231 * Returns a display name for this service
234 public String getName()
236 return "TestListener";