Author: gttersen
Date: 2007-03-15 18:13:16 +0100 (Thu, 15 Mar 2007)
New Revision: 4578

Added:
   
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformer.java
Modified:
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/NewsAggregatorSearchConfiguration.java
Log:
Uppdate for nyheter.sesam.no

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
     2007-03-14 16:44:57 UTC (rev 4577)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
     2007-03-15 17:13:16 UTC (rev 4578)
@@ -6,12 +6,11 @@
 import 
no.schibstedsok.searchportal.mode.config.NewsAggregatorSearchConfiguration;
 import no.schibstedsok.searchportal.result.BasicSearchResult;
 import no.schibstedsok.searchportal.result.BasicSearchResultItem;
-import no.schibstedsok.searchportal.result.NewsAggregatorSearchResult;
-import no.schibstedsok.searchportal.result.SearchResult;
-import no.schibstedsok.searchportal.result.SearchResultItem;
 import no.schibstedsok.searchportal.result.FastSearchResult;
 import no.schibstedsok.searchportal.result.Modifier;
 import no.schibstedsok.searchportal.result.Navigator;
+import no.schibstedsok.searchportal.result.SearchResult;
+import no.schibstedsok.searchportal.result.SearchResultItem;
 import org.apache.log4j.Logger;
 import org.jdom.Document;
 import org.jdom.Element;
@@ -26,10 +25,15 @@
 import java.util.HashMap;
 import java.util.List;
 
