summaryrefslogblamecommitdiffstats
path: root/Dozentenmodulserver/src/util/XMLCreator.java
blob: 564543fad78fe32178c717b405fb3fc7e494b15c (plain) (tree)
1
2
3
4
5
6
7
8
9
10
             
 




                             


                                  









                                                      

                            
                               



                            
                             
               
 

                         



                                                                                 
 



                                      
                                                                                  


                                                                             
        

                                   

                                                                                                                                                                                                                                                                                                                                                           


                                                                                                                 
                                                                                 


                                                         
                               


                                                          


                                     






                                                                                  


                                                  
 
                                                  
 
                                                

                                    
                                                                                                                    
                             
 
         







                                                                                


                                             
 
                                                  

                              

                                    
                                                                                                                    

                             




                                                                            

                                            



                                                                          
                                                                             
 



                                                                    
 

                                                             
 


                                                             
 

                                                                                  
 

                                                                  

                                                                                                                      
 
                                                         
 

                                                               


                                                                                            


                                                                  

                                               


                                                           
 

                                                                           
                                                                             

                                                          

                                                                         
                                                                          
                                                                            
 


                                                             
 

                                                                                  


                                                                           


                                                                 
 


                                                                 
 


                                                                 

                                          


                                                         
 


                                                             
 


                                                           
 


                                                                 



                                                                          

                                                                              







                                                                                                                                                                            
                                                      

                          

                           

                         
                                                                                          


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