package org.drools.mas.util.helper; import org.drools.command.CommandFactory; import org.drools.grid.Grid; import org.drools.grid.helper.GridHelper; import org.drools.grid.remote.command.AsyncBatchExecutionCommandImpl; import org.drools.mas.Encodings; import org.drools.mas.util.MessageContentEncoder; import org.drools.runtime.StatefulKnowledgeSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class ResponseContent implements Serializable{ private String nodeId; private String sessionId; private String messageId; private Object data; private Fault fault; private static Logger logger = LoggerFactory.getLogger( ResponseContent.class ); // public static void deliverResponse( String nodeId, String sessionId, String msgId, Object ret, Fault fault ) { // deliverResponse( nodeId, sessionId, msgId, ret, fault, false ); // } public static void deliverResponse( Grid grid, String nodeId, String sessionId, String msgId, Object ret, Fault fault ) { deliverResponse( grid, nodeId, sessionId, msgId, ret, fault, false ); } // public static void deliverResponse( String nodeId, String sessionId, String msgId, Object ret, Fault fault, boolean needEncoding ) { // Grid grid = GridHelper.getInstance().createGrid(); // deliverResponse( grid, nodeId, sessionId, msgId, ret, fault, needEncoding ); // } public static void deliverResponse( Grid grid, String nodeId, String sessionId, String msgId, Object ret, Fault fault, boolean needEncoding ) { try { if ( logger.isDebugEnabled() ) { logger.debug( "(" + Thread.currentThread().getId() + ")"+Thread.currentThread().getName() + "Content helper is now active" ); } Map results = null; if ( ret != null ) { results = new HashMap(); if ( ret instanceof String ) { results.put( "?return", ret ); } else { if ( needEncoding ) { ret = MessageContentEncoder.encode( ret, Encodings.XML ); } results.put( "?return", ret ); } if ( logger.isDebugEnabled() ) { logger.debug("(" + Thread.currentThread().getId() + ")" + Thread.currentThread().getName() + "Content helper would like to return" + results.get("?return")); } } ResponseContent response = new ResponseContent( nodeId, sessionId, msgId, results ); response.setFault( fault ); if ( logger.isDebugEnabled() ) { logger.debug( "(" + Thread.currentThread().getId() + ")" + Thread.currentThread().getName() + "Content helper fault is expected to be null " + fault ); } StatefulKnowledgeSession kSession = GridHelper.getInstance().getStatefulKnowledgeSession( grid, nodeId, sessionId, true ); if ( logger.isDebugEnabled() ) { logger.debug( "(" + Thread.currentThread().getId() + ")"+Thread.currentThread().getName() +"Content helper ksession found!" ); } List list = new ArrayList(2); list.add( CommandFactory.newInsert(response) ); list.add( CommandFactory.newFireAllRules() ); AsyncBatchExecutionCommandImpl batch = new AsyncBatchExecutionCommandImpl( list ); if ( logger.isDebugEnabled() ) { logger.debug( "(" + Thread.currentThread().getId() + ")"+Thread.currentThread().getName() +"Content helper batch is ready" ); } kSession.execute( batch ); if ( logger.isDebugEnabled() ) { logger.debug("(" + Thread.currentThread().getId() + ")" + Thread.currentThread().getName() + "Content helper batch dispatched" ); } } catch (Exception e) { e.printStackTrace(); } } public ResponseContent(String nodeId, String sessionId, String messageId, Object data) { this.nodeId = nodeId; this.sessionId = sessionId; this.messageId = messageId; this.data = data; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public String getMessageId() { return messageId; } public void setMessageId(String messageId) { this.messageId = messageId; } public String getNodeId() { return nodeId; } public void setNodeId(String nodeId) { this.nodeId = nodeId; } public String getSessionId() { return sessionId; } public void setSessionId(String sessionId) { this.sessionId = sessionId; } public Fault getFault() { return fault; } public void setFault(Fault fault) { this.fault = fault; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final ResponseContent other = (ResponseContent) obj; if ((this.nodeId == null) ? (other.nodeId != null) : !this.nodeId.equals(other.nodeId)) { return false; } if ((this.sessionId == null) ? (other.sessionId != null) : !this.sessionId.equals(other.sessionId)) { return false; } if ((this.messageId == null) ? (other.messageId != null) : !this.messageId.equals(other.messageId)) { return false; } if (this.data != other.data && (this.data == null || !this.data.equals(other.data))) { return false; } if (this.fault != other.fault && (this.fault == null || !this.fault.equals(other.fault))) { return false; } return true; } @Override public int hashCode() { int hash = 7; hash = 89 * hash + (this.nodeId != null ? this.nodeId.hashCode() : 0); hash = 89 * hash + (this.sessionId != null ? this.sessionId.hashCode() : 0); hash = 89 * hash + (this.messageId != null ? this.messageId.hashCode() : 0); hash = 89 * hash + (this.data != null ? this.data.hashCode() : 0); hash = 89 * hash + (this.fault != null ? this.fault.hashCode() : 0); return hash; } @Override public String toString() { return "ResponseContent{" + "nodeId=" + nodeId + ", sessionId=" + sessionId + ", messageId=" + messageId + ", data=" + data + ", fault=" + fault + '}'; } }