Author: ssmiweve
Date: 2008-03-22 20:01:08 +0100 (Sat, 22 Mar 2008)
New Revision: 6266

Modified:
   
branches/2.16/war/src/main/java/no/sesat/search/http/servlet/SearchServlet.java
Log:
fallback onto the default tab if the specified tab is not found. (better than 
the 404 error page).

Modified: 
branches/2.16/war/src/main/java/no/sesat/search/http/servlet/SearchServlet.java
===================================================================
--- 
branches/2.16/war/src/main/java/no/sesat/search/http/servlet/SearchServlet.java 
    2008-03-20 23:06:14 UTC (rev 6265)
+++ 
branches/2.16/war/src/main/java/no/sesat/search/http/servlet/SearchServlet.java 
    2008-03-22 19:01:08 UTC (rev 6266)
@@ -39,6 +39,7 @@
 import no.sesat.search.datamodel.access.ControlLevel;
 import no.sesat.search.datamodel.generic.DataObject;
 import no.sesat.search.datamodel.generic.StringDataObject;
+import no.sesat.search.datamodel.generic.StringDataObjectSupport;
 import no.sesat.search.datamodel.page.PageDataObject;
 import no.sesat.search.datamodel.request.ParametersDataObject;
 import no.sesat.search.http.servlet.FactoryReloads.ReloadArg;
@@ -112,8 +113,6 @@
 
     // Protected -----------------------------------------------------
 
