// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
//
package fitnesse;
import java.io.IOException;
import java.util.logging.Logger;
import fitnesse.http.RequestBuilder;
import fitnesse.http.Response;
import fitnesse.http.ResponseParser;
import util.CommandLine;
public class Shutdown {
private static final Logger LOG = Logger.getLogger(Shutdown.class.getName());
public String hostname = "localhost";
public int port = ContextConfigurator.DEFAULT_PORT;
public String username;
public String password;
private CommandLine commandLine = new CommandLine("[-h hostname] [-p port] [-c username password]");
public static void main(String[] args) throws Exception {
Shutdown shutdown = new Shutdown();
shutdown.run(args);
}
private void run(String[] args) throws Exception {
if (!parseArgs(args))
usage();
ResponseParser response = buildAndSendRequest();
String status = checkResponse(response);
if (!"OK".equals(status)) {
LOG.warning("Failed to shutdown. Status = " + status);
System.exit(response.getStatus());
}
}
public ResponseParser buildAndSendRequest() throws IOException {
RequestBuilder request = buildRequest();
ResponseParser response = ResponseParser.performHttpRequest(hostname, port, request);
return response;
}
public RequestBuilder buildRequest() {
RequestBuilder request = new RequestBuilder("/?responder=shutdown");
if (username != null)
request.addCredentials(username, password);
return request;
}
public String checkResponse(ResponseParser response) {
int status = response.getStatus();
String serverHeader = response.getHeader("Server");
if (serverHeader == null || !serverHeader.contains("FitNesse"))
return "Not a FitNesse server";
else if (status != 200)
return status + " " + Response.getReasonPhrase(status);
else
return "OK";
}
public boolean parseArgs(String[] args) {
if (!commandLine.parse(args))
return false;
if (commandLine.hasOption("h"))
hostname = commandLine.getOptionArgument("h", "hostname");
if (commandLine.hasOption("p"))
port = Integer.parseInt(commandLine.getOptionArgument("p", "port"));
if (commandLine.hasOption("c")) {
username = commandLine.getOptionArgument("c", "username");
password = commandLine.getOptionArgument("c", "password");
}
return true;
}
public void usage() {
System.err.println("Usage: java fitnesse.Shutdown [-hpc]");
System.err.println("\t-h <hostname> {localhost}");
System.err.println("\t-p <port number> {" + ContextConfigurator.DEFAULT_PORT + "}");
System.err.println("\t-c <username> <password> Supply user credentials. Use when FitNesse has authentication activated.");
System.exit(-1);
}
}