Author: gttersen
Date: 2007-04-18 20:59:52 +0200 (Wed, 18 Apr 2007)
New Revision: 4831

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/ClusteringESPFastCommand.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/ClusteringESPFastConfiguration.java
   
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformerConfig.java
   
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformerConfig.java
   
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
   
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformer.java
Log:
Changes for NewsAggregator

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-04-17 21:04:22 UTC (rev 4830)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
       2007-04-18 18:59:52 UTC (rev 4831)
@@ -799,6 +799,8 @@
                     fillBeanProperty(cefc, inherit, "clusterField", 
ParseType.String, commandE, "cluster");
                     fillBeanProperty(cefc, inherit, "clusterMaxFetch", 
ParseType.Int, commandE, "10");
                     fillBeanProperty(cefc, inherit, "nestedResultsField", 
ParseType.String, commandE, "entries");
+                    fillBeanProperty(cefc, inherit, "userSortByField", 
ParseType.String, commandE, "publishedtime");
+                    fillBeanProperty(cefc, inherit, "userSortByParameter", 
ParseType.String, commandE, "sortBy");
                 }
 
                 if (sc instanceof NewsAggregatorSearchConfiguration) {

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-04-17 21:04:22 UTC (rev 4830)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AbstractSearchCommand.java
   2007-04-18 18:59:52 UTC (rev 4831)
@@ -101,7 +101,7 @@
     // Constructors --------------------------------------------------
 
     /**
-     * @param cxt        The context to execute in.
+     * @param cxt The context to execute in.
      */
     public AbstractSearchCommand(final SearchCommand.Context cxt) {
 
@@ -121,7 +121,7 @@
         // initialise transformed terms
         final Visitor mapInitialisor = new MapInitialisor(transformedTerms);
         mapInitialisor.visit(root);
-        untransformedQuery =  getQueryRepresentation(query);
+        untransformedQuery = getQueryRepresentation(query);
 
         // create additional filters
         final FilterVisitor additionalFilterVisitor = new FilterVisitor();
@@ -134,8 +134,10 @@
     // Public --------------------------------------------------------
 
 
-    /** TODO comment me. 
-     * @return 
+    /**
+     * TODO comment me.
+     *
+     * @return
      */
     public abstract SearchResult execute();
 
@@ -261,21 +263,27 @@
 
     private final StringBuilder sb = new StringBuilder();
 
-    /** TODO comment me. *
+    /**
+     * TODO comment me. *
+     *
      * @param clause
      */
     protected void visitImpl(final LeafClause clause) {
         appendToQueryRepresentation(getTransformedTerm(clause));
     }
 
-    /** TODO comment me. *
+    /**
+     * TODO comment me. *
+     *
      * @param clause
      */
     protected void visitImpl(final OperationClause clause) {
         clause.getFirstClause().accept(this);
     }
 
-    /** TODO comment me. *
+    /**
+     * TODO comment me. *
+     *
      * @param clause
      */
     protected void visitImpl(final AndClause clause) {
@@ -284,7 +292,9 @@
         clause.getSecondClause().accept(this);
     }
 
-    /** TODO comment me. *
+    /**
+     * TODO comment me. *
+     *
      * @param clause
      */
     protected void visitImpl(final OrClause clause) {
@@ -293,7 +303,9 @@
         clause.getSecondClause().accept(this);
     }
 
-    /** TODO comment me. *
+    /**
+     * TODO comment me. *
+     *
      * @param clause
      */
     protected void visitImpl(final DefaultOperatorClause clause) {
@@ -302,7 +314,9 @@
         clause.getSecondClause().accept(this);
     }
 
-    /** TODO comment me. *
+    /**
+     * TODO comment me. *
+     *
      * @param clause
      */
     protected void visitImpl(final NotClause clause) {
@@ -313,7 +327,9 @@
         }
     }
 
-    /** TODO comment me. *
+    /**
+     * TODO comment me. *
+     *
      * @param clause
      */
     protected void visitImpl(final AndNotClause clause) {
@@ -325,22 +341,23 @@
     }
 
     /**
-     *
      * @param visitor
      * @param clause
      */
-    protected void visitXorClause(final Visitor visitor, final XorClause 
clause){
+    protected void visitXorClause(final Visitor visitor, final XorClause 
clause) {
 
         // determine which branch in the query-tree we want to use.
         //  Both branches to a XorClause should never be used.
-        switch(clause.getHint()){
-        default:
-            clause.getFirstClause().accept(visitor);
-            break;
+        switch (clause.getHint()) {
+            default:
+                clause.getFirstClause().accept(visitor);
+                break;
         }
     }
 
-    /** TODO comment me. *
+    /**
+     * TODO comment me. *
+     *
      * @param clause
      */
     protected final void visitImpl(final XorClause clause) {
@@ -362,10 +379,12 @@
         return clause.getField() + "\\:" + clause.getTerm();
     }
 
-    /** TODO comment me.
+    /**
+     * TODO comment me.
+     *
      * @return
      */
-    protected final void performQueryTransformation(){
+    protected final void performQueryTransformation() {
 
         applyQueryTransformers(
                 getQuery(),
@@ -375,11 +394,10 @@
 
 
     /**
-     *
      * @param queryToUse
      * @return
      */
-    protected final SearchResult performExecution(final Query queryToUse){
+    protected final SearchResult performExecution(final Query queryToUse) {
 
         final StopWatch watch = new StopWatch();
         watch.start();
@@ -401,6 +419,7 @@
             executeQuery |= null != parameters.get("c") && 
parameters.get("c").equals("na") && getTransformedQuery().trim().length() > 0;
             executeQuery |= null != parameters.get("c") && 
parameters.get("c").equals("nc") && getTransformedQuery().trim().length() > 0;
             executeQuery |= null != parameters.get("c") && 
parameters.get("c").equals("nm") && getTransformedQuery().trim().length() > 0;
+            executeQuery |= this instanceof NewsMyNewsSearchCommand;
 
             executeQuery |= null != filter && filter.length() > 0;
             LOG.info("executeQuery==" + executeQuery
@@ -531,7 +550,9 @@
     // <-- Query Representation state methods (useful while the inbuilt 
visitor is in operation)
     //  -    TODO enscapsulated this state in a separate inner class.
 
-    /** TODO comment me. **/
+    /**
+     * TODO comment me. *
+     */
     protected synchronized String getQueryRepresentation(final Query query) {
 
         final Clause root = query.getRootClause();
@@ -554,14 +575,18 @@
         sb.insert(offset, addition);
     }
 
-    /** TODO comment me. **/
+    /**
+     * TODO comment me. *
+     */
     protected final int getQueryRepresentationLength() {
         return sb.length();
     }
 
     // Query Representation state methods -->
 
-    /** TODO comment me. **/
+    /**
+     * TODO comment me. *
+     */
     protected final String getTransformedTerm(final Clause clause) {
         final String transformedTerm = transformedTerms.get(clause);
         return escapeTerm(transformedTerm != null ? transformedTerm : 
clause.getTerm());
@@ -605,25 +630,28 @@
 
     /**
      * Use this always instead of datamodel.getQuery().getQuery()
-     *  because the command could be running off a different query string.
+     * because the command could be running off a different query string.
+     *
      * @return
      */
-    protected Query getQuery(){
+    protected Query getQuery() {
 
         return query;
     }
 
     /**
      * Use this always instead of context.getTokenEvaluationEngine()
-     *  because the command could be running off a different query string.
+     * because the command could be running off a different query string.
+     *
      * @return
      */
-    protected TokenEvaluationEngine getEngine(){
+    protected TokenEvaluationEngine getEngine() {
 
         return engine;
     }
 
-    /** XXX Very expensive method to call!
+    /**
+     * XXX Very expensive method to call!
      *
      * @param queryString
      * @return
@@ -711,7 +739,6 @@
     }
 
     /**
-     *
      * @param msg
      */
     protected final void statisticsInfo(final String msg) {
@@ -724,7 +751,6 @@
     }
 
     /**
-     *
      * @return
      */
     protected SesamSyntaxQueryBuilder newSesamSyntaxQueryBuilder() {
@@ -733,7 +759,7 @@
 
     // Private -------------------------------------------------------
 
-    private void initialiseQuery(){
+    private void initialiseQuery() {
 
         // use the query or something search-command specific
         final String queryParameter = 
getSearchConfiguration().getQueryParameter();
@@ -747,7 +773,7 @@
             query = recon.getQuery();
             engine = recon.getEngine();
 
-        }  else  {
+        } else {
 
             query = datamodel.getQuery().getQuery();
             engine = context.getTokenEvaluationEngine();
@@ -1064,12 +1090,12 @@
          */
         protected void visitImpl(final XorClause clause) {
 
-            switch(clause.getHint()){
-            case FULLNAME_ON_LEFT:
-                clause.getSecondClause().accept(this);
-                break;
-            default:            
-                AbstractSearchCommand.this.visitXorClause(this, clause);
+            switch (clause.getHint()) {
+                case FULLNAME_ON_LEFT:
+                    clause.getSecondClause().accept(this);
+                    break;
+                default:
+                    AbstractSearchCommand.this.visitXorClause(this, clause);
             }
         }
     }
@@ -1087,7 +1113,6 @@
         }
 
         /**
-         *
          * @return
          */
         public Query getQuery() {
@@ -1095,7 +1120,6 @@
         }
 
         /**
-         *
          * @return
          */
         public TokenEvaluationEngine getEngine() {

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/ClusteringESPFastCommand.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/ClusteringESPFastCommand.java
        2007-04-17 21:04:22 UTC (rev 4830)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/ClusteringESPFastCommand.java
        2007-04-18 18:59:52 UTC (rev 4831)
@@ -35,6 +35,13 @@
      */
     protected void modifyQuery(IQuery query) {
         final ClusteringESPFastConfiguration config = getSearchConfiguration();
+
+        // Can not use the default sort functionality since it hardcodes field 
name
+        final StringDataObject sortBy = 
datamodel.getParameters().getValue(config.getUserSortByParameter());
+        if (sortBy != null) {
+            query.setParameter(BaseParameter.SORT_BY, sortBy.getString());
+        }
+
         final StringDataObject clusterId = 
datamodel.getParameters().getValue(config.getClusterIdParameter());
         if (clusterId == null) {
             LOG.debug("--- Modifying query. ---");

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
     2007-04-17 21:04:22 UTC (rev 4830)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
     2007-04-18 18:59:52 UTC (rev 4831)
@@ -121,7 +121,11 @@
     private SearchResult getPageResult(NewsAggregatorSearchConfiguration 
config, String xmlFile) {
         final NewsAggregatorXmlParser newsAggregatorXmlParser = new 
NewsAggregatorXmlParser();
         try {
-            SearchResult searchResult = 
newsAggregatorXmlParser.parseFullPage(config, getInputStream(config, xmlFile), 
this);
+            int offset = 0;
+            if (datamodel.getJunkYard().getValue("offset") != null) {
+                offset = Integer.parseInt((String) 
datamodel.getJunkYard().getValue("offset"));
+            }
+            SearchResult searchResult = 
newsAggregatorXmlParser.parseFullPage(config, offset, getInputStream(config, 
xmlFile), this);
             if (searchResult != null && searchResult.getHitCount() > 0) {
                 return searchResult;
             }
@@ -194,14 +198,14 @@
             }
         }
 
-        public FastSearchResult 
parseFullPage(NewsAggregatorSearchConfiguration config, InputStream 
inputStream, SearchCommand searchCommand) throws JDOMException, IOException {
+        public FastSearchResult 
parseFullPage(NewsAggregatorSearchConfiguration config, int offset, InputStream 
inputStream, SearchCommand searchCommand) throws JDOMException, IOException {
             try {
 
                 final FastSearchResult searchResult = new 
FastSearchResult(searchCommand);
                 final Document doc = getDocument(inputStream);
                 final Element root = doc.getRootElement();
 
-                handleClusters(config, root.getChildren(ELEMENT_CLUSTER), 
searchResult, searchCommand);
+                handleClusters(config, offset, 
root.getChildren(ELEMENT_CLUSTER), searchResult, searchCommand);
                 handleRelated(config, root.getChild(ELEMENT_RELATED), 
searchResult);
                 handleGeoNav(root.getChild(ELEMENT_GEONAVIGATION), 
searchResult);
                 return searchResult;
@@ -243,9 +247,11 @@
             }
         }
 
-        private void handleClusters(NewsAggregatorSearchConfiguration config, 
List<Element> clusters, SearchResult searchResult, SearchCommand searchCommand) 
{
+        private void handleClusters(NewsAggregatorSearchConfiguration config, 
int offset, List<Element> clusters, SearchResult searchResult, SearchCommand 
searchCommand) {
             int hitCount = 0;
-            for (Element cluster : clusters) {
+            int maxOffset = offset + config.getResultsToReturn();
+            for (int i = offset; i < clusters.size() && i < maxOffset; i++) {
+                Element cluster = clusters.get(i);
                 hitCount += handleCluster(config, cluster, searchCommand, 
searchResult);
             }
             searchResult.setHitCount(hitCount);

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/ClusteringESPFastConfiguration.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/ClusteringESPFastConfiguration.java
   2007-04-17 21:04:22 UTC (rev 4830)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/config/ClusteringESPFastConfiguration.java
   2007-04-18 18:59:52 UTC (rev 4831)
@@ -7,6 +7,7 @@
     private String clusterField;
     private String clusterMaxFetch;
     private String nestedResultsField;
+    private String userSortByParameter;
 
     public ClusteringESPFastConfiguration(SearchConfiguration asc) {
         super(asc);
@@ -17,9 +18,18 @@
             clusterField = cefcc.getClusterField();
             clusterMaxFetch = cefcc.getClusterMaxFetch();
             nestedResultsField = cefcc.getNestedResultsField();
+            userSortByParameter = cefcc.getUserSortByParameter();
         }
     }
 
+    public String getUserSortByParameter() {
+        return userSortByParameter;
+    }
+
+    public void setUserSortByParameter(String userSortByParameter) {
+        this.userSortByParameter = userSortByParameter;
+    }
+
     public String getNestedResultsField() {
         return nestedResultsField;
     }

Modified: 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformerConfig.java
===================================================================
--- 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformerConfig.java
     2007-04-17 21:04:22 UTC (rev 4830)
+++ 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformerConfig.java
     2007-04-18 18:59:52 UTC (rev 4831)
@@ -27,13 +27,16 @@
     private static final String PREFIX = "prefix";
     private static final String POSTFIX = "postfix";
     private static final String TYPE_NAME = "name";
+    private static final String DEFAULT_TYPE = "default-type";
 
     private static final String DEFAULT_CONVERT_ELEMENT = "default-convert";
     private String queryType;
     private String queryParameter;
     private String typeParameter;
+    private String defaultType;
     private Map<String, String[]> typeConversions;
 
+
     /**
      * @return
      */
@@ -53,12 +56,22 @@
         return typeConversions;
     }
 
+    public String getDefaultType() {
+        return defaultType;
+    }
+
     @Override
     public NewsCaseQueryTransformerConfig readQueryTransformer(final Element 
element) {
         Logger log = Logger.getLogger(NewsCaseQueryTransformerConfig.class);
         queryType = element.getAttribute(QUERY_TYPE);
-        queryParameter = element.getAttribute(QUERY_PARAMETER);
+        if (element.getAttribute(QUERY_PARAMETER) != null && 
element.getAttribute(QUERY_PARAMETER).length() > 0) {
+            queryParameter = element.getAttribute(QUERY_PARAMETER);
+        }
         typeParameter = element.getAttribute(TYPE_PARAMETER);
+        final String optionalParameter = element.getAttribute(DEFAULT_TYPE);
+        if (optionalParameter != null && optionalParameter.length() > 0) {
+            defaultType = optionalParameter;
+        }
         NodeList convertNodeList = 
element.getElementsByTagName(DEFAULT_CONVERT_ELEMENT);
         if (convertNodeList.getLength() > 0) {
             typeConversions = new HashMap<String, String[]>();

Modified: 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformerConfig.java
===================================================================
--- 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformerConfig.java
   2007-04-17 21:04:22 UTC (rev 4830)
+++ 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformerConfig.java
   2007-04-18 18:59:52 UTC (rev 4831)
@@ -10,9 +10,10 @@
     private static final String TYPE = "type";
     private static final String FILTER_FIELD = "filter-field";
     private static final String POSITION = "position";
+    private static final String QUERY_PARAMETER = "query-parameter";
     private int position = -1;
+    private String queryParameter;
 
-
     public String getFilterField() {
         return filterField;
     }
@@ -37,10 +38,17 @@
         this.position = position;
     }
 
+    public String getQueryParameter() {
+        return queryParameter;
+    }
+
     @Override
     public NewsMyNewsQueryTransformerConfig readQueryTransformer(final Element 
element) {
-        filterField = element.getAttribute(FILTER_FIELD);
         type = element.getAttribute(TYPE);
+        queryParameter = element.getAttribute(QUERY_PARAMETER);
+        if (element.getAttribute(FILTER_FIELD) != null && 
element.getAttribute(FILTER_FIELD).length() > 0) {
+            filterField = element.getAttribute(FILTER_FIELD);
+        }
         if (element.getAttribute(POSITION) != null && 
element.getAttribute(POSITION).length() > 0) {
             position = Integer.parseInt(element.getAttribute(POSITION));
         }

Modified: 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
===================================================================
--- 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
  2007-04-17 21:04:22 UTC (rev 4830)
+++ 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
  2007-04-18 18:59:52 UTC (rev 4831)
@@ -36,26 +36,43 @@
      */
     public void visitImpl(final Clause clause) {
         
dataAccess.setProperties(getContext().getDataModel().getSite().getSiteConfiguration().getProperties());
-        String queryString = (String) 
getContext().getDataModel().getJunkYard().getValue(config.getQueryParameter());
+        String queryString;
+        if (config.getQueryParameter() == null) {
+            queryString = getTransformedTermsQuery();
+        } else {
+            queryString = (String) 
getContext().getDataModel().getJunkYard().getValue(config.getQueryParameter());
+        }
         LOG.debug("Original query is: '" + queryString + "'");
-        String transformedQuery = dataAccess.getQuery(queryString, 
config.getQueryType());
-        if (transformedQuery == null) {
-            transformedQuery = defaultTransform(queryString);
+        if (queryString != null && queryString.length() > 0) {
+            String transformedQuery = dataAccess.getQuery(queryString, 
config.getQueryType());
+            if (transformedQuery == null) {
+                transformedQuery = defaultTransform(queryString);
+            }
+            for (Clause keyClause : 
getContext().getTransformedTerms().keySet()) {
+                getContext().getTransformedTerms().put(keyClause, "");
+            }
+            LOG.debug("New query is: '" + transformedQuery + "'");
+            if (transformedQuery.length() > 0) {
+                
getContext().getDataModel().getJunkYard().setValue(config.getQueryType(), 
transformedQuery);
+                
getContext().getTransformedTerms().put(getContext().getQuery().getFirstLeafClause(),
 transformedQuery);
+            }
         }
+    }
+
+    private String getTransformedTermsQuery() {
+        StringBuilder query = new StringBuilder();
         for (Clause keyClause : getContext().getTransformedTerms().keySet()) {
-            getContext().getTransformedTerms().put(keyClause, "");
+            query.append(getContext().getTransformedTerms().get(keyClause));
         }
-        LOG.debug("New query is: '" + transformedQuery + "'");
-        if (transformedQuery.length() > 0) {
-            
getContext().getDataModel().getJunkYard().setValue(config.getQueryType(), 
transformedQuery);
-            
getContext().getTransformedTerms().put(getContext().getQuery().getFirstLeafClause(),
 transformedQuery);
-        }
-
+        return query.toString();
     }
 
     private String defaultTransform(String queryString) {
         if (config.getTypeConversions() != null) {
             String type = (String) 
getContext().getDataModel().getJunkYard().getValue(config.getTypeParameter());
+            if (type == null) {
+                type = config.getDefaultType();
+            }
             if (type != null) {
                 String[] conversion = config.getTypeConversions().get(type);
                 if (conversion != null) {

Modified: 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformer.java
===================================================================
--- 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformer.java
        2007-04-17 21:04:22 UTC (rev 4830)
+++ 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformer.java
        2007-04-18 18:59:52 UTC (rev 4831)
@@ -26,14 +26,14 @@
     }
 
     public void visitImpl(final Clause clause) {
-        String myNews = getContext().getQuery().getQueryString();
+        String myNews = (String) 
getContext().getDataModel().getJunkYard().getValue(config.getQueryParameter());
         LOG.debug("Transforming query according to query = " + myNews);
         final String transformedQuery = transformQuery(myNews);
         if (transformedQuery != null) {
+            LOG.debug("New query is: '" + transformedQuery + "'");
             for (Clause keyClause : 
getContext().getTransformedTerms().keySet()) {
                 getContext().getTransformedTerms().put(keyClause, "");
             }
-            LOG.debug("New query is: '" + transformedQuery + "'");
             if (transformedQuery.length() > 0) {
                 
getContext().getTransformedTerms().put(getContext().getQuery().getFirstLeafClause(),
 transformedQuery);
             }
@@ -42,35 +42,40 @@
 
     private String transformQuery(String myNews) {
         if (myNews != null && myNews.length() > 0) {
-            StringBuilder newQuery = new StringBuilder();
-            Matcher matcher = queryPattern.matcher(myNews);
+            final Matcher matcher = queryPattern.matcher(myNews);
             if (config.getPosition() == -1) {
+                LOG.debug("No position. Appending all matches.");
+                final StringBuilder newQuery = new StringBuilder();
                 while (matcher.find()) {
                     if (matcher.group(2).equals(config.getType())) {
                         if (newQuery.length() == 0) {
-                            
newQuery.append("filter(").append(config.getFilterField()).append(":or(");
+                            if (config.getFilterField() != null) {
+                                
newQuery.append("filter(").append(config.getFilterField()).append(":or(");
+                            }
                         } else {
                             newQuery.append(',');
                         }
                         
newQuery.append('\"').append(matcher.group(1)).append('\"');
                     }
                 }
+                if (newQuery.length() > 0 && config.getFilterField() != null) {
+                    newQuery.append("))");
+                }
+                return newQuery.toString();
             } else {
+                LOG.debug("Position is: " + config.getPosition());
                 int curPos = 0;
                 while (matcher.find() && curPos < config.getPosition()) {
                     // Just searching for the correct match.
                     curPos++;
                 }
-                if (matcher.group(2).equals(config.getType()) && 
matcher.groupCount() > 0) {
-                    
newQuery.append("filter(").append(config.getFilterField()).append('(').append('\"').append(matcher.group(1)).append('\"');
+                LOG.debug("Group at pos: " + config.getPosition() + " is " + 
matcher.group(0) + ", looking for " + config.getType());
+                if (matcher.groupCount() > 0 && 
matcher.group(2).equals(config.getType())) {
+                    return matcher.group(1);
                 } else {
                     return "";
                 }
             }
-            if (newQuery.length() > 0) {
-                newQuery.append("))");
-                return newQuery.toString();
-            }
         }
         return "";
     }

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

Reply via email to