Author: michiel
Date: 2010-03-19 18:55:45 +0100 (Fri, 19 Mar 2010)
New Revision: 41543

Added:
   mmbase/trunk/core/src/main/java/org/mmbase/storage/search/QueryContext.java
Modified:
   mmbase/trunk/core/src/main/java/org/mmbase/storage/search/ClusterQueries.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/legacy/ConstraintParser.java
Log:
to fix   MMB-1936, factoring out core dependencies of ConstraintParser

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/ClusterQueries.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/ClusterQueries.java   
    2010-03-19 15:55:44 UTC (rev 41542)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/ClusterQueries.java   
    2010-03-19 17:55:45 UTC (rev 41543)
@@ -18,11 +18,10 @@
 import org.mmbase.util.logging.*;
 
 /**
- * This g
  *
  * @author michiel
  * @author Rob van Maris (ClusterBuilder)
- * @version $Id: $
+ * @version $Id$
  */
 public abstract class ClusterQueries {
 
@@ -490,6 +489,8 @@
     // package visibility!
     public void addSortOrders(BasicSearchQuery query, List<String> fieldNames, 
List<String> directions, Map<String, BasicStepField> fieldsByAlias) {
 
+        final QueryContext queryContext = 
org.mmbase.module.core.CoreQueryContext.INSTANCE;
+
         // Test if fieldnames are specified.
         if (fieldNames == null || fieldNames.size() == 0) {
             return;
@@ -509,7 +510,7 @@
             StepField field= fieldsByAlias.get(fieldName);
             if (field == null) {
                 // Field has not been added.
-                field= ConstraintParser.getField(fieldName, query.getSteps());
+                field = ConstraintParser.getField(queryContext, fieldName, 
query.getSteps());
             }
             if (field == null) {
                 throw new IllegalArgumentException("Invalid fieldname: \"" + 
fieldName + "\"");


Property changes on: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/ClusterQueries.java
___________________________________________________________________
Name: svn:keywords
   + Id

Added: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/QueryContext.java
===================================================================
--- mmbase/trunk/core/src/main/java/org/mmbase/storage/search/QueryContext.java 
                        (rev 0)
+++ mmbase/trunk/core/src/main/java/org/mmbase/storage/search/QueryContext.java 
2010-03-19 17:55:45 UTC (rev 41543)
@@ -0,0 +1,45 @@
+/*
+
+This software is OSI Certified Open Source Software.
+OSI Certified is a certification mark of the Open Source Initiative.
+
+The license (Mozilla version 1.0) can be read at the MMBase site.
+See http://www.MMBase.org/license
+
+*/
+package org.mmbase.storage.search;
+
+import java.util.*;
+import org.mmbase.bridge.*;
+
+/**
+ * How there is dealt with SearchQuery object may depend a bit on the actual 
implementation of the bridge and storage.
+ * This is collected in implemetnations of this interface
+ *
+ *
+ * @author Michiel Meeuwissen
+ * @version $Id: Step.java 36486 2009-06-29 17:33:41Z michiel $
+ * @since MMBase-2.0
+ */
+public interface QueryContext {
+
+    String getStorageIdentifier(String s);
+    Field  getField(String builder, String fieldName);
+
+
+    public static class Bridge implements QueryContext {
+
+        protected final Cloud cloud;
+        public Bridge(Cloud c) {
+            cloud = c;
+        }
+        public  String getStorageIdentifier(String s) {
+            return s;
+        }
+        public  Field getField(String builder, String fieldName) {
+            return cloud.getNodeManager(builder).getField(fieldName);
+        }
+    }
+
+
+}

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/legacy/ConstraintParser.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/legacy/ConstraintParser.java
      2010-03-19 15:55:44 UTC (rev 41542)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/legacy/ConstraintParser.java
      2010-03-19 17:55:45 UTC (rev 41543)
@@ -10,10 +10,7 @@
 package org.mmbase.storage.search.legacy;
 
 import java.util.*;
-import org.mmbase.bridge.Field;
-import org.mmbase.core.CoreField;
-import org.mmbase.module.core.*;
-import org.mmbase.storage.StorageManagerFactory;
+import org.mmbase.bridge.*;
 import org.mmbase.storage.search.*;
 import org.mmbase.storage.search.implementation.*;
 import org.mmbase.util.logging.*;
@@ -131,8 +128,7 @@
      * @return Converted constraint
      * @since MMBase-1.8.1 (moved from org.mmbase.bridge.util.Queries)
      */
-    private static String convertClausePartToDBS(String constraints) {
-        StorageManagerFactory<?> factory = 
MMBase.getMMBase().getStorageManagerFactory();
+    private static String convertClausePartToDBS(QueryContext queryContext, 
String constraints) {
         StringBuilder result = new StringBuilder();
         int posa = constraints.indexOf('[');
         while (posa > -1) {
@@ -143,9 +139,10 @@
                 String fieldName = constraints.substring(posa + 1, posb);
                 int posc = fieldName.indexOf('.');
                 if (posc == -1) {
-                    fieldName = factory != null ? 
factory.getStorageIdentifier(fieldName).toString() : fieldName;
+                    fieldName = queryContext.getStorageIdentifier(fieldName);
                 } else {
-                    fieldName = fieldName.substring(0, posc + 1) + (factory != 
 null ? factory.getStorageIdentifier(fieldName.substring(posc + 1)) : 
fieldName.substring(posc + 1));
+                    fieldName = fieldName.substring(0, posc + 1) +
+                        
queryContext.getStorageIdentifier(fieldName.substring(posc + 1));
                 }
                 result.append(constraints.substring(0, 
posa)).append(fieldName);
                 constraints = constraints.substring(posb + 1);
@@ -164,7 +161,7 @@
      * @return converted constraint
      * @since MMBase-1.8.1 (moved from org.mmbase.bridge.util.Queries)
      */
-    public static String convertClauseToDBS(String constraints) {
+    public static String convertClauseToDBS(QueryContext queryContext, String 
constraints) {
         if (constraints.startsWith("MMNODE")) {
             //  wil probably not work
             // @todo check
@@ -194,14 +191,14 @@
             String part = constraints.substring(0, quoteOpen);
 
             //append to the string buffer "part" the first part
-            result.append(convertClausePartToDBS(part));
+            result.append(convertClausePartToDBS(queryContext, part));
             result.append(constraints.substring(quoteOpen, quoteClose + 1));
 
             constraints = constraints.substring(quoteClose + 1);
             quoteOpen = constraints.indexOf('\'');
 
         }
-        result.append(convertClausePartToDBS(constraints));
+        result.append(convertClausePartToDBS(queryContext, constraints));
         return result.toString();
     }
 
@@ -394,8 +391,8 @@
      * @return The field.
      */
 
-    public static StepField getField(String token, List<? extends Step> steps) 
{
-        return getField(token, (List<BasicStep>) steps, null);
+    public static StepField getField(QueryContext queryContext, String token, 
List<? extends Step> steps) {
+        return getField(queryContext, token, (List<BasicStep>) steps, null);
     }
     /**
      * Creates <code>StepField</code> corresponding to field indicated by
@@ -416,7 +413,7 @@
      * @since MMBase-1.7.1
      */
 
-    static StepField getField(String token, List<BasicStep> steps, SearchQuery 
query) {
+    static StepField getField(QueryContext queryContext, String token, 
List<BasicStep> steps, SearchQuery query) {
         BasicStep step = null;
         int bracketOffset = (token.startsWith("[") && token.endsWith("]")) ? 1 
: 0;
         int idx = token.indexOf('.');
@@ -436,7 +433,8 @@
         } else {
             step = getStep(token.substring(bracketOffset, idx), steps);
         }
-        MMObjectBuilder builder = step.getBuilder();
+
+        String builder = step.getTableName();
         String  fieldName;
         if (idx == -1) {
             fieldName = token.substring(bracketOffset, token.length() - 
bracketOffset);
@@ -444,20 +442,20 @@
             fieldName = token.substring(idx + 1, token.length() - 
bracketOffset);
         }
 
-        CoreField coreField = builder.getField(fieldName);
+        Field coreField = queryContext.getField(builder, fieldName);
         // maybe the field was already escaped with getAllowedField
         // otherwise it will definitely fail!
         if (coreField == null) {
-            String escapedFieldName = 
MMBase.getMMBase().getStorageManagerFactory().getStorageIdentifier(fieldName).toString();
+            String escapedFieldName = 
queryContext.getStorageIdentifier(fieldName);
             if (! escapedFieldName.equals(fieldName)) {
-                coreField = builder.getField(fieldName);
+                coreField = queryContext.getField(builder, fieldName);
                 if (coreField == null) {
-                    throw new IllegalArgumentException("Unknown field (of 
builder " + builder.getTableName() + "): \"" + escapedFieldName + "\"");
+                    throw new IllegalArgumentException("Unknown field (of 
builder " + builder + "): \"" + escapedFieldName + "\"");
                 }
             }
         }
         if (coreField == null) {
-            throw new IllegalArgumentException("Unknown field (of builder " + 
builder.getTableName() + "): \"" + fieldName + "\"");
+            throw new IllegalArgumentException("Unknown field (of builder " + 
builder + "): \"" + fieldName + "\"");
         }
         BasicStepField field = new BasicStepField(step, coreField);
         return field;
@@ -487,10 +485,12 @@
         throw new IllegalArgumentException("Unknown table alias: \"" + alias + 
"\"");
     }
 
+    protected QueryContext queryContext = BRIDGE;
+
     /** Creates a new instance of ConstraintParser
      * @param query
      */
-    public ConstraintParser(SearchQuery query) {
+    protected ConstraintParser(SearchQuery query) {
         this.query = query;
         this.steps = query.getSteps();
     }
@@ -521,7 +521,7 @@
                     + "\n     exception: " + e.getMessage()
                     + "\nFalling back to BasicLegacyConstraint...", e);
             }
-            String escapedSqlConstraint = convertClauseToDBS(sqlConstraint);
+            String escapedSqlConstraint = convertClauseToDBS(queryContext, 
sqlConstraint);
             if (! validConstraints(escapedSqlConstraint)) {
                 throw new IllegalArgumentException("Invalid constraints: " + 
sqlConstraint);
             }
@@ -547,7 +547,7 @@
      */
     // package visibility!
     StepField getField(String token) {
-        return getField(token, (List<BasicStep>) steps, query);
+        return getField(queryContext, token, (List<BasicStep>) steps, query);
     }
 
     /**
@@ -1075,4 +1075,9 @@
 
         return result;
     }
+
+
+
+    protected static final QueryContext BRIDGE = new 
QueryContext.Bridge(org.mmbase.bridge.ContextProvider.getDefaultCloudContext().getCloud("mmbase"));
+
 }

_______________________________________________
Cvs mailing list
Cvs@lists.mmbase.org
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to