Coverage Report - org.kuali.rice.krms.framework.engine.CollectionOperator
 
Classes in this File Line Coverage Branch Coverage Complexity
CollectionOperator
100%
8/8
N/A
1.3
CollectionOperator$1
100%
3/3
75%
3/4
1.3
CollectionOperator$2
100%
3/3
83%
5/6
1.3
CollectionOperator$3
100%
3/3
83%
5/6
1.3
 
 1  
 /**
 2  
  * Copyright 2005-2011 The Kuali Foundation
 3  
  *
 4  
  * Licensed under the Educational Community License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  * http://www.opensource.org/licenses/ecl2.php
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  
  * See the License for the specific language governing permissions and
 14  
  * limitations under the License.
 15  
  */
 16  
 package org.kuali.rice.krms.framework.engine;
 17  
 
 18  
 /**
 19  
  * <p>Enumeration for simple collection operators used by {@link CollectionOfComparablesTermBasedProposition}.  The
 20  
  * operators encapsulate logic for how to collate results and when to short circuit as a collection is being
 21  
  * processed.  Correct usage is best summarized by this code block:</p>
 22  
  * <pre>
 23  
  * for (Comparable<T> item : comparableItems) {
 24  
  *     collatedResult = collectionOper.reduce(compare(item, compareValue), collatedResult);
 25  
  *     if (collectionOper.shortCircuit(collatedResult)) break;
 26  
  * }
 27  
  * </pre>
 28  
  * 
 29  
  * @author Kuali Rice Team (rice.collab@kuali.org)
 30  
  *
 31  
  */
 32  4
 public enum CollectionOperator {
 33  
 
 34  1
         ONE_OR_MORE(false) {
 35  
                 @Override
 36  
                 public boolean reduce(boolean elementResult, boolean collatedResult) {
 37  9
                         return elementResult || collatedResult;
 38  
                 }
 39  
                 
 40  
                 @Override
 41  
                 public boolean shortCircuit(boolean collatedResult) {
 42  9
                         return collatedResult;
 43  
                 }
 44  
         },
 45  
         
 46  1
         ALL(true) {
 47  
                 @Override
 48  
                 public boolean reduce(boolean elementResult, boolean collatedResult) {
 49  8
                         return elementResult && collatedResult;
 50  
                 }
 51  
 
 52  
                 @Override
 53  
                 public boolean shortCircuit(boolean collatedResult) {
 54  8
                         return !collatedResult;
 55  
                 }
 56  
         },
 57  
         
 58  1
         NONE(true) {
 59  
                 @Override
 60  
                 public boolean reduce(boolean elementResult, boolean collatedResult) {
 61  7
                         return !elementResult && collatedResult;
 62  
                 }
 63  
 
 64  
                 @Override
 65  
                 public boolean shortCircuit(boolean collatedResult) {
 66  7
                         return !collatedResult;
 67  
                 }
 68  
         };
 69  
         
 70  
         private final boolean initialCollationResult;
 71  
         
 72  3
         private CollectionOperator(boolean initialCollationResult) {
 73  3
                 this.initialCollationResult = initialCollationResult;
 74  3
         }
 75  
         
 76  
         /**
 77  
          * This method takes the collated result thus far and the result for the next element,
 78  
          * and produces the next collated result.
 79  
          * 
 80  
          * @return the new collated result
 81  
          */
 82  
         public abstract boolean reduce(boolean elementResult, boolean collatedResult);
 83  
         
 84  
         /**
 85  
          * This method lets the engine know if it can short circuit its iteration through the list based on the 
 86  
          * collated result.  The condition when short circuiting can be done varies with the operator.
 87  
          * 
 88  
          * @param collatedResult
 89  
          * @return true if short circuiting can be done to optimize processing
 90  
          */
 91  
         public abstract boolean shortCircuit(boolean collatedResult);
 92  
         
 93  
         /**
 94  
          * when the result for the first item in the collection is calculated, there isn't yet a collated result 
 95  
          * to use in the {@link #reduce(boolean, boolean)} method.  Different operators require different
 96  
          * initial values to function correctly, so this property holds the correct initial collated value for the 
 97  
          * given operator instance.
 98  
          */
 99  
         public boolean getInitialCollatedResult() {
 100  20
                 return initialCollationResult;
 101  
         }
 102  
         
 103  
 }