package eu.dnetlib.api.functionality;

import java.util.Date;
import java.util.List;

import eu.dnetlib.api.DriverService;
import eu.dnetlib.domain.functionality.validator.ContentResults;
import eu.dnetlib.domain.functionality.validator.OAIDRIVERResults;
import eu.dnetlib.domain.functionality.validator.OAIDriverValidationRule;
import eu.dnetlib.domain.functionality.validator.OAIResults;
import eu.dnetlib.domain.functionality.validator.RepositoryResults;
import eu.dnetlib.domain.functionality.validator.RepositoryResultsDescription;
import eu.dnetlib.domain.functionality.validator.RunningProcess;
import eu.dnetlib.domain.functionality.validator.ValidationRule;
import eu.dnetlib.domain.functionality.validator.ValidatorResults;
import eu.dnetlib.domain.functionality.validator.ValidatorServiceStatus;

public interface ValidatorService extends DriverService {

	public List<String> getRepositorySets(String repositoryUrl);

	public List<String> getRepositoryNames(String type, String userId);

	public List<ValidationRule> getContentValidationRules();

	public List<OAIDriverValidationRule> getDRIVEROAIRules();

	public List<String> getValidatedSetsForRepository(String repositoryURL,
			String userId);

	public List<RepositoryResults> searchValidationsByExample(
			String repositoryURL, String set, Date beforeDate, Date afterDate,
			String userId, String type);

	public ContentResults getContentValidationById(String id);

	public OAIResults getOAIValidationById(String id);

	public OAIDRIVERResults getDRIVEROAIValidationById(String id);

	public void storeValidation(RepositoryResults repositoryResults);

	public List<RunningProcess> getRunningProcesses(String userId);

	public List<RunningProcess> getUserProcesses(String userId);

	public String addProcess(RunningProcess process);

	public void stopProcess(String processId) throws ValidatorServiceException;

	public List<String> listActiveServices(String userId);

	public List<ValidatorResults> getRunningResultsFor(String userId);

	public ValidatorResults getRunningValidationResult(String processID);

	public ContentResults getRunningContentResult(String processID,
			int indexOfRepositoryResult);

	public OAIResults getRunningOAIResult(String processID,
			int indexOfRepositoryResult);

	public OAIDRIVERResults getRunningDRIVEROAIResult(String processID,
			int indexOfRepositoryResult);

	public List<RepositoryResultsDescription> searchRepositoryResults(
			String repositoryURL, String set, Date beforeDate, Date afterDate,
			String userId, String type);

	public int getNumberOfThreads();

	public boolean isStarted();

	public void start();

	public ValidatorServiceStatus getStatus();

	public List<RepositoryResultsDescription> searchRepositoryResultsByProcId(
			String procId);

}
