Author: daniele
Date: 2007-03-02 10:21:17 +0100 (Fri, 02 Mar 2007)
New Revision: 4530

Added:
   
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/CatalogueEmptyQueryQueryTransformer.java
   
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/CatalogueExactTitleMatchQueryTransformer.java
   
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/CatalogueQueryTransformer.java
Modified:
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AbstractSearchCommand.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/CatalogueSearchConfiguration.java
Log:
Added code to AbstractSearchCommand for empty query search with 
CatalogueSearchCommand.
Properties in modes.xml for CatalogueSarchCommand is now read and added to 
CatalogueSarchConfiguration.
Move lots of query logic to querytransformers instead of everything in 
CatalogueSearchCOmmand.


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-01 13:42:36 UTC (rev 4529)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
       2007-03-02 09:21:17 UTC (rev 4530)
@@ -758,6 +758,7 @@
                 if(sc instanceof CatalogueSearchConfiguration){
                        final CatalogueSearchConfiguration csc = 
(CatalogueSearchConfiguration) sc;
                     fillBeanProperty(csc, inherit, "queryParameterWhere", 
ParseType.String , commandE, "");
+                    fillBeanProperty(csc, inherit, "searchBy", 
ParseType.String , commandE, "");
                 }
                 if(sc instanceof CatalogueAdsSearchConfiguration){
                        final CatalogueAdsSearchConfiguration casc = 
(CatalogueAdsSearchConfiguration) sc;

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AbstractSearchCommand.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AbstractSearchCommand.java
   2007-03-01 13:42:36 UTC (rev 4529)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AbstractSearchCommand.java
   2007-03-02 09:21:17 UTC (rev 4530)
@@ -351,7 +351,9 @@
             executeQuery |= null != parameters.get("c") && 
parameters.get("c").equals("wt");
             executeQuery |= null != parameters.get("c") && 
parameters.get("c").equals("n");
             executeQuery |= null != parameters.get("c") && 
parameters.get("c").equals("t");
+            executeQuery |= null != parameters.get("c") && 
parameters.get("c").equals("cat");
             executeQuery |= null != parameters.get("c") && 
parameters.get("c").equals("na");            
+
             executeQuery |= null != filter && filter.length() > 0;
             LOG.info("executeQuery==" + executeQuery
                     + " ; queryToUse:" + queryToUse

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-03-01 13:42:36 UTC (rev 4529)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
  2007-03-02 09:21:17 UTC (rev 4530)
@@ -3,7 +3,6 @@
  */
 package no.schibstedsok.searchportal.mode.command;
 
-
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -11,7 +10,10 @@
 import java.util.Set;
 import no.fast.ds.search.ISearchParameters;
 import no.fast.ds.search.SearchParameter;
+import no.schibstedsok.commons.ioc.ContextWrapper;
 import no.schibstedsok.searchportal.datamodel.DataModel;
+import no.schibstedsok.searchportal.mode.config.CatalogueSearchConfiguration;
+import no.schibstedsok.searchportal.mode.config.HittaSearchConfiguration;
 import no.schibstedsok.searchportal.query.AndClause;
 import no.schibstedsok.searchportal.query.AndNotClause;
 import no.schibstedsok.searchportal.query.Clause;
@@ -21,6 +23,7 @@
 import no.schibstedsok.searchportal.query.NotClause;
 import no.schibstedsok.searchportal.query.OperationClause;
 import no.schibstedsok.searchportal.query.OrClause;
+import no.schibstedsok.searchportal.query.PhraseClause;
 import no.schibstedsok.searchportal.query.Query;
 import no.schibstedsok.searchportal.query.XorClause;
 import no.schibstedsok.searchportal.query.parser.AbstractReflectionVisitor;
@@ -29,233 +32,201 @@
 import no.schibstedsok.searchportal.result.CatalogueSearchResultItem;
 import no.schibstedsok.searchportal.result.FastSearchResult;
 import no.schibstedsok.searchportal.result.SearchResult;
+import no.schibstedsok.searchportal.site.config.SiteConfiguration;
+
 import org.apache.log4j.Logger;
 
-
 /**
- *
+ * 
  */
 public class CatalogueSearchCommand extends AdvancedFastSearchCommand {
 
-    private static final Logger LOG = 
Logger.getLogger(CatalogueSearchCommand.class);
-    private String queryTwo = null;
-    private String queryName = "";
-    private boolean searchForName = false;
-    private boolean searchForInfoPage = false;
-    private String sortBy="kw"; // defualtsøket er på keyword
+       private static final Logger LOG = Logger
+                       .getLogger(CatalogueSearchCommand.class);
 
+       private String queryTwo = null;
 
-    /** Creates a new catalogue search command.
-     * TODO. Rewrite from scratch. This is insane.
-     **/
-    public CatalogueSearchCommand(final Context cxt, final DataModel 
datamodel) {
-       super(cxt, datamodel);
+       private String userSortBy = "kw"; // defualtsøket er på keyword
 
+       private static final String DEBUG_CONF_NFO = "CatalogueSearch Conf 
details --> ";
 
-       // hvis "where" parametern er sendt inn, så tar vi og leser inn query 
fra
-       // den.
-       if(getSingleParameter("where") != null){
-               final ReconstructedQuery rq = 
createQuery(getSingleParameter("where"));
+       /**
+        * Creates a new catalogue search command.
+        * 
+        */
+       public CatalogueSearchCommand(final Context cxt, final DataModel 
datamodel) {
+               super(cxt, datamodel);
 
-               GeoVisitor geo = new GeoVisitor();
-               geo.visit(rq.getQuery().getRootClause());
+               final CatalogueSearchConfiguration conf = 
(CatalogueSearchConfiguration) cxt
+                               .getSearchConfiguration();
+               LOG.debug(DEBUG_CONF_NFO + conf.getSearchBy() + ' '
+                               + conf.getQueryParameterWhere());
 
-               queryTwo = geo.getQueryRepresentation();
-               LOG.info("Dette ble det: "+queryTwo);
-       }
+               // hvis "where" parametern er sendt inn, så tar vi og leser inn 
query
+               // fra den
+               if (getSingleParameter("where") != null) {
+                       final ReconstructedQuery rq = 
createQuery(getSingleParameter("where"));
 
-       if(getSingleParameter("userSortBy")!=null
-                       && getSingleParameter("userSortBy").length()>0){
-               sortBy=getSingleParameter("userSortBy");
-       }else{
-               sortBy="kw";
-       }
+                       GeoVisitor geo = new GeoVisitor();
+                       geo.visit(rq.getQuery().getRootClause());
 
+                       queryTwo = geo.getQueryRepresentation();
+                       LOG.info("Dette ble det: " + queryTwo);
+               }
 
-    }
+               if (getSingleParameter("userSortBy") != null
+                               && getSingleParameter("userSortBy").length() > 0
+                               && 
getSingleParameter("userSortBy").equals("name")) {
+                       userSortBy = "name";
+               } else {
+                       userSortBy = "kw";
+               }
 
-    /** TODO comment me. **/
-    public SearchResult execute() {
-       // kjør søk for keyword.
-       searchForName=false;
-       super.performQueryTransformation();
-       SearchResult result = super.execute();
+               if ("exact".equals(conf.getSearchBy())) {
+                       userSortBy = "exact";
+               }
+       }
 
-       searchForName=true;
-        super.performQueryTransformation();
-        // søk etter firmanavn
-        SearchResult nameQueryResult = super.execute();
+       /** TODO comment me. * */
+       public SearchResult execute() {
+               // kjør søk
+               SearchResult result = super.execute();
 
-       // hvis det er angitt at det er sortert på navn,
-        // viser vi treff på navn først. Hvis det er angitt att
-        // det skal sorteres på keywords, viser vi keywords først.
-        if(sortBy.equals("kw")){
-            result.getResults().addAll(nameQueryResult.getResults());
-            
result.setHitCount(result.getHitCount()+nameQueryResult.getHitCount());
-        }else{
-               nameQueryResult.getResults().addAll(result.getResults());
-               
nameQueryResult.setHitCount(result.getHitCount()+nameQueryResult.getHitCount());
+               // konverter til denne.
+               List<CatalogueSearchResultItem> nyResultListe = new 
ArrayList<CatalogueSearchResultItem>();
 
-               result = nameQueryResult;
-        }
+               // TODO: get all keys to lookup and execute one call instead of
+               // iterating like this...
+               Iterator iter = result.getResults().listIterator();
 
+               while (iter.hasNext()) {
+                       BasicSearchResultItem basicResultItem = 
(BasicSearchResultItem) iter
+                                       .next();
 
-        // konverter til denne.
-        List<CatalogueSearchResultItem> nyResultListe = new 
ArrayList<CatalogueSearchResultItem>();
+                       CatalogueSearchResultItem resultItem = new 
CatalogueSearchResultItem();
+                       for (Object o : basicResultItem.getFieldNames()) {
+                               String s = (String) o;
+                               String v = basicResultItem.getField(s);
+                               resultItem.addField(s, v);
+                       }
 
-       //TODO: get all keys to lookup and execute one call instead of 
iterating like this...
-       Iterator iter = result.getResults().listIterator();
+                       nyResultListe.add(resultItem);
+               }
 
+               // fjern de gamle BasicResultItems, og erstatt dem med nye
+               // CatalogueResultItems.
+               result.getResults().clear();
+               result.getResults().addAll(nyResultListe);
 
-       while (iter.hasNext()) {
-               BasicSearchResultItem basicResultItem = (BasicSearchResultItem) 
iter.next();
+               return result;
+       }
 
-               CatalogueSearchResultItem resultItem = new 
CatalogueSearchResultItem();
-               for(Object o : basicResultItem.getFieldNames()){
-                       String s = (String) o;
-                       String v = basicResultItem.getField(s);
-                       resultItem.addField(s,v);
-               }
+       @Override
+       public String getTransformedQuery() {
+               String query = super.getTransformedQuery();
 
-               nyResultListe.add(resultItem);
-       }
+               if (queryTwo != null && queryTwo.length() > 0 && 
!query.equals("*")) {
+                       query += ") " + QL_AND + " (" + queryTwo + ")";
+                       query = "(" + query;
+               } else if (query.equals("*")) {
+                       query = queryTwo;
+               }
 
-       // fjern de gamle BasicResultItems, og erstatt dem med nye 
CatalogueResultItems.
-       result.getResults().clear();
-       result.getResults().addAll(nyResultListe);
+               return query;
+       }
 
-       return result;
-    }
 
 
-    @Override
-    public String getTransformedQuery() {
-       String query = super.getTransformedQuery();
+       @Override
+       protected String getSortBy() {
+               // hvis man søker etter firmanavn, sorterer vi etter "iyprpnavn"
+               // ellers søker vi etter keywords, og da sorterer vi etter 
"iyprpkw"
+               // istedet.
+               String sortBy = "iyprpkw";
+               if ("name".equalsIgnoreCase(userSortBy)
+                               || "exact".equalsIgnoreCase(userSortBy)) {
+                       sortBy = "iyprpnavn";
+               }
+               return sortBy;
+       }
 
-       if(queryTwo!=null&&queryTwo.length()>0){
-               query += ") " + QL_AND +" (" + queryTwo+")";
-               query= "("+query;
-       }
+       /**
+        * Query builder for creating a query syntax similar to sesam's own.
+        */
+       private final class GeoVisitor extends AbstractReflectionVisitor {
 
-       return query;
-    }
+               // AbstractReflectionVisitor overrides
+               // ----------------------------------------------
+               private final StringBuilder sb = new StringBuilder();
 
-    /**
-     * Legg til  iypcfspkeywords forran alle ord.
-     *
-     */
-    protected void visitImpl(final LeafClause clause) {
+               /**
+                * Returns the generated query.
+                * 
+                * @return The query.
+                */
+               String getQueryRepresentation() {
+                       return sb.toString();
+               }
 
+               /**
+                * [EMAIL PROTECTED]
+                */
+               protected void visitImpl(final LeafClause clause) {
+                       if (clause.getTerm() != null && 
clause.getTerm().length() > 0) {
+                               sb.append("iypcfgeo:" + clause.getTerm());
+                       }
+               }
 
-       String transformed = getTransformedTerm(clause);
+               protected void visitImpl(final AndClause clause) {
+                       clause.getFirstClause().accept(this);
+                       if (!(clause.getSecondClause() instanceof NotClause)) {
+                               sb.append(QL_AND);
+                       }
+                       clause.getSecondClause().accept(this);
+               }
 
-       if(searchForName){
-               LOG.info("Add transformed to name query \""+transformed+"\"");
-               appendToQueryRepresentation("(");
-               appendToQueryRepresentation("(iypcfphnavn:"+transformed+")");
-               appendToQueryRepresentation(" ANDNOT (");
-               appendToQueryRepresentation("(lemiypcfkeywords:"+transformed+") 
OR ");
-               
appendToQueryRepresentation("(lemiypcfkeywordslow:"+transformed+")");
-               appendToQueryRepresentation(")");
-               appendToQueryRepresentation(")");
-       }else{
-               LOG.info("Add transformed to keyword query 
\""+transformed+"\"");
-               appendToQueryRepresentation("(lemiypcfkeywords:"+transformed+" 
ANY lemiypcfkeywordslow:"+transformed+")");
-       }
-    }
+               /**
+                * [EMAIL PROTECTED]
+                */
+               protected void visitImpl(final OrClause clause) {
+                       sb.append("(");
+                       clause.getFirstClause().accept(this);
 
+                       sb.append(QL_OR);
 
-    @Override
-    protected String getSortBy() {
-       // hvis man søker etter firmanavn, sorterer vi etter "iyprpnavn"
-       // ellers søker vi etter keywords, og da sorterer vi etter "iyprpkw" 
istedet.
-       String sortBy="iyprpkw";
-       if(searchForName){
-               sortBy="iyprpnavn";
-       }
-       return sortBy;
-    }
+                       clause.getSecondClause().accept(this);
+                       sb.append(")");
+               }
 
+               /**
+                * [EMAIL PROTECTED]
+                */
+               protected void visitImpl(final DefaultOperatorClause clause) {
+                       clause.getFirstClause().accept(this);
+                       if (!(clause.getSecondClause() instanceof NotClause)) {
+                               sb.append(QL_AND);
+                       }
+                       clause.getSecondClause().accept(this);
+               }
 
+               /**
+                * [EMAIL PROTECTED]
+                */
+               protected void visitImpl(final NotClause clause) {
 
-    /**
-     * Query builder for creating a query syntax similar to sesam's own.
-     */
-    private final class GeoVisitor extends AbstractReflectionVisitor{
+                       final String childsTerm = 
clause.getFirstClause().getTerm();
+                       if (childsTerm != null && childsTerm.length() > 0) {
+                               sb.append(QL_ANDNOT);
+                               clause.getFirstClause().accept(this);
+                       }
+               }
 
-        // AbstractReflectionVisitor overrides 
----------------------------------------------
-        private final StringBuilder sb = new StringBuilder();
-
-        /**
-         * Returns the generated query.
-         *
-         * @return The query.
-         */
-        String getQueryRepresentation() {
-            return sb.toString();
-        }
-
-        /**
-         * [EMAIL PROTECTED]
-         */
-        protected void visitImpl(final LeafClause clause) {
-               if(clause.getTerm()!=null && clause.getTerm().length()>0){
-                       sb.append("iypcfgeo:"+clause.getTerm());
-               }
-        }
-
-        protected void visitImpl(final AndClause clause) {
-            clause.getFirstClause().accept(this);
-            if(!(clause.getSecondClause() instanceof NotClause)){
-                sb.append(QL_AND);
-            }
-            clause.getSecondClause().accept(this);
-        }
-
-        /**
-         * [EMAIL PROTECTED]
-         */
-        protected void visitImpl(final OrClause clause) {
-               sb.append("(");
-            clause.getFirstClause().accept(this);
-
-            sb.append(QL_OR);
-
-            clause.getSecondClause().accept(this);
-            sb.append(")");
-        }
-
-        /**
-         * [EMAIL PROTECTED]
-         */
-        protected void visitImpl(final DefaultOperatorClause clause) {
-            clause.getFirstClause().accept(this);
-            if(!(clause.getSecondClause() instanceof NotClause)){
-                sb.append(QL_AND);
-            }
-            clause.getSecondClause().accept(this);
-        }
-
-        /**
-         * [EMAIL PROTECTED]
-         */
-        protected void visitImpl(final NotClause clause) {
-
-            final String childsTerm = clause.getFirstClause().getTerm();
-            if (childsTerm != null && childsTerm.length() > 0) {
-                sb.append(QL_ANDNOT);
-                clause.getFirstClause().accept(this);
-            }
-        }
-
-
-
-        /**
-         * [EMAIL PROTECTED]
-         */
-        protected void visitImpl(final AndNotClause clause) {
-               sb.append(QL_ANDNOT);
-            clause.getFirstClause().accept(this);
-        }
-    }
+               /**
+                * [EMAIL PROTECTED]
+                */
+               protected void visitImpl(final AndNotClause clause) {
+                       sb.append(QL_ANDNOT);
+                       clause.getFirstClause().accept(this);
+               }
+       }
 }

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/CatalogueSearchConfiguration.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/CatalogueSearchConfiguration.java
     2007-03-01 13:42:36 UTC (rev 4529)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/CatalogueSearchConfiguration.java
     2007-03-02 09:21:17 UTC (rev 4530)
@@ -20,4 +20,25 @@
         super(asc);
     }
 
+    
+    private String queryParameterWhere;
+    private String searchBy;
+    
+       public String getQueryParameterWhere() {
+               return queryParameterWhere;
+       }
+
+       public void setQueryParameterWhere(String queryParameterWhere) {
+               this.queryParameterWhere = queryParameterWhere;
+       }
+
+       public String getSearchBy() {
+               return searchBy;
+       }
+
+       public void setSearchBy(String searchBy) {
+               this.searchBy = searchBy;
+       }
+    
+    
 }

Added: 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/CatalogueEmptyQueryQueryTransformer.java
===================================================================
--- 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/CatalogueEmptyQueryQueryTransformer.java
                               (rev 0)
+++ 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/CatalogueEmptyQueryQueryTransformer.java
       2007-03-02 09:21:17 UTC (rev 4530)
@@ -0,0 +1,46 @@
+// Copyright (2006-2007) Schibsted Søk AS
+package no.schibstedsok.searchportal.query.transform;
+
+import java.util.Map;
+
+import no.schibstedsok.searchportal.query.AndClause;
+import no.schibstedsok.searchportal.query.AndNotClause;
+import no.schibstedsok.searchportal.query.Clause;
+import no.schibstedsok.searchportal.query.DefaultOperatorClause;
+import no.schibstedsok.searchportal.query.DoubleOperatorClause;
+import no.schibstedsok.searchportal.query.LeafClause;
+import no.schibstedsok.searchportal.query.NotClause;
+import no.schibstedsok.searchportal.query.OperationClause;
+import no.schibstedsok.searchportal.query.OrClause;
+import no.schibstedsok.searchportal.query.PhraseClause;
+import no.schibstedsok.searchportal.query.transform.QueryTransformer.Context;
+import 
no.schibstedsok.searchportal.query.transform.TokenMaskQueryTransformer.Mask;
+
+import org.apache.log4j.Logger;
+
+/**
+ * 
+ * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Engfeldt</a>
+ * @version <tt>$Revision: 3359 $</tt>
+ */
+public final class CatalogueEmptyQueryQueryTransformer extends 
AbstractQueryTransformer {
+
+       private static final Logger LOG = Logger
+                       .getLogger(CatalogueEmptyQueryQueryTransformer.class);
+
+       private static final String BLANK = "*";
+
+       /** TODO comment me. * */
+       protected void visitImpl(final LeafClause clause) {
+               if (getContext().getQuery().isBlank()) {
+                       getContext().getTransformedTerms().put(clause, BLANK);
+               }
+       }
+    
+
+       
+   private Map<Clause,String> getTransformedTerms() {
+       return getContext().getTransformedTerms();
+   }
+
+}

Added: 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/CatalogueExactTitleMatchQueryTransformer.java
===================================================================
--- 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/CatalogueExactTitleMatchQueryTransformer.java
                          (rev 0)
+++ 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/CatalogueExactTitleMatchQueryTransformer.java
  2007-03-02 09:21:17 UTC (rev 4530)
@@ -0,0 +1,92 @@
+// Copyright (2006-2007) Schibsted Søk AS
+package no.schibstedsok.searchportal.query.transform;
+
+import java.util.Map;
+
+import no.schibstedsok.searchportal.query.AndClause;
+import no.schibstedsok.searchportal.query.AndNotClause;
+import no.schibstedsok.searchportal.query.Clause;
+import no.schibstedsok.searchportal.query.DefaultOperatorClause;
+import no.schibstedsok.searchportal.query.DoubleOperatorClause;
+import no.schibstedsok.searchportal.query.LeafClause;
+import no.schibstedsok.searchportal.query.NotClause;
+import no.schibstedsok.searchportal.query.OperationClause;
+import no.schibstedsok.searchportal.query.OrClause;
+import no.schibstedsok.searchportal.query.PhraseClause;
+import no.schibstedsok.searchportal.query.parser.WordClauseImpl;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Transforms the query into <br/> titles:^"query"$ <br/> Ensures that only an
+ * exact match within the titles field is returned.
+ * 
+ * @author <a href="mailto:[EMAIL PROTECTED]">Michael Semb Wever</a>
+ * @version <tt>$Revision: 3359 $</tt>
+ */
+public final class CatalogueExactTitleMatchQueryTransformer extends
+               AbstractQueryTransformer {
+
+       private static final Logger LOG = Logger
+                       
.getLogger(CatalogueExactTitleMatchQueryTransformer.class);
+
+       private transient boolean writtenStart = false;
+
+       private transient Boolean visitingLast = null;
+
+       private transient StringBuffer sb = new StringBuffer();
+
+       /**
+        * 
+        * @param clause
+        *            The clause to prefix.
+        */
+       public void visitImpl(final LeafClause clause) {
+
+               if (!writtenStart) {
+
+                       sb = new StringBuffer();
+                       sb.append("iypnavnvisningnorm:\""
+                                       + getTransformedTerms().get(clause));
+
+                       writtenStart = true;
+                       // also, if we got here without giving visitingLast a 
value then
+                       // this is the only LeafClause in the query
+                       visitingLast = null == visitingLast;
+
+                       getTransformedTerms().put(clause, "");
+               }
+
+               if (!visitingLast && !visitingLast)
+                       sb.append(getTransformedTerms().get(clause));
+
+               if (visitingLast) {
+                       sb.append(" " + getTransformedTerms().get(clause) + 
"\"");
+                       getTransformedTerms().put(clause, sb.toString().trim());
+               }
+
+       }
+
+       private Map<Clause, String> getTransformedTerms() {
+               return getContext().getTransformedTerms();
+       }
+
+       /**
+        * [EMAIL PROTECTED]
+        */
+       protected void visitImpl(final DefaultOperatorClause clause) {
+               // remember what visitingLast was
+               final Boolean original = visitingLast;
+               // turn it off. left child can never be the last term in the 
query.
+               visitingLast = false;
+               clause.getFirstClause().accept(this);
+               // restore visitingLast.
+               visitingLast = original;
+               if (null == visitingLast) {
+                       // if it is yet to be assigned an value (ie this is the 
topmost
+                       // DoubleOperatorClause) then assign true.
+                       visitingLast = true;
+               }
+               clause.getSecondClause().accept(this);
+       }
+}

Added: 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/CatalogueQueryTransformer.java
===================================================================
--- 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/CatalogueQueryTransformer.java
                         (rev 0)
+++ 
trunk/query-transform-spi/src/main/java/no/schibstedsok/searchportal/query/transform/CatalogueQueryTransformer.java
 2007-03-02 09:21:17 UTC (rev 4530)
@@ -0,0 +1,99 @@
+// Copyright (2006-2007) Schibsted Søk AS
+package no.schibstedsok.searchportal.query.transform;
+
+import java.util.Map;
+
+import no.schibstedsok.searchportal.query.AndClause;
+import no.schibstedsok.searchportal.query.AndNotClause;
+import no.schibstedsok.searchportal.query.Clause;
+import no.schibstedsok.searchportal.query.DefaultOperatorClause;
+import no.schibstedsok.searchportal.query.DoubleOperatorClause;
+import no.schibstedsok.searchportal.query.LeafClause;
+import no.schibstedsok.searchportal.query.NotClause;
+import no.schibstedsok.searchportal.query.OperationClause;
+import no.schibstedsok.searchportal.query.OrClause;
+import no.schibstedsok.searchportal.query.PhraseClause;
+import no.schibstedsok.searchportal.query.transform.QueryTransformer.Context;
+import 
no.schibstedsok.searchportal.query.transform.TokenMaskQueryTransformer.Mask;
+
+import org.apache.log4j.Logger;
+
+/**
+ * 
+ * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Engfeldt</a>
+ * @version <tt>$Revision: 3359 $</tt>
+ */
+public final class CatalogueQueryTransformer extends AbstractQueryTransformer {
+
+       private static final Logger LOG = Logger
+                       .getLogger(CatalogueQueryTransformer.class);
+
+       /** TODO comment me. * */
+       protected void visitImpl(final LeafClause clause) {
+               StringBuilder sb = new StringBuilder();
+               sb.append("(");
+               sb.append("(iypcfphnavn:" + getTransformedTerms().get(clause)  
+ ") ANY ");
+               sb.append("(lemiypcfkeywords:" + 
getTransformedTerms().get(clause)  + ") ANY");
+               sb.append("(lemiypcfkeywordslow:" + 
getTransformedTerms().get(clause)  + ")");
+               sb.append(")");
+               getContext().getTransformedTerms().put(clause, sb.toString());
+       }
+
+
+       /**
+        * Legg til iypcfnavn forran alle ord.
+        * 
+        */
+       protected void visitImpl(final PhraseClause clause) {
+               StringBuilder sb = new StringBuilder();
+               sb.append("(");
+               sb.append("(iypcfnavn:" + getTransformedTerms().get(clause)  + 
") ANY ");
+               sb.append("(lemiypcfkeywords:" + 
getTransformedTerms().get(clause)  + ") ANY");
+               sb.append("(lemiypcfkeywordslow:" + 
getTransformedTerms().get(clause)  + ")");
+               sb.append(")");
+               getContext().getTransformedTerms().put(clause, sb.toString());
+       }
+       
+    private Map<Clause,String> getTransformedTerms() {
+        return getContext().getTransformedTerms();
+    }
+    
+       protected void visitImpl(final AndClause clause) {
+               clause.getFirstClause().accept(this);
+               clause.getSecondClause().accept(this);
+       }
+
+       /**
+        * [EMAIL PROTECTED]
+        */
+       protected void visitImpl(final OrClause clause) {
+               clause.getFirstClause().accept(this);
+               clause.getSecondClause().accept(this);
+       }
+
+       /**
+        * [EMAIL PROTECTED]
+        */
+       protected void visitImpl(final DefaultOperatorClause clause) {
+               clause.getFirstClause().accept(this);
+               clause.getSecondClause().accept(this);
+       }
+
+       /**
+        * [EMAIL PROTECTED]
+        */
+       protected void visitImpl(final NotClause clause) {
+
+               final String childsTerm = clause.getFirstClause().getTerm();
+               if (childsTerm != null && childsTerm.length() > 0) {
+                       clause.getFirstClause().accept(this);
+               }
+       }
+
+       /**
+        * [EMAIL PROTECTED]
+        */
+       protected void visitImpl(final AndNotClause clause) {
+               clause.getFirstClause().accept(this);
+       } 
+}

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

Reply via email to