package org.drools.mas;/*
* To change this template, choose Tools | Templates and open the template in
* the editor.
*/
import org.apache.cxf.feature.Features;
import org.drools.mas.body.acts.*;
import org.drools.mas.body.content.*;
import org.drools.mas.core.DroolsAgent;
import org.drools.mas.mappers.MyMapArgsEntryType;
import org.drools.mas.mappers.MyMapReferenceEntryType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlSeeAlso;
import java.util.List;
/**
* @author salaboy
*/
@WebService(targetNamespace = "http://mas.drools.org/", serviceName="AsyncAgentService", portName="AsyncAgentServicePort", endpointInterface="org.drools.mas.AsyncDroolsAgentService")
@XmlSeeAlso(value = {ACLMessage.class, AbstractMessageBody.class, Inform.class, Info.class, QueryIf.class, InformIf.class,
Agree.class, Failure.class, Action.class, Rule.class, InformRef.class, Act.class, Disconfirm.class, Confirm.class,
QueryRef.class, Query.class, Ref.class, Encodings.class,
Ref.class, InformRef.class, Request.class, RequestWhen.class,
MyMapReferenceEntryType.class, MyMapArgsEntryType.class})
@Features(features = "org.apache.cxf.feature.LoggingFeature")
public class AsyncDroolsAgentServiceImpl implements AsyncDroolsAgentService {
private static Logger logger = LoggerFactory.getLogger(AsyncDroolsAgentServiceImpl.class);
private DroolsAgent agent;
public AsyncDroolsAgentServiceImpl() {
}
public void setAgent(DroolsAgent agent) {
this.agent = agent;
}
public void tell(ACLMessage message) {
if (logger.isDebugEnabled()) {
logger.debug(" >>> IN Message -> " + message.getPerformative().name());
}
try {
agent.tell(message);
} catch (Throwable t) {
if (logger.isErrorEnabled()) {
logger.error(">>> exception => " + t.getMessage());
t.printStackTrace();
}
}
}
public List<ACLMessage> getResponses(String msgId) {
List<ACLMessage> retrieveResponses = agent.getAgentAnswers(msgId);
if (logger.isDebugEnabled()) {
if (retrieveResponses != null) {
logger.debug(" <<< Number of OUT Messages -> " + retrieveResponses.size());
for (ACLMessage outMessage : retrieveResponses) {
logger.debug(" <<< OUT Message -> " + outMessage.getPerformative().name());
}
} else {
logger.debug(" <<< 0 OUT Messages");
}
}
return retrieveResponses;
}
public void dispose(){
logger.debug(" XXX Disposing Agent -> " + agent.getAgentId());
agent.dispose();
}
}