Author: gttersen
Date: 2007-04-17 19:32:17 +0200 (Tue, 17 Apr 2007)
New Revision: 4828

Modified:
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/AddCategoryNavigationResultHandler.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
Log:
Changes for NewsAggregator

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/AddCategoryNavigationResultHandler.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/AddCategoryNavigationResultHandler.java
    2007-04-17 17:29:03 UTC (rev 4827)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/handler/AddCategoryNavigationResultHandler.java
    2007-04-17 17:32:17 UTC (rev 4828)
@@ -3,20 +3,19 @@
 
 import no.schibstedsok.searchportal.datamodel.DataModel;
 import no.schibstedsok.searchportal.datamodel.generic.StringDataObject;
-import no.schibstedsok.searchportal.http.HTTPClient;
 import no.schibstedsok.searchportal.result.FastSearchResult;
 import no.schibstedsok.searchportal.result.Modifier;
+import no.schibstedsok.searchportal.site.config.DocumentLoader;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
-import org.jdom.Document;
-import org.jdom.Element;
-import org.jdom.JDOMException;
-import org.jdom.input.SAXBuilder;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -26,20 +25,23 @@
     private static final String CMD_ATTR_ID = "id";
 
     private static final Logger LOG = 
Logger.getLogger(AddCategoryNavigationResultHandler.class);
-    private String categoriesXml = "conf/categories.xml";
+    private static List<Category> categoryList;
+    private String categoriesXml = "categories.xml";
     private String categoryFields;
 
     public void handleResult(Context cxt, DataModel datamodel) {
         try {
             if (cxt.getSearchResult() instanceof FastSearchResult) {
-                addCategoryNavigators(datamodel, (FastSearchResult) 
cxt.getSearchResult(), parseCategories(datamodel));
+                if (categoryList == null) {
+                    // This could happen more than once, but synchronize 
overhead would be on every call, so it ok. 
+                    categoryList = parseCategories(cxt, datamodel);
+                }
+                addCategoryNavigators(datamodel, (FastSearchResult) 
cxt.getSearchResult(), categoryList);
             } else {
                 LOG.error("Can not use " + 
AddCategoryNavigationResultHandler.class.getName() + " on a generic 
searchResult. Must be a " + FastSearchResult.class.getName());
             }
-        } catch (IOException e) {
+        } catch (ParserConfigurationException e) {
             LOG.error("Could not parse categories.", e);
-        } catch (JDOMException e) {
-            LOG.error("Could not parse categories.", e);
         }
     }
 
@@ -64,38 +66,23 @@
         }
     }
 
