int
main(int argc, char** argv)
{
  // Get the URLs from which to load the model and the 
  // the language definition file
  if (argc != 3)
  {
    printf("Usage: testCeLEDS modelURL languageDefinitionURL\n");
    return -1;
  }

  wchar_t* modelURL;
  size_t l = strlen(argv[1]);
  modelURL = new wchar_t[l + 1];
  memset(modelURL, 0, (l + 1) * sizeof(wchar_t));
  const char* mbrurl = argv[1];
  mbsrtowcs(modelURL, &mbrurl, l, NULL);

  wchar_t* languageURL;
  l = strlen(argv[2]);
  languageURL = new wchar_t[l + 1];
  memset(languageURL, 0, (l + 1) * sizeof(wchar_t));
  const char* lbrurl = argv[2];
  mbsrtowcs(languageURL, &lbrurl, l, NULL);

  RETURN_INTO_OBJREF(cb, iface::cellml_api::CellMLBootstrap,
    CreateCellMLBootstrap());

  RETURN_INTO_OBJREF(ml, iface::cellml_api::ModelLoader,
    cb->modelLoader());

  ObjRef<iface::cellml_api::Model> mod;
  try
  {
    mod = already_AddRefd<iface::cellml_api::Model>(ml->loadFromURL(modelURL));
    if (mod == NULL)
      throw L"";
  }
  catch (...)
  {
    printf("Error loading model URL.\n");
    delete [] modelURL;
    delete [] languageURL;
    return -1;
  }

  delete [] modelURL;

  RETURN_INTO_OBJREF(ceb, iface::cellml_services::CeLEDSExporterBootstrap,
    CreateCeLEDSExporterBootstrap());
  RETURN_INTO_OBJREF(ce, iface::cellml_services::CodeExporter,
      ceb->createExporter(languageURL));

  RETURN_INTO_WSTRING(le, ceb->loadError());
  if (!le.empty()) {
    wprintf(L"Could not load language definition file:\n");
    wprintf(L"    %ls\n",le.c_str());
    return -1;
  }
  delete [] languageURL;

  std::wstring code = ce->generateCode(mod);
  wprintf(L"%ls", code.c_str());

  return 0;
}
Ejemplo n.º 2
0
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;
    }
}