+/**
+ * Search command that will try to get pregenerated clusters from xml files. 
If the xml file is not available it will
+ * fall back to a search.
+ */
+public class NewsAggregatorSearchCommand extends NavigatableESPFastCommand {
 
-public class NewsAggregatorSearchCommand extends AbstractESPFastSearchCommand {
-
     private final static Logger LOG = 
Logger.getLogger(NewsAggregatorSearchCommand.class);
+    private static final String PARAM_GEONAV = "geonav";
+    private static final String PARAM_CLUSTER_ID = "clusterId";
 
     /**
      * @param cxt       The context to execute in.
@@ -47,8 +51,8 @@
         LOG.debug("Loading xml file at: " + config.getXmlSource());
         LOG.debug("Update interval: " + config.getUpdateIntervalMinutes());
 
-        StringDataObject geoNav = datamodel.getParameters().getValue("geonav");
-        StringDataObject clusterId = 
datamodel.getParameters().getValue("clusterId");
+        StringDataObject geoNav = 
datamodel.getParameters().getValue(PARAM_GEONAV);
+        StringDataObject clusterId = 
datamodel.getParameters().getValue(PARAM_CLUSTER_ID);
 
         String xmlFile = geoNav == null ? config.getXmlMainFile() : 
geoNav.getString();
 
@@ -78,10 +82,10 @@
         LOG.debug("result-fields=" + config.getResultFields());
         LOG.debug("query-server=" + config.getQueryServer());
         LOG.debug("-----------------------------------------------");
-        return null;  //To change body of created methods use File | Settings 
| File Templates.
+        SearchResult searchResult = super.execute();
+        return searchResult;
     }
 
-
     private SearchResult getPageResult(NewsAggregatorSearchConfiguration 
config, String xmlFile) {
         final NewsAggregatorXmlParser newsAggregatorXmlParser = new 
NewsAggregatorXmlParser();
         try {
@@ -225,7 +229,7 @@
         private void handleCluster(Element cluster, SearchCommand 
searchCommand, SearchResult searchResult) {
             final SearchResultItem searchResultItem = new 
BasicSearchResultItem();
             searchResultItem.addField("size", 
Integer.toString(Integer.parseInt(cluster.getAttributeValue(ATTRIBUTE_FULL_COUNT))
 - 1));
-            searchResultItem.addField("clusterId", 
cluster.getAttributeValue(ATTRIBUTE_CLUSTERID));
+            searchResultItem.addField(PARAM_CLUSTER_ID, 
cluster.getAttributeValue(ATTRIBUTE_CLUSTERID));
 
             final Element entryCollectionElement = 
cluster.getChild(ELEMENT_ENTRY_COLLECTION);
             final List<Element> entryList = 
entryCollectionElement.getChildren();

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/NewsAggregatorSearchConfiguration.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/NewsAggregatorSearchConfiguration.java
        2007-03-14 16:44:57 UTC (rev 4577)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/NewsAggregatorSearchConfiguration.java
        2007-03-15 17:13:16 UTC (rev 4578)
@@ -3,7 +3,7 @@
 
 import org.apache.log4j.Logger;
 
-public class NewsAggregatorSearchConfiguration extends 
ESPFastSearchConfiguration {
+public class NewsAggregatorSearchConfiguration extends 
NavigatableESPFastConfiguration {
     private final static Logger log = 
Logger.getLogger(NewsAggregatorSearchConfiguration.class);
 
     private String xmlSource;

Added: 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformer.java
===================================================================
--- 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformer.java
                               (rev 0)
+++ 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformer.java
       2007-03-15 17:13:16 UTC (rev 4578)
@@ -0,0 +1,81 @@
+package no.schibstedsok.searchportal.query.transform;
+
+import no.schibstedsok.searchportal.query.Clause;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.w3c.dom.Element;
+
+import java.util.Calendar;
+import java.util.Map;
+import java.text.SimpleDateFormat;
+
+public class NewsClusterQueryTransformer extends AbstractQueryTransformer {
+    private final SimpleDateFormat sdf = new 
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+    private final static Logger LOG = 
Logger.getLogger(NewsClusterQueryTransformer.class);
+    private static final String PARAM_FIELDS ="param-fields";
+    private static final String CLUSTER_FIELD="cluster-field";
+    private static final String CLUSTER_ID_FIELD="cluster-id-field";
+    private static final String TIMESTAMP_FIELD="timestamp-field";
+    private static final String MAX_AGE_IN_DAYS="max-age-in-days";
+
+    private String[] paramFields;
+    private String timestampField;
+    private String clusterField;
+    private String clusterIdField = "clusterId";
+    private int maxAgeInDays = 7;
+    
+    public void visitImpl(final Clause clause) {
+        // No transformation, only filter
+    }
+
+    @Override
+    public String getFilter(final Map parameters) {
+        StringBuilder filter = new StringBuilder();
+        for (String paramField : paramFields) {            
+            Object paramValue = parameters.get(paramField);
+            LOG.debug("Adding param from datamodel: " + paramField + "=" + 
paramValue);
+            if (paramValue != null && paramValue instanceof String) {
+                filter.append(paramField).append(':');
+                filter.append('\"').append((String) paramValue).append('\"');
+                filter.append(" and ");
+            }
+        }
+        Object clusterId = parameters.get(clusterIdField);
+        if (clusterId != null && clusterId instanceof String) {
+            filter.append("cluster:").append('\"').append((String) 
clusterId).append("\" ");
+        } else {
+            filter.append("cluster:range(1,max) ");
+        }
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(Calendar.DAY_OF_WEEK, -maxAgeInDays);
+        filter.append("and ").append(timestampField).append(':');
+        
filter.append("range(").append(sdf.format(calendar.getTime())).append(",max)");
+        return filter.toString();
+    }
+
+    @Override
+    public QueryTransformer readQueryTransformer(final Element element) {
+        paramFields = 
StringUtils.split(element.getAttribute(PARAM_FIELDS),",");
+        clusterField = element.getAttribute(CLUSTER_FIELD);
+        timestampField = element.getAttribute(TIMESTAMP_FIELD);
+        clusterIdField = element.getAttribute(CLUSTER_ID_FIELD);
+        final String maxAge = element.getAttribute(MAX_AGE_IN_DAYS);
+        if (maxAge != null) {
+            maxAgeInDays = Integer.parseInt(maxAge);
+        }
+        return this;
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        final NewsClusterQueryTransformer ncqt = (NewsClusterQueryTransformer) 
super.clone();
+        ncqt.paramFields = paramFields;
+        ncqt.clusterField = clusterField;
+        ncqt.maxAgeInDays = maxAgeInDays;
+        ncqt.timestampField = timestampField;
+        ncqt.clusterIdField = clusterIdField;
+        return ncqt;
+    }
+
+}

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

Reply via email to