// Copyright © 2011-2014, Esko Luontola <www.orfjackal.net>
// This software is released under the Apache License 2.0.
// The license text is at http://www.apache.org/licenses/LICENSE-2.0
package fi.jumi.core.discovery;
import fi.jumi.actors.ActorRef;
import fi.jumi.core.api.TestFile;
import fi.jumi.core.util.Boilerplate;
import javax.annotation.concurrent.NotThreadSafe;
import java.util.List;
@NotThreadSafe
public class CompositeTestFileFinder implements TestFileFinder {
private final List<TestFileFinder> finders;
public CompositeTestFileFinder(List<TestFileFinder> finders) {
this.finders = finders;
}
@Override
public void findTestFiles(ActorRef<TestFileFinderListener> listener) {
try {
ActorRef<TestFileFinderListener> filteredListener = ActorRef.<TestFileFinderListener>wrap(
new OnAllTestFilesFoundEventSuppressingFilter(listener));
for (TestFileFinder finder : finders) {
finder.findTestFiles(filteredListener);
}
} finally {
listener.tell().onAllTestFilesFound();
}
}
@Override
public String toString() {
return Boilerplate.toString(getClass(), finders);
}
@NotThreadSafe
private static class OnAllTestFilesFoundEventSuppressingFilter implements TestFileFinderListener {
private final ActorRef<TestFileFinderListener> listener;
public OnAllTestFilesFoundEventSuppressingFilter(ActorRef<TestFileFinderListener> listener) {
this.listener = listener;
}
@Override
public void onTestFileFound(TestFile testFile) {
listener.tell().onTestFileFound(testFile);
}
@Override
public void onAllTestFilesFound() {
}
}
}