package au.com.acpfg.xml.query;
import java.util.ArrayList;
import java.util.Stack;
import org.knime.core.data.DataCell;
import org.knime.core.data.DataType;
import org.knime.core.data.collection.CollectionCellFactory;
import org.knime.core.data.def.StringCell;
import au.com.acpfg.xml.query.XQueryReporter.QueryResponseFragmentType;
public class TextCollectionReporter extends TextReporter {
private Stack<String> m_tags; // determines when to start a new StringCell
private ArrayList<DataCell> m_results = new ArrayList<DataCell>();
public TextCollectionReporter(XQueryReporter xr, String colname) throws Exception {
super(xr, colname);
}
@Override
public void reset() {
m_results.clear();
super.reset();
}
@Override
public void callback(QueryResponseFragmentType type, String s) {
switch (type) {
case RESP_START_ELEMENT:
m_tags.push(s);
break;
case RESP_END_ELEMENT_TAG:
String tag = m_tags.pop();
if (m_tags.empty()) {
m_results.add(super.getCell(""));
super.reset();
}
break;
default:
super.callback(type, s);
break;
}
}
@Override
public DataCell getCell(String colname) {
if (m_results.size() < 1)
return DataType.getMissingCell();
return CollectionCellFactory.createListCell(m_results);
}
}