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