Author: ssolsagl
Date: 2007-06-13 14:43:50 +0200 (Wed, 13 Jun 2007)
New Revision: 5319

Added:
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/NewsSearchSetBodyResultHandler.java
Log:
AGGREG-514

Added: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/NewsSearchSetBodyResultHandler.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/NewsSearchSetBodyResultHandler.java
                                (rev 0)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/NewsSearchSetBodyResultHandler.java
        2007-06-13 12:43:50 UTC (rev 5319)
@@ -0,0 +1,79 @@
+package no.schibstedsok.searchportal.result.handler;
+
+import no.schibstedsok.searchportal.datamodel.DataModel;
+import no.schibstedsok.searchportal.result.ResultItem;
+import no.schibstedsok.searchportal.result.ResultList;
+import org.apache.log4j.Logger;
+
+/**
+ * It the search is hit in body(contains <b>) we leave the field untouched.
+ * If the search does not match in body, we replace the body-field with
+ * aggreggdisplayvalue alias intro alias staticleadin. This can be configured
+ * in modes.xml through the source variable.
+ *
+ * However, this is a special case in newssearch so this class is probably not
+ * very reusable.
+ *
+ * See jira: AGGREG-514
+ *
+ * <p/>
+ * Created: Jun 13, 2007 1:09:12 PM
+ * Author: Ola MH Sagli <a href="[EMAIL PROTECTED]">ola at sesam.no</a>
+ */
+public class NewsSearchSetBodyResultHandler implements ResultHandler {
+
+    private final static Logger LOG = 
Logger.getLogger(NewsSearchSetBodyResultHandler.class);
+
+    /* Where to fetch alternative text from */
+    private String source = null;
+    
+    /**
+     * @param config the config
+     */
+    public NewsSearchSetBodyResultHandler(final ResultHandlerConfig config) {
+        source = ((NewsSearchSetBodyResultHandlerConfig)config).getSource();
+    }
+
+    public void handleResult(Context cxt, DataModel datamodel) {
+        ResultList<ResultItem> searchResult = cxt.getSearchResult();
+        setDocumentSummary(searchResult);
+        //To change body of implemented methods use File | Settings | File 
Templates.
+    }
+
+
+    /**
+     * @param searchResult
+     */
+    private void setDocumentSummary(final ResultList<ResultItem> searchResult) 
{
+
+        if (searchResult == null || searchResult.getResults().size() == 0) {
+            LOG.debug("Search is empty");
+            return;
+        }
+
+        for (ResultItem searchResultItem : searchResult.getResults()) {
+            if (searchResultItem instanceof ResultList<?>) {
+                 // Hope this works !Cutnpaste from 
DocumentSummaryResultHandler...
+                setDocumentSummary((ResultList<ResultItem>) searchResultItem);
+            }
+
+            String body = searchResultItem.getField("body");
+            String intro = searchResultItem.getField(source);
+
+            if(!isMatchInString(body)) {
+                searchResult.replaceResult(
+                    searchResultItem,
+                    searchResultItem.addField("body", intro));
+            }
+        }
+
+    }
+
+    /* We have a match in the string if it contains <b> */
+    private boolean isMatchInString(String s) {
+        if(s == null) {
+            return false;
+        }
+        return s.indexOf("<b>") != -1;
+    }
+}

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

Reply via email to