package au.com.acpfg.xml.query;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
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.XMLQueryEntry.ResultsType;
import au.com.acpfg.xml.query.XQueryReporter.QueryResponseFragmentType;
public class ElementDistributionReporter implements XQueryReporterInterface {
private final HashMap<String,Integer> m_start_tag_freq = new HashMap<String,Integer>();
public ElementDistributionReporter(XQueryReporter r, String colname) throws Exception {
r.register_callback(QueryResponseFragmentType.RESP_START_ELEMENT, new XQueryResponseInterface() {
@Override
public void callback(QueryResponseFragmentType type, String element_name) {
if (!m_start_tag_freq.containsKey(element_name)) {
m_start_tag_freq.put(element_name, new Integer(1));
} else {
Integer i = m_start_tag_freq.get(element_name);
m_start_tag_freq.put(element_name, new Integer(i.intValue()+1));
}
}
});
r.register_reporter(this, colname);
}
@Override
public void reset() {
m_start_tag_freq.clear();
}
@Override
public DataCell getCell(String colname) {
if (m_start_tag_freq == null || m_start_tag_freq.size() < 1) {
return DataType.getMissingCell();
}
// else...
List<StringCell> l = new ArrayList<StringCell>();
for (String key : m_start_tag_freq.keySet()) {
l.add(new StringCell(key+"="+m_start_tag_freq.get(key).toString()));
}
return CollectionCellFactory.createListCell(l);
}
}