5.- Casos de uso y ejemplos SRT

En este apartado se van a explicar diferentes casos de uso y cómo podría implementarlos una aplicación integradora.

La aplicación integradora debe estar dada de alta en PAU y debe tener permiso sobre los servicios que desee utilizar.

1.- Creación de asiento registral


A continuación se detallan dos tipos de envío de asiento registral, uno con fichero adjunto y otro sin adjuntos

1.1.- Envío de asiento registral sin adjunto


Ejemplo de código
// Objetos del servicio
ResultSendFullEntry resultSendFullEntry = new ResultSendFullEntry ();
ParamSendFullEntry paramSendFullEntry = new ParamSendFullEntry();
Person person = new Person();
// Información básica y común

person.setNif("11111111H");
person.setAddress("C/Nueva, Zaragoza");
person.setMail("test@oesia.com");
person.setGivenName("Nombre");
person.setSurname1("Apellido1");
person.setSurname2("Apellido2");

// Se rellenan los datos especificos
Data[] dataList = new Data[7];
dataList[0] = new Data("CSV_Request", "CSVDD1X36L2V6A200SRT");
dataList[1] = new Data("CSV_hash_Request", "/QzejY7NqZu8uZXDH9Y3D3Fbwb8=");
dataList[2] = new Data("CSV_algorithm_Request", "SHA-1");
dataList[3] = new Data("Formato del justificante", "pdf");
dataList[4] = new Data("CSV_Attached_1", "CSV5H5GXS76VJAR00SCE");
dataList[5] = new Data("CSV_hash_Attached_1", "pTXyWjgL9YOsmNWcutppAXKl0tQ=");
dataList[6] = new Data("CSV_algorithm_Attached_1", "SHA-1");

paramSendFullEntry.setSpecificData(dataList);

try{
	resultSendFullEntry = entryClient.sendFullEntry(params, null, null);
}catch (SRTException e) {
	System.out.println("Se ha producido un error al enviar el asiento registral " + e.getCode() + ": " + e.getExtraInfo());
}

1.2.- Envío de asiento registral con adjunto


En el siguiente ejemplo se implementa el alta de un asiento registral con solicitud con un adjunto. Se genera el envío del asiento de salida en un asiento de salida

Ejemplo de código
//Objetos del servicio
ResultSendFullEntry resultSendFullEntry = new ResultSendFullEntry ();
ParamSendFullEntry paramSendFullEntry = new ParamSendFullEntry();

//Información básica y común
Info info = new Info();
info.setSubject("Test 1");
info.setRegister("REG_GA");
info.setOrganism("COG_ORG");
info.setRequestType(0);

Calendar requestTime = Calendar.getInstance();
info.setRequestTime(requestTime);
info.setProcessType("xxx");

Actor organism = new Organism("ORGXXXXX");
Actor person =  new Person("NIF/CIF","Name","surmane1","surname2","Email","Adress");
Actor senderAgent = new Person("NIF/CIF","Name","surmane1","surname2","Email","Adress");

// Fichero a enviar
byte[] arrayFile = FileCopyUtils.copyToByteArray(new File("URL Fichero"));
String fileSoli = BASE64Encoder.encode(arrayFile);

// Firma del fichero a enviar
byte[] arraySign = FileCopyUtils.copyToByteArray(new File("URL Firma"));
String detachedSignature = BASE64Encoder.encode(arraySign);
RequestPromoter request = new RequestPromoter();

//Formato del Documento
request.setMimeType("Formato");
request.setRequest(fileSoli);
request.setFileName("Name");
request.setDetachedSignature(detachedSignature);
//Formato de Firma
request.setFormatSignature(SRTClientConstants.SIGN_TYPE_xxx);

//Organismo Emisor
Organism sender = new Organism("ORGXXXXX");
Actor senderAgent = new Actor();
//Datos Emisor
senderAgent = new Person("NIF/CIF","Name","surmane1","surname2","Email","Adress");
Person receiver = new Person();
//Datos Destinatario
receiver.setAddress("Adress");
receiver.setGivenName("Name");
receiver.setMail("Email");
receiver.setNif("NIF/CIF");
receiver.setSurname1("surname1");
receiver.setSurname2("surname2");
Actor[] receiverList = new Actor[1];
receiverList[0] = (Actor)receiver;

// Datos especificos
Data[] dataList = new Data[3];
dataList[0] = new Data("CSV_Request", "CSVDD1X36L2V6A200SRT");
dataList[1] = new Data("CSV_hash_Request", "/QzejY7NqZu8uZXDH9Y3D3Fbwb8=");
dataList[2] = new Data("CSV_algorithm_Request", "SHA-1");
paramSendFullEntry.setInfo(info);
paramSendFullEntry.setRequestPromoter(request);
paramSendFullEntry.setSender(sender);
paramSendFullEntry.setReceiver(receiverList);
paramSendFullEntry.setSpecificData(dataList);
paramSendFullEntry.setSenderAgent(senderAgent);
paramSendFullEntry.setInvokingId("NIF");