-    private List<Category> parseCategories(DataModel datamodel) throws 
IOException, JDOMException {
-
-        final URL url = new URL("http://"; + 
datamodel.getSite().getSite().getName() + 
datamodel.getSite().getSite().getConfigContext() + categoriesXml);
-        LOG.debug("Loading categories xml from: " + url.toString());
-        final HTTPClient client = HTTPClient.instance(url.getHost(), 
url.getHost(), url.getPort());
-        BufferedInputStream in = null;
-        try {
-            in = client.getBufferedStream(url.getHost(), url.getPath());
-            Document doc = getDocument(in);
-            final Element root = doc.getRootElement();
-            return parseCategories(root);
-        } finally {
-            if (in != null) {
-                try {
-                    in.close();
-                } catch (Exception e) {
-                    // Ignoring
-                }
-            }
-        }
+    private List<Category> parseCategories(Context cxt, DataModel datamodel) 
throws ParserConfigurationException {
+        Document doc = getDocument(cxt, datamodel);
+        final Element root = doc.getDocumentElement();
+        return parseCategories(root);
     }
 
-    private Document getDocument(InputStream inputStream) throws 
JDOMException, IOException {
-        final SAXBuilder saxBuilder = new SAXBuilder();
-        saxBuilder.setValidation(false);
-        saxBuilder.setIgnoringElementContentWhitespace(true);
-        return saxBuilder.build(inputStream);
+    private Document getDocument(Context cxt, DataModel dataModel) throws 
ParserConfigurationException {
+        final DocumentBuilderFactory factory = 
DocumentBuilderFactory.newInstance();
+        factory.setValidating(false);
+        final DocumentBuilder builder = factory.newDocumentBuilder();
+        DocumentLoader documentLoader = 
cxt.newDocumentLoader(dataModel.getSite(), categoriesXml, builder);
+        documentLoader.abut();
+        return documentLoader.getDocument();
     }
 
     public List<Category> parseCategories(Element categoriesElement) {
-        //noinspection unchecked
-        List<Element> categoryElements = 
categoriesElement.getChildren(CMD_ELEMENT_CATEGORY);
+        List<Element> categoryElements = getDirectChildren(categoriesElement, 
CMD_ELEMENT_CATEGORY);
         return parseCategories(categoryElements);
     }
 
@@ -112,13 +99,24 @@
     }
 
     private Category parseCategory(Element categoryElement) {
-        String id = categoryElement.getAttributeValue(CMD_ATTR_ID);
-        String displayName = 
categoryElement.getAttributeValue(CMD_ATTR_DISPLAY_NAME);
-        //noinspection unchecked
-        List<Category> subCategories = 
parseCategories(categoryElement.getChildren(CMD_ELEMENT_CATEGORY));
+        String id = categoryElement.getAttribute(CMD_ATTR_ID);
+        String displayName = 
categoryElement.getAttribute(CMD_ATTR_DISPLAY_NAME);
+        List<Category> subCategories = 
parseCategories(getDirectChildren(categoryElement, CMD_ELEMENT_CATEGORY));
         return new Category(id, displayName, subCategories);
     }
 
+    private List<Element> getDirectChildren(Element element, String 
elementName) {
+        ArrayList<Element> children = new ArrayList<Element>();
+        NodeList childNodes = element.getChildNodes();
+        for (int i = 0; i < childNodes.getLength(); i++) {
+            Node childNode = childNodes.item(i);
+            if (childNode instanceof Element && 
childNode.getNodeName().equals(elementName)) {
+                children.add((Element) childNode);
+            }
+        }
+        return children;
+    }
+
     private String[] getCategoryFieldArray() {
         return StringUtils.split(categoryFields, ',');
     }

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-17 17:29:03 UTC (rev 4827)
+++ 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformerConfig.java
     2007-04-17 17:32:17 UTC (rev 4828)
@@ -3,8 +3,14 @@
 
 
 import 
no.schibstedsok.searchportal.query.transform.AbstractQueryTransformerConfig.Controller;
+import org.apache.log4j.Logger;
 import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Checks if the query should be transformed from a ejb lookup on the 
queryString. Transformation will replace
  * the whole query.
@@ -16,19 +22,57 @@
 public final class NewsCaseQueryTransformerConfig extends 
AbstractQueryTransformerConfig {
 
     private static final String QUERY_TYPE = "query-type";
+    private static final String QUERY_PARAMETER = "query-parameter";
+    private static final String TYPE_PARAMETER = "type-parameter";
+    private static final String PREFIX = "prefix";
+    private static final String POSTFIX = "postfix";
+    private static final String TYPE_NAME = "name";
+
+    private static final String DEFAULT_CONVERT_ELEMENT = "default-convert";
     private String queryType;
+    private String queryParameter;
+    private String typeParameter;
+    private Map<String, String[]> typeConversions;
 
     /**
-     *
      * @return
      */
-    public String getQueryType(){
+    public String getQueryType() {
         return queryType;
     }
 
+    public String getQueryParameter() {
+        return queryParameter;
+    }
+
+    public String getTypeParameter() {
+        return typeParameter;
+    }
+
+    public Map<String, String[]> getTypeConversions() {
+        return typeConversions;
+    }
+
     @Override
     public NewsCaseQueryTransformerConfig readQueryTransformer(final Element 
element) {
+        Logger log = Logger.getLogger(NewsCaseQueryTransformerConfig.class);
         queryType = element.getAttribute(QUERY_TYPE);
+        queryParameter = element.getAttribute(QUERY_PARAMETER);
+        typeParameter = element.getAttribute(TYPE_PARAMETER);
+        NodeList convertNodeList = 
element.getElementsByTagName(DEFAULT_CONVERT_ELEMENT);
+        if (convertNodeList.getLength() > 0) {
+            typeConversions = new HashMap<String, String[]>();
+            for (int i = 0; i < convertNodeList.getLength(); i++) {
+                final Node n = convertNodeList.item(i);
+                final Element convertElement = (Element) n;
+                final String name = convertElement.getAttribute(TYPE_NAME);
+                final String prefix = convertElement.getAttribute(PREFIX);
+                final String postfix = convertElement.getAttribute(POSTFIX);
+
+                log.debug("qwerty Adding conversion: " + name + "=" + prefix + 
"$" + postfix);
+                typeConversions.put(name, new String[]{prefix, postfix});
+            }
+        }
         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-17 17:29:03 UTC (rev 4827)
+++ 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
  2007-04-17 17:32:17 UTC (rev 4828)
@@ -10,8 +10,11 @@
 import java.util.Properties;
 
 /**
- * Checks if the query should be transformed from a ejb lookup on the 
queryString. Transformation will replace
+ * Checks if the query should be transformed from a ejb lookup on the 
queryParameter. Transformation will replace
  * the whole query.
+ * <p/>
+ * <b>Note:</b> This queryTransformer ignores all earlier transforms on the 
query. All transforms to the resulting
+ * query should be done after this.
  */
 public final class NewsCaseQueryTransformer extends AbstractQueryTransformer {
     private final static Logger LOG = 
Logger.getLogger(NewsCaseQueryTransformer.class);
@@ -33,11 +36,11 @@
      */
     public void visitImpl(final Clause clause) {
         
dataAccess.setProperties(getContext().getDataModel().getSite().getSiteConfiguration().getProperties());
-        String queryString = getTransformedQueryString();
+        String queryString = (String) 
getContext().getDataModel().getJunkYard().getValue(config.getQueryParameter());
         LOG.debug("Original query is: '" + queryString + "'");
         String transformedQuery = dataAccess.getQuery(queryString, 
config.getQueryType());
         if (transformedQuery == null) {
-            transformedQuery = '"' + 
getContext().getQuery().getQueryString().trim() + '"';
+            transformedQuery = defaultTransform(queryString);
         }
         for (Clause keyClause : getContext().getTransformedTerms().keySet()) {
             getContext().getTransformedTerms().put(keyClause, "");
@@ -50,12 +53,17 @@
 
     }
 
-    private String getTransformedQueryString() {
-        StringBuilder sb = new StringBuilder();
-        for (Clause keyClause : getContext().getTransformedTerms().keySet()) {
-            
sb.append(getContext().getTransformedTerms().get(keyClause)).append(' ');
+    private String defaultTransform(String queryString) {
+        if (config.getTypeConversions() != null) {
+            String type = (String) 
getContext().getDataModel().getJunkYard().getValue(config.getTypeParameter());
+            if (type != null) {
+                String[] conversion = config.getTypeConversions().get(type);
+                if (conversion != null) {
+                    return conversion[0] + queryString + conversion[1];
+                }
+            }
         }
-        return sb.toString();
+        return '"' + queryString + '"';
     }
 
     /**

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

Reply via email to