JAL-3851 throwaway code
[jalview.git] / src / jalview / gbtest / TestListener.java
1 package jalview.gbtest;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.net.BindException;
6 import java.net.URI;
7 import java.util.HashMap;
8
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11
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;
22
23 public class TestListener extends AbstractRequestHandler
24         implements SelectionSource
25 {
26
27   private String MY_PATH = "TEST";
28
29   private static String viewgene = "viewgene";
30
31   private static String highlight = "highlight";
32
33   private HashMap<String, Thread> threadMap = new HashMap<>();
34
35   private HashMap<String, AlignFrame> alignFrames = new HashMap<>();
36
37   /**
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.
41    * 
42    * @param chimeraBinding
43    * @throws BindException
44    *           if no free port can be assigned
45    */
46   public TestListener() throws BindException
47   {
48     setPath(MY_PATH);
49     registerHandler();
50   }
51
52   @Override
53   protected void processRequest(HttpServletRequest request,
54           HttpServletResponse response) throws IOException
55   {
56     dumpRequest(request);
57
58     try // debugging try -- remove later!
59     {
60       URI reqUri = URI.create(request.getRequestURI());
61
62       Cache.warn("*** request.getRequestURI()=" + request.getRequestURI());
63       Cache.warn("*** reqUri=" + reqUri.toASCIIString());
64       Cache.warn(
65               "*** request.getContextPath()=" + request.getContextPath());
66       Cache.warn("*** request.getPathInfo()=" + request.getPathInfo());
67
68       String pathInfo = request.getPathInfo();
69       Cache.warn("*** pathInfo=" + pathInfo);
70       if (pathInfo.startsWith("/" + viewgene + "/"))
71       {
72
73         String temp = pathInfo.substring(viewgene.length() + 2);
74         String ensemblId = temp.indexOf("/") > -1
75                 ? temp.substring(0, temp.indexOf("/"))
76                 : temp;
77         Cache.warn("*** temp=" + temp);
78         Cache.warn("*** ensemblId=" + ensemblId);
79
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
84         // Exception)
85         // HttpSession session = request.getSession(true);
86         // idSB.append(session == null ? "NOSESSION" : session.getId());
87         idSB.append(MY_PATH);
88         idSB.append("::");
89         // idSB.append(viewgene);
90         // idSB.append("::");
91         idSB.append(ensemblId);
92
93         String id = request.getParameter("id") == null ? idSB.toString()
94                 : request.getParameter("id");
95
96         Thread worker = threadMap.get(id);
97         if (worker == null)
98         {
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);
106         }
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()));
112         if (af != null)
113         {
114
115         }
116       }
117       else if (pathInfo.startsWith("/" + highlight + "/"))
118       {
119         String temp = pathInfo.substring(highlight.length() + 2);
120         String id = temp.indexOf("/") > -1
121                 ? temp.substring(0, temp.indexOf("/"))
122                 : temp;
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()));
130         if (af == null)
131         {
132           pw.println("error=alignframe not ready");
133           return;
134         }
135         String startS = request.getParameter("start");
136         String endS = request.getParameter("end");
137         int start = 0;
138         int end = -1;
139         if (startS != null || endS != null)
140         {
141           try
142           {
143             start = Integer.parseInt(startS);
144             end = Integer.parseInt(endS);
145           } catch (NumberFormatException e)
146           {
147             Cache.warn(Cache.getStackTraceString(e));
148             pw.println("error=couldn't parse start and end");
149             return;
150           }
151         }
152         pw.println("start=" + start);
153         pw.println("end=" + end);
154
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);
161       }
162     } catch (Exception e)
163     {
164       Cache.warn(Cache.getStackTraceString(e));
165     }
166
167   }
168
169   /**
170    * Returns a display name for this service
171    */
172   @Override
173   public String getName()
174   {
175     return "TestListener";
176   }
177
178 }