Author: gttersen
Date: 2007-03-15 18:47:53 +0100 (Thu, 15 Mar 2007)
New Revision: 4579

Modified:
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/AgeCalculatorResultHandler.java
Log:
Uppdate for nyheter.sesam.no:
AgeCalclulatorResultHandler now supports recursive age calculation.
Set the parameter recursive-field and the new functionality will be enabled for 
subresults stored in that field.
If the field is not set, it will work like before update.

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-03-15 17:13:16 UTC (rev 4578)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
       2007-03-15 17:47:53 UTC (rev 4579)
@@ -6,8 +6,8 @@
 import no.schibstedsok.searchportal.InfrastructureException;
 import no.schibstedsok.searchportal.mode.config.AbstractSearchConfiguration;
 import 
no.schibstedsok.searchportal.mode.config.AbstractYahooSearchConfiguration;
+import no.schibstedsok.searchportal.mode.config.AddressSearchConfiguration;
 import 
no.schibstedsok.searchportal.mode.config.AdvancedFastSearchConfiguration;
-import no.schibstedsok.searchportal.mode.config.AddressSearchConfiguration;
 import 
no.schibstedsok.searchportal.mode.config.BlendingNewsSearchConfiguration;
 import no.schibstedsok.searchportal.mode.config.BlocketSearchConfiguration;
 import no.schibstedsok.searchportal.mode.config.BlogSearchConfiguration;
@@ -82,7 +82,6 @@
 import no.schibstedsok.searchportal.site.config.AbstractDocumentFactory;
 import no.schibstedsok.searchportal.site.config.DocumentLoader;
 import no.schibstedsok.searchportal.site.config.ResourceContext;
-import no.schibstedsok.searchportal.site.config.UrlResourceLoader;
 import no.schibstedsok.searchportal.view.output.TextOutputResultHandler;
 import no.schibstedsok.searchportal.view.output.VelocityResultHandler;
 import no.schibstedsok.searchportal.view.output.XmlOutputResultHandler;
@@ -1012,6 +1011,7 @@
                         ac.setTargetField(rh.getAttribute("target"));
                         ac.setSourceField(rh.getAttribute("source"));
                         fillBeanProperty(ac, null, "asDate", 
ParseType.Boolean, rh, "false");
+                        fillBeanProperty(ac, null, "recursiveField", 
ParseType.String, rh, null);
                         break;
                     case FIELD_CHOOSER:
                         final FieldChooser fc = (FieldChooser) handler;

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-03-15 17:13:16 UTC (rev 4578)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/AgeCalculatorResultHandler.java
    2007-03-15 17:47:53 UTC (rev 4579)
@@ -1,21 +1,23 @@
 // Copyright (2006-2007) Schibsted Søk AS
 package no.schibstedsok.searchportal.result.handler;
 
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Map;
-import java.util.TimeZone;
-import java.util.Date;
 import no.schibstedsok.commons.ioc.ContextWrapper;
 import no.schibstedsok.searchportal.datamodel.DataModel;
-import no.schibstedsok.searchportal.view.i18n.TextMessages;
+import no.schibstedsok.searchportal.result.SearchResult;
 import no.schibstedsok.searchportal.result.SearchResultItem;
 import no.schibstedsok.searchportal.site.Site;
 import no.schibstedsok.searchportal.site.SiteContext;
+import no.schibstedsok.searchportal.view.i18n.TextMessages;
 import org.apache.log4j.Logger;
 
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+import java.util.TimeZone;
 
