[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