/* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ package com.megatim.fdxconvert.dao; import com.megatim.typefichier.validator.model.enums.TypeDonnee; import com.megatim.fdxconvert.model.AlphaNumeriqueField; import com.megatim.fdxconvert.model.Validateur; import com.megatim.fdxconvert.util.ParserUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import org.hibernate.Session; import org.hibernate.query.Query; /** * * @author STEPHANIE */ public class ValidateurDAO { private ValidateurDAO() { } public static Optional findByCodeTypeFichier(String code) { try ( Session session = HibernateUtil.getSessionFactory().openSession()) { Query query = session.createQuery("from Validateur where codeTypeFichier= :code"); query.setParameter("code", code); return query.uniqueResultOptional(); } } public static void delete(Validateur t) { List alphaFields = AlphaNumeriqueFieldDAO.findByCodeTypeFichier(t.getCodeTypeFichier()); alphaFields.forEach(a -> { MetaAlphaNumeriqueFieldDAO.deleteByAlphaNumeriqueField(a); }); try ( Session session = HibernateUtil.getSessionFactory().openSession()) { session.beginTransaction(); for (AlphaNumeriqueField field : alphaFields) { Query query = session.createQuery("delete from MetaAlphaNumeriqueField t where t.alphaNumeriqueField.id = :alphaNumeriqueFieldId"); query.setParameter("alphaNumeriqueFieldId", field.getId()); query.executeUpdate(); session.delete(field); } session.delete(t); session.getTransaction().commit(); } } /** * Méthode qui extrait les champs alphanumériques dont la taille est * supérieure à 255, pour un éventuel troncage * * @param validateur * @return * @throws Exception */ private List getAplphaNumeriqueFields(Validateur validateur) throws Exception { Map mapElements = ParserUtils.getValidateurElements(validateur); List> paramsList = Arrays.asList(mapElements.values().toArray(new Map[mapElements.size()])); List alphanumMap = paramsList.stream() .filter(m -> m.containsKey("typeDonnee") && m.get("typeDonnee").equalsIgnoreCase(TypeDonnee.ALPHANUMERIQUE.getValue()) ) .collect(Collectors.toList()); List alphaNumeriqueFields = new ArrayList<>(); alphanumMap.stream().forEach(m -> { String errorCode = (String) m.get("error-code"); String codeTypeFichier = validateur.getCodeTypeFichier(); int taille = Integer.parseInt((String) m.get("taille")); int index = Integer.parseInt((String) m.get("index")); //Dans le validateur xml, error-code = codeTypeFichier + codeColonne String codeColonne = errorCode.substring(codeTypeFichier.length()); alphaNumeriqueFields.add(new AlphaNumeriqueField(validateur, TypeDonnee.ALPHANUMERIQUE.getValue(), codeColonne, taille, index)); }); return alphaNumeriqueFields; } }