package eu.dnetlib.r2d2.accesstime;

import java.util.List;
import java.util.concurrent.LinkedBlockingQueue;

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

import com.google.common.collect.Lists;

import eu.dnetlib.r2d2.neo4j.dao.AccessTimeDao;
import eu.dnetlib.r2d2.neo4j.domain.AccessTime;

public class AsyncModificationToucher extends AsyncToucher<AsyncModificationToucher.AsyncAddAccessTimeAction> {
	private static final Log log = LogFactory.getLog(AsyncModificationToucher.class); // NOPMD by marko on 11/24/08 5:02 PM

	public static class AsyncAddAccessTimeAction extends AsyncToucher.AsyncAction {
		private String beanId;

		public AsyncAddAccessTimeAction(final String beanId, final AccessTime timeStamp) {
			super(timeStamp);
			this.beanId = beanId;
		}

		public void save(final AccessTimeDao accessTimeDao) {
			if(1==1)
				return;
			
			// TODO: hack: check if exists
			if(accessTimeDao.getBean(beanId) == null) {
				log.warn("cannot save timestamp for bean " + beanId + " because, albeit changed, it wasn't successfully saved");
				return;
			}
			
			super.save(accessTimeDao);
			accessTimeDao.setAccessTimeForBean(timeStamp.getId(), beanId);
		}

		public String getBeanId() {
			return beanId;
		}

		public void setBeanId(final String beanId) {
			this.beanId = beanId;
		}
	}

	public void enqueueNewAccess(final String beanId, final AccessTime access) {
		getQueue().add(new AsyncAddAccessTimeAction(beanId, access));
	}

}
