/* ********************************************************************
Appropriate copyright notice
*/
package org.bedework.bwcli;
import org.bedework.bwcli.bwcmd.CmdAdminGroups;
import org.bedework.bwcli.bwcmd.HttpClient;
import org.bedework.bwcli.jmxcmd.CmdCalSchema;
import org.bedework.bwcli.jmxcmd.CmdListIdx;
import org.bedework.bwcli.jmxcmd.CmdPurgeIdx;
import org.bedework.bwcli.jmxcmd.CmdRebuildIdx;
import org.bedework.bwcli.jmxcmd.CmdRebuildStatus;
import org.bedework.bwcli.jmxcmd.CmdRestoreCalData;
import org.bedework.bwcli.toolcmd.ToolCmd;
import org.bedework.bwcli.toolcmd.ToolUser;
import org.bedework.calfacade.responses.AdminGroupsResponse;
import org.bedework.util.args.Args;
import org.bedework.util.jolokia.JolokiaCli;
import org.bedework.util.jolokia.JolokiaClient;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.URI;
/**
* User: mike
* Date: 5/5/15
* Time: 4:26 PM
*/
public class BwCli extends JolokiaCli {
private WebClient webClient;
private final String url;
// Last response
private AdminGroupsResponse adgrs;
public BwCli(final String url,
final String jmxUrl,
final boolean debug) throws Throwable {
super(jmxUrl, debug);
this.url = url;
register(new CmdAdminGroups());
// jmx
register(new CmdCalSchema());
register(new CmdListIdx());
register(new CmdPurgeIdx());
register(new CmdRebuildIdx());
register(new CmdRebuildStatus());
register(new CmdRestoreCalData());
register(new ToolCmd());
register(new ToolUser());
}
public JolokiaClient makeClient(final String uri) throws Throwable {
return new JolokiaConfigClient(uri);
}
public WebClient getWebClient() {
if (webClient == null) {
webClient = new WebClient(url);
}
return webClient;
}
public HttpClient getCl() throws Throwable {
return getWebClient().getCl();
}
public void setAdgrs(final AdminGroupsResponse val) {
adgrs = val;
}
public AdminGroupsResponse getAdgrs() {
return adgrs;
}
/**
* <p>Arguments<ul>
* <li>url: the url of the jolokia service</li>
* </ul>
* </p>
*
* @param args program arguments.
*/
public static void main(final String[] args) {
String url = null;
String jmxUrl = null;
boolean debug = false;
try {
final Args pargs = new Args(args);
while (pargs.more()) {
if (pargs.ifMatch("debug")) {
debug = true;
continue;
}
if (pargs.ifMatch("url")) {
url = pargs.next();
continue;
}
if (pargs.ifMatch("jmxUrl")) {
jmxUrl = pargs.next();
continue;
}
usage("Illegal argument: " +
pargs.current());
return;
}
final BwCli jc = new BwCli(url, jmxUrl, debug);
jc.processCmds();
} catch (final Throwable t) {
t.printStackTrace();
}
}
/**
* Client to interact with the bedework web interfaces
*/
public static class WebClient {
private final String url;
private HttpClient cl;
private final ObjectMapper om;
WebClient(final String url) {
this.url = url;
om = new JsonMapper();
}
public HttpClient getCl() throws Throwable {
if (cl != null) {
return cl;
}
cl = new HttpClient(new URI(url));
return cl;
}
}
private static void usage(final String msg) {
if (msg != null) {
System.err.println();
System.err.println(msg);
}
System.err.println();
System.err.println("Optional arguments:");
System.err.println(" url <url> Url of the jolokia jmx service");
System.err.println(" debug To enable debug traces");
}
}