package org.jboss.fresh.shell.commands;
import org.jboss.fresh.io.BufferWriter;
import org.jboss.fresh.io.PrintWriter2;
import org.jboss.fresh.shell.AbstractExecutable;
import org.jboss.fresh.events.EventCentral;
import org.jboss.fresh.registry.RegistryContext;
import org.jboss.fresh.ctx.Context;
import java.util.Map;
import java.util.Iterator;
import javax.naming.NamingException;
public class EventCentralQueryExe extends AbstractExecutable {
private static transient org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(EventCentralQueryExe.class);
/**
We set the current active project projekt.
*/
public void process(String exepath, String[] params) throws Exception {
log.debug("entered");
PrintWriter2 out = new PrintWriter2(new BufferWriter(getStdOut()));
boolean lb = false;
boolean ll = false;
boolean lr = false;
boolean all = false;
boolean help = false;
String name = null;
// see what to do:
for (int i = 0; i < params.length; i++) {
String val = params[i];
if (val.equals("--lb")) {
lb = true;
} else if (val.equals("--ll")) {
ll = true;
} else if (val.equals("--lr")) {
lr = true;
} else if (val.equals("--name")) {
if(i<params.length-1) {
name = params[++i];
} else {
error("Parameter --name should be followed by registry name pointing to EventCentral instance");
return;
}
} else if (val.equals("-a") || val.equals("--all")) {
all = true;
} else if (val.equals("-h") || val.equals("--help")) {
help = true;
}
}
if (params.length == 0 || help) {
out.println("Usage: ecquery [-a] ( --lb | --ll | --lr ) [--name <lookup_name>] ");
out.println(" --lb: list broadcasters");
out.println(" --ll: list listeners");
out.println(" --lr: list routers");
out.println(" -a, --all: include hidden");
out.println(" --name: get the object for the specified name");
out.println(" -h, --help : this help");
out.close();
log.debug("done");
return;
}
EventCentral ec = null;
if (name != null) {
RegistryContext ctx = new RegistryContext();
try {
ec = (EventCentral) ctx.lookup(name);
} catch(ClassCastException ex) {
error("Object bound in registry under " + name + " is not a valid EventCentral object: " + ctx.lookup(name));
return;
} catch(NamingException ex) {
log.error("Failed to retrieve EventCentral: ", ex);
error("Failed to find EventCentral with registry name: " + name);
return;
}
} else {
Context ctx = getShell().getContext();
ec = (EventCentral) ctx.get("EventCentral");
}
if(ec == null) {
error("Failed to locate EventCentral (make sure you specify EventCentral lookup name, or make sure instance is available in shell context under 'EventCentral')");
return;
}
if(ll) {
Map listeners = ec.getListeners(all);
Iterator it = listeners.entrySet().iterator();
while(it.hasNext()) {
Map.Entry ent = (Map.Entry) it.next();
EventCentral.ListenerData ldat = (EventCentral.ListenerData) ent.getValue();
out.println(ent.getKey() + ": " + ldat.getFilter() + " - " + ldat.getListener());
}
} else if(lb) {
Map broadcasters = ec.getBroadcasters(all);
Iterator it = broadcasters.entrySet().iterator();
while(it.hasNext()) {
Map.Entry ent = (Map.Entry) it.next();
out.println(ent.getKey() + ": " + ent.getValue());
}
}
log.debug("done");
}
}