package eu.dnetlib.contract.evaluator;

import eu.dnetlib.contract.cp.CheckPointEvaluationException;
import eu.dnetlib.contract.cp.ICheckPoint;
import eu.dnetlib.contract.cp.eval.module.IEvaluatorModule;
import eu.dnetlib.contract.event.ResultContractEvent;
import eu.dnetlib.contract.node.EvaluationResult;
import eu.dnetlib.contract.node.EvaluationResult.Status;
import eu.dnetlib.enabling.aas.rmi.AuthenticateResp;

/**
 * Authentication result evaluation module.
 * 
 * @author mhorst
 *
 */
public class AuthnResultSuccessEvaluator implements IEvaluatorModule<ResultContractEvent> {

	
	/* (non-Javadoc)
	 * @see eu.dnetlib.contract.cp.eval.module.IEvaluatorModule#evaluate(java.lang.Object, eu.dnetlib.contract.event.IContractEvent, eu.dnetlib.contract.cp.ICheckPoint)
	 */
	@Override
	public EvaluationResult evaluate(Object arg0, ResultContractEvent event,
			ICheckPoint<ResultContractEvent> cp)
			throws CheckPointEvaluationException {
		if (arg0 instanceof AuthenticateResp) {
			AuthenticateResp authnResp = (AuthenticateResp) arg0;
			if (authnResp.getErrors()==null || authnResp.getErrors().length==0) {
				return new EvaluationResult(Status.OK, cp, event);
			} else {
				return new EvaluationResult(Status.FAIL, cp, event,
						"some errors found, id " + authnResp.getErrors()[0].getErrorId() +
						"; message: " + authnResp.getErrors()[0].getMsg());
			}
		} else {
			return new EvaluationResult(Status.FAIL, cp, event,
					"object is not an instance of " + AuthenticateResp.class.getName());
		}
	}

}
