package eu.dnetlib.pid.service.mock;

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

import org.socialhistoryservices.pid.*;

/**
 * Mock implementation for the IISG HandleResource. Always returns constants.
 * 
 * @author alessia
 * 
 */
public class PidResourceMock implements PidResource {

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

	/**
	 * {@inheritDoc}
	 * 
	 * @see eu.consortiumservices.pid.PidResource#createPid(eu.consortiumservices.pid.CreatePidRequestType)
	 */
	@Override
	public CreatePidResponseType createPid(final CreatePidRequestType createPidRequest) {
		final CreatePidResponseType res = new CreatePidResponseType();
		final PidType pid = createPidRequest.getHandle();
		pid.setPid("0");
		res.setHandle(pid);
		log.debug("Mock response: " + res);
		return res;
	}

	/**
	 * {@inheritDoc}
	 * 
	 * @see eu.consortiumservices.pid.PidResource#deletePids(eu.consortiumservices.pid.DeletePidsRequestType)
	 */
	@Override
	public DeletePidsResponseType deletePids(final DeletePidsRequestType deletePidsRequest) {
		final DeletePidsResponseType res = new DeletePidsResponseType();
		res.setCount(0);
		log.debug("Mock response: " + res);
		return res;
	}

	/**
	 * {@inheritDoc}
	 * 
	 * @see eu.consortiumservices.pid.PidResource#getPid(eu.consortiumservices.pid.GetPidRequestType)
	 */
	@Override
	public GetPidResponseType getPid(final GetPidRequestType getPidRequest) {
		final GetPidResponseType res = new GetPidResponseType();
		final PidType pid = new PidType();
		pid.setPid(getPidRequest.getPid());
		pid.setLocalIdentifier("0");
		pid.setResolveUrl("http://mock");
		res.setHandle(pid);
		log.debug("Mock response: " + res);
		return res;
	}

	/**
	 * {@inheritDoc}
	 * 
	 * @see eu.consortiumservices.pid.PidResource#getPidByAttribute(eu.consortiumservices.pid.GetPidByAttributeRequestType)
	 */
	@Override
	public GetPidByAttributeResponseType getPidByAttribute(final GetPidByAttributeRequestType getPidByAttributeRequest) {
		final GetPidByAttributeResponseType res = new GetPidByAttributeResponseType();
		final String attr = getPidByAttributeRequest.getAttribute();
		final String na = getPidByAttributeRequest.getNa();
		log.debug("Mock getPidByAttribute(" + attr + " , " + na + ")");
		final PidType pid = new PidType();
		pid.setPid("0");
		pid.setLocalIdentifier("0");
		pid.setResolveUrl("http://mock");
		res.getHandle().add(pid);
		log.debug("Mock response: " + res);
		return res;
	}

	/**
	 * {@inheritDoc}
	 * 
	 * @see eu.consortiumservices.pid.PidResource#getQuickPid(eu.consortiumservices.pid.GetQuickPidRequestType)
	 */
	@Override
	public GetQuickPidResponseType getQuickPid(final GetQuickPidRequestType getQuickPidRequest) {
		final GetQuickPidResponseType res = new GetQuickPidResponseType();
		final PidType pid = new PidType();
		pid.setLocalIdentifier(getQuickPidRequest.getLocalIdentifier());
		pid.setPid("0");
		pid.setResolveUrl(getQuickPidRequest.getResolveUrl());
		res.setHandle(pid);
		log.debug("Mock response: " + res);
		return res;
	}

	/**
	 * {@inheritDoc}
	 * 
	 * @see eu.consortiumservices.pid.PidResource#updatePid(eu.consortiumservices.pid.UpdatePidRequestType)
	 */
	@Override
	public UpdatePidResponseType updatePid(final UpdatePidRequestType updatePidRequest) {
		final UpdatePidResponseType res = new UpdatePidResponseType();
		res.setHandle(updatePidRequest.getHandle());
		log.debug("Mock response: " + res);
		return res;
	}

	@Override
	public UpsertPidResponseType upsertPid(UpsertPidRequestType upsertPidRequest) {
		final UpsertPidResponseType res = new UpsertPidResponseType();
		final PidType pid = upsertPidRequest.getHandle();
		pid.setPid("0");
		res.setHandle(pid);
		log.debug("Mock response: " + res);
		return res;
	}

	@Override
	public DeletePidResponseType deletePid(DeletePidRequestType deletePidRequest) {
		DeletePidResponseType res = new DeletePidResponseType();
		res.setDeleted(true);
		log.debug("Mock response: " + res);
		return res;
	}


}
