/** * */ package net.conselldemallorca.helium.integracio.plugins.tramitacio; import javax.xml.bind.JAXBElement; import javax.xml.namespace.QName; import net.conselldemallorca.helium.core.util.GlobalProperties; import net.conselldemallorca.helium.core.util.ws.WsClientUtils; import net.conselldemallorca.helium.integracio.plugins.registre.RegistreNotificacio; import net.conselldemallorca.helium.integracio.plugins.registre.RespostaAnotacioRegistre; import net.conselldemallorca.helium.integracio.plugins.registre.RespostaJustificantDetallRecepcio; import net.conselldemallorca.helium.integracio.plugins.registre.RespostaJustificantRecepcio; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import es.cim.ws.documentos.v1.model.gestordocumental.ObtenerVistaDocumentoRequest; import es.cim.ws.documentos.v1.model.gestordocumental.ObtenerVistaDocumentoResponse; import es.cim.ws.documentos.v1.services.ServicioGestorDocumentalPortType; import es.cim.ws.tramitacion.v1.model.configuracionavisosexpediente.ConfiguracionAvisosExpediente; import es.cim.ws.tramitacion.v1.model.documentoexpediente.DocumentoExpediente; import es.cim.ws.tramitacion.v1.model.documentoexpediente.DocumentosExpediente; import es.cim.ws.tramitacion.v1.model.documentoexpediente.TypeDocumentoExpediente; import es.cim.ws.tramitacion.v1.model.eventoexpediente.EventoExpediente; import es.cim.ws.tramitacion.v1.model.eventoexpediente.EventosExpediente; import es.cim.ws.tramitacion.v1.model.expediente.Expediente; import es.cim.ws.tramitacion.v1.model.tramitacion.PublicarEventoRequest; import es.cim.ws.tramitacion.v1.model.tramitacion.PublicarExpedienteRequest; import es.cim.ws.tramitacion.v1.services.ServicioTramitacionPortType; /** * Implementació del plugin de tramitacio accedint al ESB del * Consell de Mallorca * * @author Limit Tecnologies */ public class TramitacioPluginEsbCim implements TramitacioPlugin { public void publicarExpedient( PublicarExpedientRequest request) throws TramitacioPluginException { try { Expediente expediente = new Expediente(); expediente.setIdentificadorExpediente(request.getExpedientIdentificador()); expediente.setUnidadAdministrativa(request.getUnitatAdministrativa()); expediente.setClaveExpediente(request.getExpedientClau()); expediente.setIdioma(request.getIdioma()); expediente.setDescripcion(request.getDescripcio()); expediente.setAutenticado(request.isAutenticat()); expediente.setNifRepresentante( new JAXBElement<String>( new QName("nifRepresentante"), String.class, request.getRepresentantNif())); expediente.setNifRepresentado( new JAXBElement<String>( new QName("nifRepresentado"), String.class, request.getRepresentatNif())); expediente.setNombreRepresentado( new JAXBElement<String>( new QName("nombreRepresentado"), String.class, request.getRepresentatNom())); expediente.setNumeroEntradaBTE( new JAXBElement<String>( new QName("numeroEntradaBTE"), String.class, request.getTramitNumero())); ConfiguracionAvisosExpediente configuracionAvisos = new ConfiguracionAvisosExpediente(); configuracionAvisos.setHabilitarAvisos( new JAXBElement<Boolean>( new QName("habilitarAvisos"), Boolean.class, new Boolean(request.isAvisosHabilitat()))); configuracionAvisos.setAvisoEmail( new JAXBElement<String>( new QName("avisoEmail"), String.class, request.getAvisosEmail())); configuracionAvisos.setAvisoSMS( new JAXBElement<String>( new QName("avisoSMS"), String.class, request.getAvisosSMS())); expediente.setConfiguracionAvisos( new JAXBElement<ConfiguracionAvisosExpediente>( new QName("configuracionAvisos"), ConfiguracionAvisosExpediente.class, configuracionAvisos)); if (request.getEvents() != null) { EventosExpediente eventosExpediente = new EventosExpediente(); for (Event event: request.getEvents()) eventosExpediente.getEvento().add(toEvento(event)); expediente.setEventos( new JAXBElement<EventosExpediente>( new QName("eventos"), EventosExpediente.class, eventosExpediente)); } PublicarExpedienteRequest req = new PublicarExpedienteRequest(); req.setExpediente(expediente); getTramitacioClient().publicarExpediente(req); } catch (Exception ex) { logger.error("Error al crear expedient a la zona personal", ex); throw new TramitacioPluginException("Error al crear expedient a la zona personal", ex); } } public void publicarEvent( PublicarEventRequest request) throws TramitacioPluginException { try { Event event = request.getEvent(); if (event != null) { PublicarEventoRequest req = new PublicarEventoRequest(); req.setUnidadAdministrativa(request.getUnitatAdministrativa()); req.setIdentificadorExpediente(request.getExpedientIdentificador()); req.setClaveExpediente(request.getExpedientClau()); req.setEvento(toEvento(event)); getTramitacioClient().publicarEvento(req); } else { throw new TramitacioPluginException("Error crear event: l'event es null"); } } catch (Exception ex) { logger.error("Error crear event a la zona personal", ex); throw new TramitacioPluginException("Error crear event a la zona personal", ex); } } @Override public RespostaJustificantRecepcio obtenirJustificantRecepcio(String numeroRegistre) throws TramitacioPluginException { throw new TramitacioPluginException("Error al obtenir justificant de recepció: petició no suportada"); } @Override public RespostaAnotacioRegistre registrarNotificacio(RegistreNotificacio registreNotificacio) throws TramitacioPluginException { throw new TramitacioPluginException("Error al registrar notificació: petició no suportada"); } @Override public RespostaJustificantDetallRecepcio obtenirJustificantDetallRecepcio(String numeroRegistre) throws TramitacioPluginException { throw new TramitacioPluginException("Error al obtenir justificant detall de recepció: petició no suportada"); } public DadesTramit obtenirDadesTramit(ObtenirDadesTramitRequest request) throws TramitacioPluginException { throw new TramitacioPluginException("Error al obtenir dades del tràmit: petició no suportada"); } public void comunicarResultatProcesTramit(ResultatProcesTramitRequest request) throws TramitacioPluginException { throw new TramitacioPluginException("Error al comunicar resultat de procés del tràmit: petició no suportada"); } public DadesVistaDocument obtenirVistaDocument(ObtenirVistaDocumentRequest request) throws TramitacioPluginException { try { ObtenerVistaDocumentoRequest req = new ObtenerVistaDocumentoRequest(); req.setReferenciaDocumento(request.getReferenciaGD()); ObtenerVistaDocumentoResponse response = getGestorDocumentalClient().obtenerVistaDocumento(req); DadesVistaDocument resposta = new DadesVistaDocument(); resposta.setNom(response.getNombreVista()); resposta.setArxiuNom(response.getNombreVista()); resposta.setArxiuContingut(response.getContenidoVista()); return resposta; } catch (Exception ex) { logger.error("Error al obtenir la vista del document " + request, ex); throw new TramitacioPluginException("Error al obtenir la vista del document " + request, ex); } } private EventoExpediente toEvento(Event event) { EventoExpediente evento = new EventoExpediente(); evento.setTitulo(event.getTitol()); evento.setTexto(event.getText()); evento.setTextoSMS( new JAXBElement<String>( new QName("textoSMS"), String.class, event.getTextSMS())); evento.setEnlaceConsulta( new JAXBElement<String>( new QName("enlaceConsulta"), String.class, event.getEnllasConsulta())); if (event.getDocuments() != null) { DocumentosExpediente documentos = new DocumentosExpediente(); for (DocumentEvent document: event.getDocuments()) { DocumentoExpediente documento = new DocumentoExpediente(); documento.setNombreDocumento(document.getNom()); documento.setNombreFichero( new JAXBElement<String>( new QName("nombreFichero"), String.class, document.getArxiuNom())); documento.setContenidoFichero( new JAXBElement<byte[]>( new QName("contenidoFichero"), byte[].class, document.getArxiuContingut())); documento.setTipoDocumento(TypeDocumentoExpediente.BIN); documentos.getDocumento().add(documento); } evento.setDocumentos( new JAXBElement<DocumentosExpediente>( new QName("documentos"), DocumentosExpediente.class, documentos)); } return evento; } private ServicioTramitacionPortType getTramitacioClient() { String url = GlobalProperties.getInstance().getProperty("app.bantel.entrades.url"); if (url == null) url = GlobalProperties.getInstance().getProperty("app.tramitacio.plugin.sistra.client.bantel.url"); String userName = GlobalProperties.getInstance().getProperty("app.bantel.entrades.username"); if (userName == null) userName = GlobalProperties.getInstance().getProperty("app.tramitacio.plugin.sistra.client.bantel.username"); String password = GlobalProperties.getInstance().getProperty("app.bantel.entrades.password"); if (password == null) password = GlobalProperties.getInstance().getProperty("app.tramitacio.plugin.sistra.client.bantel.password"); Object wsClientProxy = WsClientUtils.getWsClientProxy( ServicioTramitacionPortType.class, url, userName, password, getWsClientAuthType(), isWsClientGenerateTimestamp(), isWsClientLogCalls(), isWsClientDisableCnCheck(), null); return (ServicioTramitacionPortType)wsClientProxy; } private ServicioGestorDocumentalPortType getGestorDocumentalClient() { String url = GlobalProperties.getInstance().getProperty("app.bantel.entrades.url"); if (url == null) url = GlobalProperties.getInstance().getProperty("app.tramitacio.plugin.documents.url"); String userName = GlobalProperties.getInstance().getProperty("app.bantel.entrades.username"); if (userName == null) userName = GlobalProperties.getInstance().getProperty("app.tramitacio.plugin.documents.username"); String password = GlobalProperties.getInstance().getProperty("app.bantel.entrades.password"); if (password == null) password = GlobalProperties.getInstance().getProperty("app.tramitacio.plugin.documents.password"); 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.tramitacio.plugin.sistra.client.auth"); if (authType == null) authType = GlobalProperties.getInstance().getProperty("app.ws.client.auth"); return authType; } private boolean isWsClientGenerateTimestamp() { String authType = GlobalProperties.getInstance().getProperty("app.tramitacio.plugin.sistra.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.tramitacio.plugin.sistra.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.tramitacio.plugin.sistra.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(TramitacioPluginEsbCim.class); }