Update of /var/cvs/src/org/mmbase/bridge/util/xml/query
In directory 
james.mmbase.org:/tmp/cvs-serv13705/src/org/mmbase/bridge/util/xml/query

Modified Files:
        QueryReader.java 
Log Message:
Expand a fieldname in a multilevel query with the element nodemanager step if 
no step is given.


See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/bridge/util/xml/query


Index: QueryReader.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/bridge/util/xml/query/QueryReader.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- QueryReader.java    6 Aug 2007 10:03:09 -0000       1.15
+++ QueryReader.java    29 Jan 2008 10:06:22 -0000      1.16
@@ -23,7 +23,7 @@
  * This class contains static methods related to creating a Query object using 
a (fragment of an) XML.
  *
  * @author Pierre van Rooden
- * @version $Id: QueryReader.java,v 1.15 2007/08/06 10:03:09 michiel Exp $
+ * @version $Id: QueryReader.java,v 1.16 2008/01/29 10:06:22 pierre Exp $
  * @since MMBase-1.8
  **/
 public abstract class QueryReader {
@@ -62,11 +62,19 @@
         }
     }
 
+    /* Expands a fieldname in a multilevel query with the element nodemanager 
step if no step is given. 
+     */
+    protected static String getFullFieldName(QueryDefinition queryDefinition, 
String fieldName) {
+        if (queryDefinition.isMultiLevel && fieldName.indexOf('.') == -1) {
+            fieldName = queryDefinition.elementManager.getName() + "." + 
fieldName;
+        }
+        return fieldName;
+    }
 
     protected static void addField(Element fieldElement, QueryDefinition 
queryDefinition, QueryConfigurer configurer) {
         if (hasAttribute(fieldElement, "name")) {
             FieldDefinition fieldDefinition = configurer.getFieldDefinition();
-            fieldDefinition.fieldName = fieldElement.getAttribute("name");
+            fieldDefinition.fieldName = 
getFullFieldName(queryDefinition,fieldElement.getAttribute("name"));
 
             String opt = fieldElement.getAttribute("optional");
 
@@ -99,7 +107,7 @@
         if (!hasAttribute(constraintElement,"field")) {
             throw new IllegalArgumentException("A constraint tag must have a 
'field' attribute");
         }
-        String fieldName = getAttribute(constraintElement,"field");
+        String fieldName = 
getFullFieldName(queryDefinition,getAttribute(constraintElement,"field"));
         Object value = null;
         if (hasAttribute(constraintElement,"value")) {
             if (hasAttribute(constraintElement,"field2")) {
@@ -107,7 +115,7 @@
             }
             value = getAttribute(constraintElement,"value");
         } else if (hasAttribute(constraintElement,"field2")) {
-            value = 
queryDefinition.query.createStepField(getAttribute(constraintElement,"field2"));
+            value = 
queryDefinition.query.createStepField(getFullFieldName(queryDefinition,getAttribute(constraintElement,"field2")));
         }
         int operator = FieldCompareConstraint.EQUAL;
         if (hasAttribute(constraintElement,"operator")) {
@@ -181,7 +189,7 @@
             fieldName = getAttribute(constraintElement,"element") + ".number";
             stepField = queryDefinition.query.createStepField(fieldName);
         } else if (hasAttribute(constraintElement,"field")) {
-            fieldName = getAttribute(constraintElement,"field");
+            fieldName = 
getFullFieldName(queryDefinition,getAttribute(constraintElement,"field"));
             stepField = queryDefinition.query.createStepField(fieldName);
         } else {
             if (queryDefinition.elementStep != null) {
@@ -347,7 +355,7 @@
         if (!hasAttribute(sortOrderElement,"field")) {
             throw new IllegalArgumentException("A sortorder tag must have a 
'field' attribute");
         }
-        StepField stepField = 
queryDefinition.query.createStepField(getAttribute(sortOrderElement,"field"));
+        StepField stepField = 
queryDefinition.query.createStepField(getFullFieldName(queryDefinition,getAttribute(sortOrderElement,"field")));
         int order = SortOrder.ORDER_ASCENDING;
         if (hasAttribute(sortOrderElement,"direction")) {
             order = 
Queries.getSortOrder(getAttribute(sortOrderElement,"direction"));
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to