diff options
Diffstat (limited to 'Dozentenmodulserver/src/main/java/util/XMLCreator.java')
-rw-r--r-- | Dozentenmodulserver/src/main/java/util/XMLCreator.java | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/Dozentenmodulserver/src/main/java/util/XMLCreator.java b/Dozentenmodulserver/src/main/java/util/XMLCreator.java new file mode 100644 index 00000000..564543fa --- /dev/null +++ b/Dozentenmodulserver/src/main/java/util/XMLCreator.java @@ -0,0 +1,225 @@ +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; + } +} |