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

Reply via email to