Author: gttersen
Date: 2007-04-24 21:59:16 +0200 (Tue, 24 Apr 2007)
New Revision: 4862

Added:
   
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMediumQueryTransformerConfig.java
   
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMediumQueryTransformer.java
Modified:
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/ClusteringESPFastCommand.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/AgeCalculatorResultHandler.java
   
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformerConfig.java
   
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
   
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformer.java
   
trunk/result-handler-config-spi/src/main/java/no/schibstedsok/searchportal/result/handler/AgeCalculatorResultHandlerConfig.java
   
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/config/ClusteringESPFastConfiguration.java
Log:
Fixes for newsAggregator

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
       2007-04-24 19:12:51 UTC (rev 4861)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
       2007-04-24 19:59:16 UTC (rev 4862)
@@ -47,11 +47,9 @@
 import no.schibstedsok.searchportal.mode.config.YahooMediaSearchConfiguration;
 import no.schibstedsok.searchportal.mode.config.YellowGeoSearchConfiguration;
 import no.schibstedsok.searchportal.mode.config.YellowSearchConfiguration;
-import 
no.schibstedsok.searchportal.mode.executor.ParallelSearchCommandExecutor;
-import no.schibstedsok.searchportal.mode.executor.SearchCommandExecutor;
-import 
no.schibstedsok.searchportal.mode.executor.SequentialSearchCommandExecutor;
 import no.schibstedsok.searchportal.query.transform.QueryTransformerConfig;
 import no.schibstedsok.searchportal.result.Navigator;
+import no.schibstedsok.searchportal.result.handler.ResultHandlerConfig;
 import no.schibstedsok.searchportal.site.Site;
 import no.schibstedsok.searchportal.site.SiteContext;
 import no.schibstedsok.searchportal.site.SiteKeyedFactory;
