package eu.dnetlib.clients;

import eu.dnetlib.clients.enabling.islookup.ws.ISLookUpClient;
import eu.dnetlib.clients.enabling.isregistry.ws.ISRegistryClient;
import eu.dnetlib.domain.enabling.SecurityProfile;
import eu.dnetlib.domain.functionality.UserProfile;
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService;
import eu.dnetlib.enabling.is.registry.rmi.ISRegistryService;
import gr.uoa.di.driver.enabling.ISRegistry;
import gr.uoa.di.driver.enabling.ISRegistryException;
import gr.uoa.di.driver.enabling.islookup.ISLookUpImpl;
import gr.uoa.di.driver.enabling.registry.ISRegistryImpl;
import gr.uoa.di.driver.enabling.registry.SecurityAwareRegistryImpl;
import gr.uoa.di.driver.util.StaticServiceLocator;
import gr.uoa.di.driver.xml.SecurityProfileXmlConverter;
import gr.uoa.di.driver.xml.UserProfileXmlConverter;

import javax.xml.bind.JAXBException;

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

public class TestISRegistry {

	private static String registryAddress = "http://localhost:8280/is/services/isRegistry";
	private static String lookupAdress = " http://localhost:8280/is/services/isLookUp";
	private static ISRegistry<UserProfile> userProfileRegistry = null;

	@BeforeClass
	public static void setup() throws JAXBException {
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.setServiceClass(ISRegistryService.class);
		factory.setAddress(registryAddress);
		ISRegistryService registryEndpoint = (ISRegistryService) factory
				.create();

		factory = new JaxWsProxyFactoryBean();
		factory.setServiceClass(ISLookUpService.class);
		factory.setAddress(lookupAdress);
		ISLookUpService lookupEndpoint = (ISLookUpService) factory.create();

		ISRegistryClient registryClient = new ISRegistryClient();
		registryClient.setIsRegistry(registryEndpoint);

		ISLookUpClient lookupClient = new ISLookUpClient();
		lookupClient.setIsLookUp(lookupEndpoint);

		StaticServiceLocator<eu.dnetlib.api.enabling.ISRegistryService> registryLocator = new StaticServiceLocator<eu.dnetlib.api.enabling.ISRegistryService>();
		registryLocator.setService(registryClient);
		StaticServiceLocator<eu.dnetlib.api.enabling.ISLookUpService> lookupLocator = new StaticServiceLocator<eu.dnetlib.api.enabling.ISLookUpService>();
		lookupLocator.setService(lookupClient);

		ISRegistryImpl<UserProfile> registryImpl = new ISRegistryImpl<UserProfile>();

		registryImpl.setConverter(new UserProfileXmlConverter());
		registryImpl.setResourceUri("http://I.dont.matter.com");
		registryImpl.setRegistryLocator(registryLocator);

		ISRegistryImpl<SecurityProfile> securityProfileRegistry = new ISRegistryImpl<SecurityProfile>();
		securityProfileRegistry.setConverter(new SecurityProfileXmlConverter());
		securityProfileRegistry.setRegistryLocator(registryLocator);
		securityProfileRegistry.setResourceUri("http://I.dont.matter.com");

		ISLookUpImpl<SecurityProfile> securityProfileLookup = new ISLookUpImpl<SecurityProfile>();
		securityProfileLookup.setConverter(new SecurityProfileXmlConverter());
		securityProfileLookup.setLookupLocator(lookupLocator);

		SecurityAwareRegistryImpl<UserProfile> secureRegistry = new SecurityAwareRegistryImpl<UserProfile>();

		secureRegistry.setRegistry(registryImpl);
		secureRegistry.setRegistryServiceLocator(registryLocator);
		secureRegistry.setSecurityRegistry(securityProfileRegistry);
		secureRegistry.setSecurityLookUp(securityProfileLookup);

		userProfileRegistry = secureRegistry;
	}

	@Test
	public void test() {
		try {
			UserProfile profile = new UserProfile();

			profile.setEmail("antleb@di.uoa.gr");

			System.out.println(userProfileRegistry.save(profile).getResourceId());
			System.out.println(profile.getSecurityProfile().getResourceId());
			
			userProfileRegistry.delete(profile);
		} catch (ISRegistryException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) throws JAXBException {
		
		new TestISRegistry().test();
	}
}