summaryrefslogtreecommitdiffstats
path: root/kfilereplace/report.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kfilereplace/report.cpp')
-rw-r--r--kfilereplace/report.cpp282
1 files changed, 282 insertions, 0 deletions
diff --git a/kfilereplace/report.cpp b/kfilereplace/report.cpp
new file mode 100644
index 00000000..cae0dfe4
--- /dev/null
+++ b/kfilereplace/report.cpp
@@ -0,0 +1,282 @@
+/***************************************************************************
+ report.cpp - Report document class
+ -------------------
+ begin : fri aug 13 15:29:46 CEST 2004
+
+ copyright : (C) 2004 Emiliano Gulmini
+ email : emi_barbarossa@yahoo.it
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+// QT
+#include <qstring.h>
+#include <qfile.h>
+
+// KDE
+#include <klistview.h>
+#include <kmessagebox.h>
+#include <kuser.h>
+
+// local
+#include "report.h"
+#include "configurationclasses.h"
+
+void Report::createReportFile()
+{
+ QString xmlFileName = m_docPath + ".xml",
+ cssFileName = m_docPath + ".css";
+
+ // Generates a report file
+ // a) Open the file
+ QFile report(xmlFileName);
+ if (!report.open( IO_WriteOnly ))
+ {
+ KMessageBox::error(0, i18n("<qt>Cannot open the file <b>%1</b>.</qt>").arg(xmlFileName));
+ return ;
+ }
+
+ // b) Write the header of the XML file
+
+ QDateTime datetime = QDateTime::currentDateTime(Qt::LocalTime);
+ QString dateString = datetime.toString(Qt::LocalDate);
+ KUser user;
+ QString columnTextFour,
+ columnReplaceWith;
+ if(!m_isSearchFlag)
+ {
+ columnTextFour = i18n("Replaced Strings");
+ columnReplaceWith = i18n("Replace with");
+ }
+ else
+ {
+ columnTextFour = i18n("Total number occurrences");
+ columnReplaceWith = i18n("-");
+ }
+
+ QString css = cssFileName.mid(cssFileName.findRev("/")+1,cssFileName.length()-(cssFileName.findRev("/")+1));
+ QTextStream oTStream( &report );
+ oTStream << "<?xml version=\"1.0\"?>\n"
+ "<?xml-stylesheet href=\""+css+"\" type=\"text/css\"?>"
+ "<report>\n"
+ " <title> "+i18n("KFileReplace Report")+" </title>\n"
+ " <createdby>"+user.fullName()+"("+user.loginName()+")"+"</createdby>\n"
+ " <date>"+dateString+"</date>\n"
+ "<hr/>\n"
+ " <table>\n"
+ " <tablecaption> "+i18n("Searching/Replacing Strings Table")+" </tablecaption>\n"
+ " <header>\n"
+ " <row>\n"
+ " <searchfor class=\"header\">"+i18n("Search for")+"</searchfor>\n";
+
+ if(!m_isSearchFlag)
+ oTStream<< " <replacewith class=\"header\" >"+columnReplaceWith+"</replacewith>\n";
+
+ oTStream<< " </row>\n"
+ " </header>\n";
+ // c) Write the strings list
+ QListViewItem *lviCurItem,
+ *lviFirst;
+
+ lviCurItem = lviFirst = m_stringsView->firstChild();
+
+ if(lviCurItem == 0)
+ return ;
+
+ QString rowType="a1";
+
+ do
+ { QString rowTag = "<row >\n"
+ " <searchfor class=\""+rowType+"\"><![CDATA["+lviCurItem->text(0)+"]]></searchfor>\n"
+ " <replacewith class=\""+rowType+"\"><![CDATA["+lviCurItem->text(1)+"]]></replacewith>\n"
+ "</row>\n";
+
+ oTStream << rowTag;
+
+ rowType = ((rowType == "a1") ? "a2" : "a1");
+
+ lviCurItem = lviCurItem->nextSibling();
+ } while(lviCurItem && lviCurItem != lviFirst);
+
+ oTStream<< "</table>\n";
+
+ oTStream<< "<whiteline/>\n"
+ " <table>\n"
+ " <tablecaption> "+i18n("Results Table")+ " </tablecaption>"
+ " <header>\n"
+ " <row>\n"
+ " <name class=\"header\">"+i18n("Name")+"</name>\n"
+ " <folder class=\"header\">"+i18n("Folder")+"</folder>\n";
+ if(m_isSearchFlag)
+ {
+ oTStream<< " <oldsize class=\"header\">"+i18n("Size")+"</oldsize>\n";
+ }
+ else
+ {
+ oTStream<< " <oldsize class=\"header\">"+i18n("Old Size")+"</oldsize>\n"
+ " <newsize class=\"header\">"+i18n("New Size")+"</newsize>\n";
+ }
+ oTStream<< " <replacedstrings class=\"header\" >"+columnTextFour+"</replacedstrings>\n"
+ " <owneruser class=\"header\">"+i18n("Owner User")+"</owneruser>\n"
+ " <ownergroup class=\"header\">"+i18n("Owner Group")+"</ownergroup>\n"
+ " </row>\n"
+ " </header>\n";
+
+ // d) Write the result list
+
+ lviCurItem = lviFirst = m_resultsView->firstChild();
+
+ if(lviCurItem == 0)
+ return ;
+
+ unsigned int totalOccurrences = 0;
+
+ rowType="a1";
+
+ do
+ { QString rowTag = " <row >\n"
+ " <name class=\""+rowType+"\"><![CDATA["+lviCurItem->text(0)+"]]></name>\n"
+ " <folder class=\""+rowType+"\"><![CDATA["+lviCurItem->text(1)+"]]></folder>\n";
+ if(m_isSearchFlag)
+ {
+ rowTag += " <oldsize class=\""+rowType+"\"><![CDATA["+lviCurItem->text(2)+"]]></oldsize>\n"
+ " <replacedstrings class=\""+rowType+"\"><![CDATA["+lviCurItem->text(3)+"]]></replacedstrings>\n"
+ " <owneruser class=\""+rowType+"\"><![CDATA["+lviCurItem->text(4)+"]]></owneruser>\n"
+ " <ownergroup class=\""+rowType+"\"><![CDATA["+lviCurItem->text(5)+"]]></ownergroup>\n"
+ " </row>\n";
+ }
+ else
+ {
+ rowTag += " <oldsize class=\""+rowType+"\"><![CDATA["+lviCurItem->text(2)+"]]></oldsize>\n"
+ " <newsize class=\""+rowType+"\"><![CDATA["+lviCurItem->text(3)+"]]></newsize>\n"
+ " <replacedstrings class=\""+rowType+"\"><![CDATA["+lviCurItem->text(4)+"]]></replacedstrings>\n"
+ " <owneruser class=\""+rowType+"\"><![CDATA["+lviCurItem->text(5)+"]]></owneruser>\n"
+ " <ownergroup class=\""+rowType+"\"><![CDATA["+lviCurItem->text(6)+"]]></ownergroup>\n"
+ " </row>\n";
+ }
+
+ oTStream << rowTag;
+
+ rowType = ((rowType == "a1") ? "a2" : "a1");
+
+ if(m_isSearchFlag)
+ totalOccurrences += lviCurItem->text(3).toInt();
+ else
+ totalOccurrences += lviCurItem->text(4).toInt();
+
+ lviCurItem = lviCurItem->nextSibling();
+ } while(lviCurItem && lviCurItem != lviFirst);
+
+
+ // e) Write the end of the file
+
+ oTStream<< " </table>\n"
+ "<totaloccurrences>"
+ << totalOccurrences
+ << "</totaloccurrences>\n"
+ "</report>\n";
+
+ report.close();
+}
+
+void Report::createStyleSheet()
+{
+ QString cssFileName = m_docPath +".css";
+ QFile styleSheet(cssFileName);
+ if (!styleSheet.open( IO_WriteOnly ))
+ {
+ KMessageBox::error(0, i18n("<qt>Cannot open the file <b>%1</b>.</qt>").arg(cssFileName));
+ return ;
+ }
+
+ QTextStream oTStream( &styleSheet );
+
+ QString css = "title { display:block;font:40px bold sans-serif; }\n\n"
+ "createdby:before { content :\""+i18n("Created by")+": \"; }\n"
+ "createdby { display:inline; }\n\n"
+ "date:before { content :\"-"+i18n("date")+": \"; }\n"
+ "date { display:inline; }\n\n"
+ "totaloccurrences:before { content :\""+i18n("Total occurrences")+": \"; }\n"
+ "totaloccurrences { display:block;text-align:right; font-weight:bold;margin-top:5px;margin-right:5px;}\n"
+ "tablecaption {display:table-caption;font:20px bold sans-serif;}\n\n"
+ "hr {display:block;background:black;height:1px;margin:5px 0px 5px;}\n"
+ "whiteline {display:block;height:16px;}\n\n"
+ "searchfor {\n"
+ " display:table-cell;\n"
+ " border:1px solid black;\n"
+ " padding:0 7px 0; }\n\n";
+
+ if(!m_isSearchFlag)
+ {
+ css += "replacewith {\n"
+ " display:table-cell;\n"
+ " border:1px solid black;\n"
+ " padding:0 7px 0; }\n\n";
+ }
+
+ css += "folder {\n"
+ " display:table-cell;\n"
+ " border:1px solid black;\n"
+ " padding:0 7px 0; }\n\n"
+ "header { display: table-header-group; }\n\n"
+ "name {\n"
+ " display:table-cell;\n"
+ " border:1px solid black;\n"
+ " padding:0 7px 0; }\n\n"
+ "newsize {\n"
+ " display:table-cell;\n"
+ " border:1px solid black;\n"
+ " padding:0 7px 0;\n"
+ " text-align:right; }\n\n"
+ "oldsize {\n"
+ " display:table-cell;\n"
+ " border:1px solid black;\n"
+ " padding:0 7px 0;\n"
+ " text-align:right; }\n\n"
+ "ownergroup {\n"
+ " display:table-cell;\n"
+ " border:1px solid black;\n"
+ " padding:0 7px 0; }\n\n"
+ "owneruser {\n"
+ " display:table-cell;\n"
+ " border:1px solid black;\n"
+ " padding:0 7px 0; }\n\n"
+ "replacedstrings {\n"
+ " text-align:right;\n"
+ " display:table-cell;\n"
+ " border:1px solid black;\n"
+ " padding:0 7px 0; }\n\n"
+ "*[class~=header] {\n"
+ " background : lightgray;\n"
+ " text-align : center; }\n\n"
+ "row { display : table-row; }\n\n"
+ "table {\n"
+ " display:table;\n"
+ " border-collapse: collapse; }\n\n"
+ "*[class~=a1] {\n"
+ " background-color:aliceblue;\n"
+ " font-weight : bold;font-size:15px; }\n\n"
+ "*[class~=a2] {\n"
+ " background-color:khaki;\n"
+ " font-weight : bold;\n"
+ " font-size:15px; }\n\n";
+
+ oTStream << css;
+
+ styleSheet.close();
+}
+
+void Report::createDocument(const QString& docPath)
+{
+ m_docPath = docPath;
+
+ createStyleSheet();
+ createReportFile();
+}
+