// Copyright 2000, CERN, Geneva, Switzerland package hep.physics.yappi.servlet; import java.io.*; import java.net.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import org.xml.sax.*; import hep.physics.yappi.*; import hep.physics.yappi.io.*; /** * YaPPI Servlet * * This class implements a servlet for the following URLs: * * ..../Lookup?particle=eta(c)(1S) * ..../Lookup?pdgid=448 * ..../Lookup?family=leptons * * @author Patrick Hellwig * @author Mark Donszelmann * @version $Id: Lookup.java 8584 2006-08-10 23:06:37Z duns $ */ public class Lookup extends HttpServlet { private final XMLYappi yappi = new XMLYappi(); public void init(ServletConfig config) throws ServletException { super.init(config); String configfile = config.getInitParameter("YappiConfig"); if (configfile == null) { configfile = "/hep/physics/yappi/servlet/YappiServlet.cfg"; } try { loadXML(config.getServletContext(), configfile); } catch (Exception e) { throw new ServletException("Yappi Particle Lookup", e); } } private void loadXML(ServletContext context, String configfile) throws IOException, SAXException { URL url = context.getResource(configfile); if (url != null) { System.out.println("Loading configfile from URL: "+url); BufferedReader infile = new BufferedReader( new InputStreamReader(url.openStream())); String line; while ((line = infile.readLine()) != null) { if (!line.startsWith("#")) { line = line.trim(); url = context.getResource(line); if (url != null) { System.out.println("Loading XML file from URL: "+url); yappi.read(new BufferedReader( new InputStreamReader(url.openStream()))); } else { System.out.println("Resource: "+line+" not available"); } } } infile.close(); } else { System.out.println("Resource: "+configfile+" not available"); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); HTMLYappiWriter writer = new HTMLYappiWriter(out); if (request.getParameter("particle") != null) { String name = request.getParameter("particle"); writeParticle(writer, yappi.getParticle(name), "Particle: "+name+" not found."); } else if (request.getParameter("pdgid") != null) { PDGID pdgid = new PDGID(Integer.parseInt(request.getParameter("pdgid"))); writeParticle(writer, yappi.getParticle(pdgid), "Particle with pdgid: "+pdgid+" not found."); } else if (request.getParameter("family") != null) { String family = request.getParameter("family"); writeParticle(writer, null, "Family: "+family+" not found."); } else { writer.writeHead("Yappi lookup error."); writer.openTag("body"); writer.openTag("h1"); writer.println("Error, no particle, pdgid or family supplied."); writer.closeTag(); // h1 writer.closeTag(); // body } writer.close(); out.close(); } private void writeParticle(HTMLYappiWriter writer, ParticleType particle, String msg) { if (particle == null) { writer.writeHead(msg); writer.openTag("body"); writer.openTag("h1"); writer.println(msg); writer.closeTag(); // h1 writer.closeTag(); // body } else { writer.writeHead(particle.getName()); writer.openTag("body"); Family[] families = yappi.getFamilies(particle); for (int i=0; i<families.length; i++) { writer.write(families[i]); } writer.write(particle); writer.closeTag(); // body } } }