Kenmegne
7 days ago 23a46b4be35277e06ec89f48730eeb694e686be8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package com.megatim.fdxcommons.core.impl.helper.referentiel;
 
import com.megatim.fdxcommons.core.ifaces.db.ImportZipValidatorIfaces;
import com.megatim.fdxcommons.core.ifaces.helper.referentiel.ReferentielToImportDataReader;
import com.megatim.fdxcommons.core.ifaces.helper.referentiel.ReferentielXmlDataReader;
import com.megatim.fdxcommons.tools.exceptions.ImportReferentielException;
import com.megatim.fdxcommons.model.enumeration.StatutReferentiel;
import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
import com.megatim.fdxcommons.model.integration.TableDefinition;
import com.megatim.fdxcommons.model.referentiel.Referentiel;
import com.megatim.fdxcommons.tools.CommonAppContext;
import com.megatim.fdxcommons.tools.AppFileUtils;
import java.io.File;
import java.util.List;
import java.util.stream.Collectors;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
 
/**
 *
 * @author lenovo
 */
@Dependent
public class ReferentielToImportDataReaderImpl implements ReferentielToImportDataReader {
 
    @Inject
    private ReferentielXmlDataReader referentielXmlDataReader;
 
    @Inject
    private ImportZipValidatorIfaces importValidator;
 
    @Override
    public ReferentielToImportData getData(File referentielFile) throws Exception {
 
        //On décompresse le fichier zip du référentiel dans le répertoire temporaire du serveur
        File unzipDirectory = AppFileUtils.unzipFileInDirectory(referentielFile.getAbsolutePath(), CommonAppContext.TEMP_DIR);
 
        //Dans le répertoire décompressé, on décompresse encore le fichier contenant les fichiers xml des entités du référentiel
        File unzipReferentielDirectory = AppFileUtils.unzipFileInDirectory((unzipDirectory + File.separator + CommonAppContext.REFERENTIEL_ZIP_FILE_NAME), unzipDirectory.getAbsolutePath());
 
        //Indique le répertoire des validateurs du référentiel
        File validateursDirectory = new File(unzipDirectory + File.separator + CommonAppContext.UNZIP_REFERENTIEL_VALIDATEUR_DIR_NAME);
 
        ReferentielToImportData referentielToImportData = new ReferentielToImportData();
        referentielToImportData.setFileName(referentielFile.getName());
        referentielXmlDataReader.readData(unzipReferentielDirectory, referentielToImportData);
 
        Referentiel referentielEncours = getReferentielEncours(referentielToImportData);
        referentielToImportData.setReferentielEnCours(referentielEncours);
 
        //On extrait la définition des tables associées aux validateur (structures lignes) du référentiel EN COURS
        List<TableDefinition> tableDefinitions = importValidator.getTableDefinitions(validateursDirectory, referentielToImportData);
        referentielToImportData.setTableDefinitions(tableDefinitions);
 
        return referentielToImportData;
 
    }
 
    private Referentiel getReferentielEncours(ReferentielToImportData referentielToImportData) throws Exception {
        List<Referentiel> referentiels = referentielToImportData.getReferentiels()
                .stream()
                .filter(p -> p.getStatutReferentiel().equals(StatutReferentiel.EN_COURS))
                .collect(Collectors.toList());
 
        if (referentiels == null || referentiels.isEmpty()) {
            throw new ImportReferentielException("Cette archive n'a pas de referentiel avec le statut EN COURS");
        }
 
        if (referentiels.size() > 1) {
            throw new ImportReferentielException(referentiels.size() + " réferentiels en cours trouvés");
        }
 
        return referentiels.get(0);
    }
 
}