package org.docx4j.utils; import org.docx4j.XmlUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; /** * Use this if there is only a single object type (eg just P's) * you are interested in doing something with. * * For an example of use, see sample ImageConvertEmbeddedToLinked * * @author alberto */ public class SingleTraversalUtilVisitorCallback extends AbstractTraversalUtilVisitorCallback { protected static Logger log = LoggerFactory.getLogger(SingleTraversalUtilVisitorCallback.class); protected TraversalUtilVisitor visitor = null; protected Class visitorClass = null; public SingleTraversalUtilVisitorCallback(TraversalUtilVisitor visitor) { this.visitor = visitor; visitorClass = findClassParameter(visitor.getClass()); if (visitorClass == null) { throw new IllegalArgumentException("Can't identify the parameter class of the visitor " + visitor.getClass().getName()); } } @Override protected List<Object> apply(Object child, Object parent, List siblings) { if (visitorClass==null) { log.warn("visitorClass==null for some element with parent " + parent.getClass().getName() ); //log.warn(XmlUtils.marshaltoString(parent)); } else if (child==null) { if(log.isWarnEnabled()) { log.warn("child==null for some element with parent " + parent.getClass().getName()); // eg <w:t/> log.warn(XmlUtils.marshaltoString(parent)); } } else if (visitorClass.isAssignableFrom(child.getClass())) { visitor.apply(child, parent, siblings); } return null; } }