package eu.dnetlib.data.resultSet.cleaner;

import groovy.lang.Closure;
import groovy.lang.GroovyShell;

import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @author michele
 * 
 *         groovy example 1 : "(input =~ /X/).replaceAll('Y')" groovy example 2 : "input.toUpperCase()"
 */

public class GroovyRule extends XPathCleaningRule {

	private static final Log log = LogFactory.getLog(GroovyRule.class); // NOPMD by marko on 11/24/08 5:02 PM

	private String groovyRule;
	private Closure<String> closure;

	private GroovyShell groovyShell = new GroovyShell();

	@SuppressWarnings("unchecked")
	public GroovyRule(final String groovyRule, final String xpath, final boolean strict) {
		super(xpath, strict);
		this.groovyRule = groovyRule;
		this.closure = (Closure<String>) groovyShell.evaluate("{ input -> " + groovyRule + "}");
	}

	@Override
	protected String calculateNewValue(final String oldValue) {
		log.info("Executing groovy closure on value " + oldValue);
		return closure.call(oldValue);
	}

	@Override
	protected Map<String, String> verifyValue(final String value) {
		return null;
	}

	@Override
	public String toString() {
		return "GROOVY: " + groovyRule;
	}
}
