Author: mickw
Date: 2006-04-10 15:26:12 +0200 (Mon, 10 Apr 2006)
New Revision: 2751

Modified:
   
trunk/src/java/no/schibstedsok/front/searchportal/command/AbstractSearchCommand.java
   
trunk/src/java/no/schibstedsok/front/searchportal/command/StockSearchCommand.java
   
trunk/src/java/no/schibstedsok/front/searchportal/query/parser/AbstractClause.java
   
trunk/src/java/no/schibstedsok/front/searchportal/query/run/RunningQueryImpl.java
   
trunk/src/java/no/schibstedsok/front/searchportal/query/token/AlwaysTrueTokenEvaluator.java
   
trunk/src/java/no/schibstedsok/front/searchportal/query/token/JepTokenEvaluator.java
   
trunk/src/java/no/schibstedsok/front/searchportal/query/token/RegExpTokenEvaluator.java
   
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluator.java
   
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluatorFactoryImpl.java
   
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenPredicate.java
   
trunk/src/java/no/schibstedsok/front/searchportal/query/token/VeryFastTokenEvaluator.java
   
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/PrefixRemoverTransformer.java
   
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/QueryTransformer.java
   
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformer.java
   trunk/src/java/no/schibstedsok/front/searchportal/util/QueryStringHelper.java
   
trunk/src/test/java/no/schibstedsok/front/searchportal/query/parser/TestVisitor.java
   
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformerTest.java
   
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/TermPrefixTransformerTest.java
Log:
SEARCH-457


Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/command/AbstractSearchCommand.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/command/AbstractSearchCommand.java
        2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/command/AbstractSearchCommand.java
        2006-04-10 13:26:12 UTC (rev 2751)
@@ -383,6 +383,9 @@
                             public Query getQuery() {
                                 return query;
                             }
+                            public TokenEvaluatorFactory 
getTokenEvaluatorFactory(){
+                                return 
context.getRunningQuery().getTokenEvaluatorFactory();
+                            }
                         },
                         context);
                 transformer.setContext(qtCxt);

Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/command/StockSearchCommand.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/command/StockSearchCommand.java
   2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/command/StockSearchCommand.java
   2006-04-10 13:26:12 UTC (rev 2751)
@@ -6,10 +6,13 @@
 package no.schibstedsok.front.searchportal.command;
 
 import java.util.Map;
+import 
no.schibstedsok.front.searchportal.query.transform.SynonymQueryTransformer;
 
 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.log4j.Logger;
 
 /**
  *
@@ -17,14 +20,38 @@
  */
 public final class StockSearchCommand extends AbstractSearchCommand {
 
+    private static final Logger LOG = 
Logger.getLogger(StockSearchCommand.class);
+
     public StockSearchCommand(final Context cxt, final Map parameters) {
         super(cxt, parameters);
     }
 
     public SearchResult execute() {
-        SearchResult result = new BasicSearchResult(this);
-        result.addResult(new BasicSearchResultItem());
-        result.setHitCount(1);
+
+        final SearchResult result = new BasicSearchResult(this);
+        final String q = getTransformedQuery();
+        LOG.info("transformed query is " + q);
+
+        // for now we are only interested in complete matches. and the 
SynonymQT only deals with stock-tickers.
+        if( SynonymQueryTransformer.isSynonym( q )){
+
+            final SearchResultItem item = new BasicSearchResultItem();
+            
+
+            final String tickerCode = SynonymQueryTransformer.isTicker(q)
+                    ? q
+                    : SynonymQueryTransformer.getSynonym(q);
+           final String tickerName = 
SynonymQueryTransformer.isTickersFullname(q)
+                    ? q
+                    : SynonymQueryTransformer.getSynonym(q);
+
+            item.addField("tickerCode", tickerCode);
+            item.addField("tickerName", tickerName);
+
+            result.addResult(item);
+            result.setHitCount(1);
+        }
         return result;
     }
+
 }

Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/query/parser/AbstractClause.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/query/parser/AbstractClause.java
  2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/query/parser/AbstractClause.java
  2006-04-10 13:26:12 UTC (rev 2751)
