#include "cdm_citationinfo.h" #include "ct_abstractstepplugin.h" #include CDM_CitationInfo::CDM_CitationInfo(CDM_StepManager *stepManager, CDM_PluginManager *pluginManager) : QObject(NULL) { _stepManager = stepManager; _pluginManager = pluginManager; QList rootList = stepManager->getStepRootList(); QListIterator it(rootList); while(it.hasNext()) { CT_VirtualAbstractStep* currentStep = it.next(); _stepList.append(currentStep); recursiveGetStepList(currentStep, _stepList); } } void CDM_CitationInfo::recursiveGetStepList(CT_VirtualAbstractStep *step, QList &stepList) { QList stepChildList = step->getStepChildList(); QListIterator it(stepChildList); while(it.hasNext()) { CT_VirtualAbstractStep* currentStep = it.next(); stepList.append(currentStep); recursiveGetStepList(currentStep, stepList); } } QList CDM_CitationInfo::getScriptTable() { QList list; for (int i = 0 ; i < _stepList.size() ; i++) { CT_VirtualAbstractStep* currentStep = _stepList.at(i); CT_AbstractStepPlugin* plugin = currentStep->getPlugin(); QString pluginOfficialName = plugin->getPluginOfficialName(); QString pluginName = _pluginManager->getPluginName(_pluginManager->getPluginIndex(plugin)); if (pluginName.left(5) == "plug_") { pluginName.remove(0, 5); } if (pluginOfficialName != "") { pluginName = pluginOfficialName; } list.append(CDM_CitationInfo::StepCitationInfo(currentStep->uniqueID(), currentStep->getStepName(), currentStep->getStepDescription(), pluginName)); } return list; } QString CDM_CitationInfo::getPluginAndStepCitations() { QList pluginDone; QString str; str.append(parseRIS(getComputreeCoreRis())); str.append("
"); for (int i = 0 ; i < _stepList.size() ; i++) { CT_VirtualAbstractStep* currentStep = _stepList.at(i); CT_AbstractStepPlugin* plugin = currentStep->getPlugin(); QString pluginOfficialName = plugin->getPluginOfficialName(); QString pluginName = _pluginManager->getPluginName(_pluginManager->getPluginIndex(plugin)); QString stepName = currentStep->getStepName(); if (pluginName.left(5) == "plug_") { pluginName.remove(0, 5); } if (pluginOfficialName != "") { pluginName = pluginOfficialName; } if (!pluginDone.contains(plugin)) { pluginDone.append(plugin); str.append(QString("[Plugin %1]
").arg(pluginName)); QString pluginRIS = plugin->getPluginRISCitation(); if (pluginRIS == "") { str.append(tr("No official citation was provided
")); } else { str.append(parseRIS(pluginRIS)); } str.append("
"); } QStringList stepsRis = currentStep->getStepRISCitations(); if (stepsRis.size() > 0) { str.append(QString("[%1 - in plugin %2]
").arg(stepName).arg(pluginName)); } for (int i = 0 ; i < stepsRis.size() ; i++) { str.append(parseRIS(stepsRis.at(i))); str.append("
"); } } return str; } QString CDM_CitationInfo::getPluginRIS() { QString str; str.append(getComputreeCoreRis()); QList stepCitations; QMap plugins; for (int i = 0 ; i < _stepList.size() ; i++) { CT_VirtualAbstractStep* currentStep = _stepList.at(i); CT_AbstractStepPlugin* plugin = currentStep->getPlugin(); QString pluginName = _pluginManager->getPluginName(_pluginManager->getPluginIndex(plugin)); plugins.insert(pluginName, plugin); QStringList stepsRis = currentStep->getStepRISCitations(); for (int i = 0 ; i < stepsRis.size() ; i++) { QString ris = stepsRis.at(i); if (!stepCitations.contains(ris)) { stepCitations.append(ris); } } } QMapIterator it(plugins); while (it.hasNext()) { it.next(); str.append(it.value()->getPluginRISCitation()); } for (int i = 0 ; i < stepCitations.size() ; i++) { str.append(stepCitations.at(i)); } return str; } QString CDM_CitationInfo::parseRIS(QString ris) { QMultiMap fields; QStringList lines = ris.split("\n", QString::SkipEmptyParts); for (int i = 0 ; i < lines.size() ; i++) { QString line = lines.at(i); QString fieldValue = line.mid(0,2); int cpt = 2; while (line.mid(cpt,1) == " " || line.mid(cpt,1) == "-") { ++cpt; } QString value = line.mid(cpt); if (fieldValue.size() == 2) { fields.insert(fieldValue.toUpper(), value); } } QString str; if (fields.contains("AU") || fields.contains("A1") || fields.contains("PY")) { str.append(""); } QList authors = fields.values("AU"); authors.append(fields.values("A1")); for (int i = 0 ; i < authors.size() ; i++) { QString author = authors.at(i); author.replace(", ", " "); author.replace(",", " "); str.append(author); if (i < authors.size() - 1) { str.append(", "); } } if (str.size() > 0) { str.append(". "); } if (fields.contains("PY")) { str.append(fields.values("PY").first()); str.append(". "); }else if (fields.contains("Y1")) { str.append(fields.values("Y1").first()); str.append(". "); } if (str.size() > 0) { str.append(""); } if (fields.contains("TI")) { str.append(""); str.append(fields.values("TI").first()); str.append(". "); } else if (fields.contains("T1")) { str.append(""); str.append(fields.values("T1").first()); str.append(". "); } if (fields.contains("PB")) { str.append(fields.values("PB").first()); str.append(". "); } if (fields.contains("UR")) { str.append("
"); str.append(fields.values("UR").first()); str.append(". "); } str.append("
"); return str; } QString CDM_CitationInfo::getComputreeCoreRis() { QString computreeCitationRIS = "TY - COMP\n" "TI - Computree platform\n" "AU - Computree Core Team\n" "PB - Office National des ForĂȘts, RDI Department\n" "PY - 2017\n" "UR - http://rdinnovation.onf.fr/computree\n" "ER - \n"; return computreeCitationRIS; }