Author: gttersen
Date: 2007-03-14 12:47:14 +0100 (Wed, 14 Mar 2007)
New Revision: 4574

Modified:
   
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
Log:
Uppdate for nyheter.sesam.no

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-14 10:21:44 UTC (rev 4573)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
     2007-03-14 11:47:14 UTC (rev 4574)
@@ -5,22 +5,23 @@
 import no.schibstedsok.searchportal.datamodel.generic.StringDataObject;
 import 
no.schibstedsok.searchportal.mode.config.NewsAggregatorSearchConfiguration;
 import no.schibstedsok.searchportal.result.BasicSearchResult;
+import no.schibstedsok.searchportal.result.BasicSearchResultItem;
+import no.schibstedsok.searchportal.result.NewsAggregatorSearchResult;
 import no.schibstedsok.searchportal.result.SearchResult;
 import no.schibstedsok.searchportal.result.SearchResultItem;
-import no.schibstedsok.searchportal.result.BasicSearchResultItem;
-import no.schibstedsok.searchportal.result.NewsAggregatorSearchResult;
 import org.apache.log4j.Logger;
-import org.jdom.JDOMException;
 import org.jdom.Document;
 import org.jdom.Element;
+import org.jdom.JDOMException;
 import org.jdom.input.SAXBuilder;
+
+import java.io.BufferedInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.BufferedInputStream;
-import java.util.List;
-import java.util.HashMap;
 import java.net.URL;
 import java.net.URLConnection;
