package com.webgroupmedia.cerb4.exporter.osTicket.entities;
import java.io.File;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.HashMap;
import org.apache.commons.codec.binary.Base64;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.cerb4.impex.Configuration;
import com.cerb4.impex.XMLThread;
import com.webgroupmedia.cerb4.exporter.osTicket.Database;
import com.webgroupmedia.cerb4.exporter.osTicket.Driver;
public class Knowledgebase {
public void export() {
Connection conn = Database.getInstance();
String cfgOutputDir = Configuration.get("outputDir", "output");
String sExportEncoding = new String(Configuration.get("exportEncoding", "ISO-8859-1"));
String cfgKbRoot = Configuration.get("exportKbRoot", "ost_KB");
Integer iCount = 0;
Integer iSubDir = 0;
HashMap<Integer,String> mapKbCategories = new HashMap<Integer,String>();
try {
// Load and cache the knowledgebase tree
Statement stmtDepartments = conn.createStatement();
stmtDepartments.execute(
"SELECT dept_id, dept_name FROM ost_department"
);
ResultSet rsDepartments = stmtDepartments.getResultSet();
while(rsDepartments.next()) {
Integer deptId = rsDepartments.getInt("dept_id");
String deptName= Driver.fixMagicQuotes(rsDepartments.getString("dept_name"));
mapKbCategories.put(deptId, deptName);
}
mapKbCategories.put(0, "All");
rsDepartments.close();
stmtDepartments.close();
Statement stmtArticles = conn.createStatement();
stmtArticles.execute("SELECT premade_id, title, answer, dept_id, created FROM ost_kb_premade ");
ResultSet rsArticles = stmtArticles.getResultSet();
File outputDir = null;
while(rsArticles.next()) {
if(0 == iCount % 2000 || 0 == iCount) {
iSubDir++;
// Make the output subdirectory
outputDir = new File(cfgOutputDir+"/10-kbarticle-" + String.format("%06d", iSubDir));
outputDir.mkdirs();
}
Document doc = DocumentHelper.createDocument();
Element eKbArticle = doc.addElement("kbarticle");
doc.setXMLEncoding(sExportEncoding);
Integer iId = rsArticles.getInt("premade_id");
String sTitle = Driver.fixMagicQuotes(rsArticles.getString("title"));
String sContent = Driver.fixMagicQuotes(rsArticles.getString("answer"));
Long iCreatedDate = rsArticles.getDate("created").getTime()/1000;
Integer deptId = rsArticles.getInt("dept_id");
if(0 == sTitle.length())
continue;
eKbArticle.addElement("title").addText(sTitle);
eKbArticle.addElement("created_date").addText(iCreatedDate.toString());
// Category
Element eKbArticleCategories = eKbArticle.addElement("categories");
eKbArticleCategories.addElement("category").setText(cfgKbRoot);
eKbArticleCategories.addElement("category").setText(mapKbCategories.get(deptId));
Element eKbArticleContent = eKbArticle.addElement("content");
eKbArticleContent.addAttribute("encoding", "base64");
eKbArticleContent.setText(new String(Base64.encodeBase64(sContent.getBytes(sExportEncoding))));
String sXmlFileName = outputDir.getPath() + "/" + String.format("%06d", iId) + ".xml";
try {
new XMLThread(doc, sXmlFileName).start();
} catch(Exception e) {
e.printStackTrace();
}
iCount++;
}
rsArticles.close();
stmtArticles.close();
mapKbCategories.clear();
} catch (Exception e) {
e.printStackTrace();
}
}
}