Author: gttersen
Date: 2007-03-08 15:50:04 +0100 (Thu, 08 Mar 2007)
New Revision: 4552

Modified:
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/NewsAggregatorSearchConfiguration.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/NewsAggregatorSearchResult.java
   
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
Log:
New skin: nyheter.sesam.no

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-08 11:10:37 UTC (rev 4551)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
       2007-03-08 14:50:04 UTC (rev 4552)
@@ -778,6 +778,7 @@
                     final NewsAggregatorSearchConfiguration nasc = 
(NewsAggregatorSearchConfiguration) sc;
                     fillBeanProperty(nasc, inherit, "xmlSource", 
ParseType.String, commandE, "");
                     fillBeanProperty(nasc, inherit, "updateIntervalMinutes", 
ParseType.Int, commandE, "2");
+                    fillBeanProperty(nasc, inherit, "xmlMainFile", 
ParseType.String, commandE, "fp_main_main.xml");
                 }
 
 

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
     2007-03-08 11:10:37 UTC (rev 4551)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
     2007-03-08 14:50:04 UTC (rev 4552)
@@ -2,6 +2,8 @@
 package no.schibstedsok.searchportal.mode.command;
 
 import no.schibstedsok.searchportal.datamodel.DataModel;
+import no.schibstedsok.searchportal.datamodel.generic.StringDataObject;
+import no.schibstedsok.searchportal.datamodel.request.ParametersDataObject;
 import 
no.schibstedsok.searchportal.mode.config.NewsAggregatorSearchConfiguration;
 import no.schibstedsok.searchportal.result.BasicSearchResult;
 import no.schibstedsok.searchportal.result.SearchResult;
@@ -17,10 +19,11 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
+import java.util.HashMap;
 import java.net.URL;
 import java.net.URLConnection;
 
[EMAIL PROTECTED]({"unchecked"})
+
 public class NewsAggregatorSearchCommand extends AbstractSearchCommand {
 
     private final static Logger log = 
Logger.getLogger(NewsAggregatorSearchCommand.class);
@@ -41,16 +44,25 @@
         log.debug("Loading xml file at: " + config.getXmlSource());
         log.debug("Update interval: " + config.getUpdateIntervalMinutes());
 
-        return getFrontPageResult(config);
+        StringDataObject geoNav = datamodel.getParameters().getValue("geonav");
+        if (geoNav == null) {
+            return getFrontPageResult(config);
+        } else {
+            return getPageResult(config, geoNav.getString());
+        }
     }
 
