package eu.dnetlib.rmi.soap;

import java.util.Date;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

import eu.dnetlib.rmi.objects.resultSet.ResultSet;
import eu.dnetlib.rmi.soap.exceptions.DatabaseException;

@WebService(targetNamespace = "http://services.dnetlib.eu/")
public interface DatabaseService extends BaseService {

	@WebMethod(operationName = "dumpTable")
	public ResultSet<String> dumpTable(@WebParam(name = "db") String db, @WebParam(name = "table") String table) throws DatabaseException;

	@WebMethod(operationName = "dumpTableAndLogs")
	public ResultSet<String> dumpTableAndLogs(
			@WebParam(name = "db") String db,
			@WebParam(name = "table") String table,
			@WebParam(name = "from") Date from,
			@WebParam(name = "until") Date until) throws DatabaseException;;

	@WebMethod(operationName = "importFromResultSet")
	public boolean importFromResultSet(@WebParam(name = "db") String db, @WebParam(name = "rs") ResultSet<String> rs, @WebParam(name = "xslt") String xslt)
			throws DatabaseException;

	@WebMethod(operationName = "searchSQL")
	public ResultSet<String> searchSQL(@WebParam(name = "db") String db, @WebParam(name = "sql") String sql) throws DatabaseException;;

	@WebMethod(operationName = "alternativeSearchSQL")
	public ResultSet<String> alternativeSearchSQL(@WebParam(name = "db") String db,
			@WebParam(name = "sql") String sql,
			@WebParam(name = "sqlForSize") String sqlForSize) throws DatabaseException;;

	@WebMethod(operationName = "updateSQL")
	public boolean updateSQL(@WebParam(name = "db") String db, @WebParam(name = "sql") String sql) throws DatabaseException;;

	@WebMethod(operationName = "xsltSearchSQL")
	public ResultSet<String> xsltSearchSQL(@WebParam(name = "db") String db, @WebParam(name = "sql") String sql, @WebParam(name = "xslt") String xslt)
			throws DatabaseException;;

	@WebMethod(operationName = "alternativeXsltSearchSQL")
	public ResultSet<String> alternativeXsltSearchSQL(@WebParam(name = "db") String db,
			@WebParam(name = "sql") String sql,
			@WebParam(name = "sqlForSize") String sqlForSize,
			@WebParam(name = "xslt") String xslt) throws DatabaseException;;

	@WebMethod(operationName = "contains")
	public boolean contains(@WebParam(name = "db") String db,
			@WebParam(name = "table") String table,
			@WebParam(name = "column") String column,
			@WebParam(name = "value") String value) throws DatabaseException;;

}
