package eu.dnetlib.data.collective.manager;

import java.util.Set;

import eu.dnetlib.common.interfaces.nh.IBlackboardMessage.Action;
import eu.dnetlib.data.collective.manager.log.LogInfoService;
import eu.dnetlib.data.collective.manager.nh.ServiceActivity;

/**
 * @author jochen
 *
 */
public interface IInstanceService {

	enum Listmodels {LOG, OAISET};
	
	/**
	 * Initiates the cancelling of a currently running job. Due to the asynchronous processes in manager and worker services this method can only initiate such an action. 
	 * It is usually used in the UI-component
	 * @param aInstanceId
	 * @param aAction
	 * @return true if cancelJob was initiated successfully, false else
	 */
	public abstract boolean cancelJob(String aInstanceId, Action aAction);
	
	/**
	 * @param aValue
	 * @return
	 */
	public boolean containsSchedulingIntervalType(String aValue);
	
	/**
	 * @param aValue
	 * @return
	 */
	public int indexOfSchedulingCronHour(String aValue);
	/**
	 * @param aValue
	 * @return
	 */
	public int indexOfSchedulingCronDay(String aValue);
	/**
	 * @param aValue
	 * @return
	 */
	public int indexOfSchedulingIntervalType(String aValue);
	/**
	 * @param aValue
	 * @return
	 */
	public int indexOfSchedulingIntervalFactor(String aValue);
	
	public LogInfoService getLogInfoService();
	/**
	 * @return
	 */
	public Set<String> getSchedulingCronHours();
	/**
	 * @return
	 */
	public Set<String> getSchedulingCronDays();
	/**
	 * @return
	 */
	public Set<String> getSchedulingIntervalTypes();
	/**
	 * @return
	 */
	public Set<String> getSchedulingIntervalFactors();
	/**
	 * @param aValue
	 * @return
	 */
	public String getValueOfSchedulingCronDay(String aValue);
	/**
	 * @param aValue
	 * @return
	 */
	public String getValueOfSchedulingCronHour(String aValue);
	/**
	 * @param aValue
	 * @return
	 */
	public String getValueOfSchedulingIntervalType(String aValue);
	
	/**
	 * @param uiId
	 * @param aInstanceId
	 * @param obj
	 */
	public abstract void update(String uiId, String aInstanceId, Object obj);
	
	public abstract void update(ServiceActivity aServiceActivity);
}
