147d431f63a66505a645f282416659a9758a91f1cBrett Chabot/*
247d431f63a66505a645f282416659a9758a91f1cBrett Chabot * Copyright 2003-2009 OFFIS, Henri Tremblay
347d431f63a66505a645f282416659a9758a91f1cBrett Chabot *
447d431f63a66505a645f282416659a9758a91f1cBrett Chabot * Licensed under the Apache License, Version 2.0 (the "License");
547d431f63a66505a645f282416659a9758a91f1cBrett Chabot * you may not use this file except in compliance with the License.
647d431f63a66505a645f282416659a9758a91f1cBrett Chabot * You may obtain a copy of the License at
747d431f63a66505a645f282416659a9758a91f1cBrett Chabot *
847d431f63a66505a645f282416659a9758a91f1cBrett Chabot *     http://www.apache.org/licenses/LICENSE-2.0
947d431f63a66505a645f282416659a9758a91f1cBrett Chabot *
1047d431f63a66505a645f282416659a9758a91f1cBrett Chabot * Unless required by applicable law or agreed to in writing, software
1147d431f63a66505a645f282416659a9758a91f1cBrett Chabot * distributed under the License is distributed on an "AS IS" BASIS,
1247d431f63a66505a645f282416659a9758a91f1cBrett Chabot * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1347d431f63a66505a645f282416659a9758a91f1cBrett Chabot * See the License for the specific language governing permissions and
1447d431f63a66505a645f282416659a9758a91f1cBrett Chabot * limitations under the License.
1547d431f63a66505a645f282416659a9758a91f1cBrett Chabot */
1647d431f63a66505a645f282416659a9758a91f1cBrett Chabotpackage org.easymock.internal.matchers;
1747d431f63a66505a645f282416659a9758a91f1cBrett Chabot
1847d431f63a66505a645f282416659a9758a91f1cBrett Chabotimport java.io.Serializable;
1947d431f63a66505a645f282416659a9758a91f1cBrett Chabot
2047d431f63a66505a645f282416659a9758a91f1cBrett Chabotimport org.easymock.Capture;
2147d431f63a66505a645f282416659a9758a91f1cBrett Chabotimport org.easymock.IArgumentMatcher;
2247d431f63a66505a645f282416659a9758a91f1cBrett Chabotimport org.easymock.internal.LastControl;
2347d431f63a66505a645f282416659a9758a91f1cBrett Chabot
2447d431f63a66505a645f282416659a9758a91f1cBrett Chabotpublic class Captures<T> implements IArgumentMatcher, Serializable {
2547d431f63a66505a645f282416659a9758a91f1cBrett Chabot
2647d431f63a66505a645f282416659a9758a91f1cBrett Chabot    private static final long serialVersionUID = -5048595127450771363L;
2747d431f63a66505a645f282416659a9758a91f1cBrett Chabot
2847d431f63a66505a645f282416659a9758a91f1cBrett Chabot    private final Capture<T> capture;
2947d431f63a66505a645f282416659a9758a91f1cBrett Chabot
3047d431f63a66505a645f282416659a9758a91f1cBrett Chabot    private T potentialValue;
3147d431f63a66505a645f282416659a9758a91f1cBrett Chabot
3247d431f63a66505a645f282416659a9758a91f1cBrett Chabot    public Captures(Capture<T> captured) {
3347d431f63a66505a645f282416659a9758a91f1cBrett Chabot        this.capture = captured;
3447d431f63a66505a645f282416659a9758a91f1cBrett Chabot    }
3547d431f63a66505a645f282416659a9758a91f1cBrett Chabot
3647d431f63a66505a645f282416659a9758a91f1cBrett Chabot    public void appendTo(StringBuffer buffer) {
3747d431f63a66505a645f282416659a9758a91f1cBrett Chabot        buffer.append("capture(").append(capture).append(")");
3847d431f63a66505a645f282416659a9758a91f1cBrett Chabot    }
3947d431f63a66505a645f282416659a9758a91f1cBrett Chabot
4047d431f63a66505a645f282416659a9758a91f1cBrett Chabot    public void setPotentialValue(T potentialValue) {
4147d431f63a66505a645f282416659a9758a91f1cBrett Chabot        this.potentialValue = potentialValue;
4247d431f63a66505a645f282416659a9758a91f1cBrett Chabot    }
4347d431f63a66505a645f282416659a9758a91f1cBrett Chabot
4447d431f63a66505a645f282416659a9758a91f1cBrett Chabot    @SuppressWarnings("unchecked")
4547d431f63a66505a645f282416659a9758a91f1cBrett Chabot    public boolean matches(Object actual) {
4647d431f63a66505a645f282416659a9758a91f1cBrett Chabot        LastControl.getCurrentInvocation().addCapture((Captures<Object>) this,
4747d431f63a66505a645f282416659a9758a91f1cBrett Chabot                actual);
4847d431f63a66505a645f282416659a9758a91f1cBrett Chabot        return true;
4947d431f63a66505a645f282416659a9758a91f1cBrett Chabot    }
5047d431f63a66505a645f282416659a9758a91f1cBrett Chabot
5147d431f63a66505a645f282416659a9758a91f1cBrett Chabot    public void validateCapture() {
5247d431f63a66505a645f282416659a9758a91f1cBrett Chabot        capture.setValue(potentialValue);
5347d431f63a66505a645f282416659a9758a91f1cBrett Chabot    }
5447d431f63a66505a645f282416659a9758a91f1cBrett Chabot}
55