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