package org.docx4j.model.datastorage;
import java.util.LinkedList;
import java.util.Map;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import org.docx4j.jaxb.Context;
import org.docx4j.wml.Tbl;
import org.docx4j.wml.Tc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Node;
import org.w3c.dom.traversal.NodeIterator;
/**
* @author jharrop
* @since 3.3.0
*/
public class BindingTraverserState {
private static Logger log = LoggerFactory.getLogger(BindingTraverserState.class);
LinkedList<Tc> tcStack = new LinkedList<Tc>();
LinkedList<Tbl> tblStack = new LinkedList<Tbl>();
public static void enteredTc(BindingTraverserState btState, NodeIterator nodeIterator) {
Node n = nodeIterator.nextNode(); //It is never null
if (n!=null) {
try {
Unmarshaller u = Context.jc.createUnmarshaller();
u.setEventHandler(new org.docx4j.jaxb.JaxbValidationEventHandler());
Object jaxb = u.unmarshal(n);
btState.tcStack.push( (Tc)jaxb );
} catch (ClassCastException e) {
log.error("Couldn't cast to RPr!");
} catch (JAXBException e) {
log.error(e.getMessage(), e);
}
}
}
public static void exitedTc(BindingTraverserState btState) {
btState.tcStack.pop();
}
public static void enteredTbl(BindingTraverserState btState, NodeIterator nodeIterator) {
Node n = nodeIterator.nextNode(); //It is never null
if (n != null) {
try {
Unmarshaller u = Context.jc.createUnmarshaller();
u.setEventHandler(new org.docx4j.jaxb.JaxbValidationEventHandler());
Object jaxb = u.unmarshal(n);
btState.tblStack.push( (Tbl)jaxb);
} catch (ClassCastException e) {
log.error("Couldn't cast to Tbl!");
} catch (JAXBException e) {
log.error(e.getMessage(), e);
}
}
}
public static void exitedTbl(BindingTraverserState btState) {
btState.tblStack.pop();
}
/**
* Our cache of XPath values, available
* if ENABLE_XPATH_CACHE = true.
*
* @since 3.3.1
*/
private Map<String, String> pathMap;
protected Map<String, String> getPathMap() {
return pathMap;
}
protected void setPathMap(Map<String, String> pathMap) {
this.pathMap = pathMap;
}
}