+import java.util.HashMap;
+import java.util.List;
 
 
 public class NewsAggregatorSearchCommand extends AbstractSearchCommand {
@@ -28,8 +29,8 @@
     private final static Logger LOG = 
Logger.getLogger(NewsAggregatorSearchCommand.class);
 
     /**
-     * @param cxt        The context to execute in.
-     * @param dataModel  The dataModel to use.
+     * @param cxt       The context to execute in.
+     * @param dataModel The dataModel to use.
      */
     public NewsAggregatorSearchCommand(Context cxt, DataModel dataModel) {
         super(cxt, dataModel);
@@ -73,12 +74,12 @@
 
     private SearchResult getClusterResult(NewsAggregatorSearchConfiguration 
config, StringDataObject clusterId, String xmlFile) throws IOException, 
JDOMException {
         NewsAggregatorXmlParser newsAggregatorXmlParser = new 
NewsAggregatorXmlParser();
-        return newsAggregatorXmlParser.parseCluster(getInputStream(config, 
xmlFile), clusterId.getString(), this);
+        return newsAggregatorXmlParser.parseCluster(config, 
getInputStream(config, xmlFile), clusterId.getString(), this);
     }
 
     private SearchResult getPageResult(NewsAggregatorSearchConfiguration 
config, String xmlFile) throws JDOMException, IOException {
         NewsAggregatorXmlParser newsAggregatorXmlParser = new 
NewsAggregatorXmlParser();
-        return newsAggregatorXmlParser.parseFullPage(getInputStream(config, 
xmlFile), this);
+        return newsAggregatorXmlParser.parseFullPage(config, 
getInputStream(config, xmlFile), this);
     }
 
     private InputStream getInputStream(NewsAggregatorSearchConfiguration 
config, String xmlFile) throws IOException {
@@ -116,7 +117,7 @@
             return saxBuilder.build(inputStream);
         }
 
-        public SearchResult parseCluster(InputStream inputStream, String 
clusterId, NewsAggregatorSearchCommand searchCommand) throws JDOMException, 
IOException {
+        public SearchResult parseCluster(NewsAggregatorSearchConfiguration 
config, InputStream inputStream, String clusterId, NewsAggregatorSearchCommand 
searchCommand) throws JDOMException, IOException {
             try {
                 final NewsAggregatorSearchResult searchResult = new 
NewsAggregatorSearchResult(searchCommand);
                 final Document doc = getDocument(inputStream);
@@ -124,8 +125,9 @@
                 List<Element> clusters = root.getChildren(ELEMENT_CLUSTER);
                 for (Element cluster : clusters) {
                     if 
(cluster.getAttributeValue(ATTRIBUTE_CLUSTERID).equals(clusterId)) {
-                        handleCluster(cluster, searchCommand, true, 
searchResult);
-                        handleRelated(cluster.getChild(ELEMENT_RELATED), 
searchResult);
+                        handleFlatCluster(cluster, searchCommand, 
searchResult);
+                        handleRelated(config, 
cluster.getChild(ELEMENT_RELATED), searchResult);
+                        break;
                     }
                 }
                 handleGeoNav(root.getChild(ELEMENT_GEONAVIGATION), 
searchResult);
@@ -134,28 +136,28 @@
                 if (inputStream != null) {
                     try {
                         inputStream.close();
-                    } catch(Exception e) {
+                    } catch (Exception e) {
                         // Ignoring
                     }
                 }
             }
         }
 
-        public SearchResult parseFullPage(InputStream inputStream, 
SearchCommand searchCommand) throws JDOMException, IOException {
+        public SearchResult parseFullPage(NewsAggregatorSearchConfiguration 
config, InputStream inputStream, SearchCommand searchCommand) throws 
JDOMException, IOException {
             try {
                 final NewsAggregatorSearchResult searchResult = new 
NewsAggregatorSearchResult(searchCommand);
                 final Document doc = getDocument(inputStream);
                 final Element root = doc.getRootElement();
 
-                handleClusters(root.getChildren(ELEMENT_CLUSTER), 
searchResult, searchCommand, false);
-                handleRelated(root.getChild(ELEMENT_RELATED), searchResult);
+                handleClusters(root.getChildren(ELEMENT_CLUSTER), 
searchResult, searchCommand);
+                handleRelated(config, root.getChild(ELEMENT_RELATED), 
searchResult);
                 handleGeoNav(root.getChild(ELEMENT_GEONAVIGATION), 
searchResult);
                 return searchResult;
             } finally {
                 if (inputStream != null) {
                     try {
                         inputStream.close();
-                    } catch(Exception e) {
+                    } catch (Exception e) {
                         // Ignoring
                     }
                 }
@@ -174,44 +176,60 @@
             }
         }
 
-        private void handleRelated(Element relatedElement, 
NewsAggregatorSearchResult searchResult) {
+        private void handleRelated(NewsAggregatorSearchConfiguration config, 
Element relatedElement, NewsAggregatorSearchResult searchResult) {
             final List<Element> categoryElements = 
relatedElement.getChildren(ELEMENT_CATEGORY);
             for (Element categoryElement : categoryElements) {
                 final String categoryType = 
categoryElement.getAttributeValue(ATTRIBUTE_TYPE);
-                final SearchResultItem searchResultItem = new 
BasicSearchResultItem();
-                searchResultItem.addField(ATTRIBUTE_NAME, 
categoryElement.getTextTrim());
-                searchResult.addRelatedResultItem(categoryType, 
searchResultItem);
+
+                final SearchResult relatedResult = 
searchResult.getRelatedResult(categoryType);
+                int categoryCount = 0;
+                if (relatedResult != null) {
+                    categoryCount = relatedResult.getResults().size();
+                }
+                if (categoryCount < config.getRelatedMaxCount()) {
+                    final SearchResultItem searchResultItem = new 
BasicSearchResultItem();
+                    searchResultItem.addField(ATTRIBUTE_NAME, 
categoryElement.getTextTrim());
+                    searchResult.addRelatedResultItem(categoryType, 
searchResultItem);
+                }
             }
         }
 
-        private void handleClusters(List<Element> clusters, SearchResult 
searchResult, SearchCommand searchCommand, boolean collapseDuplicates) {
+        private void handleClusters(List<Element> clusters, SearchResult 
searchResult, SearchCommand searchCommand) {
             for (Element cluster : clusters) {
-                handleCluster(cluster, searchCommand, collapseDuplicates, 
searchResult);
+                handleCluster(cluster, searchCommand, searchResult);
             }
         }
 
-        private void handleCluster(Element cluster, SearchCommand 
searchCommand, boolean collapseDuplicates, SearchResult searchResult) {
+        private void handleFlatCluster(Element cluster, SearchCommand 
searchCommand, SearchResult searchResult) {
+            final Element entryCollectionElement = 
cluster.getChild(ELEMENT_ENTRY_COLLECTION);
+            final List<Element> entryList = 
entryCollectionElement.getChildren();
+
+            final HashMap<String, SearchResultItem> collapseMap = new 
HashMap<String, SearchResultItem>();
+            for (Element entry : entryList) {
+                final SearchResultItem searchResultItem = new 
BasicSearchResultItem();
+                handleEntry(entry, searchResultItem);
+                addResult(searchResultItem, searchResult, searchCommand, 
collapseMap);
+            }
+        }
+
+        private void handleCluster(Element cluster, SearchCommand 
searchCommand, SearchResult searchResult) {
             final SearchResultItem searchResultItem = new 
BasicSearchResultItem();
-            searchResultItem.addField("size", 
cluster.getAttributeValue(ATTRIBUTE_FULL_COUNT));
+            searchResultItem.addField("size", 
Integer.toString(Integer.parseInt(cluster.getAttributeValue(ATTRIBUTE_FULL_COUNT))
 - 1));
             searchResultItem.addField("clusterId", 
cluster.getAttributeValue(ATTRIBUTE_CLUSTERID));
 
             final Element entryCollectionElement = 
cluster.getChild(ELEMENT_ENTRY_COLLECTION);
             final List<Element> entryList = 
entryCollectionElement.getChildren();
             final BasicSearchResult nestedSearchResult = new 
BasicSearchResult(searchCommand);
 
-            HashMap<String, SearchResultItem> collapseMap = null;
-            if (collapseDuplicates) {
-                collapseMap = new HashMap<String, SearchResultItem>();
-            }
             for (int i = 0; i < entryList.size(); i++) {
-                Element nestedEntry =  entryList.get(i);
+                Element nestedEntry = entryList.get(i);
                 if (i == 0) {
                     // First element is main result
                     handleEntry(nestedEntry, searchResultItem);
                 } else {
                     SearchResultItem nestedResultItem = new 
BasicSearchResultItem();
                     handleEntry(nestedEntry, nestedResultItem);
-                    addResult(nestedResultItem, collapseMap, 
nestedSearchResult, searchCommand);
+                    addResult(nestedResultItem, nestedSearchResult, 
searchCommand);
                 }
             }
             searchResultItem.addNestedSearchResult("entries", 
nestedSearchResult);
@@ -219,9 +237,16 @@
         }
 
         private void addResult(SearchResultItem nestedResultItem,
-                               HashMap<String, SearchResultItem> collapseMap,
                                SearchResult nestedSearchResult,
                                SearchCommand searchCommand) {
+            addResult(nestedResultItem, nestedSearchResult, searchCommand, 
null);
+        }
+
+
+        private void addResult(SearchResultItem nestedResultItem,
+                               SearchResult nestedSearchResult,
+                               SearchCommand searchCommand,
+                               HashMap<String, SearchResultItem> collapseMap) {
             // Check if entry is duplicate and should be a subresult
             SearchResultItem collapseParent = null;
             String collapseId = nestedResultItem.getField(ELEMENT_COLLAPSEID);
@@ -236,10 +261,10 @@
                 }
             } else {
                 // duplicate item, adding as a subresult to first item.
-                SearchResult collapsedResults = 
collapseParent.getNestedSearchResult("collapsedResults");
+                SearchResult collapsedResults = 
collapseParent.getNestedSearchResult("entries");
                 if (collapsedResults == null) {
                     collapsedResults = new BasicSearchResult(searchCommand);
-                    collapseParent.addNestedSearchResult("collapsedResults", 
collapsedResults);
+                    collapseParent.addNestedSearchResult("entries", 
collapsedResults);
                 }
                 collapsedResults.addResult(nestedResultItem);
             }

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-14 10:21:44 UTC (rev 4573)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/NewsAggregatorSearchConfiguration.java
        2007-03-14 11:47:14 UTC (rev 4574)
@@ -3,11 +3,15 @@
 
 import org.apache.log4j.Logger;
 
+import java.util.Set;
+import java.util.Collections;
+
 public class NewsAggregatorSearchConfiguration extends 
AbstractSearchConfiguration {
     private final static Logger log = 
Logger.getLogger(NewsAggregatorSearchConfiguration.class);
 
     private String xmlSource;
     private String xmlMainFile;
+    private int relatedMaxCount = 30;
     private int updateIntervalMinutes;
 
     public NewsAggregatorSearchConfiguration() {
@@ -23,6 +27,14 @@
         }
     }
 
+    public int getRelatedMaxCount() {
+        return relatedMaxCount;
+    }
+
+    public void setRelatedMaxCount(int relatedMaxCount) {
+        this.relatedMaxCount = relatedMaxCount;
+    }
+
     public String getXmlSource() {
         return xmlSource;
     }

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

Reply via email to