1   /*
2   * Licensed to the Apache Software Foundation (ASF) under one or more
3   * contributor license agreements.  See the NOTICE file distributed with
4   * this work for additional information regarding copyright ownership.
5   * The ASF licenses this file to You under the Apache License, Version 2.0
6   * (the "License"); you may not use this file except in compliance with
7   * the License.  You may obtain a copy of the License at
8   *
9   *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17  package org.apache.jetspeed.decoration;
18  
19  import org.jmock.core.Constraint;
20  
21  public class OnConsecutiveInvokes implements Constraint
22  {
23      private final Constraint[] constraints;
24      private int pointer = 0;
25      private boolean toManyCalls = false;
26      
27      public OnConsecutiveInvokes(Constraint[] constraints)
28      {
29          this.constraints = constraints;
30      }
31  
32      public boolean eval(Object arg0)
33      {   
34          if (pointer < constraints.length)
35          {
36              try
37              {
38                  return constraints[pointer].eval(arg0);
39              }
40              finally
41              {
42                  pointer++;
43              }
44          }
45          else
46          {
47              toManyCalls = true;
48              return false;
49          }
50      }
51  
52      public StringBuffer describeTo(StringBuffer buffer)
53      {
54          if(!toManyCalls)
55          {
56              return constraints[pointer].describeTo(buffer);
57          }
58          else
59          {
60              return buffer.append("Should be invoked "+constraints.length+" times.");
61          }
62      }
63  
64  }