+
     private SearchResult getFrontPageResult(NewsAggregatorSearchConfiguration 
config) {
+        return getPageResult(config, config.getXmlMainFile());
+    }
+    private SearchResult getPageResult(NewsAggregatorSearchConfiguration 
config, String xmlFile) {
         try {
             NewsAggregatorXmlParser newsAggregatorXmlParser = new 
NewsAggregatorXmlParser();
 
-            URL url = new URL(config.getXmlSource());
+            URL url = new URL(config.getXmlSource() + xmlFile);
             URLConnection urlConnection = url.openConnection();
-            urlConnection.setConnectTimeout(1000);            
+            urlConnection.setConnectTimeout(1000);
             return 
newsAggregatorXmlParser.parse(urlConnection.getInputStream(), this);
         } catch (JDOMException e) {
             log.error("Could not parse xml: " + config.getXmlSource(), e);
@@ -60,16 +72,19 @@
         return new BasicSearchResult(null);
     }
 
-
+    @SuppressWarnings({"unchecked"})
     public static class NewsAggregatorXmlParser {
         private static final String ELEMENT_CLUSTER = "cluster";
         private static final String ELEMENT_ENTRY_COLLECTION = 
"entryCollection";
         private static final String ATTRIBUTE_FULL_COUNT = "fullcount";
         private static final String ATTRIBUTE_CLUSTERID = "id";
         private static final String ELEMENT_RELATED = "related";
-        private static final String ATTRIBUTE_CATEGORY_TYPE = "type";
+        private static final String ATTRIBUTE_TYPE = "type";
         private static final String ELEMENT_CATEGORY = "category";
-        private static final String ATTRIBUTE_CATEGORY_ID = "id";
+        private static final String ELEMENT_COLLAPSEID = "collapseid";
+        private static final String ELEMENT_GEONAVIGATION = "geonavigation";
+        private static final String ATTRIBUTE_NAME = "name";
+        private static final String ATTRIBUTE_XML = "xml";
 
         public SearchResult parse(InputStream inputStream, SearchCommand 
searchCommand) throws JDOMException, IOException {
             try {
@@ -84,6 +99,7 @@
 
                 handleClusters(root.getChildren(ELEMENT_CLUSTER), 
searchResult, searchCommand);
                 handleRelated(root.getChild(ELEMENT_RELATED), searchResult);
+                handleGeoNav(root.getChild(ELEMENT_GEONAVIGATION), 
searchResult);
                 return searchResult;
             } finally {
                 if (inputStream != null) {
@@ -96,12 +112,24 @@
             }
         }
 
+        private void handleGeoNav(Element geonavElement, 
NewsAggregatorSearchResult searchResult) {
+            final List<Element> geoNavElements = geonavElement.getChildren();
+            for (Element geoNavElement : geoNavElements) {
+                String navigationType = 
geoNavElement.getAttributeValue(ATTRIBUTE_TYPE);
+                NewsAggregatorSearchResult.Navigation navigation = new 
NewsAggregatorSearchResult.Navigation(
+                        navigationType,
+                        geoNavElement.getAttributeValue(ATTRIBUTE_NAME),
+                        geoNavElement.getAttributeValue(ATTRIBUTE_XML));
+                searchResult.addNavigation(navigationType, navigation);
+            }
+        }
+
         private void handleRelated(Element relatedElement, 
NewsAggregatorSearchResult searchResult) {
             final List<Element> categoryElements = 
relatedElement.getChildren(ELEMENT_CATEGORY);
             for (Element categoryElement : categoryElements) {
-                final String categoryType = 
categoryElement.getAttributeValue(ATTRIBUTE_CATEGORY_TYPE);
+                final String categoryType = 
categoryElement.getAttributeValue(ATTRIBUTE_TYPE);
                 final SearchResultItem searchResultItem = new 
BasicSearchResultItem();
-                searchResultItem.addField("name", 
categoryElement.getTextTrim());
+                searchResultItem.addField(ATTRIBUTE_NAME, 
categoryElement.getTextTrim());
                 searchResult.addRelatedResultItem(categoryType, 
searchResultItem);
             }            
         }
@@ -113,6 +141,8 @@
                 searchResultItem.addField("clusterId", 
cluster.getAttributeValue(ATTRIBUTE_CLUSTERID));
 
                 final Element entryCollectionElement = 
cluster.getChild(ELEMENT_ENTRY_COLLECTION);
+
+                final HashMap<String, SearchResultItem> collapseMap = new 
HashMap<String, SearchResultItem>();
                 final List<Element> entryList = 
entryCollectionElement.getChildren();
                 final BasicSearchResult nestedSearchResult = new 
BasicSearchResult(searchCommand);
                 for (int i = 0; i < entryList.size(); i++) {
@@ -120,10 +150,11 @@
                     if (i == 0) {
                         // First element is main result
                         handleEntry(nestedEntry, searchResultItem);
+                        
                     } else {
                         SearchResultItem nestedResultItem = new 
BasicSearchResultItem();
                         handleEntry(nestedEntry, nestedResultItem);
-                        nestedSearchResult.addResult(nestedResultItem);
+                        addResult(nestedResultItem, collapseMap, 
nestedSearchResult, searchCommand);
                     }
                 }
                 searchResultItem.addNestedSearchResult("entries", 
nestedSearchResult);
@@ -131,6 +162,25 @@
             }
         }
 
+        private void addResult(SearchResultItem nestedResultItem, 
HashMap<String, SearchResultItem> collapseMap, SearchResult nestedSearchResult, 
SearchCommand searchCommand) {
+            // Check if entry is duplicate and should be a subresult
+            String collapseId = nestedResultItem.getField(ELEMENT_COLLAPSEID);
+            SearchResultItem collapseParent = collapseMap.get(collapseId);
+            if (collapseParent == null) {
+                // No duplicate in results
+                nestedSearchResult.addResult(nestedResultItem);
+                collapseMap.put(collapseId, nestedResultItem);
+            } else {
+                // duplicat item, adding as a subresult to first item.
+                SearchResult collapsedResults = 
collapseParent.getNestedSearchResult("collapsedResults");
+                if (collapsedResults == null) {
+                    collapsedResults = new BasicSearchResult(searchCommand);
+                    collapseParent.addNestedSearchResult("collapsedResults", 
collapsedResults);
+                }
+                collapsedResults.addResult(nestedResultItem);
+            }
+        }
+
         private void handleEntry(Element entryElement, SearchResultItem 
searchResultItem) {
             final List<Element> entrySubElements = entryElement.getChildren();
             for (Element entrySubElement : entrySubElements) {

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/NewsAggregatorSearchConfiguration.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/NewsAggregatorSearchConfiguration.java
        2007-03-08 11:10:37 UTC (rev 4551)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/NewsAggregatorSearchConfiguration.java
        2007-03-08 14:50:04 UTC (rev 4552)
@@ -2,13 +2,12 @@
 package no.schibstedsok.searchportal.mode.config;
 
 import org.apache.log4j.Logger;
-import no.schibstedsok.searchportal.result.SearchResult;
 
 public class NewsAggregatorSearchConfiguration extends 
AbstractSearchConfiguration {
-    private long MINUTE_IN_MILLIS = 1000 * 60;
     private final static Logger log = 
Logger.getLogger(NewsAggregatorSearchConfiguration.class);
 
     private String xmlSource;
+    private String xmlMainFile;
     private int updateIntervalMinutes;
 
     public NewsAggregatorSearchConfiguration() {
@@ -40,4 +39,11 @@
         this.updateIntervalMinutes = updateIntervalMinutes;
     }
 
+    public void setXmlMainFile(String xmlMainFile) {
+        this.xmlMainFile = xmlMainFile;
+    }
+
+    public String getXmlMainFile() {
+        return xmlMainFile;
+    }
 }

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/NewsAggregatorSearchResult.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/NewsAggregatorSearchResult.java
    2007-03-08 11:10:37 UTC (rev 4551)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/result/NewsAggregatorSearchResult.java
    2007-03-08 14:50:04 UTC (rev 4552)
@@ -5,9 +5,12 @@
 
 import java.util.Map;
 import java.util.HashMap;
+import java.util.List;
+import java.util.ArrayList;
 
 public class NewsAggregatorSearchResult extends BasicSearchResult {
     private Map<String, SearchResult> relatedResults = new HashMap<String, 
SearchResult>();
+    private Map<String, List<Navigation>> nav = new HashMap<String, 
List<Navigation>>();
 
     public NewsAggregatorSearchResult(SearchCommand command) {
         super(command);
@@ -26,10 +29,62 @@
         return relatedResults.get(name);
     }
 
+    public List<Navigation> getNavigationList(String navigationType) {
+        return nav.get(navigationType);
+    }
+
+    public void addNavigation(String navigationType, Navigation navigation) {
+        List<Navigation> navList = nav.get(navigationType);
+        if (navList == null) {
+            navList = new ArrayList<Navigation>();
+            nav.put(navigationType, navList);
+        }
+        navList.add(navigation);
+    }
+
     public String toString() {
         return "NewsAggregatorSearchResult{" +
                 "super=" + super.toString() +
                 ", relatedResults=" + relatedResults +
+                ", nav=" + nav +
                 '}';
     }
+
+    public static class Navigation {
+        private String type;
+        private String name;
+        private String xmlFile;
+
+
+        public Navigation(String type, String name, String xmlFile) {
+            this.type = type;
+            this.name = name;
+            this.xmlFile = xmlFile;
+        }
+
+        public String getType() {
+            return type;
+        }
+
+        public void setType(String type) {
+            this.type = type;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getXmlFile() {
+            return xmlFile;
+        }
+
+        public void setXmlFile(String xmlFile) {
+            this.xmlFile = xmlFile;
+        }
+    }
+
 }

Modified: 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
===================================================================
--- 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
  2007-03-08 11:10:37 UTC (rev 4551)
+++ 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
  2007-03-08 14:50:04 UTC (rev 4552)
@@ -4,6 +4,12 @@
 import org.apache.log4j.Logger;
 import no.schibstedsok.searchportal.query.LeafClause;
 import no.schibstedsok.searchportal.query.Clause;
+import no.schibstedsok.searchportal.query.AndClause;
+import no.schibstedsok.searchportal.query.OrClause;
+import no.schibstedsok.searchportal.query.DefaultOperatorClause;
+import no.schibstedsok.searchportal.query.DoubleOperatorClause;
+import no.schibstedsok.searchportal.query.parser.QueryParser;
+import no.schibstedsok.searchportal.query.parser.WordClauseImpl;
 
 import java.util.Map;
 
@@ -13,13 +19,31 @@
     private String queryType;
     private NewsQueryTransformerDataAccess dataAccess = new 
NewsQueryTransformerDataAccess();
 
+
+    protected void visitImpl(final DoubleOperatorClause clause) {
+        final StringBuilder sb = new StringBuilder();
+        for (String termValue : getTransformedTerms().values()) {
+            if (termValue != null) {
+                sb.append(termValue).append(' ');
+            }
+        }
+        final String term = sb.toString().trim();
+        String transformedQuery = dataAccess.getQuery(term, queryType);
+        if (transformedQuery != null) {
+            
+        }
+    }
+
     public void visitImpl(final LeafClause clause) {
         final String term = getTransformedTerms().get(clause);
+        transformTerms(term, clause);
+    }
 
+    private void transformTerms(String term, Clause clause) {
+        log.debug("Transforming term: '" + term + "', " + 
clause.getClass().getName());
         String transformedQuery = dataAccess.getQuery(term, queryType);
         if (transformedQuery != null) {
-            log.debug("Transforming query: '" + term + "' to '" + 
transformedQuery);
-            getTransformedTerms().put(clause, transformedQuery);
+            getContext().getTransformedTerms().put(clause, transformedQuery);
         } else {
             log.debug("No transformation done.");
         }
@@ -47,12 +71,21 @@
 
     public static class NewsQueryTransformerDataAccess {
         public String getQuery(String newsCaseName, String queryType) {
+            //todo: This implementation is for testing only...
             if (newsCaseName.equals("Nokas-saken")) {
                 if (queryType.equals("news")) {
-                    return "Nokas-ranet; Arne Sigve Klungland drept";
+                    return "or(string(\"Nokas-ranet\"),and(string(\"Arne Sigve 
Klungland\", string(\"drept\")))";
                 } else if (queryType.equals("picture")) {
                     return "Nokas";
                 }
+            } else if (newsCaseName.equals("Valla saken")) {
+                if (queryType.equals("news")) {
+                    return "or(and(string(\"Yssen\"), 
string(\"Valla\")),and(string(\"yssen\"), string(\"oppsigelse\")))";
+                } else if (queryType.equals("picture") || 
queryType.equals("blog") || queryType.equals("video")) {
+                    return "Yssen Valla";
+                } else if (queryType.equals("encylopedia")) {
+                    return "Kontroversen rundt Gerd Liv Valla i 2007";
+                }
             }
             return null;
         }

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

Reply via email to