Author: stianh
Date: 2007-05-09 12:55:47 +0200 (Wed, 09 May 2007)
New Revision: 5029

Modified:
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AddressSearchCommand.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/WhiteSearchCommand.java
Log:
SEARCH-225 Added geosearch to yellow, white and address search.


Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AddressSearchCommand.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AddressSearchCommand.java
    2007-05-09 10:04:31 UTC (rev 5028)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AddressSearchCommand.java
    2007-05-09 10:55:47 UTC (rev 5029)
@@ -5,37 +5,40 @@
 
 package no.schibstedsok.searchportal.mode.command;
 
-import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
-import javax.measure.units.SI;
+
 import no.fast.ds.search.ISearchParameters;
 import no.fast.ds.search.SearchParameter;
 import no.schibstedsok.searchportal.datamodel.request.ParametersDataObject;
 import no.schibstedsok.searchportal.result.SearchResult;
 import no.schibstedsok.searchportal.result.SearchResultItem;
+import no.schibstedsok.searchportal.util.GeoSearchUtil;
+
 import org.apache.log4j.Logger;
-import org.jscience.geography.coordinates.LatLong;
-import org.jscience.geography.coordinates.UTM;
-import org.jscience.geography.coordinates.crs.ReferenceEllipsoid;
 
 /**
+ * Search command responsible for address search.
+ * 
  * @author <a href="mailto:[EMAIL PROTECTED]">Anders Johan Jamtli</a>
  * @version <tt>$Revision$</tt>
  */
 public class AddressSearchCommand extends AbstractSimpleFastSearchCommand{
-
-    private static final Logger LOG = 
Logger.getLogger(AddressSearchCommand.class);
     
-    private static final String MIN_X = "minX";
-    private static final String MAX_X = "maxX";
-    private static final String MIN_Y = "minY";
-    private static final String MAX_Y = "maxY";
+    /** Logger for this class. */
+    private static final Logger LOG = 
Logger.getLogger(AddressSearchCommand.class);
 
+    /** 
+     * Constructor for AddressSearchCommand.
+     * @param cxt Context to initialize the command.
+     */
     public AddressSearchCommand(final Context cxt) {
         super(cxt);
     }
 
+    /**
+     * @see 
no.schibstedsok.searchportal.mode.command.AbstractSearchCommand#execute()
+     */
     public final SearchResult execute() {
         SearchResult sr = super.execute();
 
@@ -58,73 +61,40 @@
         return sr;
     }
     
-    private final class Point {
-        private final double x;
-        private final double y;
-        
-        public Point(final double x, final double y){
-            this.x = x;
-            this.y = y;
-        }
-        
-        public final double getX() {
-            return x;
-        }
-        
-        public final double getY() {
-            return y;
-        }
-    }
-    
+    /**
+     * If the search is a GEO search, add required GEO search parameters.
+     * @see 
no.schibstedsok.searchportal.mode.command.AbstractSimpleFastSearchCommand#setAdditionalParameters(ISearchParameters)
+     */
     @Override
-    protected void setAdditionalParameters(ISearchParameters params) {
+    protected void setAdditionalParameters(final ISearchParameters params) {
         super.setAdditionalParameters(params);
-        
-        /* RETURNING, NOT FINISHED YET */
-        if (true) return;
-        
         final ParametersDataObject pdo = datamodel.getParameters();
-        if (pdo.getValue(MIN_X) == null || pdo.getValue(MAX_X).getString() == 
null || pdo.getValue(MIN_Y) == null
-                || pdo.getValue(MAX_Y) == null) {
+       
+        if(!GeoSearchUtil.isGeoSearch(pdo)){
             return;
         }
-
-        final int minX = Integer.parseInt((String) 
pdo.getValue(MIN_X).getString());
-        final int maxX = Integer.parseInt((String) 
pdo.getValue(MAX_X).getString());
-        final int minY = Integer.parseInt((String) 
pdo.getValue(MIN_Y).getString());
-        final int maxY = Integer.parseInt((String) 
pdo.getValue(MAX_Y).getString());
+     
+        final String center = GeoSearchUtil.getCenter(pdo);
         
-        final UTM utmMin = UTM.valueOf(33, 'W', minX, minY, SI.METER);
-        final UTM utmMax = UTM.valueOf(33, 'W', maxX, maxY, SI.METER);
-        
-        final LatLong llMin = UTM.utmToLatLong(utmMin, 
ReferenceEllipsoid.WGS84);
-        final LatLong llMax = UTM.utmToLatLong(utmMax, 
ReferenceEllipsoid.WGS84);
+        LOG.debug("center : " + center);
+        //TODO: calculate this.
+        final String restrictRadius = "10";
 
-        final double llMinX = llMin.longitudeValue(SI.RADIAN);
-        final double llMaxX = llMax.longitudeValue(SI.RADIAN);
-        final double llMinY = llMin.latitudeValue(SI.RADIAN);
-        final double llMaxY = llMax.latitudeValue(SI.RADIAN);
-
-        LOG.debug("(" + minX + "," + minY + ") (" + llMinX + "," + llMinY + 
")");
-        LOG.debug("(" + maxX + "," + maxY + ") (" + llMaxX + "," + llMaxY + 
")");
-        
-        final String center = new StringBuilder("(").append(llMinX + (llMaxX - 
llMinX) / 2).append(",")
-                .append(llMinY + (llMaxY - llMinY) / 2).append(")").toString();
-        final String filterbox = new 
StringBuilder("[(").append(llMinX).append(",").append(llMinY).append("):(")
-                
.append(llMaxX).append(",").append(llMaxY).append(")]").toString();
-        
+        params.setParameter(new SearchParameter("qtf_geosearch:unit", 
GeoSearchUtil.RADIUS_MEASURE_UNIT_TYPE));
+        params.setParameter(new SearchParameter("qtf_geosearch:radius", 
restrictRadius));
         params.setParameter(new SearchParameter("qtf_geosearch:center", 
center));
-        params.setParameter(new SearchParameter("qtf_geosearch:filterbox", 
filterbox));
     }
-    
-    private final Point fromUtmToLatLong(final int x, final int y) {
-        final UTM utm = UTM.valueOf(33, 'W', x, y, SI.METER);
-        
-        final LatLong ll = UTM.utmToLatLong(utm, ReferenceEllipsoid.WGS84);
-
-        final double llX = Math.toDegrees(ll.longitudeValue(SI.RADIAN));
-        final double llY = Math.toDegrees(ll.longitudeValue(SI.RADIAN));
-        
-        return new Point(llX, llY);
+ 
+    /**
+     * Override sortby when the search is  a geo search.
+     * @see 
no.schibstedsok.searchportal.mode.command.AbstractSimpleFastSearchCommand#getSortBy()
+     */
+    @Override
+    protected String getSortBy(){
+        final ParametersDataObject pdo = datamodel.getParameters();
+        if(GeoSearchUtil.isGeoSearch(pdo)){
+            return "geo_spec_sortable";
+        }
+        return super.getSortBy();
     }
 }

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
  2007-05-09 10:04:31 UTC (rev 5028)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
  2007-05-09 10:55:47 UTC (rev 5029)
@@ -10,6 +10,10 @@
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+
+import no.fast.ds.search.ISearchParameters;
+import no.fast.ds.search.SearchParameter;
+import no.schibstedsok.searchportal.datamodel.request.ParametersDataObject;
 import 
no.schibstedsok.searchportal.mode.command.AbstractSearchCommand.ReconstructedQuery;
 import no.schibstedsok.searchportal.mode.config.CatalogueCommandConfig;
 import no.schibstedsok.searchportal.query.AndClause;
@@ -35,6 +39,7 @@
 import no.schibstedsok.searchportal.result.BasicSearchResultItem;
 import no.schibstedsok.searchportal.result.CatalogueSearchResultItem;
 import no.schibstedsok.searchportal.result.SearchResult;
+import no.schibstedsok.searchportal.util.GeoSearchUtil;
 
 import org.apache.log4j.Logger;
 
@@ -124,6 +129,24 @@
      */
     private static final String BLANK = "";
 
+    @Override
+    protected void setAdditionalParameters(final ISearchParameters params) {
+        super.setAdditionalParameters(params);
+        final ParametersDataObject pdo = datamodel.getParameters();
+       
+        if(!GeoSearchUtil.isGeoSearch(pdo)){
+            return;
+        }
+     
+        final String center = GeoSearchUtil.getCenter(pdo);
+        
+        LOG.debug("center : " + center);
+        
+        final String restrictRadius = "10";
+        params.setParameter(new SearchParameter("qtf_geosearch:unit", 
GeoSearchUtil.RADIUS_MEASURE_UNIT_TYPE));
+        params.setParameter(new SearchParameter("qtf_geosearch:radius", 
restrictRadius));
+        params.setParameter(new SearchParameter("qtf_geosearch:center", 
center));
+    }
     /**
      * Creates a new catalogue search command.
      * @param cxt current context for this search command.
@@ -353,6 +376,8 @@
 
         return query.toString();
     }
+    
+    
 
     /**
      * Set what to sort the resultset by.
@@ -371,6 +396,10 @@
         if ("name".equalsIgnoreCase(userSortBy)) {
             sortBy = SORTBY_COMPANYNAME;
         }
+        final ParametersDataObject pdo = datamodel.getParameters();
+        if(GeoSearchUtil.isGeoSearch(pdo)){
+            sortBy= GeoSearchUtil.GEO_SORT_BY;
+        }
         return sortBy;
     }
 

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/WhiteSearchCommand.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/WhiteSearchCommand.java
      2007-05-09 10:04:31 UTC (rev 5028)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/WhiteSearchCommand.java
      2007-05-09 10:55:47 UTC (rev 5029)
@@ -8,12 +8,16 @@
 
 package no.schibstedsok.searchportal.mode.command;
 
+import no.fast.ds.search.ISearchParameters;
+import no.fast.ds.search.SearchParameter;
+import no.schibstedsok.searchportal.datamodel.request.ParametersDataObject;
 import no.schibstedsok.searchportal.query.IntegerClause;
 import no.schibstedsok.searchportal.query.LeafClause;
 import no.schibstedsok.searchportal.query.PhoneNumberClause;
 import no.schibstedsok.searchportal.query.Visitor;
 import no.schibstedsok.searchportal.query.XorClause;
 import no.schibstedsok.searchportal.query.token.TokenPredicate;
+import no.schibstedsok.searchportal.util.GeoSearchUtil;
 
 /**
  *
@@ -32,6 +36,18 @@
 
         super(cxt);
     }
+    
+    /**
+     * @see 
no.schibstedsok.searchportal.mode.command.AbstractSimpleFastSearchCommand#getSortBy()
+     */
+    @Override
+    protected String getSortBy(){
+        final ParametersDataObject pdo = datamodel.getParameters();
+        if(GeoSearchUtil.isGeoSearch(pdo)){
+            return GeoSearchUtil.GEO_SORT_BY;
+        }
+        return super.getSortBy();
+    }
 
     /**
      * Adds non phonetic prefix to integer terms.
@@ -83,6 +99,26 @@
 
         }
     }
+    
+    /**
+     * If the search is a GEO search, add required GEO search parameters.
+     * @see 
no.schibstedsok.searchportal.mode.command.AbstractSimpleFastSearchCommand#setAdditionalParameters(ISearchParameters)
+     */
+    protected void setAdditionalParameters(ISearchParameters params) {
+        super.setAdditionalParameters(params);
+        final ParametersDataObject pdo = datamodel.getParameters();
+       
+        if(!GeoSearchUtil.isGeoSearch(pdo)){
+            return;
+        }
+     
+        final String center = GeoSearchUtil.getCenter(pdo);
+       
+        final String restrictRadius = "10";
+        params.setParameter(new SearchParameter("qtf_geosearch:unit", 
GeoSearchUtil.RADIUS_MEASURE_UNIT_TYPE));
+        params.setParameter(new SearchParameter("qtf_geosearch:radius", 
restrictRadius));
+        params.setParameter(new SearchParameter("qtf_geosearch:center", 
center));
+    }
 
     /**
      * An implementation that ignores phrase searches.

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

Reply via email to