/* * 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.fdxconsultation.core.impl.helper; import com.megatim.fdxcommons.core.ifaces.helper.DataInMemoryHandler; import com.megatim.fdxcommons.model.integration.ColumnDefinition; import com.megatim.fdxcommons.model.pojo.DataInMemory; import com.megatim.fdxcommons.model.referentiel.Referentiel; import com.megatim.fdxcommons.model.referentiel.TypeFichier; import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichier; import com.megatim.fdxcommons.model.searchentities.ColumnDefinitionSearch; import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.ReferentielManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.RoutageManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.TypeFichierManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.natureproduction.NatureProductionFichierManager; import groovy.transform.Synchronized; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; /** * * @author ASUS */ @ApplicationScoped public class DataInMemoryHandlerImpl implements DataInMemoryHandler { private DataInMemory dataInMemory; @Inject ColumnDefinitionManager columnDefinitionManager; @Inject private TypeFichierManager typeFichierManager; @Inject private ReferentielManager referentielManager; @Inject private NatureProductionFichierManager natureProdManager; @Inject private RoutageManager routageManager; @Inject private DataInMemoryHandler dataInMemoryHandler; @Override @Synchronized public void initializeDataInMemory() { dataInMemory = new DataInMemory(); Referentiel referentielEncours = referentielManager.getReferentielEnCours(); if (referentielEncours != null) { dataInMemory.setReferentielEnCours(referentielEncours); dataInMemory.setCodeTypeFichierToTypeFichiers(getTypeFichiers()); dataInMemory.setTypeFichierToColumnDefinitions(getColumnsDefinitions(referentielEncours.getVersion())); dataInMemory.setTypeFichierToNatureProductionsFichiers(getNatureProductionFichiers(referentielEncours.getVersion())); getParticipantsForRoutages(); } } @Override public DataInMemory getDataInMemory() { return this.dataInMemory; } private void getParticipantsForRoutages() { dataInMemory.getCodeTypeFichierToTypeFichiers().values().stream().forEach(t -> { dataInMemory.getTypeFichierToParticipantsEnvoi() .put(t.getCode(), routageManager .getParticipantsForSend(dataInMemory.getReferentielEnCours().getVersion(), t.getCode()) .stream() .map(p -> p.getCode()) .collect(Collectors.toSet()) ); dataInMemory.getTypeFichierToParticipantsReception() .put(t.getCode(), routageManager .getParticipantsForReceive(dataInMemory.getReferentielEnCours().getVersion(), t.getCode()) .stream() .map(p -> p.getCode()) .collect(Collectors.toSet()) ); }); } private Map> getColumnsDefinitions(String referentielVersion) { Map> columnsDefinitionMap = new HashMap<>(); ColumnDefinitionSearch searchEntity = new ColumnDefinitionSearch(); searchEntity.setReferentielVersion(referentielVersion); List columnsDefinition = columnDefinitionManager.getAll(searchEntity); columnsDefinition.stream().forEach(c -> { if (columnsDefinitionMap.containsKey(c.getCodeTypeFichier())) { Map map = columnsDefinitionMap.get(c.getCodeTypeFichier()); map.put(c.getName(), c); columnsDefinitionMap.put(c.getCodeTypeFichier(), map); } else { Map map = new HashMap<>(); map.put(c.getName(), c); columnsDefinitionMap.put(c.getCodeTypeFichier(), map); } }); return columnsDefinitionMap; } private Map getTypeFichiers() { return typeFichierManager.getAll(null).stream().collect(Collectors.toMap(TypeFichier::getCode, Function.identity())); } private Map getNatureProductionFichiers(String referentielVersion) { return natureProdManager.getByReferentiel(referentielVersion) .stream() .collect(Collectors.toMap(x -> x.getTypeFichier().getCode(), Function.identity())); } }