Author: gttersen
Date: 2007-03-22 19:19:36 +0100 (Thu, 22 Mar 2007)
New Revision: 4610
Added:
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/AddLastWeekModifierResultHandler.java
Modified:
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
Log:
New ResultHandler
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-22 16:21:59 UTC (rev 4609)
+++
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
2007-03-22 18:19:36 UTC (rev 4610)
@@ -50,6 +50,7 @@
import no.schibstedsok.searchportal.query.transform.QueryTransformer;
import no.schibstedsok.searchportal.result.Navigator;
import no.schibstedsok.searchportal.result.handler.AddDocCountModifier;
+import
no.schibstedsok.searchportal.result.handler.AddLastWeekModifierResultHandler;
import no.schibstedsok.searchportal.result.handler.AgeCalculatorResultHandler;
import no.schibstedsok.searchportal.result.handler.CatalogueResultHandler;
import no.schibstedsok.searchportal.result.handler.CategorySplitter;
@@ -997,7 +998,8 @@
VELOCITY_OUTPUT(VelocityResultHandler.class),
FIELD_ESCAPE(FieldEscapeHandler.class),
XML_OUTPUT(XmlOutputResultHandler.class),
- CATALOGUE(CatalogueResultHandler.class);
+ CATALOGUE(CatalogueResultHandler.class),
+ ADD_LAST_WEEK_MODIFIER(AddLastWeekModifierResultHandler.class);
private final Class<? extends ResultHandler> clazz;
@@ -1155,6 +1157,19 @@
feh.setSourceField(rh.getAttribute("source-field"));
feh.setTargetField(rh.getAttribute("target-field"));
break;
+ case ADD_LAST_WEEK_MODIFIER:
+ final AddLastWeekModifierResultHandler alwm =
(AddLastWeekModifierResultHandler) handler;
+
alwm.setDayModifierKey(rh.getAttribute("day-modifier-key"));
+
alwm.setTargetNavigatorField(rh.getAttribute("target-navigator-field"));
+ String optionalAttribute =
rh.getAttribute("day-format");
+ if (optionalAttribute != null &&
optionalAttribute.length() > 0) {
+ alwm.setDayFormat(optionalAttribute);
+ }
+ optionalAttribute = rh.getAttribute("time-zone");
+ if (optionalAttribute != null &&
optionalAttribute.length() > 0) {
+ alwm.setTimeZone(optionalAttribute);
+ }
+ break;
case COMBINE_NAVIGATORS:
final CombineNavigatorsHandler cnh =
(CombineNavigatorsHandler) handler;
cnh.setTarget(rh.getAttribute("target"));
Added:
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/AddLastWeekModifierResultHandler.java
===================================================================
---
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/AddLastWeekModifierResultHandler.java
(rev 0)
+++
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/AddLastWeekModifierResultHandler.java
2007-03-22 18:19:36 UTC (rev 4610)
@@ -0,0 +1,102 @@
+// Copyright (2007) Schibsted Søk AS
+package no.schibstedsok.searchportal.result.handler;
+
+import no.schibstedsok.searchportal.datamodel.DataModel;
+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 org.apache.log4j.Logger;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+/**
+ * Adds a modifier to the searchResult with a navigator to the last week based
on day modifiers.
+ * <p/>
+ * <b>Note:</b> The implementation of this depends on that the day modifiers
are sorted descending (last date first)
+ * <b>Note:</b> This will only work on searchResults that are actually
FastSearchResult
+ */
+public class AddLastWeekModifierResultHandler implements ResultHandler {
+ private static final int DAYS_IN_WEEK = 7;
+ private static final Logger LOG =
Logger.getLogger(AddLastWeekModifierResultHandler.class);
+ private String dayFormat = "yyyy-MM-dd";
+ private String timeZone = "UTC";
+ private String dayModifierKey;
+ private String targetNavigatorField;
+
+ public void handleResult(Context cxt, DataModel datamodel) {
+ LOG.debug("call handleResult");
+ try {
+ final SearchResult searchResult = cxt.getSearchResult();
+ if (searchResult instanceof FastSearchResult) {
+ LOG.debug("FastResult ok");
+ int weekCount = 0;
+ final FastSearchResult fastResult = (FastSearchResult)
searchResult;
+ final List<Modifier> dayModifiers =
fastResult.getModifiers(dayModifierKey);
+ final SimpleDateFormat sdf = new SimpleDateFormat(dayFormat);
+ final Calendar calendar =
Calendar.getInstance(TimeZone.getTimeZone(timeZone));
+ calendar.add(Calendar.DAY_OF_YEAR, -(DAYS_IN_WEEK + 1));
+
+ // Going through day modifiers and counting
+ int maxModifiersToProcess = Math.min(DAYS_IN_WEEK,
dayModifiers.size());
+ for (int i = 0; i < maxModifiersToProcess; i++) {
+ final Modifier modifier = dayModifiers.get(i);
+ final Date modifierDate = sdf.parse(modifier.getName());
+ if (modifierDate.after(calendar.getTime())) {
+ weekCount += modifier.getCount();
+ } else {
+ // Some dates missing, no point in going furthe into
the list.
+ break;
+ }
+ }
+ // Creating the new modifier
+ calendar.add(Calendar.DAY_OF_YEAR, 1);
+ String fromDate = sdf.format(calendar.getTime());
+ LOG.debug("Creating modifier. Adding at " +
targetNavigatorField + ", vaule=" + fromDate);
+ Modifier newModifier = new Modifier(fromDate, weekCount, new
Navigator(fromDate, targetNavigatorField, null, null));
+ fastResult.addModifier(targetNavigatorField, newModifier);
+ } else {
+ LOG.error("Can not use " +
AddLastWeekModifierResultHandler.class.getName() + " on a generic searchResult.
Must be a " + FastSearchResult.class.getName());
+ }
+ } catch (ParseException e) {
+ LOG.error("Could not parse navigator. Expected format is '" +
dayFormat + "'", e);
+ }
+ }
+
+ public String getDayFormat() {
+ return dayFormat;
+ }
+
+ public void setDayFormat(String dayFormat) {
+ this.dayFormat = dayFormat;
+ }
+
+ public String getDayModifierKey() {
+ return dayModifierKey;
+ }
+
+ public void setDayModifierKey(String dayModifierKey) {
+ this.dayModifierKey = dayModifierKey;
+ }
+
+ public String getTargetNavigatorField() {
+ return targetNavigatorField;
+ }
+
+ public void setTargetNavigatorField(String targetNavigatorField) {
+ this.targetNavigatorField = targetNavigatorField;
+ }
+
+ public String getTimeZone() {
+ return timeZone;
+ }
+
+ public void setTimeZone(String timeZone) {
+ this.timeZone = timeZone;
+ }
+}
_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits