package eu.dnetlib.thumbnail.blackboard;

import javax.annotation.Resource;
import javax.xml.ws.wsaddressing.W3CEndpointReference;

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

import eu.dnetlib.data.information.DataSink;
import eu.dnetlib.data.information.DataSinkResolver;
import eu.dnetlib.data.information.DataSource;
import eu.dnetlib.data.information.DataSourceResolver;
import eu.dnetlib.data.objectstore.modular.ModularObjectStoreService;
import eu.dnetlib.enabling.resultset.MappedResultSetFactory;
import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
import eu.dnetlib.enabling.tools.blackboard.BlackboardServerAction;
import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;
import eu.dnetlib.thumbnail.ThumbnailServiceCore;

public class ThumbnailProcessResultsetAction implements BlackboardServerAction<ThumbnailActions> {

	/** The result set client factory. */
	@Resource
	private MappedResultSetFactory mappedResultSetFactory;

	@Resource
	private ThumbnailServiceCore core;

	@Resource
	private DataSourceResolver dataSourceResolver;

	@Resource
	private DataSinkResolver dataSinkResolver;

	@Resource
	private ModularObjectStoreService objectStoreService;

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

	@Override
	public void execute(final BlackboardServerHandler handler, final BlackboardJob job) throws Exception {

		log.info("ACTION STARTED");
		final String source = job.getParameters().get("datasource");
		final String sink = job.getParameters().get("datasink");
		final String objStoreId = job.getParameters().get("objectStoreId");
		final String xPathId = job.getParameters().get("xpathId");
		final String xPathImg = job.getParameters().get("xpathImg");

		final DataSource dataSource = dataSourceResolver.resolve(source);
		final DataSink dataSink = dataSinkResolver.resolve(sink);

		final W3CEndpointReference mappedEpr = mappedResultSetFactory.createMappedResultSet(dataSource.retrieve(), new RecordPatcher(xPathId, xPathImg,
				objStoreId, core, objectStoreService));
		dataSink.store(mappedEpr);

		log.info("ACTION COMPLETED");

		handler.done(job);
	}

}
