@Override public void removeSkill(SkillDTO skill, UtenteDTO utente) { Map<String, SearchDTO> andMap = new HashMap<String, SearchDTO>(); SearchDTO so = new SearchDTO(); so.setOperatore(it.linksmt.corsoedoc.intranet.enumeration.Operator.EQUAL); long idSkill = skill.getId(); long idUtente = utente.getId(); so.setValue(idSkill); so.setValue(idUtente); andMap.put("tbSkill", so); andMap.put("tbUtente", so); ISpecifications<UtenteHasSkill> u = new ISpecifications<UtenteHasSkill>(); Specification<UtenteHasSkill> spec = u.findByCriteria(andMap, null); UtenteHasSkill utenteHasSkill = utenteSkillRepository.findOne(spec); utenteSkillRepository.delete(utenteHasSkill.getId()); LOG.warn("Skill rimossa dall'utente"); }
@Override public List<UtenteDTO> getByCompetenze(String competenza, Integer livello) { // cerco l'id corrispondente all'id della competenza Map<String, SearchDTO> andMap = new HashMap<String, SearchDTO>(); SearchDTO so = new SearchDTO(); so.setOperatore(it.linksmt.corsoedoc.intranet.enumeration.Operator.EQUAL); so.setValue(competenza); andMap.put("descrizione", so); ISpecifications<Skill> u = new ISpecifications<Skill>(); Specification<Skill> spec = u.findByCriteria(andMap, null); Skill skill = skillRepJpa.findOne(spec); long idSkill = skill.getId(); // cerco gli utenti idonei una cerca competenza e un certo livello Map<String, SearchDTO> andMap2 = new HashMap<String, SearchDTO>(); SearchDTO so2 = new SearchDTO(); so2.setOperatore(it.linksmt.corsoedoc.intranet.enumeration.Operator.EQUAL); so2.setValue(idSkill); andMap.put("tb_skill_id", so2); so2.setValue(livello); andMap.put("livello", so2); ISpecifications<UtenteHasSkill> uS = new ISpecifications<UtenteHasSkill>(); Specification<UtenteHasSkill> spec2 = uS.findByCriteria(andMap2, null); List<UtenteHasSkill> listaUtentiHasSkill = utenteSkillRepository.findAll(spec2); // riempio una lista con tutti gli utenti DTO idonei List<Utente> utentiIdonei = new ArrayList<Utente>(); for (UtenteHasSkill utenteHasSkill : listaUtentiHasSkill) { utentiIdonei.add(utenteRepository.findOne(utenteHasSkill.getId())); } return UtenteConverter.convertListToDTO(utentiIdonei); }
@Transactional @Override public void addUpdateUtente(UtenteInsertJobDTO dto) throws DuplicatedEmailException, DuplicatedUsernameException, ParseException { UtenteDTO udto = dto.getUtenteDTO(); Utente u = null; if (udto.getId() == null) { Mansione m = mansioneRepository.findOne(dto.getIdMansione()); u = UtenteConverter.convertToEntity(dto.getUtenteDTO()); u.setTbMansione(m); } else { u = utenteRepository.getOne(udto.getId()); u.setCapDomicilio(udto.getCapDomicilio()); u.setCapResidenza(udto.getCapResidenza()); u.setCellulare(udto.getCellulare()); u.setCf(udto.getCf()); u.setCittaDomicilio(udto.getCittaDomicilio()); u.setCittaNascita(udto.getCittaDomicilio()); u.setCittaResidenza(udto.getCittaResidenza()); u.setCognome(udto.getCognome()); u.setDataAssunzione(DateConverter.convertFromStringToDate(udto.getDataAssunzione())); u.setDataNascita(DateConverter.convertFromStringToDate(udto.getDataNascita())); u.setIndirizzoDomicilio(udto.getIndirizzoDomicilio()); u.setIndirizzoResidenza(udto.getIndirizzoResidenza()); u.setMail(udto.getMail()); u.setNome(udto.getNome()); u.setProvinciaDomicilio(udto.getProvinciaDomicilio()); u.setProvinciaNascita(udto.getProvinciaNascita()); u.setProvinciaResidenza(udto.getProvinciaResidenza()); u.setTbMansione(mansioneRepository.findOne(dto.getIdMansione())); } utenteRepository.save(u); Utente temp = utenteRepository.getByEmail(u.getMail()); if (temp != null && temp.getId().longValue() != u.getId().longValue()) { throw new DuplicatedEmailException("User modified some values on JSON object"); } // E' necessario ricercare l'insieme delle skills già presenti, se siamo // in update List<UtenteHasSkill> skills = u.getTbUtenteHasTbSkills(); List<Long> skillsPresenti = new ArrayList<Long>(); skillsPresenti.addAll(dto.getSkill()); List<Integer> skillsLivelli = new ArrayList<Integer>(); skillsLivelli.addAll(dto.getLivello()); if (skills != null) { // A partire da queste tre liste è necessario iterare per ogni skill // esistente for (int p = 0; p < skills.size(); p++) { UtenteHasSkill skill = skills.get(p); boolean presente = false; // Innanzitutto controlliamo la presenza della skill in esame // (presente mappa o meno la presenza) for (int i = 0; i < skillsPresenti.size(); i++) { Long l = skillsPresenti.get(i); if (skill.getTbSkill().getId().longValue() == l) { if (skill.getLivello() != skillsLivelli.get(i).intValue()) { skill.setLivello(skillsLivelli.get(i)); utenteSkillRepository.save(skill); } skillsPresenti.remove(i); skillsLivelli.remove(i); presente = true; break; } } if (!presente) { utenteSkillRepository.delete(skill); } } } // Una volta arrivati qui, la lista skillsPresenti ha al suo interno // solo le skills non ancora collegate, per cui passiamo all'aggiunta // delle rimanenti for (int i = 0; i < skillsPresenti.size(); i++) { Long l = skillsPresenti.get(i); Skill skill = skillRepJpa.findOne(l); UtenteHasSkill uhs = new UtenteHasSkill(); uhs.setLivello(skillsLivelli.get(i)); uhs.setTbSkill(skill); uhs.setTbUtente(u); utenteSkillRepository.save(uhs); } // Controlliamo l'esistenza di un utente con la stessa mail aziendale DatiLogin datiLogin = datiLoginRepository.getByUsername(dto.getUsername()); if (datiLogin != null && datiLogin.getTbUtente().getId().longValue() != u.getId().longValue()) { throw new DuplicatedUsernameException("Username già presente nel DB per un altro utente"); } if (datiLogin == null) { DatiLogin dL = new DatiLogin(); dL.setAttivo(!dto.getDisabled()); dL.setPassword(Utility.md5(dto.getPassword())); dL.setUsername(dto.getUsername()); dL.setTbUtente(u); Profilo p = profiloRepository.findOne(dto.getIdProfilo()); dL.setTbProfilo(p); datiLoginRepository.save(dL); } else { if (!dto.getPassword().equals("vecchiapw")) { datiLogin.setPassword(Utility.md5(dto.getPassword())); } datiLogin.setUsername(dto.getUsername()); datiLogin.setAttivo(!dto.getDisabled()); datiLogin.setTbProfilo(profiloRepository.findOne(dto.getIdProfilo())); datiLoginRepository.save(datiLogin); } LOG.warn("Insert or update "); if (curriculumRepository.getByUtente(u) == null) { Curriculum curriculum = new Curriculum(); curriculum.setUtente(u); curriculum.setEsperienze(new String()); curriculum.setFormazione(new String()); curriculum.setLingue(new String()); curriculumRepository.save(curriculum); } }