package com.ontotext.kim.model; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import org.apache.log4j.Logger; import org.openrdf.model.Value; /** * Gathers statistics on the classes of the entities loaded from the vocabulary. * * @author mnozchev */ public class ClassStatisticListener extends EntitiesQueryListener { private static final Logger log = Logger.getLogger(StatisticListener.class); private final EntitiesQueryListener innerListener; private final Map<String, Integer> countByClass = new HashMap<String, Integer>(); public void endTableQueryResult() throws IOException { // We don't call super here on purpose. Calling the inner listener should take care of that. this.innerListener.endTableQueryResult(); for (Entry<String, Integer> ent : countByClass.entrySet()) { log.debug(ent.getKey() + " : " + ent.getValue()); } } public void startTableQueryResult(String[] arg0) throws IOException { // We don't call super here on purpose. Calling the inner listener should take care of that. this.innerListener.startTableQueryResult(arg0); countByClass.clear(); } public void startTableQueryResult() throws IOException { // We don't call super here on purpose. Calling the inner listener should take care of that. this.innerListener.startTableQueryResult(); countByClass.clear(); } @Override protected void addEntity(String instUri, String classUri, String aliasLabel) { // We don't call super here on purpose. Calling the inner listener should take care of that. this.innerListener.addEntity(instUri, classUri, aliasLabel); Integer oldValue = countByClass.get(classUri); countByClass.put(classUri, oldValue == null ? 0 : oldValue + 1); } public ClassStatisticListener(EntitiesQueryListener innerListener) { this.innerListener = innerListener; } @Override public void endTuple() throws IOException { // We don't call super here on purpose. Calling the inner listener should take care of that. this.innerListener.endTuple(); } @Override public void tupleValue(Value value) throws IOException { // We don't call super here on purpose. Calling the inner listener should take care of that. this.innerListener.tupleValue(value); } @Override public void startTuple() throws IOException { // We don't call super here on purpose. Calling the inner listener should take care of that. this.innerListener.startTuple(); } }