Author: michiel
Date: 2009-06-29 11:18:33 +0200 (Mon, 29 Jun 2009)
New Revision: 36452

Modified:
   mmbase/trunk/core/src/main/java/org/mmbase/storage/search/SearchQuery.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/ModifiableQuery.java
Log:
Copied 'markedUsed' method from bridge to the interface, which can be used in 
QueryResultCache, to make absosolute sure that the query is 'used' and not 
modified any more

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/SearchQuery.java
===================================================================
--- mmbase/trunk/core/src/main/java/org/mmbase/storage/search/SearchQuery.java  
2009-06-29 09:17:19 UTC (rev 36451)
+++ mmbase/trunk/core/src/main/java/org/mmbase/storage/search/SearchQuery.java  
2009-06-29 09:18:33 UTC (rev 36452)
@@ -137,4 +137,12 @@
     public String toString();
 
 
+    /**
+     * @since MMBase-1.9.2
+     */
+    boolean markUsed();
+
+
+
+
 }

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 09:17:19 UTC (rev 36451)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/BasicSearchQuery.java
      2009-06-29 09:18:33 UTC (rev 36452)
@@ -132,7 +132,7 @@
     public BasicSearchQuery clone() {
         try {
             BasicSearchQuery clone = (BasicSearchQuery) super.clone();
-            clone.setModifiable(true);
+            clone.modifiable = true;
             clone.copySteps(this);
             clone.copyFields(this);
             clone.copySortOrders(this);
@@ -457,7 +457,6 @@
     }
 
     // MM
-
     public void  addFields(Step step) {
         MMBase mmb = MMBase.getMMBase();
         MMObjectBuilder builder = mmb.getBuilder(step.getTableName());
@@ -599,11 +598,21 @@
     /**
      * @since MMBase-1.9.1
      */
-    public void setModifiable(boolean m) {
-        modifiable = m;
+    public void setModifiable(boolean b) {
+        if (! modifiable && b) throw new IllegalStateException("Unmodifiable");
+        modifiable = b;
     }
 
-    // javadoc is inherited
+    /**
+     * @since MMBase-1.9.2
+     */
+    public boolean markUsed() {
+        boolean wasModifiable = modifiable;
+        modifiable = false;
+        return ! wasModifiable;
+    }
+
+    @Override
     public boolean equals(Object obj) {
         if (obj == this) {
             return true;
@@ -624,7 +633,7 @@
         }
     }
 
-    // javadoc is inherited
+    @Override
     public int hashCode() {
         if (hasChangedHashcode) {
           savedHashcode = (distinct? 0: 101)
@@ -638,7 +647,7 @@
         return savedHashcode;
     }
 
-    // javadoc is inherited
+    @Override
     public String toString() {
         StringBuilder sb = new 
StringBuilder("SearchQuery(distinct:").append(isDistinct()).
         append(", steps:" + getSteps()).

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/ModifiableQuery.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/ModifiableQuery.java
       2009-06-29 09:17:19 UTC (rev 36451)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/implementation/ModifiableQuery.java
       2009-06-29 09:18:33 UTC (rev 36452)
@@ -36,6 +36,7 @@
  */
 public class ModifiableQuery implements SearchQuery {
 
+    private boolean modifiable = true;
     private SearchQuery query = null;
 
     /**
@@ -91,7 +92,7 @@
      */
     private CachePolicy cachePolicy = null;
 
-    
+
     /** Creates a new instance of ModifiedQuery */
     public ModifiableQuery(SearchQuery query) {
         this.query = query;
@@ -105,6 +106,7 @@
      * @return This <code>ModifiableQuery</code> instance.
      */
     public ModifiableQuery setMaxNumber(int maxNumber) {
+        if (! modifiable) throw new IllegalStateException("Unmodifiable");
         this.maxNumber = maxNumber;
         return this;
     }
@@ -117,6 +119,7 @@
      * @return This <code>ModifiableQuery</code> instance.
      */
     public ModifiableQuery setOffset(int offset) {
+        if (! modifiable) throw new IllegalStateException("Unmodifiable");
         this.offset = offset;
         return this;
     }
@@ -129,6 +132,7 @@
      * @return This <code>ModifiableQuery</code> instance.
      */
     public ModifiableQuery setConstraint(Constraint constraint) {
+        if (! modifiable) throw new IllegalStateException("Unmodifiable");
         this.constraint = constraint;
         return this;
     }
@@ -141,6 +145,7 @@
      * @return This <code>ModifiableQuery</code> instance.
      */
     public ModifiableQuery setFields(List<StepField> fields) {
+        if (! modifiable) throw new IllegalStateException("Unmodifiable");
         this.fields = fields;
         return this;
     }
@@ -153,6 +158,7 @@
      * @return This <code>ModifiableQuery</code> instance.
      */
     public ModifiableQuery setSortOrders(List<SortOrder> sortOrders) {
+        if (! modifiable) throw new IllegalStateException("Unmodifiable");
         this.sortOrders = sortOrders;
         return this;
     }
@@ -165,6 +171,7 @@
      * @return This <code>ModifiableQuery</code> instance.
      */
     public ModifiableQuery setSteps(List<Step> steps) {
+        if (! modifiable) throw new IllegalStateException("Unmodifiable");
         this.steps = steps;
         return this;
     }
@@ -177,6 +184,7 @@
      * @return This <code>ModifiableQuery</code> instance.
      */
     public ModifiableQuery setDistinct(Boolean distinct) {
+        if (! modifiable) throw new IllegalStateException("Unmodifiable");
         this.distinct = distinct;
         return this;
     }
@@ -189,6 +197,7 @@
      * @return This <code>ModifiableQuery</code> instance.
      */
     public ModifiableQuery setAggregating(Boolean aggregating) {
+        if (! modifiable) throw new IllegalStateException("Unmodifiable");
         this.aggregating = aggregating;
         return this;
     }
@@ -275,6 +284,7 @@
     }
 
     public void setCachePolicy(CachePolicy policy) {
+        if (! modifiable) throw new IllegalStateException("Unmodifiable");
         this.cachePolicy = policy;
     }
 
@@ -331,6 +341,11 @@
         return sb.toString();
     }
 
+    public boolean markUsed() {
+        boolean wasUsed = !modifiable;
+        modifiable = false;
+        return wasUsed;
+    }
 
 
 }

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

Reply via email to