[jboss-svn-commits] JBL Code SVN: r25721 - in labs/jbossrules/trunk: drools-api/src/main/java/org/drools/runtime/help and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Mar 19 00:26:51 EDT 2009
Author: mark.proctor at jboss.com
Date: 2009-03-19 00:26:51 -0400 (Thu, 19 Mar 2009)
New Revision: 25721
Removed:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchMessageHelperProviderImpl.java
Modified:
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/help/BatchExecutionHelper.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectsCommand.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java
labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java
Log:
JBRULES-2015 GetObjects to be supported by as a Command with xstream marshalling
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java 2009-03-19 04:14:39 UTC (rev 25720)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java 2009-03-19 04:26:51 UTC (rev 25721)
@@ -4,6 +4,7 @@
import java.util.Map;
import org.drools.ProviderInitializationException;
+import org.drools.runtime.ObjectFilter;
/**
* <p>
@@ -55,6 +56,14 @@
public static Command newInsertElements(Iterable objects) {
return getCommandFactoryProvider().newInsertElements( objects );
}
+
+ public static Command newGetObjects() {
+ return getCommandFactoryProvider().newGetObjects( );
+ }
+
+ public static Command newGetObjects(ObjectFilter filter) {
+ return getCommandFactoryProvider().newGetObjects( filter );
+ }
/**
* Sets the global.
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java 2009-03-19 04:14:39 UTC (rev 25720)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java 2009-03-19 04:26:51 UTC (rev 25721)
@@ -3,6 +3,8 @@
import java.util.List;
import java.util.Map;
+import org.drools.runtime.ObjectFilter;
+
public interface CommandFactoryProvider {
Command newInsertObject(Object object);
@@ -10,7 +12,11 @@
String outIdentifier);
Command newInsertElements(Iterable iterable);
+
+ Command newGetObjects();
+ public Command newGetObjects(ObjectFilter filter);
+
Command newSetGlobal(String identifie,
Object object);
@@ -40,4 +46,5 @@
Object[] arguments);
Command newBatchExecution(List<? extends Command> commands);
+
}
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/help/BatchExecutionHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/help/BatchExecutionHelper.java 2009-03-19 04:14:39 UTC (rev 25720)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/help/BatchExecutionHelper.java 2009-03-19 04:26:51 UTC (rev 25721)
@@ -222,10 +222,10 @@
private static void loadProvider() {
try {
- Class<BatchExecutionHelperProvider> cls = (Class<BatchExecutionHelperProvider>) Class.forName( "org.drools.runtime.help.impl.BatchMessageHelperProviderImpl" );
+ Class<BatchExecutionHelperProvider> cls = (Class<BatchExecutionHelperProvider>) Class.forName( "org.drools.runtime.help.impl.BatchExecutionHelperProviderImpl" );
setBatchExecutionHelperProvider( cls.newInstance() );
} catch ( Exception e2 ) {
- throw new ProviderInitializationException( "Provider org.drools.runtime.help.impl.BatchMessageHelperProviderImpl could not be set.",
+ throw new ProviderInitializationException( "Provider org.drools.runtime.help.impl.BatchExecutionHelperProviderImpl could not be set.",
e2 );
}
}
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemory.java 2009-03-19 04:14:39 UTC (rev 25720)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemory.java 2009-03-19 04:26:51 UTC (rev 25721)
@@ -62,7 +62,7 @@
*
* @return
*/
- Collection< ? > getObjects();
+ Collection< ? extends Object > getObjects();
/**
* Returns all facts from the current session that are accepted by the given <code>ObjectFilter</code>.
@@ -71,7 +71,7 @@
*
* @return
*/
- Collection< ? > getObjects(ObjectFilter filter);
+ Collection< ? extends Object > getObjects(ObjectFilter filter);
/**
* Returns all <code>FactHandle</code>s from the current session.
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java 2009-03-19 04:14:39 UTC (rev 25720)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java 2009-03-19 04:26:51 UTC (rev 25721)
@@ -6,95 +6,91 @@
import org.drools.command.Command;
import org.drools.command.CommandFactoryProvider;
import org.drools.process.command.GetGlobalCommand;
+import org.drools.process.command.GetObjectsCommand;
import org.drools.process.command.InsertElementsCommand;
import org.drools.process.command.InsertObjectCommand;
import org.drools.process.command.QueryCommand;
import org.drools.process.command.SetGlobalCommand;
import org.drools.process.command.StartProcessCommand;
+import org.drools.runtime.ObjectFilter;
import org.drools.runtime.impl.BatchExecutionImpl;
-public class CommandFactoryProviderImpl
- implements
- CommandFactoryProvider {
+public class CommandFactoryProviderImpl implements CommandFactoryProvider {
- public Command newGetGlobal(String identifier) {
- return new GetGlobalCommand( identifier );
- }
+ public Command newGetGlobal(String identifier) {
+ return new GetGlobalCommand(identifier);
+ }
- public Command newGetGlobal(String identifier,
- String outIdentifier) {
- GetGlobalCommand cmd = new GetGlobalCommand( identifier );
- cmd.setOutIdentifier( outIdentifier );
- return cmd;
- }
+ public Command newGetGlobal(String identifier, String outIdentifier) {
+ GetGlobalCommand cmd = new GetGlobalCommand(identifier);
+ cmd.setOutIdentifier(outIdentifier);
+ return cmd;
+ }
- public Command newInsertElements(Iterable objects) {
- return new InsertElementsCommand( objects );
- }
+ public Command newInsertElements(Iterable objects) {
+ return new InsertElementsCommand(objects);
+ }
- public Command newInsertObject(Object object) {
- return new InsertObjectCommand( object );
- }
+ public Command newInsertObject(Object object) {
+ return new InsertObjectCommand(object);
+ }
- public Command newInsertObject(Object object,
- String outIdentifier) {
- InsertObjectCommand cmd = new InsertObjectCommand( object );
- cmd.setOutIdentifier( outIdentifier );
- return cmd;
- }
+ public Command newInsertObject(Object object, String outIdentifier) {
+ InsertObjectCommand cmd = new InsertObjectCommand(object);
+ cmd.setOutIdentifier(outIdentifier);
+ return cmd;
+ }
- public Command newSetGlobal(String identifier,
- Object object) {
- return new SetGlobalCommand( identifier,
- object );
- }
+ public Command newGetObjects() {
+ return newGetObjects(null);
+ }
- public Command newSetGlobal(String identifier,
- Object object,
- boolean out) {
- SetGlobalCommand cmd = new SetGlobalCommand( identifier,
- object );
- cmd.setOut( out );
- return cmd;
- }
+ public Command newGetObjects(ObjectFilter filter) {
+ return new GetObjectsCommand(filter);
+ }
- public Command newSetGlobal(String identifier,
- Object object,
- String outIdentifier) {
- SetGlobalCommand cmd = new SetGlobalCommand( identifier,
- object );
- cmd.setOutIdentifier( outIdentifier );
- return cmd;
- }
+ public Command newSetGlobal(String identifier, Object object) {
+ return new SetGlobalCommand(identifier, object);
+ }
- public Command newStartProcess(String processId) {
- StartProcessCommand startProcess = new StartProcessCommand();
- startProcess.setProcessId( processId );
- return startProcess;
- }
+ public Command newSetGlobal(String identifier, Object object, boolean out) {
+ SetGlobalCommand cmd = new SetGlobalCommand(identifier, object);
+ cmd.setOut(out);
+ return cmd;
+ }
- public Command newStartProcess(String processId,
- Map<String, Object> parameters) {
- StartProcessCommand startProcess = new StartProcessCommand();
- startProcess.setProcessId( processId );
- startProcess.setParameters( parameters );
- return startProcess;
- }
-
- public Command newQuery(String identifier,
- String name) {
- return new QueryCommand(identifier, name, null );
-
- }
-
- public Command newQuery(String identifier,
- String name,
- Object[] arguments) {
- return new QueryCommand(identifier, name, arguments);
- }
-
- public Command newBatchExecution(List<? extends Command> commands) {
- return new BatchExecutionImpl( (List<org.drools.process.command.Command>)commands );
- }
+ public Command newSetGlobal(String identifier, Object object,
+ String outIdentifier) {
+ SetGlobalCommand cmd = new SetGlobalCommand(identifier, object);
+ cmd.setOutIdentifier(outIdentifier);
+ return cmd;
+ }
+ public Command newStartProcess(String processId) {
+ StartProcessCommand startProcess = new StartProcessCommand();
+ startProcess.setProcessId(processId);
+ return startProcess;
+ }
+
+ public Command newStartProcess(String processId,
+ Map<String, Object> parameters) {
+ StartProcessCommand startProcess = new StartProcessCommand();
+ startProcess.setProcessId(processId);
+ startProcess.setParameters(parameters);
+ return startProcess;
+ }
+
+ public Command newQuery(String identifier, String name) {
+ return new QueryCommand(identifier, name, null);
+
+ }
+
+ public Command newQuery(String identifier, String name, Object[] arguments) {
+ return new QueryCommand(identifier, name, arguments);
+ }
+
+ public Command newBatchExecution(List<? extends Command> commands) {
+ return new BatchExecutionImpl(
+ (List<org.drools.process.command.Command>) commands);
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectsCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectsCommand.java 2009-03-19 04:14:39 UTC (rev 25720)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectsCommand.java 2009-03-19 04:26:51 UTC (rev 25721)
@@ -1,16 +1,30 @@
package org.drools.process.command;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
+import java.util.List;
+import org.drools.impl.StatefulKnowledgeSessionImpl.ObjectStoreWrapper;
import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.runtime.ObjectFilter;
public class GetObjectsCommand
implements
- Command<Iterator< ? >> {
+ Command<Collection< ? extends Object>> {
- private ObjectFilter filter = null;
+ public String getOutIdentifier() {
+ return outIdentifier;
+ }
+ public void setOutIdentifier(String outIdentifier) {
+ this.outIdentifier = outIdentifier;
+ }
+
+ private ObjectFilter filter = null;
+
+ private String outIdentifier;
+
public GetObjectsCommand() {
}
@@ -18,14 +32,36 @@
this.filter = filter;
}
- public Iterator< ? > execute(ReteooWorkingMemory session) {
+ public Collection< ? extends Object > execute(ReteooWorkingMemory session) {
+ Collection col = null;
+
if ( filter != null ) {
- return session.iterateObjects( filter );
+ col = getObjects( session, filter );
} else {
- return session.iterateObjects();
+ col = getObjects(session);
}
+
+ if ( this.outIdentifier != null ) {
+ List objects = new ArrayList( col );
+
+ session.getBatchExecutionResult().getResults().put( this.outIdentifier, objects );
+ }
+
+ return col;
}
+
+ public Collection< ? extends Object > getObjects(ReteooWorkingMemory session) {
+ return new ObjectStoreWrapper( session.getObjectStore(),
+ null,
+ ObjectStoreWrapper.OBJECT );
+ }
+ public Collection< ? extends Object > getObjects(ReteooWorkingMemory session, org.drools.runtime.ObjectFilter filter) {
+ return new ObjectStoreWrapper( session.getObjectStore(),
+ filter,
+ ObjectStoreWrapper.OBJECT );
+ }
+
public String toString() {
if ( filter != null ) {
return "session.iterateObjects( " + filter + " );";
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java 2009-03-19 04:14:39 UTC (rev 25720)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java 2009-03-19 04:26:51 UTC (rev 25721)
@@ -205,25 +205,12 @@
return this.commandService.execute( new GetFactHandlesCommand( filter ) );
}
- public Collection< ? > getObjects() {
- Collection<Object> result = new ArrayList<Object>();
- Iterator< ? > iterator = commandService.execute( new GetObjectsCommand() );
- if ( iterator != null ) {
- while ( iterator.hasNext() ) {
- result.add( iterator.next() );
- }
- }
- return result;
+ public Collection< ? extends Object> getObjects() {
+ return getObjects( null );
}
- public Collection< ? > getObjects(ObjectFilter filter) {
- Collection<Object> result = new ArrayList<Object>();
- Iterator< ? > iterator = commandService.execute( new GetObjectsCommand( filter ) );
- if ( iterator != null ) {
- while ( iterator.hasNext() ) {
- result.add( iterator.next() );
- }
- }
+ public Collection< ? extends Object > getObjects(ObjectFilter filter) {
+ Collection result = commandService.execute( new GetObjectsCommand( filter ) );
return result;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java 2009-03-19 04:14:39 UTC (rev 25720)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java 2009-03-19 04:26:51 UTC (rev 25721)
@@ -10,6 +10,7 @@
import org.drools.base.ClassObjectType;
import org.drools.base.DroolsQuery;
import org.drools.process.command.GetGlobalCommand;
+import org.drools.process.command.GetObjectsCommand;
import org.drools.process.command.InsertElementsCommand;
import org.drools.process.command.InsertObjectCommand;
import org.drools.process.command.QueryCommand;
@@ -41,11 +42,11 @@
public XStream newXStreamMarshaller() {
ElementNames names = new XmlElementNames();
- //ElementNames names = new JsonElementNames();
+ // ElementNames names = new JsonElementNames();
- //XStream xstream = new XStream( new JettisonMappedXmlDriver() );
+ // XStream xstream = new XStream( new JettisonMappedXmlDriver() );
XStream xstream = new XStream();
- //xstream.setMode( XStream.NO_REFERENCES );
+ // xstream.setMode( XStream.NO_REFERENCES );
xstream.processAnnotations( BatchExecutionImpl.class );
xstream.addImplicitCollection( BatchExecutionImpl.class,
"commands" );
@@ -58,14 +59,16 @@
InsertElementsCommand.class );
xstream.alias( "startProcess",
StartProcessCommand.class );
- xstream.alias( "query",
- QueryCommand.class );
xstream.alias( "set-global",
SetGlobalCommand.class );
xstream.alias( "get-global",
GetGlobalCommand.class );
+ xstream.alias( "get-objects",
+ GetObjectsCommand.class );
xstream.alias( "batch-execution-results",
BatchExecutionResultImpl.class );
+ xstream.alias( "query",
+ QueryCommand.class );
xstream.alias( "query-results",
FlatQueryResults.class );
xstream.alias( "query-results",
@@ -77,6 +80,7 @@
xstream.registerConverter( new QueryConverter( xstream.getMapper() ) );
xstream.registerConverter( new SetGlobalConverter( xstream.getMapper() ) );
xstream.registerConverter( new GetGlobalConverter( xstream.getMapper() ) );
+ xstream.registerConverter( new GetObjectsConverter( xstream.getMapper() ) );
xstream.registerConverter( new BatchExecutionResultConverter( xstream.getMapper() ) );
xstream.registerConverter( new QueryResultsConverter( xstream.getMapper() ) );
@@ -309,6 +313,41 @@
}
}
+ public static class GetObjectsConverter extends AbstractCollectionConverter
+ implements
+ Converter {
+
+ public GetObjectsConverter(Mapper mapper) {
+ super( mapper );
+ }
+
+ public void marshal(Object object,
+ HierarchicalStreamWriter writer,
+ MarshallingContext context) {
+ GetObjectsCommand cmd = (GetObjectsCommand) object;
+
+ if ( cmd.getOutIdentifier() != null ) {
+ writer.addAttribute( "out-identifier",
+ cmd.getOutIdentifier() );
+ }
+ }
+
+ public Object unmarshal(HierarchicalStreamReader reader,
+ UnmarshallingContext context) {
+ String identifierOut = reader.getAttribute( "out-identifier" );
+
+ GetObjectsCommand cmd = new GetObjectsCommand();
+ if ( identifierOut != null ) {
+ cmd.setOutIdentifier( identifierOut );
+ }
+ return cmd;
+ }
+
+ public boolean canConvert(Class clazz) {
+ return clazz.equals( GetObjectsCommand.class );
+ }
+ }
+
public static class QueryConverter extends AbstractCollectionConverter
implements
Converter {
@@ -338,7 +377,7 @@
UnmarshallingContext context) {
List<String> outs = new ArrayList<String>();
- //Query cmd = null;
+ // Query cmd = null;
String outIdentifier = reader.getAttribute( "out-identifier" );
String name = reader.getAttribute( "name" );
List<Object> args = new ArrayList<Object>();
@@ -482,7 +521,7 @@
MarshallingContext context) {
QueryResults results = (QueryResults) object;
- // write out identifiers
+ // write out identifiers
List<String> originalIds = Arrays.asList( results.getIdentifiers() );
List<String> actualIds = new ArrayList();
if ( results instanceof NativeQueryResults ) {
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchMessageHelperProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchMessageHelperProviderImpl.java 2009-03-19 04:14:39 UTC (rev 25720)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchMessageHelperProviderImpl.java 2009-03-19 04:26:51 UTC (rev 25721)
@@ -1,559 +0,0 @@
-package org.drools.runtime.help.impl;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.drools.base.ClassObjectType;
-import org.drools.base.DroolsQuery;
-import org.drools.process.command.GetGlobalCommand;
-import org.drools.process.command.InsertElementsCommand;
-import org.drools.process.command.InsertObjectCommand;
-import org.drools.process.command.QueryCommand;
-import org.drools.process.command.SetGlobalCommand;
-import org.drools.process.command.StartProcessCommand;
-import org.drools.rule.Declaration;
-import org.drools.runtime.BatchExecutionResults;
-import org.drools.runtime.help.BatchExecutionHelperProvider;
-import org.drools.runtime.impl.BatchExecutionImpl;
-import org.drools.runtime.impl.BatchExecutionResultImpl;
-import org.drools.runtime.rule.QueryResults;
-import org.drools.runtime.rule.QueryResultsRow;
-import org.drools.runtime.rule.impl.FlatQueryResults;
-import org.drools.runtime.rule.impl.NativeQueryResults;
-import org.drools.spi.ObjectType;
-
-import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.converters.Converter;
-import com.thoughtworks.xstream.converters.MarshallingContext;
-import com.thoughtworks.xstream.converters.UnmarshallingContext;
-import com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter;
-import com.thoughtworks.xstream.io.HierarchicalStreamReader;
-import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
-import com.thoughtworks.xstream.mapper.Mapper;
-
-public class BatchMessageHelperProviderImpl
- implements
- BatchExecutionHelperProvider {
-
- public XStream newXStreamMarshaller() {
- ElementNames names = new XmlElementNames();
- //ElementNames names = new JsonElementNames();
-
- //XStream xstream = new XStream( new JettisonMappedXmlDriver() );
- XStream xstream = new XStream();
- //xstream.setMode( XStream.NO_REFERENCES );
- xstream.processAnnotations( BatchExecutionImpl.class );
- xstream.addImplicitCollection( BatchExecutionImpl.class,
- "commands" );
-
- xstream.alias( "batch-execution",
- BatchExecutionImpl.class );
- xstream.alias( "insert",
- InsertObjectCommand.class );
- xstream.alias( "insert-elements",
- InsertElementsCommand.class );
- xstream.alias( "startProcess",
- StartProcessCommand.class );
- xstream.alias( "query",
- QueryCommand.class );
- xstream.alias( "set-global",
- SetGlobalCommand.class );
- xstream.alias( "get-global",
- GetGlobalCommand.class );
- xstream.alias( "batch-execution-results", BatchExecutionResultImpl.class );
- xstream.alias( "query-results", FlatQueryResults.class );
- xstream.alias( "query-results", NativeQueryResults.class );
-
- xstream.registerConverter( new InsertConverter( xstream.getMapper() ) );
- xstream.registerConverter( new InsertElementsConverter( xstream.getMapper() ) );
- xstream.registerConverter( new StartProcessConvert( xstream.getMapper() ) );
- xstream.registerConverter( new QueryConverter( xstream.getMapper() ) );
- xstream.registerConverter( new SetGlobalConverter( xstream.getMapper() ) );
- xstream.registerConverter( new GetGlobalConverter( xstream.getMapper() ) );
- xstream.registerConverter( new BatchExecutionResultConverter( xstream.getMapper() ) );
- xstream.registerConverter( new QueryResultsConverter( xstream.getMapper() ) );
-
- return xstream;
- }
-
- public static interface ElementNames {
- public String getIn();
-
- public String getInOut();
-
- public String getOut();
- }
-
- public static class JsonElementNames
- implements
- ElementNames {
- private String in = "in";
- private String inOut = "inOut";
- private String out = "out";
-
- public String getIn() {
- return in;
- }
-
- public String getInOut() {
- return inOut;
- }
-
- public String getOut() {
- return out;
- }
- }
-
- public static class XmlElementNames
- implements
- ElementNames {
- private String in = "in";
- private String inOut = "in-out";
- private String out = "out";
-
- public String getIn() {
- return in;
- }
-
- public String getInOut() {
- return inOut;
- }
-
- public String getOut() {
- return out;
- }
- }
-
- public static class InsertConverter extends AbstractCollectionConverter
- implements
- Converter {
-
- public InsertConverter(Mapper mapper) {
- super( mapper );
- }
-
- public void marshal(Object object,
- HierarchicalStreamWriter writer,
- MarshallingContext context) {
- InsertObjectCommand cmd = (InsertObjectCommand) object;
- if ( cmd.getOutIdentifier() != null ) {
- writer.addAttribute( "out-identifier",
- cmd.getOutIdentifier() );
- }
- writeItem( cmd.getObject(),
- context,
- writer );
- }
-
- public Object unmarshal(HierarchicalStreamReader reader,
- UnmarshallingContext context) {
- String identifierOut = reader.getAttribute( "out-identifier" );
-
- reader.moveDown();
- Object object = readItem( reader,
- context,
- null );
- reader.moveUp();
- InsertObjectCommand cmd = new InsertObjectCommand( object );
- if ( identifierOut != null ) {
- cmd.setOutIdentifier( identifierOut );
- }
- return cmd;
- }
-
- public boolean canConvert(Class clazz) {
- return clazz.equals( InsertObjectCommand.class );
- }
-
- }
-
- public static class InsertElementsConverter extends AbstractCollectionConverter
- implements
- Converter {
-
- public InsertElementsConverter(Mapper mapper) {
- super( mapper );
- }
-
- public void marshal(Object object,
- HierarchicalStreamWriter writer,
- MarshallingContext context) {
- InsertElementsCommand cmd = (InsertElementsCommand) object;
- for ( Object element : cmd.getObjects() ) {
- writeItem( element,
- context,
- writer );
- }
- }
-
- public Object unmarshal(HierarchicalStreamReader reader,
- UnmarshallingContext context) {
- List objects = new ArrayList();
- while ( reader.hasMoreChildren() ) {
- reader.moveDown();
- Object object = readItem( reader,
- context,
- null );
- reader.moveUp();
- objects.add( object );
- }
- InsertElementsCommand cmd = new InsertElementsCommand( objects );
-
- return cmd;
- }
-
- public boolean canConvert(Class clazz) {
- return clazz.equals( InsertElementsCommand.class );
- }
-
- }
-
- public static class SetGlobalConverter extends AbstractCollectionConverter
- implements
- Converter {
-
- public SetGlobalConverter(Mapper mapper) {
- super( mapper );
- }
-
- public void marshal(Object object,
- HierarchicalStreamWriter writer,
- MarshallingContext context) {
- SetGlobalCommand cmd = (SetGlobalCommand) object;
-
- writer.addAttribute( "identifier",
- cmd.getIdentifier() );
-
- if ( cmd.getOutIdentifier() != null ) {
- writer.addAttribute( "out-identifier",
- cmd.getOutIdentifier() );
- } else if ( cmd.isOut() ) {
- writer.addAttribute( "out",
- Boolean.toString( cmd.isOut() ) );
- }
-
- writeItem( cmd.getObject(),
- context,
- writer );
- }
-
- public Object unmarshal(HierarchicalStreamReader reader,
- UnmarshallingContext context) {
- String identifier = reader.getAttribute( "identifier" );
- String out = reader.getAttribute( "out" );
- String identifierOut = reader.getAttribute( "out-identifier" );
-
- reader.moveDown();
- Object object = readItem( reader,
- context,
- null );
- reader.moveUp();
- SetGlobalCommand cmd = new SetGlobalCommand( identifier,
- object );
- if ( identifierOut != null ) {
- cmd.setOutIdentifier( identifierOut );
- } else if ( out != null ) {
- cmd.setOut( Boolean.parseBoolean( out ) );
- }
- return cmd;
- }
-
- public boolean canConvert(Class clazz) {
- return clazz.equals( SetGlobalCommand.class );
- }
- }
-
- public static class GetGlobalConverter extends AbstractCollectionConverter
- implements
- Converter {
-
- public GetGlobalConverter(Mapper mapper) {
- super( mapper );
- }
-
- public void marshal(Object object,
- HierarchicalStreamWriter writer,
- MarshallingContext context) {
- GetGlobalCommand cmd = (GetGlobalCommand) object;
-
- writer.addAttribute( "identifier",
- cmd.getIdentifier() );
-
- if ( cmd.getOutIdentifier() != null ) {
- writer.addAttribute( "out-identifier",
- cmd.getOutIdentifier() );
- }
- }
-
- public Object unmarshal(HierarchicalStreamReader reader,
- UnmarshallingContext context) {
- String identifier = reader.getAttribute( "identifier" );
- String identifierOut = reader.getAttribute( "out-identifier" );
-
- GetGlobalCommand cmd = new GetGlobalCommand( identifier );
- if ( identifierOut != null ) {
- cmd.setOutIdentifier( identifierOut );
- }
- return cmd;
- }
-
- public boolean canConvert(Class clazz) {
- return clazz.equals( GetGlobalCommand.class );
- }
-}
-
- public static class QueryConverter extends AbstractCollectionConverter
- implements
- Converter {
-
- public QueryConverter(Mapper mapper) {
- super( mapper );
- }
-
- public void marshal(Object object,
- HierarchicalStreamWriter writer,
- MarshallingContext context) {
- QueryCommand cmd = (QueryCommand) object;
- writer.addAttribute( "out-identifier",
- cmd.getOutIdentifier() );
- writer.addAttribute( "name",
- cmd.getName() );
- if ( cmd.getArguments() != null) {
- for ( Object arg : cmd.getArguments() ) {
- writeItem( arg,
- context,
- writer );
- }
- }
- }
-
- public Object unmarshal(HierarchicalStreamReader reader,
- UnmarshallingContext context) {
- List<String> outs = new ArrayList<String>();
-
- //Query cmd = null;
- String outIdentifier = reader.getAttribute( "out-identifier" );
- String name = reader.getAttribute( "name" );
- List<Object> args = new ArrayList<Object>();
- while ( reader.hasMoreChildren() ) {
- reader.moveDown();
- Object arg = readItem( reader,
- context,
- null );
- args.add( arg );
- reader.moveUp();
- }
- QueryCommand cmd = new QueryCommand( outIdentifier,
- name,
- args.toArray( new Object[args.size()] ) );
-
- return cmd;
- }
-
- public boolean canConvert(Class clazz) {
- return clazz.equals( QueryCommand.class );
- }
- }
-
- public static class StartProcessConvert extends AbstractCollectionConverter
- implements
- Converter {
-
- public StartProcessConvert(Mapper mapper) {
- super( mapper );
- }
-
- public void marshal(Object object,
- HierarchicalStreamWriter writer,
- MarshallingContext context) {
- StartProcessCommand cmd = (StartProcessCommand) object;
- writer.addAttribute( "processId",
- cmd.getProcessId() );
-
- for ( Entry<String, Object> entry : cmd.getParameters().entrySet() ) {
- writer.startNode( "parameter" );
- writer.addAttribute( "identifier",
- entry.getKey() );
- writeItem( entry.getValue(),
- context,
- writer );
- writer.endNode();
- }
- }
-
- public Object unmarshal(HierarchicalStreamReader reader,
- UnmarshallingContext context) {
- String processId = reader.getAttribute( "processId" );
-
- Map<String, Object> params = new HashMap<String, Object>();
- while ( reader.hasMoreChildren() ) {
- reader.moveDown();
- String identifier = reader.getAttribute( "identifier" );
- reader.moveDown();
- Object value = readItem( reader,
- context,
- null );
- reader.moveUp();
- params.put( identifier,
- value );
- reader.moveUp();
- }
- StartProcessCommand cmd = new StartProcessCommand();
- cmd.setProcessId( processId );
- cmd.setParameters( params );
-
- return cmd;
- }
-
- public boolean canConvert(Class clazz) {
- return clazz.equals( StartProcessCommand.class );
- }
- }
-
- public static class BatchExecutionResultConverter extends AbstractCollectionConverter
- implements
- Converter {
-
- public BatchExecutionResultConverter(Mapper mapper) {
- super( mapper );
- }
-
- public void marshal(Object object,
- HierarchicalStreamWriter writer,
- MarshallingContext context) {
- BatchExecutionResults result = (BatchExecutionResults) object;
- for ( String identifier : result.getIdentifiers() ) {
- writer.startNode( "result" );
- writer.addAttribute( "identifier", identifier );
- Object value = result.getValue( identifier );
- writeItem( value,
- context,
- writer );
- writer.endNode();
- }
- }
-
- public Object unmarshal(HierarchicalStreamReader reader,
- UnmarshallingContext context) {
- Map map = new HashMap();
-
- while ( reader.hasMoreChildren() ) {
- reader.moveDown();
- String identifier= reader.getAttribute( "identifier" );
- reader.moveDown();
- Object value = readItem( reader,
- context,
- null );
- map.put( identifier, value);
- reader.moveUp();
- reader.moveUp();
- }
-
- BatchExecutionResultImpl result = new BatchExecutionResultImpl();
- result.setResults( map );
-
- return result;
- }
-
- public boolean canConvert(Class clazz) {
- return BatchExecutionResults.class.isAssignableFrom( clazz );
- }
-}
-
- public static class QueryResultsConverter extends AbstractCollectionConverter
- implements
- Converter {
-
- public QueryResultsConverter(Mapper mapper) {
- super( mapper );
- }
-
- public void marshal(Object object,
- HierarchicalStreamWriter writer,
- MarshallingContext context) {
- QueryResults results = (QueryResults) object;
-
- // write out identifiers
- List<String> originalIds = Arrays.asList( results.getIdentifiers() );
- List<String> actualIds = new ArrayList();
- if ( results instanceof NativeQueryResults ) {
- for ( String identifier : originalIds ) {
- // we don't want to marshall the query parameters
- Declaration declr = ((NativeQueryResults)results).getDeclarations().get( identifier );
- ObjectType objectType = declr.getPattern().getObjectType();
- if ( objectType instanceof ClassObjectType ) {
- if ( ((ClassObjectType)objectType).getClassType() == DroolsQuery.class ) {
- continue;
- }
- }
- actualIds.add( identifier );
- }
- }
-
- String[] identifiers = actualIds.toArray( new String[ actualIds.size() ] );
-
-
- writer.startNode( "identifiers" );
- for ( int i = 0; i < identifiers.length; i++ ) {
- writer.startNode( "identifier" );
- writer.setValue( identifiers[i] );
- writer.endNode();
- }
- writer.endNode();
-
- for ( QueryResultsRow result : results ) {
- writer.startNode( "row" );
- for ( int i = 0; i < identifiers.length; i++ ) {
- Object value = result.get( identifiers[i] );
- writeItem( value,
- context,
- writer );
- }
- writer.endNode();
- }
- }
-
- public Object unmarshal(HierarchicalStreamReader reader,
- UnmarshallingContext context) {
- reader.moveDown();
- List<String> list = new ArrayList<String>();
- while( reader.hasMoreChildren() ) {
- reader.moveDown();
- list.add( reader.getValue() );
- reader.moveUp();
- }
- reader.moveUp();
-
- Map<String, Integer> identifiers = new HashMap<String, Integer>();
- for ( int i = 0; i < list.size(); i++ ) {
- identifiers.put( list.get( i ), i);
- }
-
- List results = new ArrayList();
- while( reader.hasMoreChildren() ) {
- reader.moveDown();
- List objects = new ArrayList();
- while( reader.hasMoreChildren() ) {
- reader.moveDown();
- Object object = readItem( reader,
- context,
- null );
- objects.add( object );
- reader.moveUp();
- }
- results.add( objects );
- reader.moveUp();
- }
-
- return new FlatQueryResults(identifiers, results );
- }
-
- public boolean canConvert(Class clazz) {
- return QueryResults.class.isAssignableFrom( clazz );
- }
- }
-}
Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java 2009-03-19 04:14:39 UTC (rev 25720)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java 2009-03-19 04:26:51 UTC (rev 25721)
@@ -280,6 +280,72 @@
assertXMLEqual(expectedXml, outXml );
}
+ public void testGetObjects() throws Exception {
+ String str = "";
+ str += "package org.drools \n";
+ str += "import org.drools.Cheese \n";
+ str += "rule rule1 \n";
+ str += " when \n";
+ str += " $c : Cheese() \n";
+ str += " \n";
+ str += " then \n";
+ str += " $c.setPrice( $c.getPrice() + 5 ); \n";
+ str += "end\n";
+
+ String inXml = "";
+ inXml += "<batch-execution>";
+ inXml += " <insert-elements>";
+ inXml += " <org.drools.Cheese>";
+ inXml += " <type>stilton</type>";
+ inXml += " <price>25</price>";
+ inXml += " <oldPrice>0</oldPrice>";
+ inXml += " </org.drools.Cheese>";
+ inXml += " <org.drools.Cheese>";
+ inXml += " <type>stilton</type>";
+ inXml += " <price>30</price>";
+ inXml += " <oldPrice>0</oldPrice>";
+ inXml += " </org.drools.Cheese>";
+ inXml += " </insert-elements>";
+ inXml += " <get-objects out-identifier='list' />";
+ inXml += "</batch-execution>";
+
+ StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+ ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+ getPipeline(ksession).insert( inXml, resultHandler );
+ String outXml = ( String ) resultHandler.getObject();
+
+ String expectedXml = "";
+ expectedXml += "<batch-execution-results>\n";
+ expectedXml += " <result identifier='list'>\n";
+ expectedXml += " <list>\n";
+ expectedXml += " <org.drools.Cheese>\n";
+ expectedXml += " <type>stilton</type>\n";
+ expectedXml += " <price>35</price>\n";
+ expectedXml += " <oldPrice>0</oldPrice>\n";
+ expectedXml += " </org.drools.Cheese>\n";
+ expectedXml += " <org.drools.Cheese>\n";
+ expectedXml += " <type>stilton</type>\n";
+ expectedXml += " <price>30</price>\n";
+ expectedXml += " <oldPrice>0</oldPrice>\n";
+ expectedXml += " </org.drools.Cheese>\n";
+ expectedXml += " </list>\n";
+ expectedXml += " </result>\n";
+ expectedXml += "</batch-execution-results>\n";
+
+ assertXMLEqual( expectedXml, outXml );
+
+ BatchExecutionResults result = ( BatchExecutionResults ) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+ List list = ( List ) result.getValue( "list" );
+ Cheese stilton25 = new Cheese( "stilton", 30);
+ Cheese stilton30 = new Cheese( "stilton", 35);
+
+ Set expectedList = new HashSet();
+ expectedList.add( stilton25 );
+ expectedList.add( stilton30 );
+
+ assertEquals( expectedList, new HashSet( list ));
+ }
+
public void testQuery() throws Exception {
String str = "";
str += "package org.drools.test \n";
@@ -596,11 +662,10 @@
getPipelineStateful(ksession).insert( nextXML, resultHandler );
outXml = ( String ) resultHandler.getObject();
assertTrue(outXml.indexOf("<price>30</price>") > -1);
-
-
-
}
+
+
private Pipeline getPipeline(StatelessKnowledgeSession ksession) {
Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
More information about the jboss-svn-commits
mailing list