Coverage Report - org.paneris.jammyjoes.controller.Search
 
Classes in this File Line Coverage Branch Coverage Complexity
Search
0%
0/113
0%
0/68
5.143
 
 1  
 package org.paneris.jammyjoes.controller;
 2  
 
 3  
 import java.util.Enumeration;
 4  
 import java.util.Vector;
 5  
 
 6  
 import javax.servlet.ServletConfig;
 7  
 import javax.servlet.ServletException;
 8  
 
 9  
 import org.melati.Melati;
 10  
 import org.melati.poem.Field;
 11  
 import org.melati.poem.Persistent;
 12  
 import org.melati.poem.util.DumbPagedEnumeration;
 13  
 import org.melati.poem.util.PagedEnumeration;
 14  
 import org.melati.servlet.Form;
 15  
 import org.melati.template.ServletTemplateContext;
 16  
 import org.melati.util.MelatiException;
 17  
 import org.melati.util.UTF8URLEncoder;
 18  
 import org.paneris.jammyjoes.model.JammyjoesDatabase;
 19  
 import org.paneris.jammyjoes.model.Product;
 20  
 import org.paneris.jammyjoes.model.Supplier;
 21  
 import org.paneris.jammyjoes.servlet.JammyJoesMelatiServlet;
 22  
 import org.paneris.jammyjoes.shopping.MelatiShoppingConfig;
 23  
 import org.paneris.jammyjoes.shopping.ShoppingTrolley;
 24  
 import org.paneris.jammyjoes.util.JammyJoesUtil;
 25  
 
 26  0
 public class Search extends JammyJoesMelatiServlet {
 27  
 
 28  
   private static final long serialVersionUID = 1L;
 29  
 
 30  
   public MelatiShoppingConfig config;
 31  
   private JammyjoesDatabase db;
 32  
 
 33  
   public void init(ServletConfig conf) throws ServletException {
 34  0
     super.init(conf);
 35  
     try {
 36  0
       config = new MelatiShoppingConfig();
 37  0
     } catch (MelatiException e) {
 38  0
       throw new ServletException(e.toString());
 39  0
     }
 40  0
   }
 41  
 
 42  
   protected String jammyjoesRequest(Melati melati, ServletTemplateContext context) throws Exception {
 43  
 
 44  0
     db = (JammyjoesDatabase) melati.getDatabase();
 45  0
     ServletTemplateContext tc = melati.getServletTemplateContext();
 46  0
     String debug = "";
 47  0
     String print = Form.getFormNulled(tc, "print");
 48  0
     String inframe = Form.getFormNulled(tc, "inframe");
 49  0
     String template = JammyJoesUtil.shoppingTemplate(melati, "Results.wm");
 50  0
     if (print != null)
 51  0
       template = "view/PrintResults.wm";
 52  
 
 53  0
     String[] pathInfo = melati.getPathInfoParts();
 54  
     
 55  0
     Logger logger = new Logger(db.getSettingTable().get("UploadDir") + "/../");
 56  0
     SearchCriteria andSearchCriteria = new TemplateContextSearchCriteria(tc,pathInfo,db,logger, "AND");
 57  
 
 58  0
     ParameterProvider provider = new ParameterProvider(tc, pathInfo);
 59  0
     SearchType type = db.getTypeTable().fromParameter(provider);
 60  0
     SearchAge age = db.getAgeTable().fromParameter(provider);
 61  0
     SearchMaufacturer manufacturer = db.getManufacturerTable().fromParameter(provider);
 62  
 
 63  0
     String sale = getParam(tc, "field_sale", pathInfo, 7);
 64  
 
 65  0
     String supplierString = getParam(tc, "field_supplier", pathInfo, 9);
 66  0
     Integer supplier = null;
 67  
     try {
 68  0
       supplier = getInt(supplierString);
 69  0
       if (supplier != null)
 70  0
         supplierString = ((Supplier) db.getSupplierTable().getObject(supplier)).getName();
 71  0
     } catch (NumberFormatException e) {
 72  0
       Enumeration en = db.getSupplierTable().getNameColumn().selectionWhereEq(supplierString);
 73  0
       if (en.hasMoreElements())
 74  0
         supplier = ((Persistent) en.nextElement()).getTroid();
 75  0
     }
 76  
 
 77  0
     String troidString = getParam(tc, "troid", pathInfo, 0);
 78  0
     Integer troid = null;
 79  
     try {
 80  0
       troid = getInt(troidString);
 81  0
       if (troid != null)
 82  0
         troidString = ((Product) db.getProductTable().getObject(troid)).getName();
 83  0
     } catch (NumberFormatException e) {}
 84  
 
 85  0
     String price = getParam(tc, "field_price", pathInfo, 3);
 86  0
     String description = getParam(tc, "field_description", pathInfo, 4);
 87  0
     String outofstock = getParam(tc, "field_outofstock", pathInfo, 6);
 88  0
     Integer hitsPerPage = getInt(getParam(tc, "hits", pathInfo, 10));
 89  0
     String startString = getParam(tc, "start", pathInfo, 11);
 90  
 
 91  0
     String go = Form.getFormNulled(tc, "go");
 92  
     
 93  0
     logger.logType(type);
 94  
 
 95  0
     String path =
 96  
       pathise(troidString)
 97  
         + type.pathise()
 98  
         + age.pathise()
 99  
         + pathise(price)
 100  
         + pathise(description)
 101  
         + pathise("_")
 102  
         + pathise(outofstock)
 103  
         + pathise(sale)
 104  
         + manufacturer.pathise()
 105  
         + pathise(supplierString)
 106  
         + pathise(hitsPerPage);
 107  
 
 108  0
     if (hitsPerPage == null)
 109  0
       hitsPerPage = new Integer(100);
 110  
 
 111  0
     context.put("path", path);
 112  0
     context.put("type", new Field(type, db.getProductTable().getTypeColumn()));
 113  0
     context.put("ages", makeVector(db.getAgeTable().selection()));
 114  0
     context.put("trolley", ShoppingTrolley.getInstance(melati, config));
 115  0
     context.put("metaData", new TitleGenerator(type, age, manufacturer, troidString, description));
 116  0
     context.put("metaRange", "");
 117  0
     context.put("metaSupplier", notNull(supplierString));
 118  0
     context.put("metaName", notNull(troidString));
 119  0
     context.put("metaDescription", notNull(description));
 120  
 
 121  0
     boolean run = false;
 122  0
     if (go != null
 123  
       || troidString != null
 124  
       || !type.isNull()
 125  
       || !age.isNull()
 126  
       || price != null
 127  
       || description != null
 128  
       || outofstock != null
 129  
       || !manufacturer.isNull()
 130  
       || sale != null
 131  
       || supplier != null
 132  
       || startString != null)
 133  0
       run = true;
 134  
 
 135  0
     if (pathInfo.length < 1 && !run) {
 136  0
       template = JammyJoesUtil.shoppingTemplate(melati, "Shopping.wm");
 137  0
       if (print != null)
 138  0
         template = "view/PrintSearch.wm";
 139  
     } else {
 140  0
       logger.logUsersIp(melati.getRequest().getRemoteAddr());
 141  0
       PagedEnumeration r = null;
 142  0
       if (run) {
 143  0
         r = new ProductSearch(db, 200, logger).doSearch(andSearchCriteria);
 144  
       }
 145  0
       int start = 0;
 146  0
       if (startString != null) {
 147  
         try {
 148  0
           start = new Integer(startString).intValue();
 149  0
         } catch (NumberFormatException e) {
 150  0
         }
 151  
       }
 152  0
       if (r != null){
 153  0
         logger.writeLog();
 154  0
         if (r.getTotalCount() == 0) {
 155  0
           SearchCriteria orSearchCriteria = new TemplateContextSearchCriteria(tc,pathInfo,db,logger, "OR");
 156  0
           r = new ProductSearch(db, 200, logger).doSearch(orSearchCriteria);
 157  
         }
 158  0
         if (r.getTotalCount() == 1) {
 159  0
           Product similarToMe = (Product)r.nextElement();
 160  0
           Vector oneResult = new Vector();
 161  0
           oneResult.add(similarToMe);
 162  0
           context.put("results", new DumbPagedEnumeration(oneResult.elements(), start, hitsPerPage.intValue(), 200));
 163  0
           context.put("similarResults", new DumbPagedEnumeration(new ProductSearch(db, 10, new Logger(null)).doSearch(new SimilarSearchCriteria(similarToMe)), 0, 10, 10));
 164  0
         } else {
 165  0
           melati.getSession().setAttribute("path", path + pathise(startString));
 166  0
           context.put("results", new DumbPagedEnumeration(r, start, hitsPerPage.intValue(), 200));
 167  
         }
 168  
       }
 169  0
       context.put("debug", debug);
 170  
     }
 171  0
     return template;
 172  
   }
 173  
 
 174  
   private Vector makeVector(Enumeration enumeration) {
 175  0
     Vector result = new Vector();
 176  0
     while (enumeration.hasMoreElements()) {
 177  0
       result.add(enumeration.nextElement());
 178  
     }
 179  0
     return result;
 180  
   }
 181  
 
 182  
   private String pathise(Object in) {
 183  0
     if (in == null)
 184  0
       return "/_";
 185  0
     return "/" + UTF8URLEncoder.encode(in.toString());
 186  
   }
 187  
 
 188  
   private String getParam(ServletTemplateContext tc, String name, String[] pathInfo, int pos) {
 189  0
     String value = Form.getFormNulled(tc, name);
 190  0
     if (value == null && pos > -1 && pos < pathInfo.length) {
 191  0
       value = pathInfo[pos];
 192  0
       if (value != null) {
 193  0
         if (value.equals("") || value.equals("_")) {
 194  0
           value = null;
 195  
         } else {
 196  
           try {
 197  0
             value = UTF8URLEncoder.decode(value);
 198  0
           } catch (Exception e) {
 199  0
           }
 200  
         }
 201  
       }
 202  
     }
 203  0
     return value;
 204  
   }
 205  
 
 206  
   private Integer getInt(String in) {
 207  0
     if (in != null)
 208  0
       return new Integer(in);
 209  0
     return null;
 210  
   }
 211  
 
 212  
   private String notNull(String in) {
 213  0
     if (in != null)
 214  0
       return in;
 215  0
     return "";
 216  
   }
 217  
 
 218  
 }