package net.conselldemallorca.helium.integracio.plugins.registre; import javax.xml.bind.JAXBElement; import javax.xml.namespace.QName; import javax.xml.ws.Holder; 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.registro.v1.model.acuserecibo.AcuseRecibo; import es.cim.ws.registro.v1.model.aviso.Aviso; import es.cim.ws.registro.v1.model.datosexpediente.DatosExpediente; import es.cim.ws.registro.v1.model.datosinteresado.DatosInteresado; import es.cim.ws.registro.v1.model.datosnotificacion.DatosNotificacion; import es.cim.ws.registro.v1.model.datosregistrosalida.DatosRegistroSalida; import es.cim.ws.registro.v1.model.datosrepresentado.DatosRepresentado; import es.cim.ws.registro.v1.model.documento.Documento; import es.cim.ws.registro.v1.model.documento.Documentos; import es.cim.ws.registro.v1.model.documento.TypeDocumentoRegistro; import es.cim.ws.registro.v1.model.oficinaregistral.OficinaRegistral; import es.cim.ws.registro.v1.model.oficioremision.OficioRemision; import es.cim.ws.registro.v1.model.oficioremision.OficioRemision.TramiteSubsanacion; import es.cim.ws.registro.v1.model.oficioremision.OficioRemision.TramiteSubsanacion.ParametrosTramite; import es.cim.ws.registro.v1.model.oficioremision.ParametroTramite; import es.cim.ws.registro.v1.model.registro.RegistroSalida; import es.cim.ws.registro.v1.model.registro.RegistroSalidaResponse; import es.cim.ws.registro.v1.model.registro.TypeCodigoError; import es.cim.ws.registro.v1.services.ServicioRegistroPortType; /** * Implementació del plugin de registre per al ESB del Consell * de Mallorca. * * @author Limit Tecnologies <limit@limit.es> */ public class RegistrePluginEsbCim implements RegistrePlugin { public RespostaAnotacioRegistre registrarEntrada( RegistreEntrada registreEntrada) throws RegistrePluginException { throw new RegistrePluginException("Mètode no implementat en aquest plugin"); } public RespostaConsulta consultarEntrada( String organCodi, String oficinaCodi, String numeroRegistre) throws RegistrePluginException { throw new RegistrePluginException("Mètode no implementat en aquest plugin"); } public RespostaAnotacioRegistre registrarSortida( RegistreSortida registreSortida) throws RegistrePluginException { throw new RegistrePluginException("Mètode no implementat en aquest plugin"); } public RespostaConsulta consultarSortida( String organCodi, String oficinaCodi, String numeroRegistre) throws RegistrePluginException { throw new RegistrePluginException("Mètode no implementat en aquest plugin"); } public RespostaAnotacioRegistre registrarNotificacio( RegistreNotificacio registreNotificacio) throws RegistrePluginException { try { RespostaAnotacioRegistre resposta = new RespostaAnotacioRegistre(); RegistroSalida registroSalida = new RegistroSalida(); DatosRegistroSalida datosRegistroSalida = new DatosRegistroSalida(); if (registreNotificacio.getDadesOficina() != null) { OficinaRegistral oficinaRegistral = new OficinaRegistral(); oficinaRegistral.setCodigoOrgano( registreNotificacio.getDadesOficina().getOrganCodi()); oficinaRegistral.setCodigoOficina( registreNotificacio.getDadesOficina().getOficinaCodi()); datosRegistroSalida.setOficinaRegistral(oficinaRegistral); } if (registreNotificacio.getDadesInteressat() != null) { DatosInteresado datosInteresado = new DatosInteresado(); datosInteresado.setAutenticado( registreNotificacio.getDadesInteressat().isAutenticat()); datosInteresado.setNombreApellidos( registreNotificacio.getDadesInteressat().getNomAmbCognoms()); datosInteresado.setNif( registreNotificacio.getDadesInteressat().getNif()); if (registreNotificacio.getDadesInteressat().getPaisCodi() != null) datosInteresado.setCodigoPais( new JAXBElement<String>( new QName("codigoPais"), String.class, registreNotificacio.getDadesInteressat().getPaisCodi())); if (registreNotificacio.getDadesInteressat().getPaisNom() != null) datosInteresado.setNombrePais( new JAXBElement<String>( new QName("nombrePais"), String.class, registreNotificacio.getDadesInteressat().getPaisNom())); if (registreNotificacio.getDadesInteressat().getProvinciaCodi() != null) datosInteresado.setCodigoProvincia( new JAXBElement<String>( new QName("codigoProvincia"), String.class, registreNotificacio.getDadesInteressat().getProvinciaCodi())); if (registreNotificacio.getDadesInteressat().getProvinciaNom() != null) datosInteresado.setNombreProvincia( new JAXBElement<String>( new QName("nombreProvincia"), String.class, registreNotificacio.getDadesInteressat().getProvinciaNom())); if (registreNotificacio.getDadesInteressat().getMunicipiCodi() != null) datosInteresado.setCodigoLocalidad( new JAXBElement<String>( new QName("codigoLocalidad"), String.class, registreNotificacio.getDadesInteressat().getMunicipiCodi())); if (registreNotificacio.getDadesInteressat().getMunicipiNom() != null) datosInteresado.setNombreLocalidad( new JAXBElement<String>( new QName("nombreLocalidad"), String.class, registreNotificacio.getDadesInteressat().getMunicipiNom())); datosRegistroSalida.setDatosInteresado(datosInteresado); } if (registreNotificacio.getDadesRepresentat() != null) { DatosRepresentado datosRepresentado = new DatosRepresentado(); datosRepresentado.setNif(registreNotificacio.getDadesRepresentat().getNif()); datosRepresentado.setNombreApellidos(registreNotificacio.getDadesRepresentat().getNomAmbCognoms()); datosRegistroSalida.setDatosRepresentado( new JAXBElement<DatosRepresentado>( new QName("datosRepresentado"), DatosRepresentado.class, datosRepresentado)); } if (registreNotificacio.getDadesExpedient() != null) { DatosExpediente datosExpediente = new DatosExpediente(); datosExpediente.setUnidadAdministrativa( Long.parseLong(registreNotificacio.getDadesExpedient().getUnitatAdministrativa())); datosExpediente.setIdentificadorExpediente( registreNotificacio.getDadesExpedient().getIdentificador()); datosExpediente.setClaveExpediente( registreNotificacio.getDadesExpedient().getClau()); datosRegistroSalida.setDatosExpediente(datosExpediente); } if (registreNotificacio.getDadesNotificacio() != null) { DatosNotificacion datosNotificacion = new DatosNotificacion(); datosNotificacion.setIdioma( registreNotificacio.getDadesNotificacio().getIdiomaCodi()); datosNotificacion.setTipoAsunto( registreNotificacio.getDadesNotificacio().getTipus()); datosNotificacion.setAcuseRecibo( registreNotificacio.getDadesNotificacio().isJustificantRecepcio()); OficioRemision oficioRemision = new OficioRemision(); oficioRemision.setTitulo( registreNotificacio.getDadesNotificacio().getOficiTitol()); oficioRemision.setTexto( registreNotificacio.getDadesNotificacio().getOficiText()); if (registreNotificacio.getDadesNotificacio().getOficiTramitSubsanacio() != null) { TramitSubsanacio tramitSubsanacio = registreNotificacio.getDadesNotificacio().getOficiTramitSubsanacio(); TramiteSubsanacion tramiteSubsanacion = new TramiteSubsanacion(); tramiteSubsanacion.setIdentificadorTramite( tramitSubsanacio.getIdentificador()); tramiteSubsanacion.setVersionTramite( tramitSubsanacio.getVersio()); tramiteSubsanacion.setDescripcionTramite( tramitSubsanacio.getDescripcio()); if (tramitSubsanacio.getParametres() != null) { ParametrosTramite parametrosTramite = new ParametrosTramite(); for (TramitSubsanacioParametre parametre: tramitSubsanacio.getParametres()) { ParametroTramite parametro = new ParametroTramite(); parametro.setParametro(parametre.getParametre()); parametro.setValor(parametre.getValor()); parametrosTramite.getParametroTramite().add(parametro); } tramiteSubsanacion.setParametrosTramite( new JAXBElement<ParametrosTramite>( new QName("parametrosTramite"), ParametrosTramite.class, parametrosTramite)); } oficioRemision.setTramiteSubsanacion( new JAXBElement<TramiteSubsanacion>( new QName("tramiteSubsanacion"), TramiteSubsanacion.class, tramiteSubsanacion)); } datosNotificacion.setOficioRemision(oficioRemision); Aviso aviso = new Aviso(); aviso.setTitulo( registreNotificacio.getDadesNotificacio().getAvisTitol()); aviso.setTexto( registreNotificacio.getDadesNotificacio().getAvisText()); aviso.setTextoSMS( new JAXBElement<String>( new QName("textoSMS"), String.class, registreNotificacio.getDadesNotificacio().getAvisTextSms())); datosNotificacion.setAviso(aviso); datosRegistroSalida.setDatosNotificacion(datosNotificacion); } if (registreNotificacio.getDocuments() != null) { Documentos documentos = new Documentos(); for (DocumentRegistre document: registreNotificacio.getDocuments()) { Documento documento = new Documento(); documento.setNombreDocumento(document.getNom()); documento.setTipoDocumento(TypeDocumentoRegistro.BIN); documento.setNombreFichero( new JAXBElement<String>( new QName("nombreFichero"), String.class, document.getArxiuNom())); documento.setContenidoFichero( new JAXBElement<byte[]>( new QName("contenidoFichero"), byte[].class, document.getArxiuContingut())); documentos.getDocumento().add(documento); } datosRegistroSalida.setDocumentos( new JAXBElement<Documentos>( new QName("documentos"), Documentos.class, documentos)); } registroSalida.setNotificacion(datosRegistroSalida); RegistroSalidaResponse response = getRegistroClient().crearRegistroSalida( registroSalida); if (TypeCodigoError.OK.equals(response.getCodigoError())) { resposta.setErrorCodi(RespostaAnotacioRegistre.ERROR_CODI_OK); if (response.getResultadoRegistro() != null) { resposta.setNumero( response.getResultadoRegistro().getNumeroRegistro()); if (response.getResultadoRegistro().getFechaRegistro() != null) resposta.setData( response.getResultadoRegistro().getFechaRegistro().toGregorianCalendar().getTime()); } } else { resposta.setErrorCodi(RespostaAnotacioRegistre.ERROR_CODI_ERROR); resposta.setErrorDescripcio(response.getDescripcionError()); } return resposta; } catch (Exception ex) { logger.error("Error al registrar la sortida", ex); throw new RegistrePluginException("Error al registrar la sortida", ex); } } public RespostaJustificantRecepcio obtenirJustificantRecepcio( String numeroRegistre) throws RegistrePluginException { try { RespostaJustificantRecepcio resposta = new RespostaJustificantRecepcio(); Holder<TypeCodigoError> codigoError = new Holder<TypeCodigoError>(); Holder<String> descripcionError = new Holder<String>(); Holder<AcuseRecibo> acuseRecibo = new Holder<AcuseRecibo>(); getRegistroClient().obtenerAcuseRecibo( numeroRegistre, codigoError, descripcionError, acuseRecibo); if (TypeCodigoError.OK.equals(codigoError.value)) { resposta.setErrorCodi(RespostaAnotacioRegistre.ERROR_CODI_OK); if (acuseRecibo.value != null && acuseRecibo.value.getFechaAcuseRecibo() != null) { resposta.setData( acuseRecibo.value.getFechaAcuseRecibo().toGregorianCalendar().getTime()); } } else { resposta.setErrorCodi(RespostaAnotacioRegistre.ERROR_CODI_ERROR); resposta.setErrorDescripcio(descripcionError.value); } return resposta; } catch (Exception ex) { logger.error("Error al obtenir el justificant de recepció", ex); throw new RegistrePluginException("Error al obtenir el justificant de recepció", ex); } } public String obtenirNomOficina(String oficinaCodi) throws RegistrePluginException { return "Registre General"; } private ServicioRegistroPortType getRegistroClient() { String url = GlobalProperties.getInstance().getProperty("app.registre.plugin.url"); String userName = GlobalProperties.getInstance().getProperty("app.registre.plugin.username"); String password = GlobalProperties.getInstance().getProperty("app.registre.plugin.password"); Object wsClientProxy = WsClientUtils.getWsClientProxy( ServicioRegistroPortType.class, url, userName, password, getWsClientAuthType(), isWsClientGenerateTimestamp(), isWsClientLogCalls(), isWsClientDisableCnCheck(), null); return (ServicioRegistroPortType)wsClientProxy; } private String getWsClientAuthType() { String authType = GlobalProperties.getInstance().getProperty("app.registre.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.registre.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.registre.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.registre.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(RegistrePluginEsbCim.class); }