package org.docx4j.model.datastorage.xpathtracker;
import javax.xml.namespace.QName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map;
import java.util.HashMap;
/**
* Keeps track of the number of siblings element found so far.
*
* @author Kohsuke Kawaguchi
*/
public final class Histgram {
private static Logger log = LoggerFactory.getLogger(Histgram.class);
private final Map<QName,Integer> occurrence = new HashMap<QName, Integer>();
private String current;
private int currentValue;
public void update(String uri, String localName, String qName) {
if (localName.contains(":") /* QName constructor allows that */) {
log.error("Unexpected localName " + localName);
throw new java.lang.IllegalArgumentException("Unexpected localName " + localName);
}
QName qn = new QName(uri,localName);
Integer v = occurrence.get(qn);
if(v==null) {
v=1;
} else {
v++;
}
occurrence.put(qn,v);
current = qName;
currentValue = v;
}
public void appendPath(StringBuilder buf) {
if(current==null)
return; // this is the head
buf.append('/');
buf.append(current);
buf.append('[');
buf.append(currentValue);
buf.append(']');
}
}