package eu.dnetlib.efg.stress.test;

import java.util.concurrent.Callable;

import javax.xml.ws.wsaddressing.W3CEndpointReference;

import eu.dnetlib.data.index.IIndexService;
import eu.dnetlib.enabling.resultset.rmi.ResultSetService;
import eu.dnetlib.enabling.tools.ServiceResolver;
import eu.dnetlib.miscutils.datetime.DateUtils;

public class SingleStresser implements Callable<Double> {
	private IIndexService indexService;
	private ServiceResolver serviceResolver;

	@Override
	public Double call() throws Exception {
		long start = DateUtils.now();

		testLookup("*");
//		testLookup("__all all and itemtype=video");
//		testLookup("__all all and itemtype=image");
//		testLookup("__all all and itemtype=sound");
//		testLookup("__all all and itemtype=text");
//		testBrowse("__all all AND itemtype=*&groupby=provider,decade,language,itemtype");
		
		long end = DateUtils.now();
		
		return (end - start)/1000.0;
	}

	private void testLookup(String query) {
		try {
			W3CEndpointReference epr = indexService.indexLookup("all", query, "oai_efg", "index");
			
			ResultSetService provider = serviceResolver.getService(ResultSetService.class, epr);
			String rsId = serviceResolver.getResourceIdentifier(epr);
			provider.getResult(rsId, 1, 4, "WAITING");
			provider.getNumberOfElements(rsId);

			//System.out.print("OK ");
		} catch (Exception e) {
			//System.out.print("ERR ");
		}
	}
	
	private void testBrowse(String query) throws Exception {
		try {
			W3CEndpointReference epr = indexService.getBrowsingStatistics(query, "all", "oai_efg", "index");

			ResultSetService provider = serviceResolver.getService(ResultSetService.class, epr);
			String rsId = serviceResolver.getResourceIdentifier(epr);
			provider.getResult(rsId, 1, 4, "WAITING");
			provider.getNumberOfElements(rsId);

			//System.out.print("OK ");
		} catch (Exception e) {
			//System.out.print("ERR ");
		}
	}	

	public void setIndexService(IIndexService indexService) {
		this.indexService = indexService;
	}

	public IIndexService getIndexService() {
		return indexService;
	}

	public void setServiceResolver(ServiceResolver serviceResolver) {
		this.serviceResolver = serviceResolver;
	}

	public ServiceResolver getServiceResolver() {
		return serviceResolver;
	}

}
