package net.conselldemallorca.helium.integracio.plugins.registre; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Vector; import javax.naming.Context; import javax.naming.InitialContext; import net.conselldemallorca.helium.core.util.GlobalProperties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import es.caib.regweb.logic.helper.ParametrosRegistroEntrada; import es.caib.regweb.logic.helper.ParametrosRegistroSalida; import es.caib.regweb.logic.interfaces.RegistroEntradaFacade; import es.caib.regweb.logic.interfaces.RegistroEntradaFacadeHome; import es.caib.regweb.logic.interfaces.RegistroSalidaFacade; import es.caib.regweb.logic.interfaces.RegistroSalidaFacadeHome; import es.caib.regweb.logic.interfaces.ValoresFacade; import es.caib.regweb.logic.interfaces.ValoresFacadeHome; /** * Implementació del plugin de registre per a la interficie logic del registre * de la CAIB. * * @author Limit Tecnologies <limit@limit.es> */ public class RegistrePluginRegwebLogic implements RegistrePlugin { private static final String SEPARADOR_ENTITAT = "-"; private static final String SEPARADOR_NUMERO = "/"; @SuppressWarnings("unchecked") public RespostaAnotacioRegistre registrarEntrada( RegistreEntrada registreEntrada) throws RegistrePluginException { try { ParametrosRegistroEntrada params = new ParametrosRegistroEntrada(); params.fijaUsuario(getUsuariRegistre()); Date ara = new Date(); params.setdataentrada(new SimpleDateFormat("dd/MM/yyyy") .format(ara)); params.sethora(new SimpleDateFormat("HH:mm").format(ara)); if (registreEntrada.getDadesOficina() != null) { String oficinaCodi = registreEntrada.getDadesOficina() .getOficinaCodi(); if (oficinaCodi != null) { int indexBarra = oficinaCodi.indexOf(SEPARADOR_ENTITAT); if (indexBarra != -1) { params.setoficina(oficinaCodi.substring(0, indexBarra)); params.setoficinafisica(oficinaCodi .substring(indexBarra + 1)); } } if (registreEntrada.getDadesOficina().getOrganCodi() != null) params.setdestinatari(registreEntrada.getDadesOficina() .getOrganCodi()); } if (registreEntrada.getDadesInteressat() != null) { String entitatCodi = registreEntrada.getDadesInteressat() .getEntitatCodi(); if (entitatCodi != null) { int indexBarra = entitatCodi.indexOf(SEPARADOR_ENTITAT); if (indexBarra != -1) { params.setentidad1(entitatCodi.substring(0, indexBarra)); params.setentidad2(entitatCodi .substring(indexBarra + 1)); // Afegit per indicació de la DGTIC params.setEntidadCastellano(params.getEntidad1()); } } if (registreEntrada.getDadesInteressat().getNomAmbCognoms() != null) params.setaltres(registreEntrada.getDadesInteressat() .getNomAmbCognoms()); if (registreEntrada.getDadesInteressat().getMunicipiCodi() != null) params.setbalears(registreEntrada.getDadesInteressat() .getMunicipiCodi()); if (registreEntrada.getDadesInteressat().getMunicipiNom() != null) params.setfora(registreEntrada.getDadesInteressat() .getMunicipiNom()); } if (registreEntrada.getDadesAssumpte() != null) { if (registreEntrada.getDadesAssumpte().getTipus() != null) params.settipo(registreEntrada.getDadesAssumpte() .getTipus()); if (registreEntrada.getDadesAssumpte().getRegistreNumero() != null) { params.setsalida1(registreEntrada.getDadesAssumpte() .getRegistreNumero()); params.setsalida2(registreEntrada.getDadesAssumpte() .getRegistreAny()); } if (registreEntrada.getDadesAssumpte().getIdiomaCodi() != null) params.setidioex(convertirIdioma(registreEntrada .getDadesAssumpte().getIdiomaCodi())); if (registreEntrada.getDadesAssumpte().getAssumpte() != null) params.setcomentario(registreEntrada.getDadesAssumpte() .getAssumpte()); } if (registreEntrada.getDocuments() != null && registreEntrada.getDocuments().size() > 0) { if (registreEntrada.getDocuments().size() == 1) { DocumentRegistre document = registreEntrada.getDocuments() .get(0); params.setdata(new SimpleDateFormat("dd/MM/yyyy") .format(document.getData())); params.setidioma(convertirIdioma(document.getIdiomaCodi())); } else { throw new RegistrePluginException( "Nomes es pot registrar un document alhora"); } } else { throw new RegistrePluginException( "S'ha d'especificar algun document per registrar"); } // imprimirDadesRegistreEntrada(registreEntrada, params); RegistroEntradaFacade registroEntrada = getRegistreEntradaService(); ParametrosRegistroEntrada respostaValidacio = registroEntrada .validar(params); if (respostaValidacio.getValidado()) { ParametrosRegistroEntrada respostaGrabacio = registroEntrada .grabar(params); RespostaAnotacioRegistre resposta = new RespostaAnotacioRegistre(); if (respostaGrabacio.getGrabado()) { resposta.setErrorCodi(RespostaAnotacioRegistre.ERROR_CODI_OK); resposta.setNumero(respostaGrabacio.getNumeroEntrada() + SEPARADOR_NUMERO + respostaGrabacio.getAnoEntrada()); resposta.setData(ara); return resposta; } else { throw new RegistrePluginException( "No s'ha pogut guardar l'entrada"); } } else { StringBuilder sb = new StringBuilder(); sb.append("Errors de validació:\n"); Map<String, String> errors = respostaValidacio.getErrores(); for (String camp : errors.keySet()) { sb.append(" | " + errors.get(camp)); } throw new RegistrePluginException( "S'han produit errors de validació de l'entrada: " + sb.toString()); } } catch (Exception ex) { logger.error("Error al registrar l'entrada", ex); throw new RegistrePluginException("Error al registrar l'entrada", ex); } } public RespostaConsulta consultarEntrada(String organCodi, String oficinaCodi, String registreNumero) throws RegistrePluginException { try { ParametrosRegistroEntrada params = new ParametrosRegistroEntrada(); params.fijaUsuario(getUsuariRegistre()); params.setoficina(organCodi); params.setoficinafisica(oficinaCodi); int index = registreNumero.indexOf(SEPARADOR_NUMERO); if (index == -1) throw new RegistrePluginException( "El número de registre a consultar (" + registreNumero + ") no té el format correcte"); params.setNumeroEntrada(registreNumero.substring(0, index)); params.setAnoEntrada(registreNumero.substring(index + 1)); RegistroEntradaFacade registroEntrada = getRegistreEntradaService(); ParametrosRegistroEntrada llegit = registroEntrada.leer(params); RespostaConsulta resposta = new RespostaConsulta(); resposta.setRegistreNumero(registreNumero); resposta.setRegistreData(new SimpleDateFormat("dd/MM/yyyy HH:mm") .parse(llegit.getDataEntrada() + " " + llegit.getHora())); DadesOficina dadesOficina = new DadesOficina(); dadesOficina.setOrganCodi(llegit.getDestinatari()); dadesOficina.setOficinaCodi(llegit.getOficina() + SEPARADOR_ENTITAT + llegit.getOficinafisica()); resposta.setDadesOficina(dadesOficina); DadesInteressat dadesInteressat = new DadesInteressat(); if (llegit.getEntidad1() != null && !"".equals(llegit.getEntidad1())) dadesInteressat.setEntitatCodi(llegit.getEntidad1() + SEPARADOR_ENTITAT + llegit.getEntidad2()); dadesInteressat.setNomAmbCognoms(llegit.getAltres()); dadesInteressat.setMunicipiCodi(llegit.getBalears()); dadesInteressat.setMunicipiNom(llegit.getFora()); resposta.setDadesInteressat(dadesInteressat); DadesAssumpte dadesAssumpte = new DadesAssumpte(); dadesAssumpte.setIdiomaCodi(llegit.getIdioex()); dadesAssumpte.setTipus(llegit.getTipo()); dadesAssumpte.setAssumpte(llegit.getComentario()); resposta.setDadesAssumpte(dadesAssumpte); List<DocumentRegistre> documents = new ArrayList<DocumentRegistre>(); DocumentRegistre document = new DocumentRegistre(); document.setIdiomaCodi(llegit.getIdioma()); if (llegit.getData() != null) document.setData(new SimpleDateFormat("dd/MM/yyyy") .parse(llegit.getData())); documents.add(document); resposta.setDocuments(documents); return resposta; } catch (Exception ex) { logger.error("Error al consultar l'entrada", ex); throw new RegistrePluginException("Error al consultar l'entrada", ex); } } @SuppressWarnings("unchecked") public RespostaAnotacioRegistre registrarSortida( RegistreSortida registreSortida) throws RegistrePluginException { try { ParametrosRegistroSalida params = new ParametrosRegistroSalida(); params.fijaUsuario(getUsuariRegistre()); Date ara = new Date(); params.setdatasalida(new SimpleDateFormat("dd/MM/yyyy").format(ara)); params.sethora(new SimpleDateFormat("HH:mm").format(ara)); if (registreSortida.getDadesOficina() != null) { String oficinaCodi = registreSortida.getDadesOficina() .getOficinaCodi(); if (oficinaCodi != null) { int indexBarra = oficinaCodi.indexOf(SEPARADOR_ENTITAT); if (indexBarra != -1) { params.setoficina(oficinaCodi.substring(0, indexBarra)); params.setoficinafisica(oficinaCodi .substring(indexBarra + 1)); } } if (registreSortida.getDadesOficina().getOrganCodi() != null) params.setremitent(registreSortida.getDadesOficina() .getOrganCodi()); } if (registreSortida.getDadesInteressat() != null) { String entitatCodi = registreSortida.getDadesInteressat() .getEntitatCodi(); if (entitatCodi != null) { int indexBarra = entitatCodi.indexOf(SEPARADOR_ENTITAT); if (indexBarra != -1) { params.setentidad1(entitatCodi.substring(0, indexBarra)); params.setentidad2(entitatCodi .substring(indexBarra + 1)); // Afegit per indicació de la DGTIC params.setEntidadCastellano(params.getEntidad1()); } } if (registreSortida.getDadesInteressat().getNomAmbCognoms() != null) params.setaltres(registreSortida.getDadesInteressat() .getNomAmbCognoms()); if (registreSortida.getDadesInteressat().getMunicipiCodi() != null) params.setbalears(registreSortida.getDadesInteressat() .getMunicipiCodi()); if (registreSortida.getDadesInteressat().getMunicipiNom() != null) params.setfora(registreSortida.getDadesInteressat() .getMunicipiNom()); } if (registreSortida.getDadesAssumpte() != null) { if (registreSortida.getDadesAssumpte().getTipus() != null) params.settipo(registreSortida.getDadesAssumpte() .getTipus()); if (registreSortida.getDadesAssumpte().getRegistreNumero() != null) { params.setentrada1(registreSortida.getDadesAssumpte() .getRegistreNumero()); params.setentrada2(registreSortida.getDadesAssumpte() .getRegistreAny()); } if (registreSortida.getDadesAssumpte().getIdiomaCodi() != null) params.setidioex(convertirIdioma(registreSortida .getDadesAssumpte().getIdiomaCodi())); if (registreSortida.getDadesAssumpte().getAssumpte() != null) params.setcomentario(registreSortida.getDadesAssumpte() .getAssumpte()); } if (registreSortida.getDocuments() != null && registreSortida.getDocuments().size() > 0) { if (registreSortida.getDocuments().size() == 1) { DocumentRegistre document = registreSortida.getDocuments() .get(0); params.setdata(new SimpleDateFormat("dd/MM/yyyy") .format(document.getData())); params.setidioma(convertirIdioma(document.getIdiomaCodi())); } else { throw new RegistrePluginException( "Nomes es pot registrar un document alhora"); } } else { throw new RegistrePluginException( "S'ha d'especificar algun document per registrar"); } // imprimirDadesRegistreSortida(registreSortida, params); RegistroSalidaFacade registroSalida = getRegistreSortidaService(); ParametrosRegistroSalida respostaValidacio = registroSalida .validar(params); if (respostaValidacio.getValidado()) { ParametrosRegistroSalida respostaGrabacio = registroSalida .grabar(params); RespostaAnotacioRegistre resposta = new RespostaAnotacioRegistre(); if (respostaGrabacio.getGrabado()) { resposta.setErrorCodi(RespostaAnotacioRegistre.ERROR_CODI_OK); resposta.setNumero(respostaGrabacio.getNumeroSalida() + SEPARADOR_NUMERO + respostaGrabacio.getAnoSalida()); resposta.setData(ara); return resposta; } else { throw new RegistrePluginException( "No s'ha pogut guardar la sortida"); } } else { StringBuilder sb = new StringBuilder(); sb.append("Errors de validació:\n"); Map<String, String> errors = respostaValidacio.getErrores(); for (String camp : errors.keySet()) { sb.append(" | " + errors.get(camp)); } throw new RegistrePluginException( "S'han produit errors de validació de l'entrada: " + sb.toString()); } } catch (Exception ex) { logger.error("Error al registrar la sortida", ex); throw new RegistrePluginException("Error al registrar la sortida", ex); } } public RespostaConsulta consultarSortida(String organCodi, String oficinaCodi, String registreNumero) throws RegistrePluginException { try { ParametrosRegistroSalida params = new ParametrosRegistroSalida(); params.fijaUsuario(getUsuariRegistre()); params.setoficina(organCodi); params.setoficinafisica(oficinaCodi); int index = registreNumero.indexOf(SEPARADOR_NUMERO); if (index == -1) throw new RegistrePluginException( "El número de registre a consultar (" + registreNumero + ") no té el format correcte"); params.setNumeroSalida(registreNumero.substring(0, index)); params.setAnoSalida(registreNumero.substring(index + 1)); RegistroSalidaFacade registroSalida = getRegistreSortidaService(); ParametrosRegistroSalida llegit = registroSalida.leer(params); RespostaConsulta resposta = new RespostaConsulta(); resposta.setRegistreNumero(registreNumero); resposta.setRegistreData(new SimpleDateFormat("dd/MM/yyyy HH:mm") .parse(llegit.getDataSalida() + " " + llegit.getHora())); DadesOficina dadesOficina = new DadesOficina(); dadesOficina.setOrganCodi(llegit.getRemitent()); dadesOficina.setOficinaCodi(llegit.getOficina() + SEPARADOR_ENTITAT + llegit.getOficinafisica()); resposta.setDadesOficina(dadesOficina); DadesInteressat dadesInteressat = new DadesInteressat(); if (llegit.getEntidad1() != null && !"".equals(llegit.getEntidad1())) dadesInteressat.setEntitatCodi(llegit.getEntidad1() + SEPARADOR_ENTITAT + llegit.getEntidad2()); dadesInteressat.setNomAmbCognoms(llegit.getAltres()); dadesInteressat.setMunicipiCodi(llegit.getBalears()); dadesInteressat.setMunicipiNom(llegit.getFora()); resposta.setDadesInteressat(dadesInteressat); DadesAssumpte dadesAssumpte = new DadesAssumpte(); dadesAssumpte.setUnitatAdministrativa(llegit.getRemitent()); dadesAssumpte.setIdiomaCodi(llegit.getIdioex()); dadesAssumpte.setTipus(llegit.getTipo()); dadesAssumpte.setAssumpte(llegit.getComentario()); resposta.setDadesAssumpte(dadesAssumpte); List<DocumentRegistre> documents = new ArrayList<DocumentRegistre>(); DocumentRegistre document = new DocumentRegistre(); document.setIdiomaCodi(llegit.getIdioma()); if (llegit.getData() != null) document.setData(new SimpleDateFormat("dd/MM/yyyy") .parse(llegit.getData())); documents.add(document); resposta.setDocuments(documents); return resposta; } catch (Exception ex) { logger.error("Error al consultar la sortida", ex); throw new RegistrePluginException("Error al consultar la sortida", ex); } } public RespostaAnotacioRegistre registrarNotificacio( RegistreNotificacio registreNotificacio) throws RegistrePluginException { throw new RegistrePluginException( "Mètode no implementat en aquest plugin"); } public RespostaJustificantRecepcio obtenirJustificantRecepcio( String numeroRegistre) throws RegistrePluginException { throw new RegistrePluginException( "Mètode no implementat en aquest plugin"); } @SuppressWarnings({ "rawtypes", "unused" }) public String obtenirNomOficina(String oficinaCodi) throws RegistrePluginException { try { if (oficinaCodi != null) { int indexBarra = oficinaCodi.indexOf(SEPARADOR_ENTITAT); if (indexBarra != -1) { Vector v = getValoresService() .buscarOficinasFisicasDescripcion("tots", "totes"); Iterator it = v.iterator(); while (it.hasNext()) { String codiOficina = (String) it.next(); String codiOficinaFisica = (String) it.next(); String nomOficinaFisica = (String) it.next(); String nomOficina = (String) it.next(); String textComparacio = codiOficina + SEPARADOR_ENTITAT + codiOficinaFisica; if (textComparacio.equals(oficinaCodi)) return nomOficina; } } } return null; } catch (Exception ex) { logger.error("Error al obtenir el nom de l'oficina " + oficinaCodi, ex); throw new RegistrePluginException( "Error al obtenir el nom de l'oficina " + oficinaCodi, ex); } } private RegistroEntradaFacade getRegistreEntradaService() throws Exception { Context ctx = getInitialContext(); Object objRef = ctx .lookup("es.caib.regweb.logic.RegistroEntradaFacade"); RegistroEntradaFacadeHome home = (RegistroEntradaFacadeHome) javax.rmi.PortableRemoteObject .narrow(objRef, RegistroEntradaFacadeHome.class); ctx.close(); // if (false) // newLogin(); return home.create(); } private RegistroSalidaFacade getRegistreSortidaService() throws Exception { Context ctx = getInitialContext(); Object objRef = ctx.lookup("es.caib.regweb.logic.RegistroSalidaFacade"); RegistroSalidaFacadeHome home = (RegistroSalidaFacadeHome) javax.rmi.PortableRemoteObject .narrow(objRef, RegistroSalidaFacadeHome.class); ctx.close(); // if (false) // newLogin(); return home.create(); } private ValoresFacade getValoresService() throws Exception { Context ctx = getInitialContext(); Object objRef = ctx.lookup("es.caib.regweb.logic.ValoresFacade"); ValoresFacadeHome home = (ValoresFacadeHome) javax.rmi.PortableRemoteObject .narrow(objRef, ValoresFacadeHome.class); ctx.close(); // if (false) // newLogin(); return home.create(); } private Context getInitialContext() throws Exception { Properties props = new Properties(); props.put( Context.INITIAL_CONTEXT_FACTORY, GlobalProperties.getInstance().getProperty( "app.registre.plugin.initial.context.factory")); props.put(Context.URL_PKG_PREFIXES, GlobalProperties.getInstance() .getProperty("app.registre.plugin.url.pkg.prefixes")); props.put(Context.PROVIDER_URL, GlobalProperties.getInstance() .getProperty("app.registre.plugin.provider.url")); // if (true) { String principal = GlobalProperties.getInstance().getProperty( "app.registre.plugin.security.principal"); if (principal != null && principal.length() > 0) props.put(Context.SECURITY_PRINCIPAL, principal); String credentials = GlobalProperties.getInstance().getProperty( "app.registre.plugin.security.credentials"); if (credentials != null && credentials.length() > 0) props.put(Context.SECURITY_CREDENTIALS, credentials); // } return new InitialContext(props); } /* * private void newLogin() throws Exception { String principal = * GlobalProperties * .getInstance().getProperty("app.registre.plugin.security.principal"); * String credentials = GlobalProperties.getInstance().getProperty( * "app.registre.plugin.security.credentials"); * org.jboss.security.auth.callback.UsernamePasswordHandler handler = new * org.jboss.security.auth.callback.UsernamePasswordHandler( principal, * credentials.toCharArray()); javax.security.auth.login.LoginContext lc = * new javax.security.auth.login.LoginContext("client-login", handler); * lc.login(); } */ private String getUsuariRegistre() { String usuari = GlobalProperties.getInstance().getProperty( "app.registre.plugin.security.principal"); if (usuari == null || usuari.length() == 0) { Authentication auth = SecurityContextHolder.getContext() .getAuthentication(); usuari = auth.getName(); } return usuari; } private String convertirIdioma(String iso6391) { if ("es".equalsIgnoreCase(iso6391)) { return "1"; } else if ("ca".equalsIgnoreCase(iso6391)) { return "2"; } else if ("eu".equalsIgnoreCase(iso6391)) { return "4"; } else if ("gl".equalsIgnoreCase(iso6391)) { return "5"; } else if ("as".equalsIgnoreCase(iso6391)) { return "6"; } else if ("de".equalsIgnoreCase(iso6391)) { return "C"; } else if ("en".equalsIgnoreCase(iso6391)) { return "A"; } else if ("fr".equalsIgnoreCase(iso6391)) { return "B"; } else if ("it".equalsIgnoreCase(iso6391)) { return "E"; } else if ("pt".equalsIgnoreCase(iso6391)) { return "F"; } return "2"; } private static final Log logger = LogFactory.getLog(RegistrePluginRegwebLogic.class); }