package util;
import java.io.File;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import models.Configuration;
import org.apache.log4j.Logger;
import org.w3c.dom.Comment;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import server.BinaryListener;
import sql.SQL;
public class XMLCreator {
/*
* This class offers methods to create XML files for the (old) version of
* managing VMware *.vmdks
*/
private Connection con = null;
private Statement st = null;
private ResultSet rs = null;
private String vmName;
private String filePath = Configuration.config.getAbsolute_path()+"prod/";
private String imageName;
private String xmlName;
private static Logger log = Logger.getLogger( BinaryListener.class );
// phone param not existing
private String query = "SELECT m_VLData_imageInfo.image_path ,vorname, nachname, mail, shortdescription, description, m_operatingSystem.name as os, m_VLData_lecture.admin_changeTime as time, m_VLData_lecture.name as lectureName, m_user.institution as userInstitution, m_user.loginName as loginName, m_institution.name as institutionName "
+ "FROM bwLehrpool.m_VLData_lecture, bwLehrpool.m_VLData_imageInfo, bwLehrpool.m_user, bwLehrpool.m_operatingSystem, bwLehrpool.m_institution "
+ "WHERE m_user.userID = m_VLData_lecture.admin_owner "
+ "AND m_VLData_imageInfo.GUID_imageID = m_VLData_lecture.imageID "
+ "AND m_VLData_imageInfo.content_operatingSystem = m_operatingSystem.operatingSystemID "
+ "AND m_user.institution = m_institution.institutionID "
+ "AND m_VLData_lecture.name = ";
public XMLCreator(Connection con) {
this.con = con;
}
public XMLCreator(Connection con, String vmName) {
this.con = con;
this.vmName = vmName;
}
public boolean create() throws SQLException, ParserConfigurationException,
TransformerException {
// System.out.println(query);
if (con == null || vmName == null) {
return false;
}
query += "'" + this.vmName + "';";
boolean success = startCreation();
if (success) {
return true;
}
log.info(new Date() + " - Could not create XML-File '"+vmName+"'. Error in create(String vmName).");
return false;
}
// overload method for dynamic setting of param vmName instead of static
// context above
public boolean create(String vmName) throws SQLException,
ParserConfigurationException, TransformerException {
// System.out.println(query);
if (con == null || vmName == null) {
return false;
}
query += "'" + vmName + "';";
boolean success = startCreation();
if (success) {
return true;
}
log.info(new Date() + " - Could not create XML-File '"+vmName+"'. Error in create(String vmName).");
return false;
}
private boolean startCreation() throws SQLException,
ParserConfigurationException, TransformerException {
// get needed data from database
st = con.createStatement();
rs = st.executeQuery(query);
rs.next();
// factory
DocumentBuilderFactory docFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
// root elements - dynamic content
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("settings");
doc.appendChild(rootElement);
Element entry = doc.createElement("eintrag");
rootElement.appendChild(entry);
Element prio = doc.createElement("priority");
entry.appendChild(prio);
prio.setAttribute("param", "0");
Comment fComment = doc.createComment("Diesen Abschnitt ergänzen");
entry.appendChild(fComment);
Element imgName = doc.createElement("image_name");
entry.appendChild(imgName);
imageName = rs.getString("image_path").substring(
rs.getString("image_path").lastIndexOf("/")+1); //+1 um das führende "/" los zu werden
imgName.setAttribute("param", imageName);
Element creator = doc.createElement("creator");
entry.appendChild(creator);
creator.setAttribute("param",
(rs.getString("vorname") + " " + rs.getString("nachname")));
Element email = doc.createElement("email");
entry.appendChild(email);
email.setAttribute("param", rs.getString("mail"));
// TODO check whether necessary
Element phone = doc.createElement("phone");
entry.appendChild(phone);
phone.setAttribute("param", "");
Element shortDesc = doc.createElement("short_description");
entry.appendChild(shortDesc);
shortDesc.setAttribute("param", rs.getString("lectureName"));
// TODO append latest change date and time
Element longDesc = doc.createElement("long_description");
entry.appendChild(longDesc);
longDesc.setAttribute("param", rs.getString("description")
+ "; last update: " + rs.getString("time"));
Element os = doc.createElement("os");
entry.appendChild(os);
os.setAttribute("param", rs.getString("os"));
Comment sComment = doc.createComment("Diesen Abschnitt ergänzen");
entry.appendChild(sComment);
// static content following - second part of xml descriptor
Element netwParam = doc.createElement("network");
entry.appendChild(netwParam);
netwParam.setAttribute("param", "nat");
Element netcParam = doc.createElement("netcard");
entry.appendChild(netcParam);
netcParam.setAttribute("param", "e1000");
Element vm = doc.createElement("virtualmachine");
entry.appendChild(vm);
vm.setAttribute("param", "vmware");
// TODO Fallunterscheidung
Element icon = doc.createElement("icon");
entry.appendChild(icon);
icon.setAttribute("param", "windows");
Element active = doc.createElement("active");
entry.appendChild(active);
active.setAttribute("param", "true");
Element pools = doc.createElement("pools");
entry.appendChild(pools);
pools.setAttribute("param", "default");
Element enable3d = doc.createElement("enable3d");
entry.appendChild(enable3d);
enable3d.setAttribute("param", "true");
// write virtual document to file
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
//Set XML-filename
DateFormat formatter = new SimpleDateFormat("yyyMMddhhmmss");
xmlName=formatter.format(new Date()) + "_" + rs.getString("institutionName") + "_" + rs.getString("loginName") + "_" + rs.getString("lectureName") + ".xml";
//Write file
StreamResult result = new StreamResult(new File(filePath+ xmlName)); // see filepath at top of class
transformer.transform(source, result);
// cleanup
rs.close();
st.close();
// return
log.info(new Date() + " - XML-File '"+xmlName+"' successfully created.");
return true;
}
}