/**
 * The contents of this file are subject to the license and copyright
 * detailed in the LICENSE and NOTICE files at the root of the source
 * tree and available online at
 *
 * http://www.dspace.org/license/
 */
package org.dspace.xoai.tests.support;

import java.util.ArrayList;
import java.util.Collection;

import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.core.AllOf;

public class MatcherBuilder<M extends MatcherBuilder, T> extends BaseMatcher<T> {
    private final Collection<Matcher<? super T>> matchers = new ArrayList<>();

    @Override
    public boolean matches(Object item) {
        return matcher().matches(item);
    }

    private Matcher<T> matcher() {
        return AllOf.allOf(matchers);
    }

    @Override
    public void describeTo(Description description) {
        description.appendDescriptionOf(matcher());
    }

    protected M with(Matcher<? super T> matcher) {
        matchers.add(matcher);
        return (M) this;
    }
}
