/* * Copyright 2011 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.drools.mas.util; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.drools.grid.remote.InternalQueryResultsClient; import org.drools.grid.remote.QueryResultsRemoteClient; import org.drools.mas.body.content.Action; import org.drools.mas.body.content.NamedVariable; import org.drools.mas.body.content.Query; import org.drools.mas.body.content.Ref; import org.drools.mas.mappers.MyMapArgsEntryType; import org.drools.mas.mappers.MyMapReferenceEntryType; import org.drools.rule.Declaration; import org.drools.runtime.rule.impl.NativeQueryResults; import org.drools.runtime.rule.QueryResults; import org.drools.runtime.rule.Variable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author salaboy */ public class MessageContentHelper { public static Logger logger = LoggerFactory.getLogger(MessageContentHelper.class); public static Object[] getActionArgsArray(Action action) { Object[] myArray = new Object[action.getArgs().size()]; int i = 0; for (MyMapArgsEntryType entry : action.getArgs()) { myArray[i] = entry.getValue(); i++; } return myArray; } public static Ref getActionReferences(Action action, QueryResults results) { if (results.size() == 0) { return null; } Map<String, Object> map = new HashMap<String, Object>(); org.drools.QueryResults inner; List<MyMapReferenceEntryType> pointers = action.getReferences(); if (results instanceof NativeQueryResults) { inner = ((NativeQueryResults) results).getResults(); Declaration[] params = inner.getParameters(); for (MyMapReferenceEntryType entry : pointers) { Declaration dec = params[ entry.getKey()]; if (logger.isDebugEnabled()) { logger.debug(" $$$ Params [" + entry.getKey() + "] = " + params[ entry.getKey()]); logger.debug(" $$$ inner.get(0).get( " + dec.getIdentifier() + ") = " + inner.get(0).get(dec.getIdentifier())); logger.debug(" $$$ entry.getValue() " + entry.getValue()); } map.put(entry.getValue(), inner.get(0).get(dec.getIdentifier())); } } InternalQueryResultsClient innerClient; if (results instanceof QueryResultsRemoteClient) { innerClient = ((QueryResultsRemoteClient) results).getResults(); String[] paramsString = innerClient.getParameters(); for (MyMapReferenceEntryType entry : pointers) { String decString = paramsString[ entry.getKey()]; if (logger.isDebugEnabled()) { logger.debug(" $$$ ParamsString [" + entry.getKey() + "] = " + paramsString[ entry.getKey()]); logger.debug(" $$$ entry.getValue() " + entry.getValue()); // logger.debug(" $$$ innerClient.getObject( " + decString + ") = " + innerClient.getObject(decString)); } map.put(entry.getValue(), innerClient.getObject(decString)); } } Ref ref = new Ref(); ref.setReferences(MapArgsAdapterHelper.marshal(map)); return ref; } public static NamedVariable variable(String ref) { return new NamedVariable(ref); } public static Ref getQueryReferences(Query query, QueryResults results) { if (results.size() == 0) { return null; } Map<String, Object> map = new HashMap<String, Object>(); org.drools.QueryResults inner; if (results instanceof NativeQueryResults) { inner = ((NativeQueryResults) results).getResults(); Declaration[] params = inner.getParameters(); for (MyMapReferenceEntryType entry : query.getReferences()) { Declaration dec = params[ entry.getKey()]; map.put(entry.getValue(), inner.get(0).get(dec.getIdentifier())); } } InternalQueryResultsClient innerClient; if (results instanceof QueryResultsRemoteClient) { innerClient = ((QueryResultsRemoteClient) results).getResults(); String[] paramsString = innerClient.getParameters(); for (MyMapReferenceEntryType entry : query.getReferences()) { String decString = paramsString[ entry.getKey()]; map.put(entry.getValue(), innerClient.getObject(decString)); } } Ref ref = new Ref(); ref.setReferences(MapArgsAdapterHelper.marshal(map)); return ref; } public static Ref getActionReferences(Action action, Map<String, Object> results) { if (results.size() == 0) { return null; } Map<String, Object> map = new HashMap<String, Object>(); Iterator<MyMapArgsEntryType> iterator = action.getArgs().iterator(); while(iterator.hasNext()){ MyMapArgsEntryType entry = iterator.next(); if(entry.getValue() instanceof Variable){ map.put(entry.getKey(), results.get(entry.getKey())); } } Ref ref = new Ref(); ref.setReferences(MapArgsAdapterHelper.marshal(map)); return ref; } }