/** * Exports the current model to docbook in the given directory * @param destDir the directory where the docbook file and the figures will * be written * @todo better handling of error conditions * @return true if saving is successful and false otherwise. */ void DocbookGenerator::generateDocbookForProjectInto(const KUrl& destDir) { m_destDir = destDir; umlDoc->writeToStatusBar(i18n("Exporting all views...")); QStringList errors = UMLViewImageExporterModel().exportAllViews( UMLViewImageExporterModel::mimeTypeToImageType("image/png"), destDir, false); if (!errors.empty()) { KMessageBox::errorList(UMLApp::app(), i18n("Some errors happened when exporting the images:"), errors); return; } umlDoc->writeToStatusBar(i18n("Generating Docbook...")); docbookGeneratorJob = new DocbookGeneratorJob( this ); connect(docbookGeneratorJob, SIGNAL(docbookGenerated(QString)), this, SLOT(slotDocbookGenerationFinished(QString))); connect(docbookGeneratorJob, SIGNAL(finished()), this, SLOT(threadFinished())); uDebug()<<"Threading"; docbookGeneratorJob->start(); }
void DocbookGeneratorJob::run() { UMLApp* app = UMLApp::app(); UMLDoc* umlDoc = app->document(); //write the XMI model in an in-memory char* string QString xmi; QTextStream xmiStream(&xmi, QIODevice::WriteOnly); #if QT_VERSION >= 0x050000 QTemporaryFile file; // we need this tmp file if we are writing to a remote file #else KTemporaryFile file; // we need this tmp file if we are writing to a remote file #endif file.setAutoRemove(false); // lets open the file for writing if (!file.open()) { uError() << "There was a problem saving file" << file.fileName(); return; } umlDoc->saveToXMI(file); // save the xmi stuff to it xsltStylesheetPtr cur = NULL; xmlDocPtr doc, res; const char *params[16 + 1]; int nbparams = 0; params[nbparams] = NULL; #if QT_VERSION >= 0x050000 QString xsltFile(QStandardPaths::locate(QStandardPaths::DataLocation, QLatin1String("xmi2docbook.xsl"))); #else QString xsltFile(KGlobal::dirs()->findResource("appdata", QLatin1String("xmi2docbook.xsl"))); #endif xmlSubstituteEntitiesDefault(1); xmlLoadExtDtdDefaultValue = 1; cur = xsltParseStylesheetFile((const xmlChar *)xsltFile.toLatin1().constData()); doc = xmlParseFile((const char*)(file.fileName().toUtf8())); res = xsltApplyStylesheet(cur, doc, params); #if QT_VERSION >= 0x050000 QTemporaryFile tmpDocBook; #else KTemporaryFile tmpDocBook; #endif tmpDocBook.setAutoRemove(false); tmpDocBook.open(); umlDoc->writeToStatusBar(i18n("Exporting to DocBook...")); xsltSaveResultToFd(tmpDocBook.handle(), res, cur); xsltFreeStylesheet(cur); xmlFreeDoc(res); xmlFreeDoc(doc); xsltCleanupGlobals(); xmlCleanupParser(); emit docbookGenerated(tmpDocBook.fileName()); }