/** * */ package net.conselldemallorca.helium.core.model.dao; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import net.conselldemallorca.helium.core.helper.PluginHelper; import net.conselldemallorca.helium.core.model.dto.PersonaDto; import net.conselldemallorca.helium.core.model.exception.PersonaPluginException; import net.conselldemallorca.helium.core.model.exception.PluginException; import net.conselldemallorca.helium.core.model.hibernate.Persona; import net.conselldemallorca.helium.core.util.GlobalProperties; import net.conselldemallorca.helium.integracio.plugins.persones.DadesPersona; import net.conselldemallorca.helium.integracio.plugins.persones.PersonesPlugin; import net.conselldemallorca.helium.integracio.plugins.persones.PersonesPluginException; /** * Dao pels objectes de tipus persona * * @author Limit Tecnologies <limit@limit.es> */ @Component public class PluginPersonaDao extends PersonaDao { private PersonesPlugin personesPlugin; private boolean pluginEvaluat = false; @Autowired private PluginHelper pluginHelper; public PluginPersonaDao() { super(); } public List<PersonaDto> findLikeNomSencerPlugin(String text) { try { if (getPersonesPlugin() == null || isSyncActiu()) { List<Persona> persones = findLikeNomSencer(text); List<PersonaDto> resposta = new ArrayList<PersonaDto>(); if (persones != null) { for (Persona persona: persones) { resposta.add(toPersonaPlugin(persona)); } } return resposta; } else { List<DadesPersona> persones = personesPlugin.findLikeNomSencer(text); List<PersonaDto> resposta = new ArrayList<PersonaDto>(); if (persones != null) { for (DadesPersona persona: persones) resposta.add(toPersonaPlugin(persona)); } return resposta; } } catch (PersonesPluginException ex) { logger.error("Error al cercar les persones amb el nom sencer", ex); throw new PluginException("Error al cercar les persones amb el nom sencer", ex); } } public PersonaDto findAmbCodiPlugin(String codi) { String codiPerConsulta = (isIgnoreCase()) ? codi.toLowerCase() : codi; net.conselldemallorca.helium.v3.core.api.dto.PersonaDto dto = pluginHelper.personaFindAmbCodi( codiPerConsulta); PersonaDto.Sexe sexe = null; if (dto.getSexe() != null) { switch (dto.getSexe()) { case SEXE_DONA: sexe = PersonaDto.Sexe.SEXE_DONA; break; case SEXE_HOME: sexe = PersonaDto.Sexe.SEXE_HOME; break; } } PersonaDto personaDto = new PersonaDto( dto.getCodi(), dto.getNom(), dto.getLlinatges(), dto.getEmail(), sexe); return personaDto; /*String codiPerConsulta = (isIgnoreCase()) ? codi.toLowerCase() : codi; try { if (getPersonesPlugin() == null || isSyncActiu()) { return toPersonaPlugin(findAmbCodi(codiPerConsulta)); } else { net.conselldemallorca.helium.v3.core.api.dto.PersonaDto dto = cacheHelper.getPersonaFromPlugin( codiPerConsulta, personesPlugin); PersonaDto.Sexe sexe = null; if (dto.getSexe() != null) { switch (dto.getSexe()) { case SEXE_DONA: sexe = PersonaDto.Sexe.SEXE_DONA; break; case SEXE_HOME: sexe = PersonaDto.Sexe.SEXE_HOME; break; } } PersonaDto personaDto = new PersonaDto( dto.getCodi(), dto.getNom(), dto.getLlinatges(), dto.getEmail(), sexe); return personaDto; } } catch (PersonesPluginException ex) { logger.error("Error al cercar les persones amb el codi " + codi, ex); throw new PluginException("Error al cercar les persones amb el codi" + codi, ex); }*/ } public List<PersonaDto> findAllPlugin() { try { if (getPersonesPlugin() == null) { List<Persona> persones = findAll(); List<PersonaDto> resposta = new ArrayList<PersonaDto>(); for (Persona persona: persones) resposta.add(toPersonaPlugin(persona)); return resposta; } else { List<DadesPersona> persones = personesPlugin.findAll(); List<PersonaDto> resposta = new ArrayList<PersonaDto>(); for (DadesPersona persona: persones) resposta.add(toPersonaPlugin(persona)); return resposta; } } catch (PersonesPluginException ex) { logger.error("Error al cercar totes les persones", ex); throw new PluginException("Error al cercar totes les persones", ex); } } @SuppressWarnings("rawtypes") protected PersonesPlugin getPersonesPlugin() { try { if (pluginEvaluat) return personesPlugin; String pluginClass = GlobalProperties.getInstance().getProperty("app.persones.plugin.class"); if (pluginClass != null) { Class clazz = Class.forName(pluginClass); personesPlugin = (PersonesPlugin)clazz.newInstance(); } pluginEvaluat = true; return personesPlugin; } catch (Exception ex) { throw new PersonaPluginException("No s'ha pogut crear la instància del plugin", ex); } } private PersonaDto toPersonaPlugin(Persona persona) { if (persona == null) return null; PersonaDto.Sexe sexe = null; if (persona.getSexe().equals(Persona.Sexe.SEXE_HOME)) sexe = PersonaDto.Sexe.SEXE_HOME; else sexe = PersonaDto.Sexe.SEXE_DONA; PersonaDto p = new PersonaDto( persona.getCodi(), persona.getNomSencer(), persona.getEmail(), sexe); p.setDni(persona.getDni()); return p; } private PersonaDto toPersonaPlugin(DadesPersona persona) { if (persona == null) return null; PersonaDto.Sexe sexe = null; if (persona.getSexe().equals(DadesPersona.Sexe.SEXE_HOME)) sexe = PersonaDto.Sexe.SEXE_HOME; else sexe = PersonaDto.Sexe.SEXE_DONA; PersonaDto p = new PersonaDto( persona.getCodi(), persona.getNomSencer(), persona.getEmail(), sexe); p.setDni(persona.getDni()); return p; } private boolean isSyncActiu() { String syncActiu = GlobalProperties.getInstance().getProperty("app.persones.plugin.sync.actiu"); return "true".equalsIgnoreCase(syncActiu); } private boolean isIgnoreCase() { String syncActiu = GlobalProperties.getInstance().getProperty("app.persones.plugin.ignore.case"); return "true".equalsIgnoreCase(syncActiu); } private static final Log logger = LogFactory.getLog(PluginPersonaDao.class); }