00001 package cedar.jetweb.servlet; 00002 00003 import javax.servlet.*; 00004 import javax.servlet.http.*; 00005 00006 import java.io.PrintWriter; 00007 import java.util.ArrayList; 00008 import java.util.Vector; 00009 import java.util.Collection; 00010 import java.util.List; 00011 00012 import cedar.jetweb.*; 00013 import cedar.jetweb.html.*; 00014 import cedar.jetweb.model.*; 00015 import cedar.jetweb.model.fit.*; 00016 import cedar.jetweb.model.paper.*; 00017 import cedar.jetweb.model.plots.*; 00018 import cedar.jetweb.job.*; 00019 import cedar.jetweb.generator.Generator; 00020 00021 00029 public class Searcher extends HttpServlet { 00030 00038 public void init(ServletConfig config) throws ServletException { 00039 super.init(config); 00040 00041 // Set up configuration with servlet mode on. 00042 JetWebConfig.init(); 00043 00044 // Read in all papers from the database. 00045 try { 00046 PaperBank.getConfig(); 00047 } catch (JetWebException e){ 00048 System.out.println(e.getMessage()); 00049 e.printStackTrace(System.out); 00050 } 00051 } 00052 00056 public void destroy() { 00057 } 00063 protected void doGet(HttpServletRequest request, HttpServletResponse response) 00064 throws ServletException, java.io.IOException { 00065 00066 String servletPath=JetWebConfig.searchServletPath; 00067 00068 //String title = "NB: If you make a wide-ranging search it 00069 //will take a minute or two for the results to return. Please 00070 //be patient."; 00071 String title = " "; 00072 response.setContentType("text/html"); 00073 PrintWriter out = response.getWriter(); 00074 ResultSearchPattern pattern = null; 00075 PlotSelection selection; 00076 Vector<MCProcessType> reactionList; 00077 00078 JetWebConfig.setPrintWriter(out); 00079 00080 System.out.println("SEARCH ACCESS FROM: " 00081 +request.getRemoteHost()+" = "+request.getRemoteAddr()); 00082 String requestingHost = request.getRemoteHost(); 00083 00084 try { 00085 00086 // Methods not requiring a pattern or a selection 00087 if ((request.getParameter("MORERESULTS")!=null)){ 00088 00089 00090 boolean verbose = Boolean.parseBoolean(request.getParameter("VERBOSE")); 00091 HTMLUtils.displayListContinued(out,servletPath,verbose, 00092 request.getParameter("RESULTKEY")); 00093 return; 00094 00095 } else if (request.getParameter("REALDATA")!=null) { 00096 00097 List<DataPlot> list = new Vector<DataPlot>(); 00098 00099 if (request.getParameter("COLLISIONID")!=null){ 00100 String[] collIds = request.getParameterValues("COLLISIONID"); 00101 for (int i=0; i<collIds.length; i++){ 00102 Collision coll = new Collision(Integer.parseInt(collIds[i])); 00103 for (DataPlot plot : PaperBank.getPlots(coll)){ 00104 list.add(plot); 00105 } 00106 } 00107 } else if (request.getParameter("PROCESSID")!=null){ 00108 String[] procIds = request.getParameterValues("PROCESSID"); 00109 for (int i=0; i<procIds.length; i++){ 00110 MCProcessType proc = new MCProcessType(Integer.parseInt(procIds[i])); 00111 for (DataPlot plot : PaperBank.getPlots(proc)){ 00112 list.add(plot); 00113 } 00114 } 00115 } else if (request.getParameter("PLOTID")!=null){ 00116 String[] ids = request.getParameterValues("PLOTID"); 00117 for (int i=0; i<ids.length; i++){ 00118 list.add(PaperBank.getPlot(Integer.parseInt(ids[i]))); 00119 } 00120 } else if (request.getParameter("PAPERID")!=null){ 00121 String[] ids = request.getParameterValues("PAPERID"); 00122 for (int i=0; i<ids.length; i++){ 00123 Paper paper = PaperBank.getPaper(Integer.parseInt(ids[i])); 00124 for (DataPlot plot : paper.getPlots()){ 00125 list.add(plot); 00126 } 00127 } 00128 } else { 00129 list = new Vector(PaperBank.getAllPlots()); 00130 } 00131 HTMLUtils.displayList(out,servletPath,false,list); 00132 return; 00133 00134 } else if (request.getParameter("PAPER")!=null) { 00135 00136 List<Paper> list = new Vector<Paper>(); 00137 00138 if (request.getParameter("FITID")!=null) { 00139 // list of fitted papers. 00140 00141 try { 00142 00143 int fitId = Integer.parseInt(request.getParameter("FITID")); 00144 int paperId = Integer.parseInt(request.getParameter("PAPERID")); 00145 System.out.println("fit id "+fitId); 00146 Fit fit = new Fit(fitId); 00147 System.out.println("fit id "+fit.getId()); 00148 Paper paper = new Paper(paperId); 00149 00150 HTMLPaperWriter op = new HTMLPaperWriter(out,servletPath); 00151 op.setVerbose(true); 00152 op.display(paper,fit); 00153 op.close(); 00154 return; 00155 00156 } catch (NumberFormatException ne){ 00157 System.out.println("ServletUtils: ID not defined: "+ne); 00158 System.out.println("Default Query Screen"); 00159 // If we get here, just write a new page. 00160 HTMLUtils.writeQueryScreen(title,pattern,null,out,servletPath); 00161 return; 00162 } 00163 00164 } else if (request.getParameter("PAPERID")!=null){ 00165 String[] ids = request.getParameterValues("PAPERID"); 00166 for (int i=0; i<ids.length; i++){ 00167 list.add(PaperBank.getPaper(Integer.parseInt(ids[i]))); 00168 } 00169 00170 } else if (request.getParameter("COLLISIONID")!=null){ 00171 String[] ids = request.getParameterValues("COLLISIONID"); 00172 for (int i=0; i<ids.length; i++){ 00173 Collision coll = new Collision(Integer.parseInt(ids[i])); 00174 for (Paper paper : PaperBank.getPapers(coll)){ 00175 list.add(paper); 00176 } 00177 } 00178 } else if (request.getParameter("PROCESSID")!=null){ 00179 String[] ids = request.getParameterValues("PROCESSID"); 00180 for (int i=0; i<ids.length; i++){ 00181 MCProcessType proc = new MCProcessType(Integer.parseInt(ids[i])); 00182 for (Paper paper : PaperBank.getPapers(proc)){ 00183 list.add(paper); 00184 } 00185 } 00186 } else if (request.getParameter("PLOTID")!=null){ 00187 String[] ids = request.getParameterValues("PLOTID"); 00188 for (int i=0; i<ids.length; i++){ 00189 list.add(PaperBank.getPaper(PaperBank.getPlot(Integer.parseInt(ids[i])))); 00190 } 00191 } else { 00192 list = new Vector(PaperBank.getPapers()); 00193 } 00194 HTMLUtils.displayList(out,servletPath,false,list); 00195 return; 00196 //************ 00197 } else if ((request.getParameter("PROCESSTYPE") != null)) { 00198 00199 List<MCProcessType> list = new Vector<MCProcessType>(); 00200 00201 if (request.getParameter("COLLISIONID")!=null){ 00202 // Write out all the MCProcessTypes for the given Collisions. 00203 String[] collIds = request.getParameterValues("COLLISIONID"); 00204 for (int i=0; i<collIds.length; i++){ 00205 Collision coll = new Collision(Integer.parseInt(collIds[i])); 00206 list.addAll(MCProcessType.getAll(coll,false)); 00207 } 00208 } else if (request.getParameter("PROCESSID")!=null){ 00209 String[] procIds = request.getParameterValues("PROCESSID"); 00210 for (int i=0; i<procIds.length; i++){ 00211 MCProcessType proc = new MCProcessType(Integer.parseInt(procIds[i])); 00212 list.add(proc); 00213 } 00214 } else { 00215 // Write out all the MCProcessTypes. 00216 list.addAll(MCProcessType.getAll(false)); 00217 } 00218 HTMLUtils.displayList(out,servletPath,true,list); 00219 return; 00220 //************** 00221 } else if ((request.getParameter("COLLISION") != null)) { 00222 00223 // write out collisions. 00224 List<Collision> list = new Vector<Collision>(); 00225 if (request.getParameter("COLLISIONID")!=null){ 00226 00227 String[] collIds = request.getParameterValues("COLLISIONID"); 00228 for (int i=0; i<collIds.length; i++){ 00229 Collision coll = new Collision(Integer.parseInt(collIds[i])); 00230 list.add(coll); 00231 } 00232 00233 } else { 00234 // write them all out. 00235 list.addAll(Collision.getAll()); 00236 } 00237 HTMLUtils.displayList(out,servletPath,true,list); 00238 return; 00239 00240 } else if (request.getParameter("FITIDGET") != null) { 00241 00242 try { 00243 00244 int fitId = Integer.parseInt(request.getParameter("FITID")); 00245 Fit fit = new Fit(fitId); 00246 HTMLFitWriter op = new HTMLFitWriter(out,servletPath); 00247 op.setVerbose(true); 00248 op.display(fit); 00249 op.close(); 00250 return; 00251 00252 } catch (NumberFormatException ne){ 00253 System.out.println("ServletUtils: Fit ID not defined: "+ne); 00254 System.out.println("Default Query Screen"); 00255 // If we get here, just write a new page. 00256 HTMLUtils.writeQueryScreen(title,pattern,null,out,servletPath); 00257 } 00258 00259 } else if (request.getParameter("MODELIDGET") != null) { 00260 00261 try { 00262 00263 int modelId = Integer.parseInt(request.getParameter("MODELID")); 00264 Model model = new Model(modelId); 00265 HTMLModelWriter op = new HTMLModelWriter(out,servletPath); 00266 op.setVerbose(true); 00267 op.display(model); 00268 op.close(); 00269 return; 00270 00271 } catch (NumberFormatException ne){ 00272 System.out.println("ServletUtils: Model ID not defined: "+ne); 00273 System.out.println("Default Query Screen"); 00274 // If we get here, just write a new page. 00275 HTMLUtils.writeQueryScreen(title,pattern,null,out,servletPath); 00276 } 00277 00278 } else if (request.getParameter("PLOTSELECTIONIDGET") != null) { 00279 00280 // Display a plot selection. 00281 try { 00282 00283 int psId = Integer.parseInt(request.getParameter("PLOTSELECTIONID")); 00284 selection = new PlotSelection(psId); 00285 HTMLPlotWriter op = new HTMLPlotWriter(out,servletPath); 00286 op.setVerbose(true); 00287 op.displaySelection(selection); 00288 op.close(); 00289 return; 00290 00291 } catch (NumberFormatException ne){ 00292 System.out.println("ServletUtils: Model ID not defined: "+ne); 00293 System.out.println("Default Query Screen"); 00294 // If we get here, just write a new page. 00295 HTMLUtils.writeQueryScreen(title,pattern,null,out,servletPath); 00296 } 00297 00298 } else if ((request.getParameter("CANCEL") != null)) { 00299 // Cancel. ////////////////////////////////////////////// 00300 pattern=new ResultSearchPattern(); 00301 selection=new PlotSelection(); 00302 HTMLUtils.writeQueryScreen("Cancelled operation",pattern,selection, 00303 out,servletPath); 00304 return; 00305 00306 } else if (request.getParameter("PLOTTEXT")!=null) { 00307 // Write plot data to a text file. 00308 HTMLPlotWriter.writePlotText(request.getParameter("FITID"), 00309 request.getParameter("PLOTID"),out); 00310 00311 return; 00312 00313 } else if ((request.getParameter("CHOOSEPROC") != null)) { 00314 HTMLUtils.writeProcScreen(request.getParameter("MODELID"), 00315 out,servletPath); 00316 return; 00317 00318 } else if (request.getParameter("RSLOGS")!=null) { 00319 // List all the logfiles for a given runseries. 00320 int rsid = Integer.parseInt(request.getParameter("RUNSERIESID")); 00321 Vector<LogFile> logs = JobUtils.getLogFiles(rsid); 00322 HTMLJobWriter jw = new HTMLJobWriter(out,servletPath); 00323 jw.writeTitle("LogFiles for RunSeries "+rsid); 00324 jw.listLogs(logs); 00325 jw.close(); 00326 return; 00327 } 00328 00329 System.out.println("request = "+request); 00330 00331 // Make a pattern from the submitted form. 00332 pattern = ServletUtils.makePattern(request); 00333 00334 // Make a reactionList from the submitted form. 00335 reactionList = ServletUtils.makeMCProcessList(request); 00336 00337 // Methods requiring a pattern but not a selection 00338 if (request.getParameter("SUBMIT1") != null) { 00339 // Submit a job (first pass) /////////////////////////////// 00340 JobUtils.doJobRequest(pattern,reactionList,out, 00341 servletPath,requestingHost); 00342 return; 00343 00344 } else if ((request.getParameter("FINDDATA") != null)) { 00345 boolean submitting = false; 00346 HTMLUtils.writeParameterScreen(pattern,out,servletPath,submitting); 00347 return; 00348 00349 } else if ((request.getParameter("SETPARS") != null)) { 00350 boolean submitting = (request.getParameterValues("SUBMITTINGJOB")!=null); 00351 if (pattern.getGenerator()==null){ 00352 00353 String[] gname = request.getParameterValues("SETPARS"); 00354 String[] tmp = request.getParameterValues("GENERATOR"); 00355 00356 String vers = null; 00357 if (tmp!=null){ 00358 for (int i=0; i<tmp.length;i++){ 00359 String name = tmp[i].substring(0,tmp[i].indexOf("-")); 00360 if (name.equals(gname[0])){ 00361 vers = tmp[i].substring(tmp[i].indexOf("-")+1); 00362 } 00363 } 00364 } 00365 System.out.println(gname[0]+":"+vers); 00366 Generator gen = Generator.Maker(gname[0],vers); 00367 pattern.setGenerator(gen); 00368 00369 } 00370 // If this is a job submission rather than a 00371 // search, then set all parameters. 00372 if (submitting) pattern.getGenerator().setSoftDefaults(); 00373 00374 HTMLUtils.writeParameterScreen(pattern,out,servletPath,submitting); 00375 return; 00376 00377 } else if ((request.getParameter("MOREDATA") != null)) { 00378 JobUtils.doJobRequest(pattern,reactionList,out,servletPath, 00379 requestingHost); 00380 return; 00381 } 00382 00383 00384 // Build a paper selection from the page. 00385 selection = ServletUtils.makePlotSelection(request); 00386 00387 // make this check only the sum plots! 00388 if (selection.fitIsEmpty()) { selection.setFitDefault(); } 00389 // make this check only the sum plots! 00390 if (selection.sumIsEmpty()) { selection.setSumDefault(); } 00391 00392 // Methods requiring both pattern and selection. 00393 00394 // Return page of results matching this pattern ///////////// 00395 if (request.getParameter("GETFITS") != null || request.getParameter("GETMODELS") != null) { 00396 ServletUtils.performResultSearch 00397 (pattern,out,servletPath,selection, request); 00398 return; 00399 00400 } else if (request.getParameter("DEFAULT") != null) { 00401 if (pattern.getGeneratorList().size()==1){ 00402 // Set the parameters for this generator to default. 00403 pattern.setSoftDefaults(); 00404 pattern.getGenerator().setDefaults(); 00405 } else { 00406 // Set everything, including the generator, to default. 00407 pattern.setDefaults(); 00408 } 00409 HTMLUtils.writeQueryScreen(title,pattern,selection,out,servletPath); 00410 return; 00411 00412 00413 } else if ((request.getParameter("SIMILARDATA") != null)) { 00414 HTMLUtils.writeJobRequestForm("Set your parameters", 00415 pattern,selection,out,servletPath); 00416 return; 00417 00418 } else if ((request.getParameter("CLEARPARS") != null)) { 00419 pattern.getGenerator().setDefaults(); 00420 boolean submitting = (request.getParameterValues("SUBMITTINGJOB")!=null); 00421 HTMLUtils.writeParameterScreen(pattern,out,servletPath,submitting); 00422 return; 00423 00424 } else if ((request.getParameter("SELECTPLOTS")!=null)){ 00425 // Write out the page to select plots with defaults filled in. 00426 HTMLUtils.writeSelectPlotsPage(pattern,selection,out,servletPath); 00427 00428 }else if ((request.getParameter("RESET")!=null)){ 00429 // Write out the page to select plots with nothing filled in. 00430 selection.setSumPlots(new ArrayList<DataPlot>()); 00431 selection.setFitPlots(new ArrayList<DataPlot>()); 00432 HTMLUtils.writeSelectPlotsPage(pattern,selection,out,servletPath); 00433 00434 } else if ((request.getParameter("COMPAREFIT")!=null)){ 00435 HTMLFitWriter.writeCompareFitsPage(request.getParameter("FIT1"), 00436 request.getParameter("FIT2"), 00437 out,servletPath); 00438 return; 00439 00440 } else if ((request.getParameter("COMPAREMODEL")!=null)){ 00441 00442 Model model1 = new Model(Integer.parseInt(request.getParameter("MODEL1"))); 00443 Model model2 = new Model(Integer.parseInt(request.getParameter("MODEL2"))); 00444 HTMLModelWriter op = new HTMLModelWriter(out,servletPath); 00445 op.listDifferences(model1,model2); 00446 op.close(); 00447 return; 00448 00449 } else if ((request.getParameter("NONDEF")!=null)){ 00450 System.out.println("Showing non-default parameters"); 00451 Model model = new Model(Integer.parseInt(request.getParameter("MODELID"))); 00452 HTMLModelWriter op = new HTMLModelWriter(out,servletPath); 00453 op.listNonDefaults(model); 00454 op.close(); 00455 return; 00456 00457 } else if (request.getParameter("CLEARALL")!=null) { 00458 // Clear all parameters -> write new search page. 00459 pattern = new ResultSearchPattern(); 00460 HTMLUtils.writeQueryScreen(title,pattern,selection,out,servletPath); 00461 return; 00462 00463 } else { 00464 System.out.println("Default Query Screen"); 00465 // If we get here, just write a new page. 00466 HTMLUtils.writeQueryScreen(title,pattern,selection,out,servletPath); 00467 } 00468 00469 } catch (JetWebException e){ 00470 HTMLErrorWriter.write(out,e); 00471 } 00472 00473 } 00478 protected void doPost(HttpServletRequest request, HttpServletResponse response) 00479 throws ServletException, java.io.IOException { 00480 doGet(request,response); 00481 } 00482 00485 public String getServletInfo() { 00486 return "Test servlet. Do not use."; 00487 } 00488 00489 } 00490 00491 00492 00493 00494 00495 00496
Generated Wed Jan 17 09:14:27 GMT 2007