bool CellmlFile::exportTo(const QString &pFileName, const QString &pUserDefinedFormatFileName) { // Export the model to the required format, after loading it if necessary if (load()) { // Check that the user-defined format file actually exists if (!QFile::exists(pUserDefinedFormatFileName)) { mIssues << CellmlFileIssue(CellmlFileIssue::Error, QObject::tr("the user-defined format file does not exist")); return false; } // Make sure that the user-defined format file is valid XML // Note: you would normally expect CeLEDSExporter to check this, but all // it does in case of an invalid XML file is crash... QString userDefinedFormatFileContents; if (!Core::readTextFromFile(pUserDefinedFormatFileName, userDefinedFormatFileContents)) { mIssues << CellmlFileIssue(CellmlFileIssue::Error, QObject::tr("the user-defined format file could not be read")); return false; } QDomDocument domDocument; if (!domDocument.setContent(userDefinedFormatFileContents)) { mIssues << CellmlFileIssue(CellmlFileIssue::Error, QObject::tr("the user-defined format file is not a valid XML file")); return false; } // Fully instantiate all the imports if (!fullyInstantiateImports(mModel, mIssues)) return false; // Do the actual export ObjRef<iface::cellml_services::CeLEDSExporterBootstrap> celedsExporterBootstrap = CreateCeLEDSExporterBootstrap(); ObjRef<iface::cellml_services::CodeExporter> codeExporter = celedsExporterBootstrap->createExporterFromText(userDefinedFormatFileContents.toStdWString()); if (celedsExporterBootstrap->loadError().length()) { mIssues << CellmlFileIssue(CellmlFileIssue::Error, QObject::tr("the user-defined format file could not be loaded")); return false; } // Save the export if (!Core::writeTextToFile(pFileName, QString::fromStdWString(codeExporter->generateCode(mModel)))) { mIssues << CellmlFileIssue(CellmlFileIssue::Error, QObject::tr("the output file could not be saved")); return false; } return true; } else { return false; } }