package ru.yandex.qatools.allure.command;
import io.airlift.command.Command;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import ru.yandex.qatools.allure.logging.Messages;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
/**
* @author eroshenkoam@yandex-team.ru
*/
@Command(name = "open", description = "Open generated report")
public class ReportOpen extends ReportCommand {
@Override
protected void runUnsafe() throws IOException, AllureCommandException {
Path reportDirectory = getReportDirectory();
if (Files.notExists(reportDirectory)) {
getLogger().error(Messages.COMMAND_REPORT_OPEN_REPORT_MISSING, reportDirectory);
return;
}
getLogger().info(Messages.COMMAND_REPORT_OPEN_SERVER_STARTING, reportDirectory);
try {
Server server = setUpServer();
server.setStopAtShutdown(true);
server.start();
openBrowser(server.getURI());
getLogger().info(Messages.COMMAND_REPORT_OPEN_SERVER_STARTED, server.getURI());
server.join();
} catch (Exception e) {
throw new AllureCommandException(e);
}
}
/**
* Set up server for report directory.
*/
protected Server setUpServer() {
Server server = new Server(0);
ResourceHandler handler = new ResourceHandler();
handler.setDirectoriesListed(true);
handler.setWelcomeFiles(new String[]{"index.html"});
handler.setResourceBase(getReportDirectory().toString());
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[]{handler, new DefaultHandler()});
server.setHandler(handlers);
return server;
}
}