Author: gttersen
Date: 2007-06-12 20:06:41 +0200 (Tue, 12 Jun 2007)
New Revision: 5314

Added:
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/CombineModifiersResultHandler.java
   
trunk/result-handler-config-spi/src/main/java/no/schibstedsok/searchportal/result/handler/CombineModifiersResultHandlerConfig.java
Log:
Aftenposten skin updates

Added: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/CombineModifiersResultHandler.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/CombineModifiersResultHandler.java
                         (rev 0)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/CombineModifiersResultHandler.java
 2007-06-12 18:06:41 UTC (rev 5314)
@@ -0,0 +1,74 @@
+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 org.apache.log4j.Logger;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Used to combine modifiers into new ones in a new navigator.
+ *
+ * @author Geir H. Pettersen
+ */
+public class CombineModifiersResultHandler implements ResultHandler {
+    private static final Logger LOG = 
Logger.getLogger(CombineModifiersResultHandler.class);
+    private CombineModifiersResultHandlerConfig config;
+
+
+    public CombineModifiersResultHandler(ResultHandlerConfig config) {
+        this.config = (CombineModifiersResultHandlerConfig) config;
+    }
+
+    public void handleResult(Context cxt, DataModel datamodel) {
+        // Checking parameters
+        if (!(cxt.getSearchResult() instanceof FastSearchResult)) {
+            LOG.debug(CombineModifiersResultHandler.class.getName() + " can 
only be applied to fast search results. Result is " + 
cxt.getSearchResult().getClass().getName());
+            return;
+        }
+
+        // Initializing
+        final FastSearchResult result = (FastSearchResult) 
cxt.getSearchResult();
+        final List<Modifier> sourceModifierList = 
result.getModifiers(config.getSourceNavigatorName());
+        final LinkedHashMap<String, Modifier> targetModifierMap = new 
LinkedHashMap<String, Modifier>();
+        final Map<String, String> modifierMap = config.getModifierMap();
+        Modifier defaultModifier = null;
+        if (config.getDefaultModifierName() != null) {
+            defaultModifier = new Modifier(config.getDefaultModifierName(), 0, 
null);
+        }
+
+        // The business
+        if (sourceModifierList != null && sourceModifierList.size() > 0) {
+            for (Modifier sourceModifier : sourceModifierList) {
+                LOG.debug("Combining modifier: " + sourceModifier.getName() + 
"=" + sourceModifier.getCount());
+                final String targetModifierName = 
modifierMap.get(sourceModifier.getName());
+                if (targetModifierName != null) {
+                    Modifier targetModifier = 
targetModifierMap.get(targetModifierName);
+                    if (targetModifier == null) {
+                        targetModifier = new Modifier(targetModifierName, 0, 
null);
+                        targetModifierMap.put(targetModifierName, 
targetModifier);
+                    }
+                    targetModifier.addCount(sourceModifier.getCount());
+                } else if (defaultModifier != null) {
+                    defaultModifier.addCount(sourceModifier.getCount());
+                }
+            }
+
+            // Add the result
+            if (config.getAllModifierName() != null) {
+                result.addModifier(config.getTargetNavigatorName(), new 
Modifier(config.getAllModifierName(), result.getHitCount(), null));
+            }
+            for (Modifier modifier : targetModifierMap.values()) {
+                result.addModifier(config.getTargetNavigatorName(), modifier);
+            }
+            if (defaultModifier != null) {
+                result.addModifier(config.getTargetNavigatorName(), 
defaultModifier);
+            }
+        }
+    }
+
+    
+}

Added: 
trunk/result-handler-config-spi/src/main/java/no/schibstedsok/searchportal/result/handler/CombineModifiersResultHandlerConfig.java
===================================================================
--- 
trunk/result-handler-config-spi/src/main/java/no/schibstedsok/searchportal/result/handler/CombineModifiersResultHandlerConfig.java
                          (rev 0)
+++ 
trunk/result-handler-config-spi/src/main/java/no/schibstedsok/searchportal/result/handler/CombineModifiersResultHandlerConfig.java
  2007-06-12 18:06:41 UTC (rev 5314)
@@ -0,0 +1,104 @@
+package no.schibstedsok.searchportal.result.handler;
+
+import 
no.schibstedsok.searchportal.result.handler.AbstractResultHandlerConfig.Controller;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Used to combine modifiers into new ones in a new navigator.
+ *
+ * @author Geir H. Pettersen
+ */
[EMAIL PROTECTED]("CombineModifiersResultHandler")
+public class CombineModifiersResultHandlerConfig  extends 
AbstractResultHandlerConfig  {
+    private String sourceNavigatorName;
+    private String targetNavigatorName;
+    private String allModifierName;
+    private String defaultModifierName;
+    private Map<String, String> modifierMap = new HashMap<String, String>();
+
+    public String getSourceNavigatorName() {
+        return sourceNavigatorName;
+    }
+
+    public void setSourceNavigatorName(String sourceNavigatorName) {
+        this.sourceNavigatorName = sourceNavigatorName;
+    }
+
+    public String getTargetNavigatorName() {
+        return targetNavigatorName;
+    }
+
+    public void setTargetNavigatorName(String targetNavigatorName) {
+        this.targetNavigatorName = targetNavigatorName;
+    }
+
+    public String getAllModifierName() {
+        return allModifierName;
+    }
+
+    public void setAllModifierName(String allModifierName) {
+        this.allModifierName = allModifierName;
+    }
+
+    public String getDefaultModifierName() {
+        return defaultModifierName;
+    }
+
+    public void setDefaultModifierName(String defaultModifierName) {
+        this.defaultModifierName = defaultModifierName;
+    }
+
+    public Map<String, String> getModifierMap() {
+        return modifierMap;
+    }
+
+    public void setModifierMap(Map<String, String> modifierMap) {
+        this.modifierMap = modifierMap;
+    }
+
+    @Override
+    public AbstractResultHandlerConfig readResultHandler(final Element 
element) {
+        sourceNavigatorName = element.getAttribute("source-navigator-name");
+        targetNavigatorName = element.getAttribute("target-navigator-name");
+        String attr = element.getAttribute("all-modifier-name");
+        if (attr != null && attr.length() > 0) {
+            allModifierName = attr;
+        }
+        attr = element.getAttribute("default-modifier-name");
+        if (attr != null && attr.length() > 0) {
+            defaultModifierName = attr;
+        }
+        List<Element> modifierList = getDirectChildren(element, "modifier");
+        for (Element modifierElement : modifierList) {
+            final String modifierTargetName = 
modifierElement.getAttribute("name");
+            List<Element> modifierSourceList = 
getDirectChildren(modifierElement, "source");
+            for (Element modifierSource : modifierSourceList) {
+                final String modifierSourceName = 
modifierSource.getAttribute("name");
+                modifierMap.put(modifierSourceName, modifierTargetName);
+            }
+        }
+        return this;
+    }
+
+    private static List<Element> getDirectChildren(final Element element, 
final String elementName) {
+        final List<Element> children = new ArrayList<Element>();
+        if (element != null) {
+            final NodeList childNodes = element.getChildNodes();
+            for (int i = 0; i < childNodes.getLength(); i++) {
+                final Node childNode = childNodes.item(i);
+                if (childNode instanceof Element && 
childNode.getNodeName().equals(elementName)) {
+                    children.add((Element) childNode);
+                }
+            }
+        }
+        return children;
+    }
+
+}

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

Reply via email to