@@ -79,7 +77,6 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
-import no.schibstedsok.searchportal.result.handler.ResultHandlerConfig;
 
 /**
  * @author <a href="mailto:[EMAIL PROTECTED]>mick</a>
@@ -131,7 +128,7 @@
 
     private final DocumentLoader loader;
     private final Context context;
-    
+
     private String templatePrefix;
 
     // Static --------------------------------------------------------
@@ -269,7 +266,7 @@
                 mode.setId(id);
                 mode.setExecutor(parseExecutor(modeE.getAttribute("executor"),
                         inherit != null ? inherit.getExecutor() : 
SearchMode.SearchCommandExecutorConfig.SEQUENTIAL));
-                
+
                 fillBeanProperty(mode, inherit, "analysis", ParseType.Boolean, 
modeE, "false");
 
                 // setup new commands list for this mode
@@ -310,13 +307,13 @@
     }
 
     private static SearchMode.SearchCommandExecutorConfig parseExecutor(
-            final String name, 
+            final String name,
             final SearchMode.SearchCommandExecutorConfig def) {
 
-        try{
+        try {
             return 
SearchMode.SearchCommandExecutorConfig.valueOf(name.toUpperCase());
-            
-        }catch(IllegalArgumentException iae){
+
+        } catch (IllegalArgumentException iae) {
             LOG.error("Unparsable executor " + name, iae);
         }
         return def;
@@ -775,7 +772,8 @@
                     fillBeanProperty(cefc, inherit, "clusterField", 
ParseType.String, commandE, "cluster");
                     fillBeanProperty(cefc, inherit, "clusterMaxFetch", 
ParseType.Int, commandE, "10");
                     fillBeanProperty(cefc, inherit, "nestedResultsField", 
ParseType.String, commandE, "entries");
-                    fillBeanProperty(cefc, inherit, "userSortField", 
ParseType.String, commandE, "publishedtime");
+                    fillBeanProperty(cefc, inherit, "sortField", 
ParseType.String, commandE, "publishedtime");
+                    fillBeanProperty(cefc, inherit, "defaultSort", 
ParseType.String, commandE, "descending");
                     fillBeanProperty(cefc, inherit, "userSortParameter", 
ParseType.String, commandE, "sort");
                 }
 
@@ -910,14 +908,14 @@
     }
 
 
-    private static final class QueryTransformerFactory extends AbstractFactory{
+    private static final class QueryTransformerFactory extends AbstractFactory 
{
 
         QueryTransformerFactory() {
         }
 
         QueryTransformerConfig parseQueryTransformer(final Element qt) {
 
-            return 
((QueryTransformerConfig)construct(qt)).readQueryTransformer(qt);
+            return ((QueryTransformerConfig) 
construct(qt)).readQueryTransformer(qt);
         }
 
         protected Class<? extends QueryTransformerConfig> findClass(final 
String xmlName) {
@@ -925,9 +923,9 @@
             Class clazz = null;
             final String bName = xmlToBeanName(xmlName);
             final String className = Character.toUpperCase(bName.charAt(0)) + 
bName.substring(1, bName.length());
-            
+
             LOG.info("findClass " + className);
-            
+
             try {
                 clazz = (Class<? extends QueryTransformerConfig>) 
Class.forName(
                         "no.schibstedsok.searchportal.query.transform."
@@ -942,14 +940,14 @@
 
     }
 
-    private static final class ResultHandlerFactory extends AbstractFactory{
+    private static final class ResultHandlerFactory extends AbstractFactory {
 
         ResultHandlerFactory() {
         }
 
         ResultHandlerConfig parseResultHandler(final Element rh) {
 
-            return ((ResultHandlerConfig)construct(rh)).readResultHandler(rh);
+            return ((ResultHandlerConfig) construct(rh)).readResultHandler(rh);
         }
 
         protected Class<? extends ResultHandlerConfig> findClass(final String 
xmlName) {
@@ -957,9 +955,9 @@
             Class clazz = null;
             final String bName = xmlToBeanName(xmlName);
             final String className = Character.toUpperCase(bName.charAt(0)) + 
bName.substring(1, bName.length());
-            
+
             LOG.info("findClass " + className);
-            
+
             try {
                 clazz = (Class<? extends ResultHandlerConfig>) Class.forName(
                         "no.schibstedsok.searchportal.result.handler."
@@ -973,10 +971,11 @@
         }
 
     }
-        
-    private static abstract class AbstractFactory{
-        AbstractFactory(){}
-        
+
+    private static abstract class AbstractFactory {
+        AbstractFactory() {
+        }
+
         boolean supported(final String xmlName) {
 
             return null != findClass(xmlName);
@@ -997,6 +996,6 @@
             }
         }
 
-        protected abstract Class<? extends Object> findClass(final String 
xmlName);      
+        protected abstract Class<? extends Object> findClass(final String 
xmlName);
     }
 }

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/ClusteringESPFastCommand.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/ClusteringESPFastCommand.java
        2007-04-24 19:12:51 UTC (rev 4861)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/ClusteringESPFastCommand.java
        2007-04-24 19:59:16 UTC (rev 4862)
@@ -38,12 +38,19 @@
     protected void modifyQuery(IQuery query) {
         final ClusteringESPFastConfiguration config = getSearchConfiguration();
 
-        // Can not use the default sort functionality since it hardcodes field 
name
+        // Because of a bug in FAST ESP5 related to collapsing and sorting, we 
must use sort direcetion,
+        // and not the +fieldname syntax
         final StringDataObject sort = 
datamodel.getParameters().getValue(config.getUserSortParameter());
+        String sortType;
         if (sort != null) {
-            query.setParameter(BaseParameter.SORT_BY, 
config.getUserSortField());
-            query.setParameter(BaseParameter.SORT_DIRECTION, sort.getString());
+            sortType = sort.getString();
+        } else {
+            sortType = config.getDefaultSort();
         }
+        if (!sortType.equals("relevance")) {
+            query.setParameter(BaseParameter.SORT_BY, config.getSortField());
+            query.setParameter(BaseParameter.SORT_DIRECTION, sortType);
+        }
 
         final StringDataObject clusterId = 
datamodel.getParameters().getValue(config.getClusterIdParameter());
         if (clusterId == null) {

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/AgeCalculatorResultHandler.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/AgeCalculatorResultHandler.java
    2007-04-24 19:12:51 UTC (rev 4861)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/AgeCalculatorResultHandler.java
    2007-04-24 19:59:16 UTC (rev 4862)
@@ -18,7 +18,9 @@
 import java.util.TimeZone;
 
 
-/** Calculate Age.
+/**
+ * Calculate Age.
+ *
  * @author <a href="mailto:[EMAIL PROTECTED]">Magnus Eklund</a>
  * @version <tt>$Id$</tt>
  */
@@ -28,20 +30,21 @@
     private static final String FAST_DATE_FMT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
 
     private final AgeCalculatorResultHandlerConfig config;
