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.AuthorizeResp;

/**
 * Authorization result evaluation module.
 * 
 * @author mhorst
 *
 */
public class AuthzResultSuccessEvaluator 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 AuthorizeResp) {
			AuthorizeResp authzResp = (AuthorizeResp) arg0;
			if (authzResp.isAuthorized()) {
				return new EvaluationResult(Status.OK, cp, event);
			} else {
				if (authzResp.getErrors()==null || authzResp.getErrors().length==0) {
					return new EvaluationResult(Status.FAIL, cp, event, 
							"not authorized, no errors");
				} else {
					return new EvaluationResult(Status.FAIL, cp, event,
							"some errors found, id " + authzResp.getErrors()[0].getErrorId() +
							"; message: " + authzResp.getErrors()[0].getMsg());
				}
			}
		} else {
			return new EvaluationResult(Status.FAIL, cp, event,
					"object is not an instance of " + AuthorizeResp.class.getName());
		}
	}

}
