ShapeXml.java

Go to the documentation of this file.
00001 package cedar.hepdata.webapp;
00002 
00003 
00004 import cedar.hepdata.model.*;
00005 import cedar.hepdata.xml.*;
00006 import cedar.hepdata.util.*;
00007 import cedar.hepdata.db.*;
00008 
00009 import java.io.*;
00010 import java.util.*;
00011 import javax.servlet.*;
00012 import javax.servlet.http.*;
00013 
00014 import java.text.*;
00015 import java.lang.*;
00016 
00017 import org.exolab.castor.xml.Unmarshaller;
00018 
00019 
00025 public class ShapeXml extends HttpServlet {
00026 
00028     public String getServletInfo() {
00029         return "Test servlet. Do not use.";
00030     }
00031 
00032 
00034     public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
00035         response.setContentType("text/html");
00036         PrintWriter out = response.getWriter();
00037 
00038         out.println("<h1>Shape demo (XML)</h1>");
00039         out.println("<p>Reading in data from XML file !!!</p>");
00040 
00041         out.println(request.getParameter("irn"));
00042         String irn = request.getParameter("irn");
00043         int spiresid = Integer.parseInt(irn);
00044 
00045         String dataset = null;
00046         String yaxis = null;
00047         dataset = request.getParameter("dataset");
00048         yaxis = request.getParameter("yaxis");
00049         
00050         Paper p = null;
00051         try {
00052 // getting from xml file
00053             Data data = XMLUtils.getDataFromHepML(new File("/home/whalley/hd/hepdata-migration/shapes-hepml/"+ irn + ".hep.xml"));
00054             if (data != null) p = data.getFirstPaper();
00056             if (p == null) throw new Exception("Null paper");
00057 
00058             this.displayHeader(p,out);
00059             if(dataset == null){
00060                this.displayDatasetError(p,out,String.valueOf(1));
00061             }
00062             else{
00063                 this.displayDatasetError(p,out,dataset);
00064             }
00065             if(dataset == null){
00066                 this.displayDatasets(p,out);
00067             }
00068             else if(yaxis == null){
00069                 this.displayDataset(p,out,dataset);
00070             }
00071             else                  {
00072                this.displayDataset(p,out,dataset,yaxis);
00073             }
00074         } 
00075         catch (Exception e) {
00076             out.println("Exception: " + e.toString());
00077             out.println("<pre>");
00078             e.printStackTrace(out);
00079             out.println("</pre>");
00080             return;
00081         }
00082     }
00083 
00085     private void displayDatasets(Paper p,PrintWriter out){
00086         int nds = 0;
00087         for ( Dataset d : p.getDatasets() ) {
00088               nds++;
00089               String dataset = String.valueOf(nds);
00090               this.displayDataset(p,out,dataset);
00091         }
00092     }
00093 
00095     private void displayDataset(Paper p,PrintWriter out,String dataset){
00096         int ds = Integer.parseInt(dataset);
00097         Dataset d = p.getDataset(ds);
00098         int ya=0;  
00099         for (YAxis y : d.getYAxes()){
00100             ya++;
00101             String yaxis = String.valueOf(ya);
00102             this.displayDataset(p,out,dataset,yaxis);
00103         }
00104     }
00105 
00107     private void displayDataset(Paper p,PrintWriter out,String dataset,String yaxis){
00108         int ds = Integer.parseInt(dataset);
00109         int ya = Integer.parseInt(yaxis);
00110         Dataset d = p.getDataset(ds);
00111         YAxis y = d.getYAxis(ya);
00112 // count the number of x and y axes and the number of bins
00113 
00114         int nx = d.getXAxes().size();
00115         int npoints = 0;
00116         for (XAxis x : d.getXAxes()){npoints = x.getBins().size();}
00117            
00118 // counting done
00120 // output each y axis in turn in a separate table
00121 // first try to get the yaxis errors for this table
00122        for (AxisError ae : y.getErrors() ) {
00123             out.println("\nAxis Error");
00124             if (ae.getComment() != null) { out.println(ae.getComment() ); }
00125             if (ae.getPlus() != null) { out.println(ae.getPlus() ); }
00126             if (ae.getMinus() != null) { out.println(ae.getMinus() ); }
00127             if (ae.getSourceType() != null) { out.println(ae.getSourceType() ); }
00128             if (ae.getNormType() != null) { out.println(ae.getNormType() ); }
00129         }
00130        
00131 // first the reactions for this yaxis
00132         out.println("<table border=1>");
00133         int nspan = nx+1;
00134         out.println("<th colspan=" + nspan + ">Dataset " + ds + " yaxis " + ya + "</th></tr><tr>");
00135         for ( Reaction reac : y.getReactions() ){
00136             out.println("<th colspan=" + nspan +">");
00137         
00138             for ( Particle part : reac.getInitialState() ){
00139                 out.println(part.getName() + " ");
00140             }
00141             out.println("-->");
00142             for ( Particle part : reac.getFinalState() ){
00143                 if (part.getMultRelation() != Relation.EQUALS) {out.println( part.getMultRelation() );}
00144                 if (part.getMultiplicity() > 1) {out.println( part.getMultiplicity() );}
00145                 out.println(part.getName() + " ");
00146             }
00147             out.println("</th></tr>");
00148         }
00149 
00150 // next the yaxis comments (non-numerical properties!)
00151         for (String comment : y.getComments()){
00152             out.println("<tr>");
00153             out.println("<th colspan=" + nspan +">" + comment + "</th></tr>");
00154         }
00155 // next the observable)
00156 //             cedar.hepdata.model.Observable obs = y.getObservable();
00157              String sobs = y.getObservable();
00158              out.println("<th colspan=" + nspan + ">" + "obs:"+ sobs + "</th></tr>");
00159               
00160 // next the properties
00161         for ( Property prop: y.getProperties() ){
00162             out.println("<tr>");
00163             out.println("<th colspan=" + nspan +">");
00164             out.println( prop.getName() + " : ");
00165             if (prop.getLowValue() != null && prop.getHighValue() != null &&
00166                 prop.getLowValue().equals(prop.getHighValue())) {
00167                 out.println(prop.getLowValue());
00168             }
00169             else{out.println(prop.getLowValue() + " TO " + prop.getHighValue());}
00170             if (!prop.getUnit().toString().equals("num")){
00171                out.println(" " + prop.getUnit().toString());
00172             }
00173             out.println("</th>" ) ;
00174         }             
00175 
00176 // here for the headers
00177         out.println("<tr>");
00178         for (XAxis x : d.getXAxes()){
00179             out.println("<th>" + x.getHeader() + "</th>");
00180         }
00181         out.println("<th>" + y.getHeader() + "</th>");
00182         out.println("</tr>");
00183               
00184 // finally the numbers themselves
00185 // first the xaxes
00186         Double f = null;
00187         Double high = null;
00188         Double low = null;
00189         out.println("<tr>");
00190         for (int ix=1 ; ix<=nx; ix++){
00191             XAxis xaxis = d.getXAxis(ix);
00192             out.println("<td><pre>");
00193             for (int ip=1 ; ip<=npoints; ip++){
00194                 for (Bin b : xaxis.getBins()){
00195                     if(b.getId() == ip) {
00196                         low = b.getLowValue();
00197                         high = b.getHighValue();
00198                         f = b.getFocus();
00199                         if(low != null){
00200                             out.println(forms(high,8,out) + " TO " + forms(low,8,out)); 
00201                         }
00202                         else{
00203                             out.println(forms(f,8,out)); 
00204                         }
00205                     }           
00206                 }               
00207             }           
00208             out.println("</pre></td>");
00209         }
00210          
00211 // next the yaxis
00212         
00213         StringBuffer s = new StringBuffer();
00214         s.append("<td><pre>");
00215         for (int ip=1 ; ip<=npoints; ip++){
00216             try {
00217                 Point pt2 = y.getPoint(ip);
00218                 s.append(forms(pt2.getValue(),15,out)); 
00219                 for ( Uncertainty e : pt2.getErrors() ){
00220                     if( e.getPlus().equals(e.getMinus()) ) {
00221                         s.append(" +- " + forms(e.getPlus(),15,out) );
00222                     }
00223                     else{
00224                         s.append(" +" + forms(e.getPlus(),15,out) + ",-" + forms(e.getMinus(),15,out) );
00225                     }
00226                     if ( e.getNormType() == ErrorNorm.PCT ) {
00227                         s.append(" (" + e.getNormType().toString() + ")");
00228                     }
00229                 }
00230                 s.append("<br>");
00231             } 
00232             catch (Exception e) {
00233                 s.append("  -  <br>");
00234             }
00235         }
00236         s.append("</pre></td>");
00237         out.println(s);
00238         out.println("</tr>");
00239         out.println("</table>");
00240     }
00241 
00243     private void displayHeader(Paper p,PrintWriter out){
00244         StringBuffer s = new StringBuffer();
00245         out.println("<pre>");
00246         out.println("irn = " + p.getSpiresId());
00247         out.println("red = " + p.getRedId());
00248         int icom = 0;
00249         for ( String comment : p.getComments() ){
00250             icom++;
00251             out.println(icom + ":" + comment);
00252         }
00253         int imod = 0;
00254         for ( Modification modification : p.getModifications() ){
00255             imod++;
00256             if(imod == 1){out.println("Created on " + modification.getTimestamp() + " by " + modification.getModifier());}
00257             else        {out.println("Modified on " + modification.getTimestamp() + " by " + modification.getModifier());}
00258         }
00259         for (String auth: p.getAuthors() ) {
00260             out.println("author: "  + auth);
00261         }
00262         out.println("Title:" + p.getTitle());
00263 
00264         out.println("Number of references are: " + p.getReferences().size()); 
00265 
00266         for (Reference ref : p.getReferences() ) {
00267             out.println("Reference:"  + ref.getDescription());
00268         }
00269         for (Experiment exp : p.getExperiments() ) {
00270             out.println("Experiment:"  + exp.getName());
00271             out.println("Laboratory:"  + exp.getLaboratory());
00272             out.println("InformalName:"  + exp.getInformalName());
00273         }
00274     }
00275 
00277     private void displayDatasetError(Paper p,PrintWriter out,String dataset){
00278         int ds = Integer.parseInt(dataset);
00279         Dataset d = p.getDataset(ds);
00280         for (DatasetError de : d.getErrors() ) {
00281             out.println("\nDataset Error");
00282             if (de.getComment() != null) { out.println(de.getComment() ); }
00283             if (de.getPlus() != null) { out.println(de.getPlus() ); }
00284             if (de.getMinus() != null) { out.println(de.getMinus() ); }
00285             if (de.getSourceType() != null) { out.println(de.getSourceType() ); }
00286             if (de.getNormType() != null) { out.println(de.getNormType() ); }
00287         }
00288     }
00290     private  String forms(Double value,PrintWriter out){
00291         int width = 20;
00292         return this.forms(value,width,out);
00293         
00294     }
00295 
00296     private  String forms(Double value,int width,PrintWriter out){
00297         int position = width/2;
00298         return this.forms(value,width,position,out);
00299     }
00300 
00301     private String forms(Double value,int width, int position,PrintWriter out){
00302         String form = "##############.###############################";
00303         DecimalFormat myFormatter = new DecimalFormat(form);
00304         String sval = myFormatter.format(value);
00305         String sout = " ";
00306         for (int i=1 ; i<width; i++){
00307             sout = sout.concat(" ");
00308         }
00309         int lenval = sval.length(); 
00310         int dotpos = sval.indexOf(".");
00311         String before = sval;
00312         String after  = "";
00313         if(dotpos >= 0){
00314             before = sval.substring(0,dotpos);
00315             after  = sval.substring(dotpos+1,lenval);
00316         }
00317         int lenbefore = before.length();
00318         int lenafter = after.length();
00319         int lenout = sout.length();
00320         StringBuffer bout = new StringBuffer(sout);
00321         int lstart = 1;
00322         int l1 = lstart+lenbefore;
00323         int l2 = l1;
00324         int l3 = l2+1;
00325         int l4 = l3+lenafter;
00326         
00327         bout.replace(lstart,l1,before);
00328         bout.replace(l2,l2,".");
00329         bout.replace(l3,l4,after);
00330         sout = bout.toString();
00331         
00332         return sout;
00333     } 
00334 }

Generated on Tue Apr 21 15:55:00 2009 for HepData Web servlets by  doxygen 1.5.5