/* * Helper to log a common type of error. */ void SBasePlugin::logEmptyString(const std::string &attribute, const unsigned int sbmlLevel, const unsigned int sbmlVersion, const unsigned int pkgVersion, const std::string& element) { if (&attribute == NULL || &element == NULL) return; std::ostringstream msg; msg << "Attribute '" << attribute << "' on an " << element << " of package \"" << mSBMLExt->getName() << "\" version " << pkgVersion << " must not be an empty string."; // // (TODO) Additional class such as SBMLExtensionError and SBMLExtensionErrorLog // may need to be implemented // SBMLErrorLog* errlog = getErrorLog(); if (errlog) { errlog->logError(NotSchemaConformant, sbmlLevel, sbmlVersion, msg.str()); } }
/* * Helper to log a common type of error. */ void SBasePlugin::logUnknownAttribute(const std::string &attribute, const unsigned int sbmlLevel, const unsigned int sbmlVersion, const unsigned int pkgVersion, const std::string& element) { if (&attribute == NULL || &element == NULL) return; std::ostringstream msg; msg << "Attribute '" << attribute << "' is not part of the " << "definition of an SBML Level " << sbmlLevel << " Version " << sbmlVersion << " Package \"" << mSBMLExt->getName() << "\" Version " << pkgVersion << " on " << element << " element."; // // (TODO) Additional class such as SBMLExtensionError and SBMLExtensionErrorLog // may need to be implemented // SBMLErrorLog* errlog = getErrorLog(); if (errlog) { errlog->logError(NotSchemaConformant, sbmlLevel, sbmlVersion, msg.str()); } }
/* * Helper to log a common type of error. */ void SBasePlugin::logUnknownElement(const std::string &element, const unsigned int sbmlLevel, const unsigned int sbmlVersion, const unsigned int pkgVersion ) { if(&element == NULL) return; std::ostringstream msg; msg << "Element '" << element << "' is not part of the definition of " << "SBML Level " << sbmlLevel << " Version " << sbmlVersion << " Package \"" << mSBMLExt->getName() << "\" Version " << pkgVersion << "."; // // (TODO) Additional class such as SBMLExtensionError and SBMLExtensionErrorLog // may need to be implemented // SBMLErrorLog* errlog = getErrorLog(); if (errlog) { errlog->logError(UnrecognizedElement, sbmlLevel, sbmlVersion, msg.str()); } }
void CompSBasePlugin::logInvalidId(const std::string& attribute, const std::string& wrongattribute) { bool knownelement = (getParentSBMLObject() == NULL); std::ostringstream msg; msg << "Setting the attribute '" << attribute << "' "; if (knownelement) { msg << "of a <" << getParentSBMLObject()->getElementName() << "> "; } msg << "in the " << getPackageName() << " package (version " << getPackageVersion() << ") to '" << wrongattribute << "' is illegal: the string is not a well-formed SId."; SBMLErrorLog* errlog = getErrorLog(); if (errlog) { errlog->logError(NotSchemaConformant, getLevel(), getVersion(), msg.str()); } }
/* * Writes the given SBML document to the output stream. * * @return true on success and false if one of the underlying parser * components fail (rare). */ bool SBMLWriter::writeSBML (const SBMLDocument* d, std::ostream& stream) { bool result = false; try { stream.exceptions(ios_base::badbit | ios_base::failbit | ios_base::eofbit); XMLOutputStream xos(stream, "UTF-8", true, mProgramName, mProgramVersion); d->write(xos); stream << endl; result = true; } catch (ios_base::failure&) { SBMLErrorLog *log = (const_cast<SBMLDocument *>(d))->getErrorLog(); log->logError(XMLFileOperationError); } return result; }
/* * Writes the given SBML document to filename. * * If the filename ends with @em .gz, the file will be compressed by @em gzip. * Similary, if the filename ends with @em .zip or @em .bz2, the file will be * compressed by @em zip or @em bzip2, respectively. Otherwise, the fill will be * uncompressed. * If the filename ends with @em .zip, a filename that will be added to the * zip archive file will end with @em .xml or @em .sbml. For example, the filename * in the zip archive will be @em test.xml if the given filename is @em test.xml.zip * or @em test.zip. Also, the filename in the archive will be @em test.sbml if the * given filename is @em test.sbml.zip. * * @note To create a gzip/zip file, underlying libSBML needs to be linked with zlib at * compile time. Also, underlying libSBML needs to be linked with bzip2 to create a * bzip2 file. * File unwritable error will be logged and @c false will be returned if a compressed * file name is given and underlying libSBML is not linked with the corresponding * required library. * SBMLWriter::hasZlib() and SBMLWriter::hasBzip2() can be used to check whether * underlying libSBML is linked with the library. * * @return true on success and false if the filename could not be opened * for writing. */ bool SBMLWriter::writeSBML (const SBMLDocument* d, const std::string& filename) { std::ostream* stream = NULL; try { // open an uncompressed XML file. if ( string::npos != filename.find(".xml", filename.length() - 4) ) { stream = new(std::nothrow) std::ofstream(filename.c_str()); } // open a gzip file else if ( string::npos != filename.find(".gz", filename.length() - 3) ) { stream = OutputCompressor::openGzipOStream(filename); } // open a bz2 file else if ( string::npos != filename.find(".bz2", filename.length() - 4) ) { stream = OutputCompressor::openBzip2OStream(filename); } // open a zip file else if ( string::npos != filename.find(".zip", filename.length() - 4) ) { std::string filenameinzip = filename.substr(0, filename.length() - 4); if ( ( string::npos == filenameinzip.find(".xml", filenameinzip.length() - 4) ) && ( string::npos == filenameinzip.find(".sbml", filenameinzip.length() - 5) ) ) { filenameinzip += ".xml"; } #if defined(WIN32) && !defined(CYGWIN) char sepr = '\\'; #else char sepr = '/'; #endif size_t spos = filenameinzip.rfind(sepr, filenameinzip.length() - 1); if( spos != string::npos ) { filenameinzip = filenameinzip.substr(spos + 1, filenameinzip.length() - 1); } stream = OutputCompressor::openZipOStream(filename, filenameinzip); } else { stream = new(std::nothrow) std::ofstream(filename.c_str()); } } catch ( ZlibNotLinked& ) { // libSBML is not linked with zlib. XMLErrorLog *log = (const_cast<SBMLDocument *>(d))->getErrorLog(); std::ostringstream oss; oss << "Tried to write " << filename << ". Writing a gzip/zip file is not enabled because " << "underlying libSBML is not linked with zlib."; log->add(XMLError( XMLFileUnwritable, oss.str(), 0, 0) ); return false; } catch ( Bzip2NotLinked& ) { // libSBML is not linked with bzip2. XMLErrorLog *log = (const_cast<SBMLDocument *>(d))->getErrorLog(); std::ostringstream oss; oss << "Tried to write " << filename << ". Writing a bzip2 file is not enabled because " << "underlying libSBML is not linked with bzip2."; log->add(XMLError( XMLFileUnwritable, oss.str(), 0, 0) ); return false; } if ( stream == NULL || stream->fail() || stream->bad()) { SBMLErrorLog *log = (const_cast<SBMLDocument *>(d))->getErrorLog(); log->logError(XMLFileUnwritable); delete stream; return false; } bool result = writeSBML(d, *stream); delete stream; return result; }