Author: michiel
Date: 2009-06-29 15:17:08 +0200 (Mon, 29 Jun 2009)
New Revision: 36463

Modified:
   mmbase/trunk/core/src/main/java/org/mmbase/storage/search/Constraint.java
   mmbase/trunk/core/src/main/java/org/mmbase/storage/search/SortOrder.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicAggregatedField.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicCompareFieldsConstraint.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicCompositeConstraint.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicConstraint.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicDateSortOrder.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldCompareConstraint.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldConstraint.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldNullConstraint.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueBetweenConstraint.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueConstraint.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueDateConstraint.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueInConstraint.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicSearchQuery.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicSortOrder.java
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/NodeSearchQuery.java
Log:
if a query is unmodifiable, then also it's constituents should be

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/Constraint.java
===================================================================
--- mmbase/trunk/core/src/main/java/org/mmbase/storage/search/Constraint.java   
2009-06-29 11:49:30 UTC (rev 36462)
+++ mmbase/trunk/core/src/main/java/org/mmbase/storage/search/Constraint.java   
2009-06-29 13:17:08 UTC (rev 36463)
@@ -47,4 +47,10 @@
     @Override
     int hashCode();
 
+
+    /**
+     * @since MMBase-1.9.2
+     */
+    void setUnmodifiable();
+
 }

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/SortOrder.java
===================================================================
--- mmbase/trunk/core/src/main/java/org/mmbase/storage/search/SortOrder.java    
2009-06-29 11:49:30 UTC (rev 36462)
+++ mmbase/trunk/core/src/main/java/org/mmbase/storage/search/SortOrder.java    
2009-06-29 13:17:08 UTC (rev 36463)
@@ -88,5 +88,10 @@
      */
     public String toString();
 
+    /**
+     * @since MMBase-1.9.2
+     */
+    void setUnmodifiable();
 
+
 }

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicAggregatedField.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicAggregatedField.java
  2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicAggregatedField.java
  2009-06-29 13:17:08 UTC (rev 36463)
@@ -22,8 +22,7 @@
  */
 public class BasicAggregatedField extends BasicStepField implements 
