gui.disposeAsync();
gui = null;
break;
}
case DFGUIAdapter.REGISTER: {
AID df = (AID) ev.getParameter(0);
final DFAgentDescription dfd = (DFAgentDescription) ev.getParameter(1);
DFService.checkIsValid(dfd, true);
if (getAID().equals(df)) {
// Register an agent with this DF
DFRegister(dfd);
}
else {
// Register an agent with another DF.
gui.showStatusMsg("Processing your request & waiting for result...");
Register r = new Register();
r.setDescription(dfd);
Behaviour b = new RemoteDFRequester(df, r) {
public int onEnd() {
Object result = getResult();
if (!(result instanceof InternalError)) {
gui.showStatusMsg("Registration request processed. Ready for new request");
if(dfd.getName().equals(myAgent.getAID())) {
// The registered agent is the DF itself --> This is a federation
addParent(getRemoteDF(), dfd);
}
}
else {
gui.showStatusMsg("Error processing request. "+((InternalError) result).getMessage());
}
return 0;
}
};
addBehaviour(b);
}
break;
}
case DFGUIAdapter.DEREGISTER: {
AID df = (AID) ev.getParameter(0);
final DFAgentDescription dfd = (DFAgentDescription) ev.getParameter(1);
DFService.checkIsValid(dfd, false);
if (getAID().equals(df)) {
// Deregister an agent with this DF
DFDeregister(dfd);
}
else {
// Deregister an agent with another DF.
gui.showStatusMsg("Processing your request & waiting for result...");
Deregister d = new Deregister();
d.setDescription(dfd);
Behaviour b = new RemoteDFRequester(df, d) {
public int onEnd() {
Object result = getResult();
if (!(result instanceof InternalError)) {
gui.showStatusMsg("Deregistration request processed. Ready for new request");
if(dfd.getName().equals(myAgent.getAID())) {
// The deregistered agent is the DF itself --> Remove a federation
removeParent(getRemoteDF());
}
else {
gui.removeSearchResult(dfd.getName());
}
}
else {
gui.showStatusMsg("Error processing request. "+((InternalError) result).getMessage());
}
return 0;
}
};
addBehaviour(b);
}
break;
}
case DFGUIAdapter.MODIFY: {
AID df = (AID) ev.getParameter(0);
DFAgentDescription dfd = (DFAgentDescription) ev.getParameter(1);
DFService.checkIsValid(dfd, true);
if (getAID().equals(df)) {
// Modify the description of an agent with this DF
DFModify(dfd);
}
else {
// Modify the description of an agent with another DF
gui.showStatusMsg("Processing your request & waiting for result...");
Modify m = new Modify();
m.setDescription(dfd);
Behaviour b = new RemoteDFRequester(df, m) {
public int onEnd() {
Object result = getResult();
if (!(result instanceof InternalError)) {
gui.showStatusMsg("Modification request processed. Ready for new request");
}
else {
gui.showStatusMsg("Error processing request. "+((InternalError) result).getMessage());
}
return 0;
}
};
addBehaviour(b);
}
break;
}
case DFGUIAdapter.SEARCH: {
AID df = (AID) ev.getParameter(0);
DFAgentDescription dfd = (DFAgentDescription) ev.getParameter(1);
SearchConstraints sc = (SearchConstraints)ev.getParameter(2);
// Note that we activate a RemoteDFBehaviour even if the DF to perform
// the search on is the local DF. This allows handling recursive
// search (if needed) correctly
gui.showStatusMsg("Processing your request & waiting for result...");
Search s = new Search();
s.setDescription(dfd);
s.setConstraints(sc);
Behaviour b = new RemoteDFRequester(df, s) {
public int onEnd() {
Object result = getResult();
if (!(result instanceof InternalError)) {
gui.showStatusMsg("Search request processed. Ready for new request");
gui.refreshLastSearchResults((List) result, getRemoteDF());
}
else {
gui.showStatusMsg("Error processing request. "+((InternalError) result).getMessage());
}
return 0;
}
};
addBehaviour(b);
break;
}
case DFGUIAdapter.FEDERATE: {
AID df = (AID) ev.getParameter(0);
final DFAgentDescription dfd = (DFAgentDescription) ev.getParameter(1);
gui.showStatusMsg("Processing your request & waiting for result...");
Register r = new Register();
r.setDescription(dfd);