package com.ejie.ad74a.scheduler;

import java.util.Calendar;

import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;

import com.ejie.ad74a.jms.service.PlateaJMSService;

/**
 * Gestión de Errores - Relanzamientos
 * 
 * @author IBERMATICA
 *
 */
@Component
public class GestionErrorJob extends QuartzJobBean {

	private static final Logger logger = LoggerFactory.getLogger(GestionErrorJob.class);

	@Autowired
	PlateaJMSService plateaJMSService;

	/**
	 * Gestión de Errores
	 */
	@Override
	public void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
		// ** Soporte a Autowiring ** //
		SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);

		GestionErrorJob.logger.info("--Proceso de Gestión de Errores-Relanzamiento del error: "
				+ jobExecutionContext.getJobDetail().getKey() + "- Fecha: "
				+ Calendar.getInstance().getTime().toString() + " --INICIO--");

		JobDataMap jobDataMap = jobExecutionContext.getMergedJobDataMap();
		String id = jobDataMap.getString("id");

		GestionErrorJob.logger.info("--Proceso de Gestión de Errores-Relanzamiento del error - ID=" + id + "-");

		try {

			this.plateaJMSService.retramitarFromJMSError(Long.valueOf(id));

			GestionErrorJob.logger.info("--Proceso de Gestión de Errores-Relanzamiento del error - Fecha: "
					+ Calendar.getInstance().getTime().toString() + " --FIN--");

		} catch (Throwable e) {
			GestionErrorJob.logger.info("--Proceso de Gestión de Errores-Relanzamiento del error - ID=" + id
					+ ": ERROR:" + e.getLocalizedMessage(), e);
		}

	}

}