AggregatedField {
 
-    /** he aggregation type. */
-    private int aggregationType = 0;
+    private final int aggregationType;
 
     /**
      * Constructor.
@@ -35,26 +34,15 @@
      */
     public BasicAggregatedField(Step step, CoreField fieldDefs, int 
aggregationType) {
         super(step, fieldDefs);
-        setAggregationType(aggregationType);
-    }
-
-    /**
-     * Sets the aggregation type.
-     *
-     * @param aggregationType The aggregation type.
-     * @return This <code>BasicAggregatedField</code> instance.
-     * @throws IllegalArgumentException when an invalid argument is supplied.
-     */
-    public BasicAggregatedField setAggregationType(int aggregationType) {
         if (aggregationType < AggregatedField.AGGREGATION_TYPE_GROUP_BY
         || aggregationType > AggregatedField.AGGREGATION_TYPE_MAX) {
-            throw new IllegalArgumentException(
-            "Invalid aggregationType value: " + aggregationType);
+            throw new IllegalArgumentException("Invalid aggregationType value: 
" + aggregationType);
         }
         this.aggregationType = aggregationType;
-        return this;
     }
 
+
+
     /**
      * Gets the aggregation type.
      */

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicCompareFieldsConstraint.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicCompareFieldsConstraint.java
  2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicCompareFieldsConstraint.java
  2009-06-29 13:17:08 UTC (rev 36463)
@@ -19,11 +19,9 @@
  * @version $Id$
  * @since MMBase-1.7
  */
-public class BasicCompareFieldsConstraint extends BasicFieldCompareConstraint
-implements CompareFieldsConstraint {
+public class BasicCompareFieldsConstraint extends BasicFieldCompareConstraint 
implements CompareFieldsConstraint {
 
-    /** The second associated field. */
-    private StepField field2 = null;
+    private final StepField field2;
 
     /**
      * Constructor.
@@ -37,15 +35,13 @@
 
         // Test for non-null value.
         if (field2 == null) {
-            throw new IllegalArgumentException(
-            "Invalid field2 value: " + field2);
+            throw new IllegalArgumentException("Invalid field2 value: " + 
field2);
         }
 
         // Test for matching fieldtype.
         if (field1.getType() != field2.getType()) {
-            throw new IllegalArgumentException(
-            "Fieldtypes do not match: " + field1.getType()
-            + " and " + field2.getType());
+            throw new IllegalArgumentException( "Fieldtypes do not match: " + 
field1.getType()
+                                                + " and " + field2.getType());
         }
         this.field2 = field2;
     }

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicCompositeConstraint.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicCompositeConstraint.java
      2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicCompositeConstraint.java
      2009-06-29 13:17:08 UTC (rev 36463)
@@ -23,11 +23,9 @@
 public class BasicCompositeConstraint extends BasicConstraint implements 
CompositeConstraint {
     private static final Logger log = 
Logging.getLoggerInstance(BasicCompositeConstraint.class);
 
-    /** The child constraints. */
-    private List<Constraint> childs = new ArrayList<Constraint>();
+    private final List<Constraint> childs = new ArrayList<Constraint>();
 
-    /** The logical operator. */
-    private int logicalOperator = 0;
+    private final int logicalOperator;
 
     /**
      * Constructor.
@@ -50,6 +48,13 @@
         }
     }
 
+    public void setUnmodifiable() {
+        super.setUnmodifiable();
+        for (Constraint c : childs) {
+            c.setUnmodifiable();
+        }
+    }
+
     /**
      * Adds new child constraint.
      *
@@ -58,20 +63,20 @@
      * @throws IllegalArgumentException when an invalid argument is supplied.
      */
     public BasicCompositeConstraint addChild(Constraint child) {
+        if (! modifiable) throw new IllegalStateException();
         if (child == null) {
-            throw new IllegalArgumentException(
-            "Invalid child argument: " + child);
+            throw new IllegalArgumentException("Invalid child argument: " + 
child);
         }
         // Check constraint not added to itself.
         if (child == this) {
-            throw new IllegalArgumentException(
-            "Trying to add constraint as child to itself: " + child);
+            throw new IllegalArgumentException("Trying to add constraint as 
child to itself: " + child);
         }
         childs.add(child);
         return this;
     }
 
     public BasicCompositeConstraint removeChild(Constraint child) {
+        if (! modifiable) throw new IllegalStateException();
         if (! childs.remove(child)) {
             log.info("Tried to remove non existing child");
         }

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicConstraint.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicConstraint.java
       2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicConstraint.java
       2009-06-29 13:17:08 UTC (rev 36463)
@@ -22,19 +22,26 @@
 // this class would logically be abstract, but test-cases are instantiating it.
 public class BasicConstraint implements Constraint {
 
-    /** Inverse property. */
     private boolean inverse = false;
+    protected boolean modifiable = true;
 
-    /** Default constructor. */
     protected BasicConstraint() {}
 
     /**
+     * @since MMBase-1.9.2
+     */
+    public void setUnmodifiable() {
+        modifiable = false;
+    }
+
+    /**
      * Sets inverse.
      *
      * @return This <code>BasicConstraint</code> instance.
      * @param inverse The inverse value.
      */
     public BasicConstraint setInverse(boolean inverse) {
+        if (! modifiable) throw new IllegalStateException();
         this.inverse = inverse;
         return this;
     }

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicDateSortOrder.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicDateSortOrder.java
    2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicDateSortOrder.java
    2009-06-29 13:17:08 UTC (rev 36463)
@@ -20,7 +20,6 @@
  */
 public class BasicDateSortOrder extends BasicSortOrder implements 
DateSortOrder {
 
-    /** The date part. */
     private int part = -1; // unset
 
     /**

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldCompareConstraint.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldCompareConstraint.java
   2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldCompareConstraint.java
   2009-06-29 13:17:08 UTC (rev 36463)
@@ -44,7 +44,7 @@
      * @throws IllegalArgumentException when an invalid argument is supplied.
      */
     public BasicFieldCompareConstraint setOperator(int operator) {
-
+        if (! modifiable) throw new IllegalStateException();
         // Test for defined operator value.
         if (operator < FieldCompareConstraint.LESS
         || operator > FieldCompareConstraint.REGEXP) {

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldConstraint.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldConstraint.java
  2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldConstraint.java
  2009-06-29 13:17:08 UTC (rev 36463)
@@ -23,10 +23,8 @@
 // this class would logically be abstract, but test-cases are instantiating it.
 public class BasicFieldConstraint extends BasicConstraint implements 
FieldConstraint {
 
-    /** The associated field. */
-    private StepField field;
+    final private StepField field;
 
-    /** The caseSensitive property. */
     private boolean caseSensitive = true;
 
     /**
@@ -52,6 +50,7 @@
      * @param caseSensitive The caseSensitive property value.
      */
     public BasicFieldConstraint setCaseSensitive(boolean caseSensitive) {
+        if (! modifiable) throw new IllegalStateException();
         this.caseSensitive = caseSensitive;
         return this;
     }

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldNullConstraint.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldNullConstraint.java
      2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldNullConstraint.java
      2009-06-29 13:17:08 UTC (rev 36463)
@@ -18,8 +18,7 @@
  * @version $Id$
  * @since MMBase-1.7
  */
-public class BasicFieldNullConstraint extends BasicFieldConstraint
-implements FieldNullConstraint {
+public class BasicFieldNullConstraint extends BasicFieldConstraint implements 
FieldNullConstraint {
 
     /**
      * Constructor.

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueBetweenConstraint.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueBetweenConstraint.java
      2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueBetweenConstraint.java
      2009-06-29 13:17:08 UTC (rev 36463)
@@ -57,6 +57,7 @@
      * @throws IllegalArgumentException when an invalid argument is supplied.
      */
     public BasicFieldValueBetweenConstraint setLowerLimit(Object lowerLimit) {
+        if (! modifiable) throw new IllegalStateException();
         this.lowerLimit = lowerLimit;
         return this;
     }
@@ -72,6 +73,7 @@
      * @throws IllegalArgumentException when an invalid argument is supplied.
      */
     public BasicFieldValueBetweenConstraint setUpperLimit(Object upperLimit) {
+        if (! modifiable) throw new IllegalStateException();
         this.upperLimit = upperLimit;
         return this;
     }

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueConstraint.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueConstraint.java
     2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueConstraint.java
     2009-06-29 13:17:08 UTC (rev 36463)
@@ -49,6 +49,7 @@
      * @throws IllegalArgumentException when an invalid argument is supplied.
      */
     public BasicFieldValueConstraint setValue(Object value) {
+        if (! modifiable) throw new IllegalStateException();
         BasicStepField.testValue(value, getField());
         this.value = value;
         return this;

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueDateConstraint.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueDateConstraint.java
 2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueDateConstraint.java
 2009-06-29 13:17:08 UTC (rev 36463)
@@ -57,6 +57,7 @@
     }
 
     public void setPart(int p) {
+        if (! modifiable) throw new IllegalStateException();
         part = p;
     }
 

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueInConstraint.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueInConstraint.java
   2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicFieldValueInConstraint.java
   2009-06-29 13:17:08 UTC (rev 36463)
@@ -21,7 +21,6 @@
  */
 public class BasicFieldValueInConstraint extends BasicFieldConstraint 
implements FieldValueInConstraint {
 
-    /** The values. */
     private final SortedSet<Object> values = new TreeSet<Object>();
 
     /**
@@ -42,6 +41,7 @@
      * @see org.mmbase.storage.search.FieldValueInConstraint#getValues
      */
     public BasicFieldValueInConstraint addValue(Object value) {
+        if (! modifiable) throw new IllegalStateException();
         BasicStepField.testValue(value, getField());
         values.add(value);
         return this;

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicSearchQuery.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicSearchQuery.java
      2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicSearchQuery.java
      2009-06-29 13:17:08 UTC (rev 36463)
@@ -29,15 +29,8 @@
 public class BasicSearchQuery implements SearchQuery, 
org.mmbase.util.PublicCloneable<BasicSearchQuery> {
     private static final Logger log = 
Logging.getLoggerInstance(BasicSearchQuery.class);
 
-    /**
-     * Distinct property.
-     */
     private boolean distinct = false;
-
-    /** MaxNumber property. */
     private int maxNumber = SearchQuery.DEFAULT_MAX_NUMBER;
-
-    /** Offset property. */
     private int offset = SearchQuery.DEFAULT_OFFSET;
 
     // Following fields would must logically be final, but that is 
incompatible with
@@ -48,10 +41,8 @@
     protected List<StepField> fields       = new ArrayList<StepField>();
     private   List<SortOrder> sortOrders   = new ArrayList<SortOrder>();
 
-    /** Constraint.. */
     private Constraint constraint = null;
 
-    /** Aggragating property. */
     private boolean aggregating = false;
 
     /** Two variables to speed up hashCode() by caching the result */
@@ -304,9 +295,7 @@
             FieldValueInConstraint constraint = (FieldValueInConstraint) c;
             BasicFieldValueInConstraint newConstraint = new 
BasicFieldValueInConstraint(createNewStepField(q, constraint.getField()));
 
-            Iterator<Object> k = constraint.getValues().iterator();
-            while (k.hasNext()) {
-                Object value = k.next();
+            for (Object value : constraint.getValues()) {
                 newConstraint.addValue(value);
             }
             newConstraint.setInverse(constraint.isInverse());
@@ -592,6 +581,7 @@
 
     public void setCachePolicy(CachePolicy policy) {
         if (! modifiable) throw new IllegalStateException("Unmodifiable");
+        hasChangedHashcode = true;
         this.cachePolicy = policy;
     }
 
@@ -609,6 +599,12 @@
     public boolean markUsed() {
         boolean wasModifiable = modifiable;
         modifiable = false;
+        if (constraint != null) {
+            constraint.setUnmodifiable();
+        }
+        for (SortOrder so : sortOrders) {
+            so.setUnmodifiable();
+        }
         return ! wasModifiable;
     }
 

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicSortOrder.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicSortOrder.java
        2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicSortOrder.java
        2009-06-29 13:17:08 UTC (rev 36463)
@@ -20,12 +20,11 @@
  */
 public class BasicSortOrder implements SortOrder {
 
-    /** Associated stepfield. */
-    private StepField field = null;
 
-    /** Direction property. */
+    protected boolean modifiable = true;
+    private final StepField field;
+
     private int direction = SortOrder.ORDER_ASCENDING;
-
     private boolean caseSensitive = true;
 
     /**
@@ -44,6 +43,13 @@
     }
 
     /**
+     * @since MMBase-1.9.2
+     */
+    public void setUnmodifiable() {
+        modifiable = false;
+    }
+
+    /**
      * Sets direction.
      *
      * @param direction The direction.
@@ -51,6 +57,7 @@
      * @throws IllegalArgumentException when an invalid argument is supplied.
      */
     public BasicSortOrder setDirection(int direction) {
+        if (! modifiable) throw new IllegalStateException();
         if (direction != SortOrder.ORDER_ASCENDING
             && direction != SortOrder.ORDER_DESCENDING) {
             throw new IllegalArgumentException("Invalid direction value: " + 
direction);
@@ -87,6 +94,7 @@
      * @since MMBase-1.8
      */
     public BasicSortOrder setCaseSensitive(boolean c) {
+        if (! modifiable) throw new IllegalStateException();
         caseSensitive = c;
         return this;
     }

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/NodeSearchQuery.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/NodeSearchQuery.java
       2009-06-29 11:49:30 UTC (rev 36462)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/NodeSearchQuery.java
       2009-06-29 13:17:08 UTC (rev 36463)
@@ -41,7 +41,7 @@
 public class NodeSearchQuery extends BasicSearchQuery implements SearchQuery {
 
     /** Builder for the specified nodetype. */
-    private MMObjectBuilder builder = null;
+    private final MMObjectBuilder builder;
 
     /** Map, maps fields to stepfields. */
     private Map<CoreField, BasicStepField> stepFields = new HashMap<CoreField, 
BasicStepField>();

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to