/**
*
*/
package net.conselldemallorca.helium.integracio.plugins.gesdoc;
import java.text.SimpleDateFormat;
import java.util.Date;
import net.conselldemallorca.helium.core.util.GlobalProperties;
import net.conselldemallorca.helium.core.util.ws.WsClientUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import es.cim.ws.documentos.v1.model.gestordocumental.EliminarDocumentoRequest;
import es.cim.ws.documentos.v1.model.gestordocumental.EliminarDocumentoResponse;
import es.cim.ws.documentos.v1.model.gestordocumental.InsertarDocumentoExpedienteRequest;
import es.cim.ws.documentos.v1.model.gestordocumental.ObtenerDocumentoRequest;
import es.cim.ws.documentos.v1.model.gestordocumental.ObtenerDocumentoResponse;
import es.cim.ws.documentos.v1.model.gestordocumental.TypeCodigoError;
import es.cim.ws.documentos.v1.model.gestordocumental.TypeRespuestaRefDocumento;
import es.cim.ws.documentos.v1.services.ServicioGestorDocumentalPortType;
/**
* ImplementaciĆ³ del plugin de gestiĆ³ documental emprant el
* servei de gestiĆ³ documental del ESB del Consell de Mallorca
*
* @author Limit Tecnologies <limit@limit.es>
*/
public class GestioDocumentalPluginEsbCim implements GestioDocumentalPlugin {
public String createDocument(
String expedientNumero,
String expedientTipus,
String documentCodi,
String documentDescripcio,
Date documentData,
String documentArxiuNom,
byte[] documentArxiuContingut) throws GestioDocumentalPluginException {
try {
InsertarDocumentoExpedienteRequest request = new InsertarDocumentoExpedienteRequest();
request.setCodigoDocumento(documentCodi);
request.setDescripcionDocumento(documentDescripcio);
request.setNombreDocumento(documentArxiuNom);
request.setContenidoDocumento(documentArxiuContingut);
request.setNumeroExpediente(expedientNumero);
request.setTipoProcedimiento(expedientTipus);
request.setAnyo(new SimpleDateFormat("yyyy").format(new Date()));
TypeRespuestaRefDocumento response = getGestorDocumentalClient().insertarDocumentoExpediente(request);
if (TypeCodigoError.OK.equals(response.getCodigoError())) {
return response.getReferenciaDocumento();
} else {
throw new GestioDocumentalPluginException("Error al guardar l'arxiu dins el gestor documental: " + response.getDescripcionError());
}
} catch (Exception ex) {
logger.error("Error al guardar l'arxiu dins el gestor documental", ex);
throw new GestioDocumentalPluginException("Error al guardar l'arxiu dins el gestor documental", ex);
}
}
public byte[] retrieveDocument(String documentId) throws GestioDocumentalPluginException {
try {
ObtenerDocumentoRequest request = new ObtenerDocumentoRequest();
request.setReferenciaDocumento(documentId);
ObtenerDocumentoResponse response = getGestorDocumentalClient().obtenerDocumento(request);
if (TypeCodigoError.OK.equals(response.getCodigoError())) {
return response.getContenidoDocumento();
} else {
throw new GestioDocumentalPluginException("Error al guardar l'arxiu " + documentId + " dins el gestor documental: " + response.getDescripcionError());
}
} catch (Exception ex) {
logger.error("Error al llegir l'arxiu " + documentId + " del gestor documental", ex);
throw new GestioDocumentalPluginException("Error al llegir l'arxiu " + documentId + " del gestor documental", ex);
}
}
public void deleteDocument(String documentId) throws GestioDocumentalPluginException {
try {
EliminarDocumentoRequest request = new EliminarDocumentoRequest();
request.setReferenciaDocumento(documentId);
EliminarDocumentoResponse response = getGestorDocumentalClient().eliminarDocumento(request);
if (TypeCodigoError.ERROR.equals(response.getCodigoError())) {
throw new GestioDocumentalPluginException("Error al esborrar l'arxiu " + documentId + " del gestor documental: " + response.getDescripcionError());
}
} catch (Exception ex) {
logger.error("Error al esborrar l'arxiu " + documentId + " del gestor documental", ex);
throw new GestioDocumentalPluginException("Error al esborrar l'arxiu " + documentId + " del gestor documental", ex);
}
}
private ServicioGestorDocumentalPortType getGestorDocumentalClient() {
String url = GlobalProperties.getInstance().getProperty("app.gesdoc.plugin.url");
String userName = GlobalProperties.getInstance().getProperty("app.gesdoc.plugin.user");
String password = GlobalProperties.getInstance().getProperty("app.gesdoc.plugin.pass");
Object wsClientProxy = WsClientUtils.getWsClientProxy(
ServicioGestorDocumentalPortType.class,
url,
userName,
password,
getWsClientAuthType(),
isWsClientGenerateTimestamp(),
isWsClientLogCalls(),
isWsClientDisableCnCheck(),
null);
return (ServicioGestorDocumentalPortType)wsClientProxy;
}
private String getWsClientAuthType() {
String authType = GlobalProperties.getInstance().getProperty("app.gesdoc.plugin.ws.client.auth");
if (authType == null)
authType = GlobalProperties.getInstance().getProperty("app.ws.client.auth");
return authType;
}
private boolean isWsClientGenerateTimestamp() {
String authType = GlobalProperties.getInstance().getProperty("app.gesdoc.plugin.ws.client.generate.timestamp");
if (authType == null)
authType = GlobalProperties.getInstance().getProperty("app.ws.client.generate.timestamp");
return "true".equalsIgnoreCase(authType);
}
private boolean isWsClientLogCalls() {
String logCalls = GlobalProperties.getInstance().getProperty("app.gesdoc.plugin.ws.client.log.calls");
if (logCalls == null)
logCalls = GlobalProperties.getInstance().getProperty("app.ws.client.log.calls");
return "true".equalsIgnoreCase(logCalls);
}
private boolean isWsClientDisableCnCheck() {
String disableCnCheck = GlobalProperties.getInstance().getProperty("app.gesdoc.plugin.ws.client.disable.cn.check");
if (disableCnCheck == null)
disableCnCheck = GlobalProperties.getInstance().getProperty("app.ws.client.disable.cn.check");
return "true".equalsIgnoreCase(disableCnCheck);
}
private static final Log logger = LogFactory.getLog(GestioDocumentalPluginEsbCim.class);
}