+
 /** Calculate Age.
  * @author <a href="mailto:[EMAIL PROTECTED]">Magnus Eklund</a>
  * @version <tt>$Revision$</tt>
@@ -26,6 +28,7 @@
 
     private String targetField;
     private String sourceField;
+    private String recursiveField;
     private String dateFormat;
     private Boolean asDate = Boolean.FALSE;
     private String ageMessageFormat;
@@ -43,84 +46,104 @@
         if (fmt.endsWith("'Z'")) {
             df.setTimeZone(TimeZone.getTimeZone("UTC"));
         }
+        setAgeForAll(cxt.getSearchResult(), df, datamodel, cxt, ageFormatKey);
+    }
 
-        for (final SearchResultItem item : cxt.getSearchResult().getResults()) 
{
-            final String docTime = item.getField(sourceField);
+    private void setAgeForAll(SearchResult searchResult, DateFormat df, final 
DataModel datamodel, Context cxt, String ageFormatKey) {
+        for (final SearchResultItem item : searchResult.getResults()) {
+            if (recursiveField != null) {
+                SearchResult subResult = 
item.getNestedSearchResult(recursiveField);
+                if (subResult != null) {
+                    setAgeForAll(subResult, df, datamodel, cxt, ageFormatKey);
+                }
+            }
+            setAge(item, df, datamodel, cxt, ageFormatKey);
+        }
+    }
 
-            if (docTime != null) {
+    private void setAge(SearchResultItem item, DateFormat df, final DataModel 
datamodel, Context cxt, String ageFormatKey) {
+        final String docTime = item.getField(sourceField);
 
-                try {
-                    final long stamp = df.parse(docTime).getTime();
+        if (docTime != null) {
 
-                    final long age = System.currentTimeMillis() - stamp;
+            try {
+                final long stamp = df.parse(docTime).getTime();
 
-                    if (LOG.isTraceEnabled()) {
-                        LOG.trace("Doctime is " + docTime);
-                    }
+                final long age = System.currentTimeMillis() - stamp;
 
-                    final Long dateParts[] = new Long[3];
+                if (LOG.isTraceEnabled()) {
+                    LOG.trace("Doctime is " + docTime);
+                }
 
-                    dateParts[0] = Long.valueOf(age / (60 * 60 * 24 * 1000));
-                    dateParts[1] = Long.valueOf(age / (60 * 60 * 1000) % 24);
-                    dateParts[2] = Long.valueOf(age / (60 * 1000) % 60);
+                final Long dateParts[] = new Long[3];
 
-                    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");
+                dateParts[0] = Long.valueOf(age / (60 * 60 * 24 * 1000));
+                dateParts[1] = Long.valueOf(age / (60 * 60 * 1000) % 24);
+                dateParts[2] = Long.valueOf(age / (60 * 1000) % 60);
 
-                    final TextMessages txtMsgs = 
TextMessages.valueOf(ContextWrapper.wrap(
-                            TextMessages.Context.class, 
-                            cxt,
-                            new SiteContext(){
-                                public Site getSite() {
-                                    return datamodel.getSite().getSite();
-                                }
-                            }));
+                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");
 
-                    //older than 3 days or source is Mediearkivet, show short 
date format.
-                    if (dateParts[0].longValue() > 3 || s != null && 
s.equals("Mediearkivet") || asDate.booleanValue()){
-                        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) {
-                        dateParts[1] = Long.valueOf(0);
-                        dateParts[2] = Long.valueOf(0);
-                        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
-                    } else if (dateParts[2].longValue() > 0) {
-                        dateParts[0] = Long.valueOf(0);
-                        dateParts[1] = Long.valueOf(0);
-                        ageString = txtMsgs.getMessage(ageFormatKey, 
(Object[]) dateParts);
-                    } else{
-                        ageString = docTime.substring(8, 10) + "." 
-                                + docTime.substring(5, 7) + "." + 
docTime.substring(0, 4);
-                    }
-                    LOG.trace("Resulting age string is " + ageString);
+                final TextMessages txtMsgs = 
TextMessages.valueOf(ContextWrapper.wrap(
+                        TextMessages.Context.class,
+                        cxt,
+                        new SiteContext(){
+                            public Site getSite() {
+                                return datamodel.getSite().getSite();
+                            }
+                        }));
 
-                    if (stamp > 0) {
-                        item.addField(getTargetField(), ageString);
-                    }
+                //older than 3 days or source is Mediearkivet, show short date 
format.
+                if (dateParts[0].longValue() > 3 || s != null && 
s.equals("Mediearkivet") || asDate.booleanValue()){
+                    final DateFormat shortFmt = DateFormat.getDateInstance(
+                            DateFormat.SHORT,
+                            datamodel.getSite().getSite().getLocale());
 
-                } catch (ParseException e) {
-                    LOG.warn("Unparsable date: " + docTime);
+                    ageString = shortFmt.format(new Date(stamp));
+                //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
+                } else if (dateParts[1].longValue() > 0) {
+                    dateParts[2] = Long.valueOf(0);
+                    ageString = txtMsgs.getMessage(ageFormatKey, (Object[]) 
dateParts);
+                //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{
+                    ageString = docTime.substring(8, 10) + "."
+                            + docTime.substring(5, 7) + "." + 
docTime.substring(0, 4);
                 }
-            } else {
-                LOG.warn(sourceField + " is null");
+                LOG.trace("Resulting age string is " + ageString);
+
+                if (stamp > 0) {
+                    item.addField(getTargetField(), ageString);
+                }
+
+            } catch (ParseException e) {
+                LOG.warn("Unparsable date: " + docTime);
             }
+        } else {
+            LOG.warn(sourceField + " is null");
         }
+    }
 
+    public String getRecursiveField() {
+        return recursiveField;
     }
 
+    public void setRecursiveField(String recursiveField) {
+        this.recursiveField = recursiveField;
+    }
+
     /** TODO comment me. **/
     public String getTargetField() {
         return targetField;

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

Reply via email to