1/*
2 * Copyright (c) 2007 Mockito contributors
3 * This program is made available under the terms of the MIT License.
4 */
5
6package org.mockito.internal.invocation.finder;
7
8import org.mockito.internal.InternalMockHandler;
9import org.mockito.internal.util.MockUtil;
10import org.mockito.invocation.Invocation;
11
12import java.util.*;
13
14public class AllInvocationsFinder {
15
16    /**
17     * gets all invocations from mocks. Invocations are ordered earlier first.
18     *
19     * @param mocks mocks
20     * @return invocations
21     */
22    public List<Invocation> find(List<?> mocks) {
23        Set<Invocation> invocationsInOrder = new TreeSet<Invocation>(new SequenceNumberComparator());
24        for (Object mock : mocks) {
25            InternalMockHandler<Object> handler = new MockUtil().getMockHandler(mock);
26            List<Invocation> fromSingleMock = handler.getInvocationContainer().getInvocations();
27            invocationsInOrder.addAll(fromSingleMock);
28        }
29
30        return new LinkedList<Invocation>(invocationsInOrder);
31    }
32
33    private final class SequenceNumberComparator implements Comparator<Invocation> {
34        public int compare(Invocation o1, Invocation o2) {
35            return Integer.valueOf(o1.getSequenceNumber()).compareTo(o2.getSequenceNumber());
36        }
37    }
38}