Author: magnuse
Date: 2006-04-26 14:52:20 +0200 (Wed, 26 Apr 2006)
New Revision: 2809
Added:
trunk/src/java/no/schibstedsok/front/searchportal/command/MobileSearchCommand.java
trunk/src/java/no/schibstedsok/front/searchportal/configuration/MobileSearchConfiguration.java
trunk/src/java/no/schibstedsok/front/searchportal/velocity/WikiDirective.java
Log:
First version.
Added:
trunk/src/java/no/schibstedsok/front/searchportal/command/MobileSearchCommand.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/command/MobileSearchCommand.java
(rev 0)
+++
trunk/src/java/no/schibstedsok/front/searchportal/command/MobileSearchCommand.java
2006-04-26 12:52:20 UTC (rev 2809)
@@ -0,0 +1,167 @@
+/*
+ * MobileSearchCommand.java
+ *
+ * Created on March 10, 2006, 2:22 PM
+ *
+ */
+package no.schibstedsok.front.searchportal.command;
+
+import no.fast.ds.common.FastException;
+import no.fast.ds.search.BaseParameter;
+import no.fast.ds.search.IDocumentSummary;
+import no.fast.ds.search.IDocumentSummaryField;
+import no.fast.ds.search.IQuery;
+import no.fast.ds.search.IQueryResult;
+import no.fast.ds.search.ISearchParameters;
+import no.fast.ds.search.Query;
+import no.fast.ds.search.SearchParameter;
+import no.fast.ds.search.SearchParameters;
+
+import no.fast.msearch.Exception.ConfigurationException;
+import no.fast.msearch.search.DeviceCapabilitiesFactory;
+import no.fast.msearch.search.IDeviceCapabilities;
+import no.fast.msearch.search.IMSearchEngine;
+import no.fast.msearch.search.IMSearchFactory;
+import no.fast.msearch.search.IMSearchInfo;
+import no.fast.msearch.search.IMSearchResult;
+import no.fast.msearch.search.MSearchFactory;
+import no.fast.msearch.search.MSearchInfoFactory;
+import no.fast.personalization.api.ExplicitUserGroupPersonalizationFactory;
+import no.fast.personalization.api.IPersonalizationSpecification;
+
+import no.schibstedsok.front.searchportal.InfrastructureException;
+import
no.schibstedsok.front.searchportal.configuration.MobileSearchConfiguration;
+import no.schibstedsok.front.searchportal.result.BasicSearchResult;
+import no.schibstedsok.front.searchportal.result.BasicSearchResultItem;
+import no.schibstedsok.front.searchportal.result.SearchResult;
+import no.schibstedsok.front.searchportal.result.SearchResultItem;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import org.apache.log4j.Logger;
+
+
+/**
+ * A search command that uses FAST's msearch API.
+ *
+ * @author magnuse
+ */
+public final class MobileSearchCommand extends AbstractSearchCommand {
+
+ private static final Log LOG = Logger.getLog(MobileSearchCommand.class);
+
+ private static final String PERSONALIZATION_GROUP = "aspiro-sesam1";
+ private static final String USER_AGENT_PARAMETER="ua";
+
+ private final MobileSearchConfiguration cfg;
+
+ public MobileSearchCommand(final SearchCommand.Context cxt, final Map
parameters) {
+ super(cxt, parameters);
+ cfg = (MobileSearchConfiguration) cxt.getSearchConfiguration();
+ }
+
+ public SearchResult execute() {
+ try {
+ final IMSearchFactory factory = MSearchFactory.newInstance();
+ final IMSearchEngine engine = factory.createSearchEngine();
+ final ISearchParameters params = new SearchParameters();
+ final IMSearchInfo searchInfo =
MSearchInfoFactory.getMSearchInfo();
+ final List sources = new ArrayList();
+
+ if (cfg.getSortBy() != null) {
+ params.setParameter(new SearchParameter(BaseParameter.SORT_BY,
+ cfg.getSortBy()));
+ }
+
+ params.setParameter(new SearchParameter(BaseParameter.QUERY,
getTransformedQuery()));
+ params.setParameter(new SearchParameter("offset",
getCurrentOffset(0)));
+
+ final IDeviceCapabilities cap = getDeviceCapabilities();
+ final IPersonalizationSpecification ps =
ExplicitUserGroupPersonalizationFactory.getUserGroupSpecification(cfg.getPersonalizationGroup());
+ final IQuery query = new Query(params);
+ final List<IMSearchResult> results = cap != null ?
engine.search(query, ps, cap) : engine.search(query, ps);
+
+ IMSearchResult mResult = null;
+
+ for (final IMSearchResult r : results) {
+ if (r.getSource().equals(cfg.getSource())) {
+ mResult = r;
+ break;
+ }
+ }
+
+ final IQueryResult result = mResult.getResult();
+
+ final int cnt = getCurrentOffset(0);
+ final int maxIndex = Math.min(cnt + cfg.getResultsToReturn(),
+ result.getDocCount());
+
+ final SearchResult searchResult = new BasicSearchResult(this);
+ searchResult.setHitCount(result.getDocCount());
+
+ for (int i = cnt; i < maxIndex; i++) {
+ //catch nullpointerException because of unaccurate doccount
+ try {
+ final IDocumentSummary document = result.getDocument(i +
1);
+ final SearchResultItem item = createResultItem(document);
+ searchResult.addResult(item);
+ } catch (NullPointerException e) {
+ return searchResult;
+ }
+ }
+
+ return searchResult;
+ } catch (ConfigurationException ex) {
+ throw new InfrastructureException(ex);
+ } catch (IOException ex) {
+ throw new InfrastructureException(ex);
+ } catch (FastException ex) {
+ throw new InfrastructureException(ex);
+ }
+ }
+
+ private IDeviceCapabilities getDeviceCapabilities() {
+
+ IDeviceCapabilities cap = null;
+
+ if (getParameters().containsKey(USER_AGENT_PARAMETER)) {
+ final String userAgent = (((String[])
getParameters().get(USER_AGENT_PARAMETER))[0]);
+ cap = DeviceCapabilitiesFactory.getDeviceCapabilities();
+ cap.setUserAgent(userAgent);
+ }
+ return cap;
+ }
+
+ private SearchResultItem createResultItem(final IDocumentSummary document)
{
+ final SearchResultItem item = new BasicSearchResultItem();
+
+ if (cfg.getResultFields() != null) {
+
+ for (final String field : cfg.getResultFields()) {
+ String name = field;
+ String alias = field;
+ final String[] aliasSplit = field.split("AS");
+
+ if (aliasSplit.length == 2) {
+ name = aliasSplit[0].trim();
+ alias = aliasSplit[1].trim();
+ }
+
+ final IDocumentSummaryField summary =
document.getSummaryField(name);
+
+ if (summary != null) {
+ item.addField(alias, summary.getSummary());
+ } else {
+ }
+ }
+ }
+
+ return item;
+ }
+}
Added:
trunk/src/java/no/schibstedsok/front/searchportal/configuration/MobileSearchConfiguration.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/configuration/MobileSearchConfiguration.java
(rev 0)
+++
trunk/src/java/no/schibstedsok/front/searchportal/configuration/MobileSearchConfiguration.java
2006-04-26 12:52:20 UTC (rev 2809)
@@ -0,0 +1,52 @@
+/*
+ * MobileSearchConfiguration.java
+ *
+ * Created on March 10, 2006, 2:25 PM
+ *
+ */
+
+package no.schibstedsok.front.searchportal.configuration;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import no.schibstedsok.front.searchportal.command.MobileSearchCommand;
+import no.schibstedsok.front.searchportal.command.SearchCommand;
+import no.schibstedsok.front.searchportal.query.run.RunningQuery;
+
+/**
+ *
+ * @author magnuse
+ */
+public class MobileSearchConfiguration extends AbstractSearchConfiguration {
+
+ private String source;
+ private String personalizationGroup;
+ private String sortBy;
+
+ public MobileSearchConfiguration(final SearchConfiguration asc) {
+ super(asc);
+ if(asc != null && asc instanceof MobileSearchConfiguration){
+ final MobileSearchConfiguration cfg = (MobileSearchConfiguration)
asc;
+ source = cfg.source;
+ personalizationGroup = cfg.personalizationGroup;
+ sortBy = cfg.sortBy;
+ }
+ }
+
+ public String getSource() {
+ return source;
+ }
+
+ public void setSource(final String source) {
+ this.source = source;
+ }
+
+ public String getPersonalizationGroup() {
+ return personalizationGroup;
+ }
+
+ public String getSortBy() {
+ return sortBy;
+ }
+}
Added:
trunk/src/java/no/schibstedsok/front/searchportal/velocity/WikiDirective.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/velocity/WikiDirective.java
(rev 0)
+++
trunk/src/java/no/schibstedsok/front/searchportal/velocity/WikiDirective.java
2006-04-26 12:52:20 UTC (rev 2809)
@@ -0,0 +1,86 @@
+package no.schibstedsok.front.searchportal.velocity;
+
+import org.apache.velocity.runtime.directive.Directive;
+import org.apache.velocity.runtime.parser.node.Node;
+import org.apache.velocity.context.InternalContextAdapter;
+import org.apache.velocity.exception.ResourceNotFoundException;
+import org.apache.velocity.exception.ParseErrorException;
+import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.commons.lang.StringEscapeUtils;
+
+import java.io.Writer;
+import java.io.IOException;
+
+/**
+ *
+ * A velocity directive to convert wiki url
+ *
+ * <code>
+ * #wiki('http://no.wikipedia.org/wiki/Planet')
+ * returns the string: "http://no.wapedia.org/Planet"
+ * </code>
+ *
+ *
+ * @author thomas
+ */
+public class WikiDirective extends Directive {
+
+ private static final String NAME = "wiki";
+
+ /**
+ * returns the name of the directive.
+ *
+ * @return the name of the directive.
+ */
+ public String getName() {
+ return NAME;
+ }
+
+ /**
+ * returns the type of the directive. The type is LINE.
+ * @return The type == LINE
+ */
+ public int getType() {
+ return LINE;
+ }
+
+ /**
+ * Renders the capitalized word(s).
+ *
+ * @param context
+ * @param writer
+ * @param node
+ *
+ * @throws java.io.IOException
+ * @throws org.apache.velocity.exception.ResourceNotFoundException
+ * @throws org.apache.velocity.exception.ParseErrorException
+ * @throws org.apache.velocity.exception.MethodInvocationException
+ * @return the encoded string.
+ */
+ public boolean render(
+ final InternalContextAdapter context,
+ final Writer writer, final
+ Node node) throws IOException, ResourceNotFoundException,
ParseErrorException, MethodInvocationException
+ {
+ if (node.jjtGetNumChildren() != 1) {
+ rsvc.error("#" + getName() + " - wrong number of arguments");
+ return false;
+ }
+
+ final String s = node.jjtGetChild(0).value(context).toString();
+ final String wap = s.replace("no.wikipedia.org/wiki",
"no.wapedia.org");
+
+ //String cut = wap.substring(0, wap.lastIndexOf("/")+1);
+ //String wikiword =
URLEncoder.encode(s.substring(s.lastIndexOf("/")+1), "UTF-8");
+ //writer.write(cut+wikiword);
+
+ writer.write(StringEscapeUtils.escapeXml(wap));
+
+ if (node.getLastToken().image.endsWith("\n")) {
+ writer.write("\n");
+ }
+
+ return true;
+
+ }
+}
_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits