// Copyright © 2011-2013, 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.launcher;
import fi.jumi.actors.ActorRef;
import fi.jumi.actors.eventizers.Event;
import fi.jumi.actors.queue.*;
import fi.jumi.core.api.SuiteListener;
import fi.jumi.core.config.*;
import fi.jumi.launcher.remote.SuiteLauncher;
import javax.annotation.WillCloseWhenClosed;
import javax.annotation.concurrent.ThreadSafe;
import java.io.*;
@ThreadSafe
public class JumiLauncher implements Closeable {
private final MessageQueue<Event<SuiteListener>> eventQueue = new MessageQueue<>();
private final ActorRef<SuiteLauncher> suiteLauncher;
private final Closeable externalResources;
public JumiLauncher(ActorRef<SuiteLauncher> suiteLauncher, @WillCloseWhenClosed Closeable externalResources) {
this.suiteLauncher = suiteLauncher;
this.externalResources = externalResources;
}
public MessageReceiver<Event<SuiteListener>> getEventStream() {
return eventQueue;
}
public void start(SuiteConfiguration suiteConfiguration, DaemonConfiguration daemonConfiguration) {
suiteLauncher.tell().runTests(suiteConfiguration, daemonConfiguration, eventQueue);
}
public void shutdownDaemon() {
suiteLauncher.tell().shutdownDaemon();
}
@Override
public void close() throws IOException {
externalResources.close();
}
}