package eu.dnetlib.dlms;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.util.List;

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

import org.junit.Before;
import org.junit.Ignore;
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
@Ignore
public class DLMSConnectionServiceImplTest {

	@Resource
	private DLMSConnectionService connectionService;

	@Resource
	private ServiceResolver serviceResolver;

	@Before
	public void setUp() throws Exception {
	}

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

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

		final String connectionId = this.serviceResolver.getResourceIdentifier(epr);

		assertNotNull(connectionId);

		final StatementDescription stmt = new StatementDescription();
		stmt.setSource("1");
		final W3CEndpointReference repr = this.connectionService.executeStatement(connectionId, stmt);

		assertNotNull(repr);

		final ResultSetService resultSet = this.serviceResolver.getService(ResultSetService.class, repr);
		final String rsId = this.serviceResolver.getResourceIdentifier(repr);

		assertNotNull(resultSet);
		assertNotNull(rsId);

		assertEquals(1, resultSet.getNumberOfElements(rsId));

		final List<String> res = resultSet.getResult(rsId, 1, 1, "waiting");
		System.out.println("XXXXXXXXXXXXX: " + res);

	}

}