// Adjunto Firmado
FileDataSource dataSource = new FileDataSource(new File("URLAdjunto"));
DataHandler file = new DataHandler(dataSource);
FileInfo fileInfo = new FileInfo();
// Nombre del Documento
fileInfo.setName("Nombre+"."+Extension");
// Descripción del Documento
fileInfo.setDescription ("Descripcion");
// Tamaño del Documento en bytes
fileInfo.setFileSize("Tamaño");
// Formato del Documento (mime-type)
fileInfo.setMimeType("Formato");
// Formato de Firma
fileInfo.setFormatSignature(SRTClientConstants.SIGN_TYPE_xxx);
try{
	resultSendFullEntry = entryClient.sendFullEntry(paramSendFullEntry,fileInfo, file);
}catch(Exception e){
	Sysmte.out.println("Error al enviar el asiento registral");
}


2.- Consulta de asientos registrales


A continuación se detalla la integración que se realiza para consultar asientos registrales.

2.1.- Búsqueda de asientos registrales


En el siguiente ejemplo se realiza una búsqueda de asientos registrales aplicando algunos filtros de búsqueda para acotar resultados.

Ejemplo de código
// Objetos del servicio
ResultListEntries resultListEntries = new ResultListEntries();
ParamListEntries paramListEntries = new ParamListEntries();
long timeBegin = System.currentTimeMillis();
// 1) Se crea el objeto info con los parámetros de búsqueda
Info info = new Info();
// Codigo de Organismo
info.setOrganism("DSSF_SPT");
// Codigo de Registro
info.setRegister("REG_ORG001");
// Tipo de Entry (Entrada(0), Salida(1))
info.setRequestType(SRTClientConstants.REQUEST_TYPE_INPUT);
// Fecha de creacion del Entry
Calendar requestTime = Calendar.getInstance();
info.setRequestTime(requestTime);

// 2) Se pasa el objeto info a los parámetros de búsqueda
paramListEntries.setInfo(info);

// 3) Se hace la invocación al servicio
try{

	System.out.println("Se hace la llamada al cliente para realizar la búsqueda");
	resultListEntries = entryClient.listEntry(paramListEntries);
	System.out.println("Se ha realizado la búsqueda");
	return resultListEntries;

}catch(RemoteException e){
	System.out.println("Se ha producido un error al realizar la búsqueda de saientos registrales");
}


3.2.- Búsqueda de asientos registrales por código del asiento registral


En el siguiente ejemplo se realiza una búsqueda de un asiento registral por su código de asiento e identificador del registro. Devolverá la información general del asiento


Ejemplo de código
// Objetos del servicio
ParamGetEntryDetails paramGetEntryDetails = new ParamGetEntryDetails();
ResultGetEntryDetails resultGetEntryDetails = new ResultGetEntryDetails();

// 1) Se indica el código de registro Código de registro y código de entrada
paramGetEntryDetails.setRegisterId("REG_GA");
paramGetEntryDetails.setEntryId("RT_000005176/2013");


// 2) Se pasa el objeto info a los parámetros de búsqueda
paramListEntries.setInfo(info);

// 3) Se hace la invocación al servicio
try{

	System.out.println("Se hace la llamada al cliente para realizar la búsqueda");
	resultGetEntryDetails = entryClient.getEntryDetails(paramGetEntryDetails);
	System.out.println("Se ha realizado la búsqueda");
	return resultListEntries.getEntry();

}catch(RemoteException e){
	System.out.println("Se ha producido un error al realizar la búsqueda de saientos registrales");
}

3.- ANEXO I - Configuración del cliente


A continuación ofrecemos dos modos de configurar las instancias de los agentes de acceso

3.1.- Configuración del framework Spring y librerias Maven


POM
<?xml version="1.0" encoding="UTF-8"?>
 
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
       
  	<!-- ID DE LA APLICACIÓN INTEGRADORA  -->
	<bean id="applicationINT" class="java.lang.String">
    	<constructor-arg type="java.lang.String" value="SRT"/> <!-- Se indicará la ID de la aplicación integradora  -->
    </bean>
  	
  	<!-- URL SERVICIOS DE SRT -->
	<bean id="urlServices" class="java.lang.String" >
    	<constructor-arg type="java.lang.String" value="http://[entorno:puerto]/srt_core_v3/services"/> <!-- Se indicará el entorno  -->
    </bean>

    <!-- CHUNKED TRANSFER PROPERTY -->
    <bean id="chunkedTransferProperty" class="java.lang.Boolean">
    	<constructor-arg value="false"/>
    </bean>
    
    <!-- WS DE SRT -->
    <!--ASIENTOS-->
	<!--Cliente de los servicios de gestión de asientos, se permite enviar, listar, ver el detalle y obtener sus adjuntos-->
	<bean id="entryClient" class="com.tbsolutions.srt.client.EntryClient">
		<property name="applicationId" ref="applicationINT"/>
		<property name="url" ref="urlServices"/>
		<property name="chunkedTransfer" ref="chunkedTransferProperty"/>
	</bean>
    
    <!-- REGISTROS -->
    <bean id="registerClient" class="com.tbsolutions.srt.client.RegisterClient">
		<property name="applicationId" ref="applicationINT"/>
		<property name="url" ref="urlServices"/>
		<property name="chunkedTransfer" ref="chunkedTransferProperty"/>
	</bean>
	
	
      
    <!-- Clase creada por el integrador donde se inyectan los clientes -->
    <bean id="srtIntegration" class="integration.SRTIntegrationImpl">
     	<property name="entryClient" ref="entryClient" />
        <property name="registerClient" ref="registerClient" />
        
    </bean>
 
</beans>