package eu.dnetlib.dlms;

import static org.junit.Assert.*;

import java.util.List;

import javax.annotation.Resource;
import javax.xml.ws.wsaddressing.W3CEndpointReference;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import eu.dnetlib.dlms.rmi.DLMSBrokenConnectionException;
import eu.dnetlib.dlms.rmi.DLMSConnectionException;
import eu.dnetlib.dlms.rmi.DLMSConnectionService;
import eu.dnetlib.dlms.rmi.StatementDescription;
import eu.dnetlib.enabling.resultset.rmi.ResultSetException;
import eu.dnetlib.enabling.resultset.rmi.ResultSetService;
import eu.dnetlib.enabling.tools.ServiceResolver;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class DLMSConnectionServiceImplTest {

	@Resource
	private DLMSConnectionService connectionService;
	
	@Resource
	private ServiceResolver serviceResolver;
	
	@Before
	public void setUp() throws Exception {
	}

	@Test
	public void testCreateConnection() {
		final W3CEndpointReference res = connectionService.createConnection();
		assertNotNull("res", res);
	}

	@Test
	public void testExecuteStatement() throws ResultSetException, DLMSBrokenConnectionException, DLMSConnectionException {
		final W3CEndpointReference epr = connectionService.createConnection();

		final String connectionId = serviceResolver.getResourceIdentifier(epr);
		
		assertNotNull(connectionId);
		
		final StatementDescription stmt = new StatementDescription();
		stmt.setSource("1");
		final W3CEndpointReference repr = connectionService.executeStatement(connectionId, stmt);
		
		assertNotNull(repr);
		
		final ResultSetService resultSet = serviceResolver.getService(ResultSetService.class, repr);
		final String rsId = serviceResolver.getResourceIdentifier(repr);
		
		assertNotNull(resultSet);
		assertNotNull(rsId);
		
		assertEquals(1, resultSet.getNumberOfElements(rsId));
		
		List<String> res = resultSet.getResult(rsId, 1, 1, "waiting");
		System.out.println("XXXXXXXXXXXXX: " + res);
		
	}

}