-    /** [EMAIL PROTECTED]
-     */
     @Override
     protected void doGet(
             final HttpServletRequest request,
@@ -121,7 +120,7 @@
                 throws ServletException, IOException {
 
         logAccessRequest(request);
-        
+
         final DataModel datamodel = (DataModel) 
request.getSession().getAttribute(DataModel.KEY);
         final ParametersDataObject parametersDO = datamodel.getParameters();
         final Site site = datamodel.getSite().getSite();
@@ -164,7 +163,7 @@
         // DataModel's ControlLevel will be VIEW_CONSTRUCTION (safe setting 
set by DataModelFilter)
         //  Bring it back to VIEW_CONSTRUCTION.
         dmFactory.assignControlLevel(datamodel, 
ControlLevel.REQUEST_CONSTRUCTION);
-                
+
         try{
 
             if (!isEmptyQuery(datamodel, response, genericCxt)) {
@@ -327,8 +326,8 @@
             final String charset = "utf-8";
             response.setCharacterEncoding(charset);
             response.setContentType("text/xml; charset=" + charset);
-        } else if (request.getParameter("encoding") != null && 
request.getParameter("encoding").equals("iso-8859-1")){ 
-            response.setContentType("text/html; charset=iso-8859-1"); // for 
external javascript document.write(), where server uses iso encoding 
+        } else if (request.getParameter("encoding") != null && 
request.getParameter("encoding").equals("iso-8859-1")){
+            response.setContentType("text/html; charset=iso-8859-1"); // for 
external javascript document.write(), where server uses iso encoding
             response.setCharacterEncoding("iso-8859-1");
         } else {
             final String charset = "utf-8";
@@ -371,7 +370,7 @@
 
                 if 
(datamodel.getSearch("catalogue").getResults().getHitCount() == 1) {
                     final ResultItem sri = 
datamodel.getSearch("catalogue").getResults().getResults().get(0);
-                    final String recordid = 
sri.getField("contentid").toString();                    
+                    final String recordid = 
sri.getField("contentid").toString();
                     final String url = "/search/?c=yip&q=" + 
datamodel.getQuery().getQuery().getQueryString()
                             + "&companyId=" + recordid
                             + "&companyId_x=" + new MD5Generator("S3SAM 
rockz").generateMD5(recordid)
@@ -389,23 +388,22 @@
     }
 
     private static SearchTab updateSearchTab(
-            final HttpServletRequest request, 
+            final HttpServletRequest request,
             final DataModelFactory dmFactory,
             final BaseContext genericCxt){
 
-        // determine the c parameter. default is 'd' unless there exists a 
page parameter when it becomes 'i'.
+        // determine the c parameter.
+        //  default comes from SiteConfiguration unless there exists a page 
parameter when it becomes 'i'.
         final DataModel datamodel = (DataModel) 
request.getSession().getAttribute(DataModel.KEY);
         final ParametersDataObject parametersDO = datamodel.getParameters();
-        final StringDataObject c = parametersDO.getValue("c");
+        final StringDataObject c = 
parametersDO.getValue(SearchTab.PARAMETER_KEY);
         final StringDataObject page = parametersDO.getValue("page");
-        final String defaultSearchTabKey 
+        final String defaultSearchTabKey
                 = 
datamodel.getSite().getSiteConfiguration().getProperty(SiteConfiguration.DEFAULTTAB_KEY);
-        
+
         final String searchTabKey = null != c &&  null != c.getString() && 0 < 
c.getString().length()
                 ? c.getString()
-                : null != page && null != page.getString() && 0 < 
page.getString().length() 
-                    ? "i" 
-                    : null != defaultSearchTabKey && 0 < 
defaultSearchTabKey.length() ? defaultSearchTabKey: "c";
+                : null != page && null != page.getString() && 0 < 
page.getString().length() ? "i" : defaultSearchTabKey;
 
         LOG.info("searchTabKey:" +searchTabKey);
 
@@ -415,31 +413,36 @@
                 ContextWrapper.wrap(
                     SearchTabFactory.Context.class,
                     genericCxt));
-            
+
             result = stFactory.getTabByKey(searchTabKey);
-            
+
             if(null == datamodel.getPage()){
-                
+
                 final PageDataObject pageDO = dmFactory.instantiate(
                         PageDataObject.class,
                         datamodel,
                         new DataObject.Property("tabs", 
stFactory.getTabsByName()),
                         new DataObject.Property("currentTab", result));
-                
+
                 datamodel.setPage(pageDO);
             }else{
                 datamodel.getPage().setCurrentTab(result);
             }
-            
+
             // this is legacy. shorter to write in templates than 
$datamodel.page.currentTab
             request.setAttribute("tab", datamodel.getPage().getCurrentTab());
-            
+
         }catch(AssertionError ae){
             // it's not normal to catch assert errors but we really want a 404 
not 500 response error.
             LOG.error("Caught Assertion: " + ae);
         }
         if(null==result){
             LOG.error(ERR_MISSING_TAB + searchTabKey);
+            // first going to fallback to defaultSearchTabKey in preference to 
the pending 404 response error.
+            if(!defaultSearchTabKey.equals(searchTabKey)){
+                parametersDO.setValue(SearchTab.PARAMETER_KEY, new 
StringDataObjectSupport(defaultSearchTabKey));
+                result = updateSearchTab(request, dmFactory, genericCxt);
+            }
         }
         return result;
     }
@@ -494,7 +497,7 @@
                 final RunningQuery query = 
QueryFactory.getInstance().createQuery(rqCxt, request, response);
 
                 if( !datamodel.getQuery().getQuery().isBlank() || 
searchTab.isExecuteOnBlank() ){
-                    
+
                     query.run();
                     stopWatch.stop();
                     LOG.info("Search took " + stopWatch + " " + 
datamodel.getQuery().getString());
@@ -524,7 +527,7 @@
 
     // next to duplicate from SiteLocatorFilter
     private static void logAccessRequest(final HttpServletRequest request){
-       
+
         final String url = request.getRequestURI()
                 + (null != request.getQueryString() ? '?' + 
request.getQueryString() : "");
         final String referer = request.getHeader("Referer");
@@ -533,7 +536,7 @@
         final String userAgent = request.getHeader("User-Agent");
         final String sesamId = getCookieValue(request, "SesamID");
         final String sesamUser = getCookieValue(request, "SesamUser");
-            
+
         ACCESS_LOG.info("<search-servlet>"
                 + "<real-url method=\"" + method + "\">" + 
StringEscapeUtils.escapeXml(url) + "</real-url>"
                 + (null != referer ? "<referer>" + 
StringEscapeUtils.escapeXml(referer) + "</referer>" : "")
@@ -541,10 +544,10 @@
                 + "<user id=\"" + sesamId + "\">" + sesamUser + "</user>"
                 + "</search-servlet>");
     }
-    
+
     // probably apache commons could simplify this // duplicated in 
SiteLocatorFilter
     private static String getCookieValue(final HttpServletRequest request, 
final String cookieName){
-    
+
         String value = "";
         // Look in attributes (it could have already been updated this request)
         if( null != request ){
@@ -562,7 +565,7 @@
 
         return value;
     }
-    
+
     // Inner classes -------------------------------------------------
 
 }

_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits

Reply via email to