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; } }