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);
|
}
|
|
}
|