lcsim/src/org/lcsim/util/decision
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;
}