Print

Print


Commit in lcsim/src/org/lcsim/util/decision on MAIN
ListFilterDriver.java+24-21.1 -> 1.2
MJC: Add optional extra type-safety to ListFilterDriver

lcsim/src/org/lcsim/util/decision
ListFilterDriver.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- ListFilterDriver.java	4 Jul 2006 20:57:29 -0000	1.1
+++ ListFilterDriver.java	26 Apr 2007 17:15:32 -0000	1.2
@@ -8,7 +8,7 @@
  * A Driver wrapper around the ListFilter class, which applies a
  * DecisionMakerSingle to each element in a list.
  *
- * @version $Id: ListFilterDriver.java,v 1.1 2006/07/04 20:57:29 mcharles Exp $
+ * @version $Id: ListFilterDriver.java,v 1.2 2007/04/26 17:15:32 mcharles Exp $
  */
 
 public class ListFilterDriver<E> extends Driver
@@ -31,6 +31,21 @@
       m_outputListName = outputList;
     }
 
+    /**
+     * Constructor.
+     *
+     * @param dec The DecisionMaker which will be applied.
+     * @param inputList The named List to read in and filter.
+     * @param outputList The name under which to write out the filtered List.
+     * @param containedClass Preserve type information (needed if the filtered list contains more than one subtype)
+     */
+    public ListFilterDriver (DecisionMakerSingle<E> dec, String inputList, String outputList, Class<E> containedClass) {
+      m_inputDecision = dec;
+      m_inputListName = inputList;
+      m_outputListName = outputList;
+      m_containedClass = containedClass;
+    }
+
     /** Process one event. */
     public void process(EventHeader event) 
     {
@@ -49,7 +64,13 @@
 	// ---------------------------
 	ListFilter<E> filter = new ListFilter<E> (m_inputDecision);
 	List<E> filteredInputList = filter.filterList(castInputList);
-	event.put(m_outputListName, filteredInputList);
+	if (m_containedClass == null) {
+	    // EventHeader will infer type information on the fly
+	    event.put(m_outputListName, filteredInputList);
+	} else {
+	    // Specify type information exactly
+	    event.put(m_outputListName, filteredInputList, m_containedClass, 0);
+	}
     }
 
     /** Set decision. */
@@ -62,4 +83,5 @@
     protected DecisionMakerSingle<E> m_inputDecision;
     protected String m_inputListName;
     protected String m_outputListName;
+    protected Class<E> m_containedClass = null;
 }
CVSspam 0.2.8