@@ -116,7 +116,7 @@
 
                 if (token.evaluate(predicate2evaluatorFactory)) {
                     final TokenEvaluator evaluator = 
predicate2evaluatorFactory.getEvaluator(token);
-                    if (evaluator.isQueryDependant()) {
+                    if (evaluator.isQueryDependant(token)) {
                         possiblePredicates.add(token);
                         LOG.debug(DEBUG_FOUND_PREDICATE_PREFIX + currTerm + 
DEBUG_FOUND_PREDICATE_POSSIBLE + token);
                     }  else  {

Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/query/run/RunningQueryImpl.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/query/run/RunningQueryImpl.java
   2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/query/run/RunningQueryImpl.java
   2006-04-10 13:26:12 UTC (rev 2751)
@@ -183,18 +183,18 @@
                 final SearchConfiguration sc = searchConfiguration;
                 final SearchCommand.Context searchCmdCxt = ContextWrapper.wrap(
                         SearchCommand.Context.class,
-                            context,
-                            new BaseContext() {
-                                public SearchConfiguration 
getSearchConfiguration() {
-                                    return sc;
-                                }
-                                public RunningQuery getRunningQuery() {
-                                    return RunningQueryImpl.this;
-                                }
-                                public Query getQuery() {
-                                    return queryObj;
-                                }
+                        context,
+                        new BaseContext() {
+                            public SearchConfiguration 
getSearchConfiguration() {
+                                return sc;
                             }
+                            public RunningQuery getRunningQuery() {
+                                return RunningQueryImpl.this;
+                            }
+                            public Query getQuery() {
+                                return queryObj;
+                            }
+                        }
                 );
 
                 final AnalysisRule rule = 
rules.getRule(searchConfiguration.getRule());

Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/AlwaysTrueTokenEvaluator.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/AlwaysTrueTokenEvaluator.java
 2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/AlwaysTrueTokenEvaluator.java
 2006-04-10 13:26:12 UTC (rev 2751)
@@ -28,7 +28,7 @@
         return true;
     }
 
-    public boolean isQueryDependant() {
+    public boolean isQueryDependant(TokenPredicate predicate) {
         return false;
     }
 }

Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/JepTokenEvaluator.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/JepTokenEvaluator.java
        2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/JepTokenEvaluator.java
        2006-04-10 13:26:12 UTC (rev 2751)
@@ -75,7 +75,7 @@
         return term != null || result != null;
     }
 
-    public boolean isQueryDependant() {
+    public boolean isQueryDependant(TokenPredicate predicate) {
         return true;
     }
 

Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/RegExpTokenEvaluator.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/RegExpTokenEvaluator.java
     2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/RegExpTokenEvaluator.java
     2006-04-10 13:26:12 UTC (rev 2751)
@@ -83,7 +83,7 @@
         return false;
     }
 
-    public boolean isQueryDependant() {
+    public boolean isQueryDependant(TokenPredicate predicate) {
         return queryDependant;
     }
 }

Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluator.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluator.java
   2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluator.java
   2006-04-10 13:26:12 UTC (rev 2751)
@@ -23,5 +23,5 @@
      */
     boolean evaluateToken(String token, String term, String query);
 
-    boolean isQueryDependant();
+    boolean isQueryDependant(TokenPredicate predicate);
 }

Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluatorFactoryImpl.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluatorFactoryImpl.java
        2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluatorFactoryImpl.java
        2006-04-10 13:26:12 UTC (rev 2751)
@@ -31,7 +31,7 @@
 
     private static final TokenEvaluator ALWAYS_TRUE_EVALUATOR = new 
AlwaysTrueTokenEvaluator();
 
-    private volatile TokenEvaluator fastEvaluator;
+    private TokenEvaluator fastEvaluator;
     private final JepTokenEvaluator jedEvaluator;
     
     private static final Log LOG = 
LogFactory.getLog(TokenEvaluatorFactoryImpl.class);

Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenPredicate.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenPredicate.java
   2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenPredicate.java
   2006-04-10 13:26:12 UTC (rev 2751)
@@ -98,7 +98,7 @@
     // The types of TokenPredicates that exist
     public enum Type { GENERIC, FAST, REGEX, JEP }
 
-    /** Some WIERD-ARSE behavour to enum.
+    /**
      * Because the enum declarations must come first and they are static,
      *      their constructor when referencing other static members are 
referencing them
      *      before they themselves have been statically initialised.
@@ -107,10 +107,13 @@
      * By wrapping it inside an inner class because all static initialisors of 
the inner class are run first
      *      it ensures FAST_TOKENS will not be null.
      **/
-    private static final class Sets{
+    private static final class Static{
         public static final Set<TokenPredicate> MAGIC_TOKENS = new 
HashSet<TokenPredicate>();
         public static final Set<TokenPredicate> TRIGGER_TOKENS = new 
HashSet<TokenPredicate>();
         public static final Set<TokenPredicate> FAST_TOKENS = new 
HashSet<TokenPredicate>();
+
+        public static final String ERR_FAST_TYPES_MUST_SPECIFY_LISTNAME = 
"Illegal constructor used for Type.FAST";
+        public static final String ERR_FAST_TYPES_ONLY_CONSTRUCTOR = 
"Constructor used only appropriate for Type.FAST";
     }
 
     // instance fields
@@ -133,14 +136,19 @@
         fastListName = null;
         this.type = type;
 
-        if( type == Type.REGEX ){
+        switch(type){
+            case REGEX:
+                if( name().endsWith("_MAGIC")){
+                    Static.MAGIC_TOKENS.add(this);
 
-            if( name().endsWith("_MAGIC")){
-                Sets.MAGIC_TOKENS.add(this);
-
-            }else if( name().endsWith("_TRIGGER")){
-                Sets.TRIGGER_TOKENS.add(this);
-            }
+                }else if( name().endsWith("_TRIGGER")){
+                    Static.TRIGGER_TOKENS.add(this);
+                }
+                break;
+            case FAST:
+                throw new 
IllegalArgumentException(Static.ERR_FAST_TYPES_MUST_SPECIFY_LISTNAME);
+            default:
+                break;
         }
     }
 
@@ -155,8 +163,12 @@
     TokenPredicate(final Type type, final String fastListName) {
         this.fastListName = fastListName;
         this.type = type;
-        if( type == Type.FAST ){
-            Sets.FAST_TOKENS.add(this);
+        switch(type){
+            case FAST:
+                Static.FAST_TOKENS.add(this);
+                break;
+            default:
+                throw new 
IllegalArgumentException(Static.ERR_FAST_TYPES_ONLY_CONSTRUCTOR);
         }
     }
 
@@ -164,10 +176,15 @@
         return type;
     }
 
+    String getFastListName(){
+        return fastListName;
+    }
+
     /** Public method to find the correct FAST TokenPredicate given the 
Token's string.
      */
     public static TokenPredicate valueFor(final String fastListName) {
-        for(TokenPredicate tp : Sets.FAST_TOKENS){
+        
+        for(TokenPredicate tp : Static.FAST_TOKENS){
             if( fastListName.equals(tp.fastListName) ){
                 return tp;
             }
@@ -184,19 +201,19 @@
     /** Utility method to use all FastTokenPredicates in existance.
      */
     public static Set<TokenPredicate> getFastTokenPredicates() {
-        return Collections.unmodifiableSet(Sets.FAST_TOKENS);
+        return Collections.unmodifiableSet(Static.FAST_TOKENS);
     }
 
     /** Utility method to use all MagicTokenPredicates in existance.
      */
     public static Set<TokenPredicate> getMagicTokenPredicates() {
-        return Collections.unmodifiableSet(Sets.MAGIC_TOKENS);
+        return Collections.unmodifiableSet(Static.MAGIC_TOKENS);
     }
 
     /** Utility method to use all TriggerTokenPredicates in existance.
      */
     public static Set<TokenPredicate> getTriggerTokenPredicates() {
-        return Collections.unmodifiableSet(Sets.TRIGGER_TOKENS);
+        return Collections.unmodifiableSet(Static.TRIGGER_TOKENS);
     }
 
     /**

Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/VeryFastTokenEvaluator.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/VeryFastTokenEvaluator.java
   2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/query/token/VeryFastTokenEvaluator.java
   2006-04-10 13:26:12 UTC (rev 2751)
@@ -30,15 +30,17 @@
  * @version $Revision$, $Author$, $Date$
  */
 public final class VeryFastTokenEvaluator implements TokenEvaluator, 
ReportingTokenEvaluator {
-    private static final Logger LOG = 
Logger.getLogger(VeryFastTokenEvaluator.class);
-    private final Map<String, List<TokenMatch>> analysisResult = new 
HashMap<String,List<TokenMatch>>();
 
+    private static final Logger LOG = 
Logger.getLogger(VeryFastTokenEvaluator.class);
+    
     private static final String REAL_TOKEN_PREFIX = "FastQT_";
     private static final String REAL_TOKEN_SUFFIX = "QM";
-    private final static String CGI_PATH = 
"/cgi-bin/xsearch?sources=alone&qtpipeline=lookupword&query=";
+    private static final String EXACT_PREFIX = "exact_";
+    private static final String CGI_PATH = 
"/cgi-bin/xsearch?sources=alone&qtpipeline=lookupword&query=";
     private static final String ERR_FAILED_TO_ENCODE = "Failed to encode query 
string: ";
 
     private final HTTPClient httpClient;
+    private final Map<String, List<TokenMatch>> analysisResult = new 
HashMap<String,List<TokenMatch>>();
 
 
     /**
@@ -114,20 +116,14 @@
             return;
         }
 
-        String token = null;
+        String url = null;
         try {
-            token = URLEncoder.encode(query.replaceAll("\"", ""), "utf-8");
-        } catch (UnsupportedEncodingException ignore) {
-            LOG.warn(ERR_FAILED_TO_ENCODE + query);
-        }
+            final String token = URLEncoder.encode(query.replaceAll("\"", ""), 
"utf-8");
 
-        final String url = CGI_PATH + token;
+            url = CGI_PATH + token;
 
-        try {
-
             final Document doc = httpClient.getXmlDocument("token_evaluator", 
url);
 
-
             NodeList l = doc.getElementsByTagName("QUERYTRANSFORMS");
             final Element e = (Element) l.item(0);
 
@@ -148,9 +144,12 @@
 
                     final String key = name.substring(name.indexOf('_') + 1, 
name.indexOf("QM"));
 
-                    addMatch(REAL_TOKEN_PREFIX + "exact_" + key + 
REAL_TOKEN_SUFFIX, match, query);
+                    addMatch(REAL_TOKEN_PREFIX + EXACT_PREFIX + key + 
REAL_TOKEN_SUFFIX, match, query);
                 }
             }
+
+        } catch (UnsupportedEncodingException ignore) {
+            LOG.warn(ERR_FAILED_TO_ENCODE + query);
         } catch (IOException e1) {
             LOG.error("Analysis failed " + url, e1);
         } catch (SAXException e1) {
@@ -158,8 +157,8 @@
         }
     }
 
-    public boolean isQueryDependant() {
-        return false;
+    public boolean isQueryDependant(TokenPredicate predicate) {
+        return predicate.getFastListName().startsWith(EXACT_PREFIX);
     }
 
     private void addMatch(final String name, final String match, final String 
query) {

Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/PrefixRemoverTransformer.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/PrefixRemoverTransformer.java
     2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/PrefixRemoverTransformer.java
     2006-04-10 13:26:12 UTC (rev 2751)
@@ -49,6 +49,7 @@
     private Set<TokenPredicate> insidePrefixes = new HashSet<TokenPredicate>();
     private StringBuilder prefixBuilder = new StringBuilder();
     private List<LeafClause> leafList = new ArrayList<LeafClause>();
+    private RegExpEvaluatorFactory regExpFactory = null;
     
     protected void visitImpl(final OperationClause clause) {
         clause.getFirstClause().accept(this);
@@ -86,11 +87,7 @@
                 }
                 for(TokenPredicate predicate : insidePrefixes){
 
-                    final RegExpEvaluatorFactory.Context cxt = 
ContextWrapper.wrap(
-                            RegExpEvaluatorFactory.Context.class, 
getContext());
-                    final RegExpEvaluatorFactory factory = 
RegExpEvaluatorFactory.valueOf(cxt);
-
-                    if( factory.getEvaluator(predicate).evaluateToken(null, 
prefixBuilder.toString(), null, true) ){
+                    if( 
regExpFactory.getEvaluator(predicate).evaluateToken(null, 
prefixBuilder.toString(), null, true) ){
                         for(LeafClause c : leafList){
                             getContext().getTransformedTerms().put(c, BLANK);
                         }
@@ -145,4 +142,14 @@
         
         return retValue;
     }
+
+    public void setContext(final QueryTransformer.Context cxt) {
+
+        super.setContext(cxt);
+        
+        final RegExpEvaluatorFactory.Context regExpEvalFactory = 
ContextWrapper.wrap(
+                RegExpEvaluatorFactory.Context.class, cxt);
+
+        regExpFactory = RegExpEvaluatorFactory.valueOf(regExpEvalFactory);
+    }
 }
\ No newline at end of file

Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/QueryTransformer.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/QueryTransformer.java
     2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/QueryTransformer.java
     2006-04-10 13:26:12 UTC (rev 2751)
@@ -10,6 +10,7 @@
 import no.schibstedsok.front.searchportal.query.Clause;
 import no.schibstedsok.front.searchportal.query.QueryContext;
 import no.schibstedsok.front.searchportal.query.Visitor;
+import no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactory;
 import no.schibstedsok.front.searchportal.site.SiteContext;
 
 
@@ -32,6 +33,10 @@
          *
          **/
         Map<Clause,String> getTransformedTerms();
+
+        /** For evaluation acitions on individual (or the whole query) terms.
+         **/
+        TokenEvaluatorFactory getTokenEvaluatorFactory();
     }
 
     void setContext(final Context cxt);

Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformer.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformer.java
      2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformer.java
      2006-04-10 13:26:12 UTC (rev 2751)
@@ -9,6 +9,7 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -21,10 +22,12 @@
 
 import no.schibstedsok.front.searchportal.query.DefaultOperatorClause;
 import no.schibstedsok.front.searchportal.query.LeafClause;
+import no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactory;
 import no.schibstedsok.front.searchportal.query.token.TokenPredicate;
+import no.schibstedsok.front.searchportal.query.token.VeryFastTokenEvaluator;
 import org.apache.log4j.Logger;
 
-/**
+/** XXX This will get largely rewritten when alternation rotation comes into 
play.
  *
  * @author maek
  */
@@ -61,11 +64,17 @@
             REVERSE_SYNONYMS = Collections.unmodifiableMap(reverseSynonyms);
         }
     }
-    
+
+    private static final Collection<TokenPredicate> DEFAULT_PREFIXES = 
Collections.unmodifiableCollection(
+            Arrays.asList(
+                TokenPredicate.STOCKMARKETFIRMS,
+                TokenPredicate.STOCKMARKETTICKERS
+            ));
+
     /** Synonym expansion are only performed for clauses matching the 
predicates
      * contained in predicateNames */
     private Collection<String> predicateNames = new ArrayList<String>();
-    private Collection<TokenPredicate> predicates = null;
+    private Collection<TokenPredicate> customPredicates;
     
     private List<LeafClause> leafs = new ArrayList<LeafClause>();
     private Set<TokenPredicate> matchingPredicates = new 
HashSet<TokenPredicate>();
@@ -73,27 +82,34 @@
     
     private StringBuilder builder = new StringBuilder();
     
-    private boolean fromDefault = false;
-    
-    public void addPredicateName(final String name) {
+    void addPredicateName(final String name) {
         predicateNames.add(name);
     }
     
     protected void visitImpl(final DefaultOperatorClause clause) {
+
+        LOG.trace("visitImpl(" + clause + ")");
+
         for (final TokenPredicate p : getPredicates()) {
             
             if (clause.getKnownPredicates().contains(p)
-            || clause.getPossiblePredicates().contains(p)) {
+                    || clause.getPossiblePredicates().contains(p)) {
+
+                LOG.debug("adding to matchingPredicates " + p);
                 matchingPredicates.add(p);
             }
         }
         
         clause.getFirstClause().accept(this);
         clause.getSecondClause().accept(this);
+
     }
     
     protected void visitImpl(final LeafClause clause) {
-        if (! matchingPredicates.isEmpty() && !expanded.contains(clause)) {
+
+        LOG.trace("visitImpl(" + clause + ")");
+
+        if (!matchingPredicates.isEmpty() && !expanded.contains(clause)) {
             for (final TokenPredicate p : matchingPredicates) {
                 
                 if (matchingPredicates.size() > 0) {
@@ -101,35 +117,49 @@
                 }
                 
                 if (isSynonym(builder.toString() + clause.getTerm())) {
+
+                    LOG.debug("adding to builder " + clause.getTerm());
                     builder.append(clause.getTerm());
                     leafs.add(clause);
                 } else {
-                    if (!leafs.isEmpty()) {
-                        expandSynonym(leafs, getSynonym(builder.toString()));
-                        expanded.addAll(leafs);
-                        leafs.clear();
-                        matchingPredicates.clear();
-                        builder.setLength(0);
-                    }
+//                    if (!leafs.isEmpty()) {
+//
+//                        expandSynonym(leafs, getSynonym(builder.toString()));
+//                        expanded.addAll(leafs);
+//                        leafs.clear();
+//                        matchingPredicates.clear();
+//                        builder.setLength(0);
+//                    }
                 }
             }
         }
         
-        if (clause == getContext().getQuery().getFirstLeafClause()) {
-            for (TokenPredicate predicate : getPredicates()) {
-                if (clause.getPossiblePredicates().contains(predicate)
-                || clause.getKnownPredicates().contains(predicate)) {
-                    if 
(isSynonym(getContext().getTransformedTerms().get(clause))) {
-                        expandSynonym(clause, 
getSynonym(getContext().getTransformedTerms().get(clause)));
-                        expanded.add(clause);
-                        return;
-                    }
+        for (TokenPredicate predicate : getPredicates()) {
+
+            boolean applicable = 
clause.getKnownPredicates().contains(predicate);
+            if( !applicable && 
clause.getPossiblePredicates().contains(predicate) ){
+                // possible predicates depend on placement of terms within the 
query.
+                //  this state can't be assigned to the terms as they are 
immutable and
+                //   re-used across multiple queries at any given time.
+                applicable |= 
predicate.evaluate(getContext().getTokenEvaluatorFactory());
+            }
+
+            if (applicable) {
+
+                if (isSynonym(getContext().getTransformedTerms().get(clause))) 
{
+
+                    LOG.debug("expanding because of " + predicate);
+                    expandSynonym(clause, 
getSynonym(getContext().getTransformedTerms().get(clause)));
+                    expanded.add(clause);
+                    return;
                 }
             }
         }
     }
     
     private void expandSynonym(final List<LeafClause> replace, String synonym) 
{
+
+        LOG.trace("expandSynonym(" + replace + ", " + synonym + ")");
         final LeafClause first = replace.get(0);
         final LeafClause last = replace.get(replace.size() - 1);
         
@@ -142,29 +172,48 @@
     }
     
     private void expandSynonym(final LeafClause replace, String synonym) {
+
+        LOG.trace("expandSynonym(" + replace + ", " + synonym + ")");
         final String originalTerm = 
getContext().getTransformedTerms().get(replace);
         getContext().getTransformedTerms().put(replace, "(" + originalTerm + " 
" + synonym + ")");
     }
     
     private Collection<TokenPredicate> getPredicates() {
+
         synchronized (this) {
-            if (predicates == null) {
-                predicates = new ArrayList<TokenPredicate>();
-                for (final String predicateName : predicateNames) {
-                    predicates.add(TokenPredicate.valueOf(predicateName));
+            if (customPredicates == null && predicateNames != null && 
predicateNames.size() > 0) {
+                final Collection<TokenPredicate> cp = new 
ArrayList<TokenPredicate>();
+                for (String tp : predicateNames) {
+                    cp.add(TokenPredicate.valueOf(tp));
                 }
+                customPredicates = Collections.unmodifiableCollection(cp);
             }
         }
-        return predicates;
+        return predicateNames != null && predicateNames.size() > 0
+                ? customPredicates
+                : DEFAULT_PREFIXES;
     }
-    
-    private boolean isSynonym(String string) {
 
+
+    public static boolean isTicker(final String string){
+
         final String s = string.toLowerCase();
+        return SYNONYMS.containsKey(s);
+    }
+
+    public static boolean isTickersFullname(final String string){
+
+        final String s = string.toLowerCase();
+        return REVERSE_SYNONYMS.containsKey(s);
+    }
+
+    public static boolean isSynonym(final String string) {
+
+        final String s = string.toLowerCase();
         return SYNONYMS.containsKey(s) || REVERSE_SYNONYMS.containsKey(s);
     }
     
-    private String getSynonym(final String string) {
+    public static String getSynonym(final String string) {
 
         final String s = string.toLowerCase();
         return SYNONYMS.containsKey(s)

Modified: 
trunk/src/java/no/schibstedsok/front/searchportal/util/QueryStringHelper.java
===================================================================
--- 
trunk/src/java/no/schibstedsok/front/searchportal/util/QueryStringHelper.java   
    2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/java/no/schibstedsok/front/searchportal/util/QueryStringHelper.java   
    2006-04-10 13:26:12 UTC (rev 2751)
@@ -54,7 +54,7 @@
         } catch (UnsupportedEncodingException e) {
             /* IGNORED */
         }
-        System.out.println("incoming(" + req.getParameter("q") + ") outgoing(" 
+ reqValue + ")");
+        //System.out.println("incoming(" + req.getParameter("q") + ") 
outgoing(" + reqValue + ")");
         return reqValue;
     }
 }

Modified: 
trunk/src/test/java/no/schibstedsok/front/searchportal/query/parser/TestVisitor.java
===================================================================
--- 
trunk/src/test/java/no/schibstedsok/front/searchportal/query/parser/TestVisitor.java
        2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/test/java/no/schibstedsok/front/searchportal/query/parser/TestVisitor.java
        2006-04-10 13:26:12 UTC (rev 2751)
@@ -8,6 +8,7 @@
 import java.util.Properties;
 import javax.xml.parsers.DocumentBuilder;
 import junit.framework.TestCase;
+import 
no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactoryTestContext;
 import no.schibstedsok.front.searchportal.query.AndNotClause;
 import no.schibstedsok.front.searchportal.query.Clause;
 import no.schibstedsok.front.searchportal.query.DefaultOperatorClause;
@@ -206,34 +207,9 @@
 
         LOG.info("Starting testBasicQueryParser with input: " + queryInput);
 
-        final TokenEvaluatorFactory tokenEvaluatorFactory  = new 
TokenEvaluatorFactoryImpl(
-                new TokenEvaluatorFactoryImpl.Context() {
-                    public String getQueryString() {
-                        return queryInput;
-                    }
+        final TokenEvaluatorFactory tokenEvaluatorFactory
+                = new TokenEvaluatorFactoryImpl(new 
TokenEvaluatorFactoryTestContext(queryInput));
 
-                    public Properties getApplicationProperties() {
-                        return 
FileResourcesSearchTabsCreatorTest.valueOf(Site.DEFAULT).getProperties();
-                    }
-
-                    public PropertiesLoader newPropertiesLoader(final String 
resource, final Properties properties) {
-                        return FileResourceLoader.newPropertiesLoader(this, 
resource, properties);
-                    }
-
-                    public XStreamLoader newXStreamLoader(final String 
resource, final XStream xstream) {
-                        return FileResourceLoader.newXStreamLoader(this, 
resource, xstream);
-                    }
-
-                    public DocumentLoader newDocumentLoader(final String 
resource, final DocumentBuilder builder) {
-                        return FileResourceLoader.newDocumentLoader(this, 
resource, builder);
-                    }
-
-                    public Site getSite()  {
-                        return Site.DEFAULT;
-                    }
-
-                });
-
         final QueryParser parser = new QueryParserImpl(new 
AbstractQueryParserContext() {
                 public TokenEvaluatorFactory getTokenEvaluatorFactory() {
                     return tokenEvaluatorFactory;

Modified: 
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformerTest.java
===================================================================
--- 
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformerTest.java
     2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformerTest.java
     2006-04-10 13:26:12 UTC (rev 2751)
@@ -10,12 +10,18 @@
 package no.schibstedsok.front.searchportal.query.transform;
 
 import com.thoughtworks.xstream.XStream;
+
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+
 import javax.xml.parsers.DocumentBuilder;
+
 import junit.framework.TestCase;
+import no.schibstedsok.common.ioc.BaseContext;
+import no.schibstedsok.common.ioc.ContextWrapper;
+
 import 
no.schibstedsok.front.searchportal.configuration.FileResourcesSearchTabsCreatorTest;
 import no.schibstedsok.front.searchportal.configuration.loader.DocumentLoader;
 import 
no.schibstedsok.front.searchportal.configuration.loader.FileResourceLoader;
@@ -37,144 +43,129 @@
 import no.schibstedsok.front.searchportal.query.parser.ParseException;
 import no.schibstedsok.front.searchportal.query.parser.QueryParser;
 import no.schibstedsok.front.searchportal.query.parser.QueryParserImpl;
+import 
no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactoryTestContext;
 import no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactory;
 import 
no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactoryImpl;
+import no.schibstedsok.front.searchportal.query.token.TokenPredicate;
 import no.schibstedsok.front.searchportal.site.Site;
+
 import org.apache.log4j.Logger;
 
 /**
  *
  * @author maek
  */
-public class SynonymQueryTransformerTest extends TestCase {
+public final class SynonymQueryTransformerTest extends 
AbstractTransformerTestCase {
 
     private static final Logger LOG =
             Logger.getLogger(SynonymQueryTransformerTest.class);
 
     public SynonymQueryTransformerTest(final String testName) {
         super(testName);
+        
Logger.getLogger(SynonymQueryTransformer.class).setLevel(org.apache.log4j.Level.TRACE);
+        LOG.setLevel(org.apache.log4j.Level.TRACE);
     }
 
-//    public void testOneWordExact() throws ParseException {
-//        final Query query = parseQuery("sch");
-//        final Map trans = applyTransformer(new SynonymQueryTransformer(), 
query, "EXACT_STOCKMARKETTICKERS");
-//        final QueryBuilder builder = new QueryBuilder(query, trans);
-//
-//        assertEquals("(sch schibsted)", builder.getQueryString());
-//    }
+    public void testOneWordExact() throws ParseException {
 
-//    public void testOneWord() throws ParseException {
-//        final Query query = parseQuery("sch");
-//        final Map trans = applyTransformer(new SynonymQueryTransformer(), 
query, "STOCKMARKETTICKERS");
-//        final QueryBuilder builder = new QueryBuilder(query, trans);
-//
-//        assertEquals("(sch schibsted)", builder.getQueryString());
-//    }
+        final String queryString = "sch";
+        final TokenEvaluatorFactoryImpl.Context tefCxt = new 
TokenEvaluatorFactoryTestContext(queryString);
+        final TokenEvaluatorFactory tef = new 
TokenEvaluatorFactoryImpl(tefCxt);
 
-//    public void testTwoWords() throws ParseException {
-//        final Query query = parseQuery("oslo sch schibsted");
-//        final Map trans = applyTransformer(new SynonymQueryTransformer(), 
query, "STOCKMARKETTICKERS");
-//        final QueryBuilder builder = new QueryBuilder(query, trans);
-//
-//        assertEquals("oslo (sch schibsted) schibsted", 
builder.getQueryString());
-//    }
+        final Query query = parseQuery(tef);
+        final Map<Clause,String> trans = applyTransformer(new 
SynonymQueryTransformer(), query,
+                TokenPredicate.EXACT_STOCKMARKETTICKERS.name(), tefCxt, tef);
 
+        final QueryBuilder builder = new QueryBuilder(query, trans);
+
+        final String result = builder.getQueryString();
+        LOG.debug("testOneWordExact builder gave " + result);
+        assertEquals("(sch schibsted)", result);
+    }
+
+    public void testOneWord() throws ParseException {
+
+        final String queryString = "sch";
+        final TokenEvaluatorFactoryImpl.Context tefCxt = new 
TokenEvaluatorFactoryTestContext(queryString);
+        final TokenEvaluatorFactory tef = new 
TokenEvaluatorFactoryImpl(tefCxt);
+
+        final Query query = parseQuery(tef);
+        final Map<Clause,String> trans = applyTransformer(new 
SynonymQueryTransformer(), query,
+                TokenPredicate.STOCKMARKETTICKERS.name(), tefCxt, tef);
+
+        final QueryBuilder builder = new QueryBuilder(query, trans);
+
+        final String result = builder.getQueryString();
+        LOG.debug("testOneWord builder gave " + result);
+        assertEquals("(sch schibsted)", result);
+    }
+
+    public void testTwoWords() throws ParseException {
+
+        final String queryString = "oslo sch schibsted";
+        final TokenEvaluatorFactoryImpl.Context tefCxt = new 
TokenEvaluatorFactoryTestContext(queryString);
+        final TokenEvaluatorFactory tef = new 
TokenEvaluatorFactoryImpl(tefCxt);
+
+        final Query query = parseQuery(tef);
+        final Map<Clause,String> trans = applyTransformer(new 
SynonymQueryTransformer(), query,
+                TokenPredicate.STOCKMARKETTICKERS.name(), tefCxt, tef);
+
+        final QueryBuilder builder = new QueryBuilder(query, trans);
+
+
+        final String result = builder.getQueryString();
+        LOG.debug("testTwoWords builder gave " + result);
+        assertEquals("(oslo oslo areal) (sch schibsted) schibsted", result);
+    }
+
     public void testTwoWordsExact() throws ParseException {
+
         // Not Exact match. Don't do expansion.
-        final Query query = parseQuery("oslo sch schibsted");
-        final Map trans = applyTransformer(new SynonymQueryTransformer(), 
query, "EXACT_STOCKMARKETTICKERS");
+        final String queryString = "oslo sch schibsted";
+        final TokenEvaluatorFactoryImpl.Context tefCxt = new 
TokenEvaluatorFactoryTestContext(queryString);
+        final TokenEvaluatorFactory tef = new 
TokenEvaluatorFactoryImpl(tefCxt);
+
+        final Query query = parseQuery(tef);
+        final Map<Clause,String> trans = applyTransformer(new 
SynonymQueryTransformer(), query,
+                TokenPredicate.EXACT_STOCKMARKETTICKERS.name(), tefCxt, tef);
+
         final QueryBuilder builder = new QueryBuilder(query, trans);
 
-        assertEquals("oslo sch schibsted", builder.getQueryString());
+
+        final String result = builder.getQueryString();
+        LOG.debug("testTwoWordsExact builder gave " + result);
+        assertEquals("oslo sch schibsted", result);
     }
 
 //    public void testMultiWordOriginalWithOtherTermAtEnd() throws 
ParseException {
-//        final Query query = parseQuery("schibsted asa oslo");
-//        final Map trans = applyTransformer(new SynonymQueryTransformer(), 
query, "COMPANYRANK");
+//
+//        final String queryString = "schibsted asa oslo";
+//        final TokenEvaluatorFactoryImpl.Context tefCxt = new 
TokenEvaluatorFactoryTestContext(queryString);
+//        final TokenEvaluatorFactory tef = new 
TokenEvaluatorFactoryImpl(tefCxt);
+//
+//        final Query query = parseQuery(tef);
+//        final Map<Clause,String> trans = applyTransformer(new 
SynonymQueryTransformer(), query,
+//                TokenPredicate.COMPANYRANK.name(), tefCxt, tef);
+//
 //        final QueryBuilder builder = new QueryBuilder(query, trans);
 //
-//        assertEquals("(schibsted asa schasa) oslo", 
builder.getQueryString());
+//        final String result = builder.getQueryString();
+//        LOG.debug("testMultiWordOriginalWithOtherTermAtEnd builder gave " + 
result);
+//        assertEquals("(schibsted asa schasa) (oslo oslo areal)", result);
 //    }
     
-    private Map applyTransformer(final SynonymQueryTransformer t, final Query 
query, final String predicateName) {
+    private Map<Clause,String> applyTransformer(
+            final SynonymQueryTransformer t,
+            final Query query,
+            final String predicateName,
+            final TokenEvaluatorFactoryImpl.Context tefCxt,
+            final TokenEvaluatorFactory tef) {
         
-        final Map<Clause,String> transformedTerms = new 
LinkedHashMap<Clause,String>();
-        
-        final QueryTransformer.Context qtCxt = new QueryTransformer.Context() {
-            
-            public Map<Clause,String> getTransformedTerms() {
-                return transformedTerms;
-            }
-            public Site getSite() {
-                return Site.DEFAULT;
-            }
-            public Query getQuery() {
-                return query;
-            }
-            public String getTransformedQuery() {
-                return query.getQueryString();
-            }
-            public PropertiesLoader newPropertiesLoader(final String resource, 
final Properties properties) {
-                return FileResourceLoader.newPropertiesLoader(this, resource, 
properties);
-            }
-            
-            public XStreamLoader newXStreamLoader(final String resource, final 
XStream xstream) {
-                return FileResourceLoader.newXStreamLoader(this, resource, 
xstream);
-            }
-            
-            public DocumentLoader newDocumentLoader(final String resource, 
final DocumentBuilder builder) {
-                return FileResourceLoader.newDocumentLoader(this, resource, 
builder);
-            }
-        };
-
         t.addPredicateName(predicateName);
-        t.setContext(qtCxt);
-        
-        final Visitor mapInitialisor = new MapInitialisor(transformedTerms);
-        mapInitialisor.visit(query.getRootClause());
-        t.visit(query.getRootClause());
-        return transformedTerms;
+        return super.applyTransformer(t,query,tefCxt,tef);
     }
+
     
-    private Query parseQuery(final String queryString) throws ParseException {
-        
-        final TokenEvaluatorFactory tokenEvaluatorFactory  = new 
TokenEvaluatorFactoryImpl(
-                new TokenEvaluatorFactoryImpl.Context() {
-            public String getQueryString() {
-                return queryString;
-            }
-            
-            public Properties getApplicationProperties() {
-                return 
FileResourcesSearchTabsCreatorTest.valueOf(Site.DEFAULT).getProperties();
-            }
-            
-            public PropertiesLoader newPropertiesLoader(final String resource, 
final Properties properties) {
-                return FileResourceLoader.newPropertiesLoader(this, resource, 
properties);
-            }
-            
-            public XStreamLoader newXStreamLoader(final String resource, final 
XStream xstream) {
-                return FileResourceLoader.newXStreamLoader(this, resource, 
xstream);
-            }
-            
-            public DocumentLoader newDocumentLoader(final String resource, 
final DocumentBuilder builder) {
-                return FileResourceLoader.newDocumentLoader(this, resource, 
builder);
-            }
-            
-            public Site getSite()  {
-                return Site.DEFAULT;
-            }
-        });
-        
-        final QueryParser parser = new QueryParserImpl(new 
AbstractQueryParserContext() {
-            public TokenEvaluatorFactory getTokenEvaluatorFactory() {
-                return tokenEvaluatorFactory;
-            }
-        });
-        
-        final Query query = parser.getQuery();
-        return query;
-    }
-    
     public static final class QueryBuilder extends AbstractReflectionVisitor {
         private final Query query;
         private final Map map;

Modified: 
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/TermPrefixTransformerTest.java
===================================================================
--- 
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/TermPrefixTransformerTest.java
       2006-04-10 12:30:21 UTC (rev 2750)
+++ 
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/TermPrefixTransformerTest.java
       2006-04-10 13:26:12 UTC (rev 2751)
@@ -9,11 +9,17 @@
 package no.schibstedsok.front.searchportal.query.transform;
 
 import com.thoughtworks.xstream.XStream;
+
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Properties;
+
 import javax.xml.parsers.DocumentBuilder;
+
 import junit.framework.TestCase;
+import no.schibstedsok.common.ioc.BaseContext;
+import no.schibstedsok.common.ioc.ContextWrapper;
+
 import 
no.schibstedsok.front.searchportal.configuration.FileResourcesSearchTabsCreatorTest;
 import no.schibstedsok.front.searchportal.configuration.loader.DocumentLoader;
 import 
no.schibstedsok.front.searchportal.configuration.loader.FileResourceLoader;
@@ -35,16 +41,19 @@
 import no.schibstedsok.front.searchportal.query.parser.ParseException;
 import no.schibstedsok.front.searchportal.query.parser.QueryParser;
 import no.schibstedsok.front.searchportal.query.parser.QueryParserImpl;
+import 
no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactoryTestContext;
 import no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactory;
 import 
no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactoryImpl;
+import 
no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactoryImpl;
 import no.schibstedsok.front.searchportal.site.Site;
+
 import org.apache.log4j.Logger;
 
 /**
  *
  * @author magnuse
  */
-public class TermPrefixTransformerTest extends TestCase {
+public class TermPrefixTransformerTest extends AbstractTransformerTestCase {
 
     private static final String PREFIX_WORD = "wordprefix";
     private static final String PREFIX_INTEGER = "integerprefix";
@@ -64,8 +73,13 @@
     }
 
     public void testTwoSameWordsQuery() throws ParseException {
-        final Query query = parseQuery(QUERY_WORD + " " + QUERY_WORD);
-        final Map trans = applyTransformer(new TermPrefixTransformer(), query);
+
+        final String queryString = QUERY_WORD + " " + QUERY_WORD;
+        final TokenEvaluatorFactoryImpl.Context tefCxt = new 
TokenEvaluatorFactoryTestContext(queryString);
+        final TokenEvaluatorFactory tef = new 
TokenEvaluatorFactoryImpl(tefCxt);
+
+        final Query query = parseQuery(tef);
+        final Map trans = applyTransformer(new TermPrefixTransformer(), query, 
tefCxt, tef);
         final QueryBuilder builder = new QueryBuilder(query, trans);
 
         assertEquals(PREFIX_WORD + ":" + QUERY_WORD + " " +
@@ -73,8 +87,14 @@
     }
 
     public void testTwoWordQuery() throws ParseException {
-        final Query query = parseQuery(QUERY_WORD + " " + QUERY_WORD_2);
-        final Map trans = applyTransformer(new TermPrefixTransformer(), query);
+
+        final String queryString = QUERY_WORD + " " + QUERY_WORD_2;
+
+        final TokenEvaluatorFactoryImpl.Context tefCxt = new 
TokenEvaluatorFactoryTestContext(queryString);
+        final TokenEvaluatorFactory tef = new 
TokenEvaluatorFactoryImpl(tefCxt);
+
+        final Query query = parseQuery(tef);
+        final Map trans = applyTransformer(new TermPrefixTransformer(), query, 
tefCxt, tef);
         final QueryBuilder builder = new QueryBuilder(query, trans);
 
         assertEquals(PREFIX_WORD + ":" + QUERY_WORD + " " +
@@ -83,8 +103,13 @@
     }
 
     public void testPhoneNumber() throws ParseException {
-        final Query query = parseQuery(QUERY_PHONE_NUMBER);
-        final Map trans = applyTransformer(new TermPrefixTransformer(), query);
+
+        final String queryString = QUERY_PHONE_NUMBER;
+        final TokenEvaluatorFactoryImpl.Context tefCxt = new 
TokenEvaluatorFactoryTestContext(queryString);
+        final TokenEvaluatorFactory tef = new 
TokenEvaluatorFactoryImpl(tefCxt);
+
+        final Query query = parseQuery(tef);
+        final Map trans = applyTransformer(new TermPrefixTransformer(), query, 
tefCxt, tef);
         final QueryBuilder builder = new QueryBuilder(query, trans);
 
         assertEquals(PREFIX_INTEGER + ":" + QUERY_PHONE_NUMBER,
@@ -92,16 +117,26 @@
     }
 
     public void testPhoneNumberSpaces() throws ParseException {
-        final Query query = parseQuery(QUERY_PHONE_NUMBER_SPACES);
-        final Map trans = applyTransformer(new TermPrefixTransformer(), query);
+
+        final String queryString = QUERY_PHONE_NUMBER_SPACES;
+        final TokenEvaluatorFactoryImpl.Context tefCxt = new 
TokenEvaluatorFactoryTestContext(queryString);
+        final TokenEvaluatorFactory tef = new 
TokenEvaluatorFactoryImpl(tefCxt);
+
+        final Query query = parseQuery(tef);
+        final Map trans = applyTransformer(new TermPrefixTransformer(), query, 
tefCxt, tef);
         final QueryBuilder builder = new QueryBuilder(query, trans);
 
         assertEquals(PREFIX_INTEGER + ":" + QUERY_PHONE_NUMBER,
                 builder.getQueryString());
     }
     public void testOrgNr() throws ParseException {
-        final Query query = parseQuery(QUERY_ORG_NR);
-        final Map trans = applyTransformer(new TermPrefixTransformer(), query);
+
+        final String queryString = QUERY_ORG_NR;
+        final TokenEvaluatorFactoryImpl.Context tefCxt = new 
TokenEvaluatorFactoryTestContext(queryString);
+        final TokenEvaluatorFactory tef = new 
TokenEvaluatorFactoryImpl(tefCxt);
+
+        final Query query = parseQuery(tef);
+        final Map trans = applyTransformer(new TermPrefixTransformer(), query, 
tefCxt, tef);
         final QueryBuilder builder = new QueryBuilder(query, trans);
 
         assertEquals(PREFIX_INTEGER + ":" + QUERY_ORG_NR,
@@ -109,95 +144,31 @@
     }
 
     public void testInteger() throws ParseException {
-        final Query query = parseQuery(QUERY_INTEGER);
-        final Map trans = applyTransformer(new TermPrefixTransformer(), query);
+
+        final String queryString = QUERY_INTEGER;
+        final TokenEvaluatorFactoryImpl.Context tefCxt = new 
TokenEvaluatorFactoryTestContext(queryString);
+        final TokenEvaluatorFactory tef = new 
TokenEvaluatorFactoryImpl(tefCxt);
+
+        final Query query = parseQuery(tef);
+        final Map trans = applyTransformer(new TermPrefixTransformer(), query, 
tefCxt, tef);
         final QueryBuilder builder = new QueryBuilder(query, trans);
 
         assertEquals(PREFIX_INTEGER + ":" + QUERY_INTEGER,
                 builder.getQueryString());
     }
 
+    protected Map<Clause, String> applyTransformer(
+            final TermPrefixTransformer t,
+            final Query query,
+            final TokenEvaluatorFactoryImpl.Context tefCxt,
+            final TokenEvaluatorFactory tef) {
 
-    private Map applyTransformer(final TermPrefixTransformer t, final Query 
query) {
-
-        final Map<Clause,String> transformedTerms = new 
LinkedHashMap<Clause,String>();
-
-        final QueryTransformer.Context qtCxt = new QueryTransformer.Context() {
-
-            public Map<Clause,String> getTransformedTerms() {
-                return transformedTerms;
-            }
-            public Site getSite() {
-                return Site.DEFAULT;
-            }
-            public Query getQuery() {
-                return query;
-            }
-            public String getTransformedQuery() {
-                return query.getQueryString();
-            }
-            public PropertiesLoader newPropertiesLoader(final String resource, 
final Properties properties) {
-                return FileResourceLoader.newPropertiesLoader(this, resource, 
properties);
-            }
-
-            public XStreamLoader newXStreamLoader(final String resource, final 
XStream xstream) {
-                return FileResourceLoader.newXStreamLoader(this, resource, 
xstream);
-            }
-
-            public DocumentLoader newDocumentLoader(final String resource, 
final DocumentBuilder builder) {
-                return FileResourceLoader.newDocumentLoader(this, resource, 
builder);
-            }
-        };
-
         t.setPrefix(PREFIX_WORD);
         t.setNumberPrefix(PREFIX_INTEGER);
-        t.setContext(qtCxt);
-
-        final Visitor mapInitialisor = new MapInitialisor(transformedTerms);
-        mapInitialisor.visit(query.getRootClause());
-        t.visit(query.getRootClause());
-        return transformedTerms;
+        return super.applyTransformer(t, query, tefCxt, tef);
     }
 
-    private Query parseQuery(final String queryString) throws ParseException {
 
-        final TokenEvaluatorFactory tokenEvaluatorFactory  = new 
TokenEvaluatorFactoryImpl(
-                new TokenEvaluatorFactoryImpl.Context() {
-            public String getQueryString() {
-                return queryString;
-            }
-
-            public Properties getApplicationProperties() {
-                return 
FileResourcesSearchTabsCreatorTest.valueOf(Site.DEFAULT).getProperties();
-            }
-
-            public PropertiesLoader newPropertiesLoader(final String resource, 
final Properties properties) {
-                return FileResourceLoader.newPropertiesLoader(this, resource, 
properties);
-            }
-
-            public XStreamLoader newXStreamLoader(final String resource, final 
XStream xstream) {
-                return FileResourceLoader.newXStreamLoader(this, resource, 
xstream);
-            }
-
-            public DocumentLoader newDocumentLoader(final String resource, 
final DocumentBuilder builder) {
-                return FileResourceLoader.newDocumentLoader(this, resource, 
builder);
-            }
-
-            public Site getSite()  {
-                return Site.DEFAULT;
-            }
-        });
-
-        final QueryParser parser = new QueryParserImpl(new 
AbstractQueryParserContext() {
-            public TokenEvaluatorFactory getTokenEvaluatorFactory() {
-                return tokenEvaluatorFactory;
-            }
-        });
-
-        final Query query = parser.getQuery();
-        return query;
-    }
-
     public static final class QueryBuilder extends AbstractReflectionVisitor {
         private final Query query;
         private final Map map;

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

Reply via email to