package eu.dnetlib.xml.database.exist;

import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.exist.xmldb.XmldbURI;
import org.w3c.dom.Document;

/**
 * simple test trigger.
 * 
 * @author marko
 * 
 */
public class TestExistTrigger extends AbstractDiffTrigger {
	/**
	 * logger.
	 */
	private static final Log log = LogFactory.getLog(TestExistTrigger.class); // NOPMD by marko on 11/24/08 5:02 PM
	/**
	 * expression.
	 */
	private transient XPathExpression expr;

	/**
	 * useless.
	 */
	public TestExistTrigger() {
		super();
		
		try {
			expr = XPathFactory.newInstance().newXPath().compile("//hello");
		} catch (XPathExpressionException e) {
			log.fatal("cannot parse xpath", e);
		}
	}

	/**
	 * {@inheritDoc}
	 * 
	 * @see eu.dnetlib.xml.database.exist.AbstractDiffTrigger#triggerUpdate(org.w3c.dom.Document, org.w3c.dom.Document)
	 */
	@Override
	protected void triggerUpdate(final XmldbURI uri, final Document oldDoc, final Document newDoc) {
		try {
			log.info("old value: " + expr.evaluate(oldDoc));
			log.info("old value: " + expr.evaluate(newDoc));
		} catch (XPathExpressionException e) {
			log.fatal("xpatthing", e);
		}

	}

	/** 
	 * {@inheritDoc}
	 * @see eu.dnetlib.xml.database.exist.AbstractDiffTrigger#triggerCreate(org.w3c.dom.Document)
	 */
	@Override
	protected void triggerCreate(final XmldbURI uri, final Document newDoc) {
		try {
			log.debug("created new document: " + expr.evaluate(newDoc));
		} catch (XPathExpressionException e) {
			log.fatal("xpatthing", e);
		}
	}

	/** 
	 * {@inheritDoc}
	 * @see eu.dnetlib.xml.database.exist.AbstractDiffTrigger#triggerDelete(org.w3c.dom.Document)
	 */
	@Override
	protected void triggerDelete(final XmldbURI uri, final Document oldDoc) {
		try {
			log.debug("deleted document: " + expr.evaluate(oldDoc));
		} catch (XPathExpressionException e) {
			log.fatal("xpatthing", e);
		}		
	}

}