-    
+
     /**
-     * 
-     * @param config 
+     * @param config
      */
-    public AgeCalculatorResultHandler(final ResultHandlerConfig config){
-        this.config = (AgeCalculatorResultHandlerConfig)config;
+    public AgeCalculatorResultHandler(final ResultHandlerConfig config) {
+        this.config = (AgeCalculatorResultHandlerConfig) config;
     }
 
-    /** @inherit **/
+    /**
+     * @inherit *
+     */
     public void handleResult(final Context cxt, final DataModel datamodel) {
 
         final String fmt = /*dateFormat != null ? dateFormat :*/ FAST_DATE_FMT;
-        final String ageFormatKey = /*ageMessageFormat != null ? 
ageMessageFormat :*/ "age";
+        final String ageFormatKey = config.getAgeFormatKey();
         final DateFormat df = new SimpleDateFormat(fmt);
 
         // Zulu time is UTC. But java doesn't know that.
@@ -52,12 +55,12 @@
     }
 
     private void setAgeForAll(
-            final SearchResult searchResult, 
-            final DateFormat df, 
-            final DataModel datamodel, 
-            final Context cxt, 
+            final SearchResult searchResult,
+            final DateFormat df,
+            final DataModel datamodel,
+            final Context cxt,
             final String ageFormatKey) {
-        
+
         for (final SearchResultItem item : searchResult.getResults()) {
             if (config.getRecursiveField() != null) {
                 SearchResult subResult = 
item.getNestedSearchResult(config.getRecursiveField());
@@ -70,12 +73,12 @@
     }
 
     private void setAge(
-            final SearchResultItem item, 
-            final DateFormat df, 
-            final DataModel datamodel, 
-            final Context cxt, 
+            final SearchResultItem item,
+            final DateFormat df,
+            final DataModel datamodel,
+            final Context cxt,
             final String ageFormatKey) {
-        
+
         final String docTime = item.getField(config.getSourceField());
 
         if (docTime != null) {
@@ -95,45 +98,45 @@
                 dateParts[1] = Long.valueOf(age / (60 * 60 * 1000) % 24);
                 dateParts[2] = Long.valueOf(age / (60 * 1000) % 60);
 
-                final Map<String,Object> parameters = 
datamodel.getJunkYard().getValues();
+                final Map<String, Object> parameters = 
datamodel.getJunkYard().getValues();
                 String ageString = "";
                 // = TextMessages.getMessages().getMessage(currentLocale, 
ageFormatKey, dateParts);
-                final String  s = parameters.get("contentsource") instanceof 
String[]
-                        ? ((String[])parameters.get("contentsource"))[0]
-                        : (String)parameters.get("contentsource");
+                final String s = parameters.get("contentsource") instanceof 
String[]
+                        ? ((String[]) parameters.get("contentsource"))[0]
+                        : (String) parameters.get("contentsource");
 
                 final TextMessages txtMsgs = 
TextMessages.valueOf(ContextWrapper.wrap(
                         TextMessages.Context.class,
                         cxt,
-                        new SiteContext(){
+                        new SiteContext() {
                             public Site getSite() {
                                 return datamodel.getSite().getSite();
                             }
                         }));
 
                 //older than 3 days or source is Mediearkivet, show short date 
format.
-                if (dateParts[0].longValue() > 3 || s != null && 
s.equals("Mediearkivet") || config.getAsDate()){
-                    
+                if (dateParts[0].longValue() > 3 || s != null && 
s.equals("Mediearkivet") || config.getAsDate()) {
+
                     final DateFormat shortFmt = DateFormat.getDateInstance(
                             DateFormat.SHORT,
                             datamodel.getSite().getSite().getLocale());
 
                     ageString = shortFmt.format(new Date(stamp));
-                //more than 1 day, show days
-                }else if (dateParts[0].longValue() > 0) {
+                    //more than 1 day, show days
+                } else if (dateParts[0].longValue() > 0) {
                     dateParts[1] = Long.valueOf(0);
                     dateParts[2] = Long.valueOf(0);
-                    ageString = txtMsgs.getMessage(ageFormatKey, (Object[])  
dateParts);
-                //more than 1 hour, show hours
+                    ageString = txtMsgs.getMessage(ageFormatKey, (Object[]) 
dateParts);
+                    //more than 1 hour, show hours
                 } else if (dateParts[1].longValue() > 0) {
                     dateParts[2] = Long.valueOf(0);
                     ageString = txtMsgs.getMessage(ageFormatKey, (Object[]) 
dateParts);
-                //if less than 1 hour, show minutes
+                    //if less than 1 hour, show minutes
                 } else if (dateParts[2].longValue() > 0) {
                     dateParts[0] = Long.valueOf(0);
                     dateParts[1] = Long.valueOf(0);
                     ageString = txtMsgs.getMessage(ageFormatKey, (Object[]) 
dateParts);
-                } else{
+                } else {
                     ageString = docTime.substring(8, 10) + "."
                             + docTime.substring(5, 7) + "." + 
docTime.substring(0, 4);
                 }

Modified: 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformerConfig.java
===================================================================
--- 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformerConfig.java
     2007-04-24 19:12:51 UTC (rev 4861)
+++ 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformerConfig.java
     2007-04-24 19:59:16 UTC (rev 4862)
@@ -28,12 +28,16 @@
     private static final String POSTFIX = "postfix";
     private static final String TYPE_NAME = "name";
     private static final String DEFAULT_TYPE = "default-type";
+    private static final String UNCLUSTERED_DELAY = "unclustered-delay";
+    private static final String UNCLUSTERED_DELAY_IN_MINUTES = 
"unclustered-delay-in-minutes";
 
     private static final String DEFAULT_CONVERT_ELEMENT = "default-convert";
     private String queryType;
     private String queryParameter;
     private String typeParameter;
     private String defaultType;
+    private boolean unclusteredDelayFilter = false;
+    private int unclusteredDelayInMinutes = 10;
     private Map<String, String[]> typeConversions;
 
 
@@ -60,6 +64,15 @@
         return defaultType;
     }
 
+
+    public boolean isUnclusteredDelayFilter() {
+        return unclusteredDelayFilter;
+    }
+
+    public int getUnclusteredDelayInMinutes() {
+        return unclusteredDelayInMinutes;
+    }
+
     @Override
     public NewsCaseQueryTransformerConfig readQueryTransformer(final Element 
element) {
         Logger log = Logger.getLogger(NewsCaseQueryTransformerConfig.class);
@@ -68,10 +81,18 @@
             queryParameter = element.getAttribute(QUERY_PARAMETER);
         }
         typeParameter = element.getAttribute(TYPE_PARAMETER);
-        final String optionalParameter = element.getAttribute(DEFAULT_TYPE);
+        String optionalParameter = element.getAttribute(DEFAULT_TYPE);
         if (optionalParameter != null && optionalParameter.length() > 0) {
             defaultType = optionalParameter;
         }
+        optionalParameter = element.getAttribute(UNCLUSTERED_DELAY);
+        if (optionalParameter != null && 
optionalParameter.equalsIgnoreCase("true")) {
+            unclusteredDelayFilter = true;
+        }
+        optionalParameter = element.getAttribute(UNCLUSTERED_DELAY_IN_MINUTES);
+        if (optionalParameter != null && optionalParameter.length() > 0) {
+            unclusteredDelayInMinutes = Integer.parseInt(optionalParameter);
+        }
         NodeList convertNodeList = 
element.getElementsByTagName(DEFAULT_CONVERT_ELEMENT);
         if (convertNodeList.getLength() > 0) {
             typeConversions = new HashMap<String, String[]>();

Added: 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMediumQueryTransformerConfig.java
===================================================================
--- 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMediumQueryTransformerConfig.java
                           (rev 0)
+++ 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMediumQueryTransformerConfig.java
   2007-04-24 19:59:16 UTC (rev 4862)
@@ -0,0 +1,42 @@
+package no.schibstedsok.searchportal.query.transform;
+
+import 
no.schibstedsok.searchportal.query.transform.AbstractQueryTransformerConfig.Controller;
+import org.w3c.dom.Element;
+
[EMAIL PROTECTED]("NewsMediumQueryTransformer")
+public class NewsMediumQueryTransformerConfig extends 
AbstractQueryTransformerConfig {
+    public static final String ALL_MEDIUMS = "all";
+    private String mediumPrefix = "medium";
+    private String defaultMedium = "webnewsarticle";
+    private String mediumParameter = "medium";
+
+
+    public String getMediumPrefix() {
+        return mediumPrefix;
+    }
+
+    public String getDefaultMedium() {
+        return defaultMedium;
+    }
+
+    public String getMediumParameter() {
+        return mediumParameter;
+    }
+
+    @Override
+    public AbstractQueryTransformerConfig readQueryTransformer(final Element 
element) {
+        String s = element.getAttribute("medium-prefix");
+        if (s != null && s.length() > 0) {
+            mediumPrefix = s;
+        }
+        s = element.getAttribute("default-medium");
+        if (s != null && s.length() > 0) {
+            defaultMedium = s;
+        }
+        s = element.getAttribute("medium-parameter");
+        if (s != null && s.length() > 0) {
+            mediumParameter = s;
+        }
+        return this;
+    }
+}

Modified: 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
===================================================================
--- 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
  2007-04-24 19:12:51 UTC (rev 4861)
+++ 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
  2007-04-24 19:59:16 UTC (rev 4862)
@@ -7,7 +7,10 @@
 
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.Properties;
+import java.util.TimeZone;
 
 /**
  * Checks if the query should be transformed from a ejb lookup on the 
queryParameter. Transformation will replace
@@ -17,6 +20,7 @@
  * query should be done after this.
  */
 public final class NewsCaseQueryTransformer extends AbstractQueryTransformer {
+    private final SimpleDateFormat sdf = new 
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
     private final static Logger LOG = 
Logger.getLogger(NewsCaseQueryTransformer.class);
 
     private NewsQueryTransformerDataAccess dataAccess = new 
NewsQueryTransformerDataAccess();
@@ -51,6 +55,9 @@
             for (Clause keyClause : 
getContext().getTransformedTerms().keySet()) {
                 getContext().getTransformedTerms().put(keyClause, "");
             }
+            if (config.isUnclusteredDelayFilter()) {
+                transformedQuery = addUnclusteredDelayFilter(transformedQuery);
+            }
             LOG.debug("New query is: '" + transformedQuery + "'");
             if (transformedQuery.length() > 0) {
                 
getContext().getDataModel().getJunkYard().setValue(config.getQueryType(), 
transformedQuery);
@@ -59,6 +66,17 @@
         }
     }
 
+    private String addUnclusteredDelayFilter(String transformedQuery) {
+        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+        cal.add(Calendar.MINUTE, -config.getUnclusteredDelayInMinutes());
+        StringBuilder sb = new StringBuilder(transformedQuery);
+        sb.insert(0, "and(");
+        sb.append(",cluster:range(1,max) or processingtime:range(min,");
+        sb.append(sdf.format(cal.getTime()));
+        sb.append("))");
+        return sb.toString();
+    }
+
     private String getTransformedTermsQuery() {
         StringBuilder query = new StringBuilder();
         for (Clause keyClause : getContext().getTransformedTerms().keySet()) {

Modified: 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformer.java
===================================================================
--- 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformer.java
       2007-04-24 19:12:51 UTC (rev 4861)
+++ 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformer.java
       2007-04-24 19:59:16 UTC (rev 4862)
@@ -74,7 +74,8 @@
             LOG.debug("Adding param from datamodel: " + paramField + "=" + 
paramValue);
             if (paramValue != null) {
                 filter.append(paramField).append(':');
-                filter.append('\"').append(paramValue).append('\"');
+                filter.append("equals(");
+                filter.append('\"').append(paramValue).append("\")");
                 filter.append(" and ");
             }
         }

Added: 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMediumQueryTransformer.java
===================================================================
--- 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMediumQueryTransformer.java
                                (rev 0)
+++ 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMediumQueryTransformer.java
        2007-04-24 19:59:16 UTC (rev 4862)
@@ -0,0 +1,39 @@
+package no.schibstedsok.searchportal.query.transform;
+
+import no.schibstedsok.searchportal.query.Clause;
+import org.apache.log4j.Logger;
+
+public class NewsMediumQueryTransformer extends AbstractQueryTransformer {
+    private static final Logger LOG = 
Logger.getLogger(NewsMediumQueryTransformer.class);
+    private NewsMediumQueryTransformerConfig config;
+
+    public NewsMediumQueryTransformer(final QueryTransformerConfig config) {
+        this.config = (NewsMediumQueryTransformerConfig) config;
+    }
+
+    public void visitImpl(final Clause clause) {
+        String medium = (String) 
getContext().getDataModel().getJunkYard().getValue(config.getMediumParameter());
+        if (!NewsMediumQueryTransformerConfig.ALL_MEDIUMS.equals(medium)) {
+            if (medium == null || medium.length() == 0) {
+                medium = config.getDefaultMedium();
+            }
+            StringBuilder query = new 
StringBuilder(getTransformedTermsQuery());
+            query.insert(0, "and(");
+            query.append(", 
").append(config.getMediumPrefix()).append(':').append(medium).append(')');
+            for (Clause keyClause : 
getContext().getTransformedTerms().keySet()) {
+                getContext().getTransformedTerms().put(keyClause, "");
+            }
+            LOG.debug("Transformed query is: '" + query.toString() + "'");
+            
getContext().getTransformedTerms().put(getContext().getQuery().getFirstLeafClause(),
 query.toString());
+        }
+    }
+
+    private String getTransformedTermsQuery() {
+        StringBuilder query = new StringBuilder();
+        for (Clause keyClause : getContext().getTransformedTerms().keySet()) {
+            query.append(getContext().getTransformedTerms().get(keyClause));
+        }
+        return query.toString();
+    }
+
+}

Modified: 
trunk/result-handler-config-spi/src/main/java/no/schibstedsok/searchportal/result/handler/AgeCalculatorResultHandlerConfig.java
===================================================================
--- 
trunk/result-handler-config-spi/src/main/java/no/schibstedsok/searchportal/result/handler/AgeCalculatorResultHandlerConfig.java
     2007-04-24 19:12:51 UTC (rev 4861)
+++ 
trunk/result-handler-config-spi/src/main/java/no/schibstedsok/searchportal/result/handler/AgeCalculatorResultHandlerConfig.java
     2007-04-24 19:59:16 UTC (rev 4862)
@@ -9,7 +9,9 @@
 import org.w3c.dom.Element;
 
 
-/** Calculate Age.
+/**
+ * Calculate Age.
+ *
  * @author <a href="mailto:[EMAIL PROTECTED]">Magnus Eklund</a>
  * @version <tt>$Id$</tt>
  */
@@ -19,22 +21,21 @@
     private String targetField;
     private String sourceField;
     private String recursiveField;
+    private String ageFormatKey = "age";
     private Boolean asDate = Boolean.FALSE;
 
     private static final Logger LOG = 
Logger.getLogger(AgeCalculatorResultHandlerConfig.class);
 
 
     /**
-     * 
-     * @return 
+     * @return
      */
     public String getRecursiveField() {
         return recursiveField;
     }
 
     /**
-     * 
-     * @param recursiveField 
+     * @param recursiveField
      */
     public void setRecursiveField(String recursiveField) {
         this.recursiveField = recursiveField;
@@ -42,8 +43,7 @@
 
 
     /**
-     * 
-     * @return 
+     * @return
      */
     public String getTargetField() {
         return targetField;
@@ -51,8 +51,7 @@
 
 
     /**
-     * 
-     * @param targetField 
+     * @param targetField
      */
     public void setTargetField(final String targetField) {
         this.targetField = targetField;
@@ -60,49 +59,53 @@
 
 
     /**
-     * 
-     * @param string 
+     * @param string
      */
     public void setSourceField(final String string) {
         sourceField = string;
     }
 
     /**
-     * 
-     * @return 
+     * @return
      */
-    public String getSourceField(){
+    public String getSourceField() {
         return sourceField;
     }
 
     /**
-     * 
-     * @param asDate 
+     * @param asDate
      */
     public void setAsDate(final Boolean asDate) {
         this.asDate = asDate;
     }
-    
+
     /**
-     * 
-     * @return 
+     * @return
      */
-    public Boolean getAsDate(){
+    public Boolean getAsDate() {
         return asDate;
     }
 
+    public String getAgeFormatKey() {
+        return ageFormatKey;
+    }
+
+    public void setAgeFormatKey(String ageFormatKey) {
+        this.ageFormatKey = ageFormatKey;
+    }
+
     @Override
     public AbstractResultHandlerConfig readResultHandler(final Element 
element) {
-        
-        super.readResultHandler(element);        
 
+        super.readResultHandler(element);
+
         setTargetField(element.getAttribute("target"));
         setSourceField(element.getAttribute("source"));
         AbstractDocumentFactory.fillBeanProperty(this, null, "asDate", 
ParseType.Boolean, element, "false");
-        AbstractDocumentFactory.fillBeanProperty(this, null, "recursiveField", 
ParseType.String, element, null);        
-        
+        AbstractDocumentFactory.fillBeanProperty(this, null, "recursiveField", 
ParseType.String, element, null);
+        AbstractDocumentFactory.fillBeanProperty(this, null, "ageFormatKey", 
ParseType.String, element, "age");
         return this;
     }
-    
-    
+
+
 }

Modified: 
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/config/ClusteringESPFastConfiguration.java
===================================================================
--- 
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/config/ClusteringESPFastConfiguration.java
  2007-04-24 19:12:51 UTC (rev 4861)
+++ 
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/config/ClusteringESPFastConfiguration.java
  2007-04-24 19:59:16 UTC (rev 4862)
@@ -4,24 +4,23 @@
 import 
no.schibstedsok.searchportal.mode.config.AbstractSearchConfiguration.Controller;
 
 /**
- * 
  * @author mick
  * @version $Id$
  */
 @Controller("ClusteringESPFastCommand")
 public class ClusteringESPFastConfiguration extends 
NavigatableESPFastConfiguration {
-    
+
     private String clusterIdParameter = "clusterId";
     private int resultsPerCluster;
     private String clusterField;
     private String clusterMaxFetch;
     private String nestedResultsField;
     private String userSortParameter;
-    private String userSortField;
+    private String sortField;
+    private String defaultSort;
 
     /**
-     * 
-     * @param asc 
+     * @param asc
      */
     public ClusteringESPFastConfiguration(SearchConfiguration asc) {
         super(asc);
@@ -33,111 +32,114 @@
             clusterMaxFetch = cefcc.getClusterMaxFetch();
             nestedResultsField = cefcc.getNestedResultsField();
             userSortParameter = cefcc.getUserSortParameter();
-            userSortField = cefcc.getUserSortField();
+            sortField = cefcc.getSortField();
         }
     }
 
     /**
-     * 
-     * @return 
+     * @return
      */
     public String getUserSortParameter() {
         return userSortParameter;
     }
 
     /**
-     * 
-     * @param userSortParameter 
+     * @param userSortParameter
      */
     public void setUserSortParameter(String userSortParameter) {
         this.userSortParameter = userSortParameter;
     }
 
     /**
-     * 
-     * @return 
+     * @return
      */
     public String getNestedResultsField() {
         return nestedResultsField;
     }
 
     /**
-     * 
-     * @param nestedResultsField 
+     * @param nestedResultsField
      */
     public void setNestedResultsField(String nestedResultsField) {
         this.nestedResultsField = nestedResultsField;
     }
 
     /**
-     * 
-     * @return 
+     * @return
      */
     public String getClusterIdParameter() {
         return clusterIdParameter;
     }
 
     /**
-     * 
-     * @param clusterIdParameter 
+     * @param clusterIdParameter
      */
     public void setClusterIdParameter(String clusterIdParameter) {
         this.clusterIdParameter = clusterIdParameter;
     }
 
     /**
-     * 
-     * @param resultsPerCluster 
+     * @param resultsPerCluster
      */
     public void setResultsPerCluster(int resultsPerCluster) {
         this.resultsPerCluster = resultsPerCluster;
     }
 
     /**
-     * 
-     * @return 
+     * @return
      */
     public int getResultsPerCluster() {
         return resultsPerCluster;
     }
 
     /**
-     * 
-     * @return 
+     * @return
      */
     public String getClusterField() {
         return clusterField;
     }
 
     /**
-     * 
-     * @param clusterField 
+     * @param clusterField
      */
     public void setClusterField(String clusterField) {
         this.clusterField = clusterField;
     }
 
     /**
-     * 
-     * @return 
+     * @return
      */
     public String getClusterMaxFetch() {
         return clusterMaxFetch;
     }
 
     /**
-     * 
-     * @param clusterMaxFetch 
+     * @param clusterMaxFetch
      */
     public void setClusterMaxFetch(String clusterMaxFetch) {
         this.clusterMaxFetch = clusterMaxFetch;
     }
 
     /**
-     * 
-     * @return 
+     * @return
      */
-    public String getUserSortField() {
-        return userSortField;
+    public String getSortField() {
+        return sortField;
     }
+
+    /**
+     * @param sortField
+     */
+    public void setSortField(String sortField) {
+        this.sortField = sortField;
+    }
+
+
+    public String getDefaultSort() {
+        return defaultSort;
+    }
+
+    public void setDefaultSort(String defaultSort) {
+        this.defaultSort = defaultSort;
+    }
 }

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

Reply via email to