#include "pb_stepusereadertoloadfiles.h" #include "ct_step/tools/ct_logmanageradapterforstep.h" #include "ct_reader/abstract/ct_abstractreader.h" PB_StepUseReaderToLoadFiles::PB_StepUseReaderToLoadFiles() : SuperClass() { m_readerPrototype = nullptr; } QString PB_StepUseReaderToLoadFiles::description() const { return tr("Charger les fichiers d'une liste"); } QString PB_StepUseReaderToLoadFiles::detailledDescription() const { return tr("Cette étape permet de charger effectivement un fichier, dont l'entête a préalablement été créée, par exemple avec l'étape \"Créer une liste de fichiers\"."); } QString PB_StepUseReaderToLoadFiles::inputDescription() const { return SuperClass::inputDescription() + tr("

L'item choisi définit sur quel fichier il faut charger. Ces fichiers doivent avoir été préalable listés. C'est l'objet \"reader\" qui est utilisé pour réaliser le chargement."); } QString PB_StepUseReaderToLoadFiles::outputDescription() const { return tr("Cette étape charge les données du fichier. La structure de données dépend du format du fichier."); } QString PB_StepUseReaderToLoadFiles::detailsDescription() const { return tr("L'utilisation la plus habituelle de charger un fichier par tour de boucle, à partie d'une liste de fichiers préalablement crée. " "Dans ce cas, la structure du script est la suivante :" "
    " "
  1. Créer une liste de fichier (séléction de la liste des fichiers à parcourir)
  2. " "
  3. Boucle standard (début de la boucle)
  4. " "
  5. Charger les fichiers d'une liste (chargement du fichier correspondant au tour de boucle courant)
  6. " "
  7. ... (étapes de traitement et d'export)
  8. " "
  9. Fin de boucle
  10. " "

"); } CT_VirtualAbstractStep* PB_StepUseReaderToLoadFiles::createNewInstance() const { return new PB_StepUseReaderToLoadFiles(); } void PB_StepUseReaderToLoadFiles::declareInputModels(CT_StepInModelStructureManager& manager) { manager.addResult(m_hInResultGroupCopy, tr("Fichiers")); manager.setZeroOrMoreRootGroup(m_hInResultGroupCopy, m_hInRootGroup); manager.addGroup(m_hInRootGroup, m_hInGroup, tr("Fichier")); manager.addItem(m_hInGroup, m_hInReaderItem, tr("Entête")); } void PB_StepUseReaderToLoadFiles::declareOutputModels(CT_StepOutModelStructureManager& manager) { m_readerPrototype = nullptr; manager.addResultCopy(m_hInResultGroupCopy); CT_OutAbstractModel* outReaderItemModel = m_hInReaderItem.outModelSelected(m_hInResultGroupCopy); if(outReaderItemModel != nullptr) { CT_FileHeader* readerItemPrototype = dynamic_cast(outReaderItemModel->prototype()); if((readerItemPrototype != nullptr) && (readerItemPrototype->reader() != nullptr)) { m_readerPrototype = readerItemPrototype->reader(); m_readerPrototype->declareOutputModelsInGroup(manager, m_hInGroup); } } } void PB_StepUseReaderToLoadFiles::compute() { auto groupIterator = m_hInGroup.iterateOutputs(m_hInResultGroupCopy); m_totalReaderProgress = groupIterator.count(); m_currentReaderProgress = 0; if(m_totalReaderProgress > 0) { if(m_readerPrototype != nullptr) { connect(this, SIGNAL(stopped()), m_readerPrototype, SLOT(cancel()), Qt::DirectConnection); connect(m_readerPrototype, SIGNAL(progressChanged(int)), this, SLOT(readerProgressChanged(int)), Qt::DirectConnection); } float readerStepProgress = 100.0f/m_totalReaderProgress; for(CT_StandardItemGroup* group : groupIterator) { const CT_FileHeader* readerItem = group->singularItem(m_hInReaderItem); if(readerItem != nullptr) { if(m_readerPrototype != nullptr) { if(m_readerPrototype->setFilePath(readerItem->filePath())) { if(m_readerPrototype->readFile(group)) STEP_LOG->addInfoMessage(tr("Chargement du fichier %1").arg(m_readerPrototype->filepath())); } } } m_currentReaderProgress += readerStepProgress; if(isStopped()) break; } if(m_readerPrototype != nullptr) { disconnect(this, SIGNAL(stopped()), m_readerPrototype, SLOT(cancel())); disconnect(m_readerPrototype, SIGNAL(progressChanged(int)), this, SLOT(readerProgressChanged(int))); } } } void PB_StepUseReaderToLoadFiles::readerProgressChanged(int p) { setProgress(m_currentReaderProgress + (p/m_totalReaderProgress)); }