package eu.dnetlib.clients;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import junit.framework.Assert;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.log4j.BasicConfigurator;
import org.junit.BeforeClass;
import org.junit.Test;

import eu.dnetlib.api.data.DataAccessServiceException;
import eu.dnetlib.api.data.StoreService.DataType;
import eu.dnetlib.api.data.StoreService.StoringType;
import eu.dnetlib.api.data.StoreServiceException;
import eu.dnetlib.api.enabling.ResultSetServiceException;
import eu.dnetlib.clients.data.dataaccess.ws.DataAccessServiceWSClient;
import eu.dnetlib.clients.data.store.ws.StoreServiceWSClient;
import eu.dnetlib.data.sts.das.IDataAccessService;
import eu.dnetlib.data.sts.ds.IDepotService;
import eu.dnetlib.domain.data.StoreInfo;
import eu.dnetlib.domain.data.StoreObjectInfo;

public class TestStoreServiceClient {
	private static StoreServiceWSClient storeService = null;
	private static DataAccessServiceWSClient accessService = null;
	
	@BeforeClass
	public static void setup() {
		String depotServiceUrl = "http://129.70.40.102:8380/dnet-sts-ds/services/DepotService";
		String accessServiceUrl = "http://129.70.40.102:8480/dnet-sts-das/services/DataAccessService";
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.setServiceClass(IDepotService.class);
		factory.setAddress(depotServiceUrl);

		storeService = new StoreServiceWSClient();
		storeService.setWebService((IDepotService) factory.create());
		
		factory = new JaxWsProxyFactoryBean();
		factory.setServiceClass(IDataAccessService.class);
		factory.setAddress(accessServiceUrl);

		accessService = new DataAccessServiceWSClient();
		accessService.setWebService(factory.create());
		
		BasicConfigurator.configure();
	}
	
	@Test
	public void test() throws StoreServiceException, DataAccessServiceException, InterruptedException, ResultSetServiceException {
		StoreInfo storeInfo = storeService.createStore(new ArrayList<String>(), 10);
		
		List<StoreObjectInfo> objects = storeService.storeObjects(storeInfo.getStoreId(), 
				Arrays.asList("http://peppas2.pblogs.gr/files/112454-565px-Olympiakos4.svg%5B1%5D.png"), DataType.URL, StoringType.REFRESH);
		
		Assert.assertNotNull(objects);
		Assert.assertEquals(1, objects.size());
		
		Thread.sleep(20000);
		
		for (StoreObjectInfo object:objects) {
			String objectUrl = accessService.getObjectUrl(object.getStoreInfo().getStoreId(), object.getObjectId());
			
			Assert.assertNotNull(objectUrl);
			System.out.println(objectUrl);
			
			storeService.deleteStoreObject(object.getStoreInfo().getStoreId(), Arrays.asList(object.getObjectId()));
		}
					
		for (StoreObjectInfo object:objects) {
			storeService.deleteStoreObject(object.getStoreInfo().getStoreId(), Arrays.asList(object.getObjectId()));
		}
		
		storeService.deleteStore(objects.get(0).getStoreInfo().getStoreId());
	}
}
