import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.*;
import java.io.File;

public class xml extends HttpServlet{
	public void doGet(HttpServletRequest kysimus, HttpServletResponse vastus) throws IOException, ServletException{
		int x;
		String pass, user, tabel;
		PrintWriter valja = vastus.getWriter();
		
		valja.println("<html><head><title>.o0|Backup|0o.</title></head><body>");
		valja.println("<center><h2>Andmebaasi backup</h2></center><br/>");
		//KASUTAJANIME JA PAROOLI KÜSIMINE (KUI NEID VEEL POLE)
		user=kysimus.getParameter("u");
		pass=kysimus.getParameter("p");
		if(user!=null && pass!=null && user.length()!=0 && pass.length()!=0){
			valja.println("<h3>Vali tabel</h3><br/><form><table>");
			//PEAB PASSI ja USERIT MEELES//
			valja.println("<input type='hidden' name='u' value='"+user+"' >");
			valja.println("<input type='hidden' name='p' value='"+pass+"' >");
			//PEAB PASSI ja USERIT MEELES//	
			valja.println("<tr><td><select name='tabel'>");
			valja.println("<option value=1>--KÕIK--</option>");
			valja.println("<option value=2>Esitajad</option>");
			valja.println("<option value=3>Palad</option>");
			valja.println("<option value=4>Stiilid</option>");
			valja.println("<option value=5>Plaadid</option>");
			valja.println("</select></td></tr>");
			valja.println("<tr><td><input type='submit' value='Backup'></td></tr></table></form>");
		}else{valja.println("Õigused puuduvad");}	
		//ANDMETE VASTUVÕTT
		tabel=kysimus.getParameter("tabel");
		if (tabel!=null && tabel.length()!=0){
			switch (x = Integer.parseInt(tabel)){
				case 1:
				case 2:
					valja.println(kirjutaXML("Esitajad", pass, user));
					if(x!=1){break;}
				case 3:
					valja.println(kirjutaXML("Palad", pass, user));
					if(x!=1){break;}
				case 4:
					valja.println(kirjutaXML("Stiilid", pass, user));
					if(x!=1){break;}
				case 5:
					valja.println(kirjutaXML("Plaadid", pass, user));
					if(x!=1){break;}
			}	
		}
		valja.println("<br/><a href='login?u="+user+"&p="+pass+"'>TAGASI</a>");
		valja.println("</body></html>");
	}
	
	public String kirjutaXML(String tabel, String pass, String user){
		Document doc;
		Element juur, column, obj;
		Connection cn=null;
		ResultSet rs;
		ResultSetMetaData rsmd;
		Statement st;
		boolean yhendus=false;
		int mitmus;
		
		if(tabel.compareTo("Esitajad")==0 || tabel.compareTo("Palad")==0){mitmus=1;}else{mitmus=2;}
		if(user!=null && pass!=null && user.length()!=0 && pass.length()!=0){
			try{
				Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
				cn=DriverManager.getConnection("jdbc:odbc:plaadikogu", user, pass);
				if(!cn.isClosed()){yhendus=true;}
			}catch(Exception e){return "Viga ühendue loomisel: "+e;}
			if(yhendus==true){
				try{
					st=cn.createStatement();
					rs=st.executeQuery("SELECT * FROM "+tabel);
					rsmd=rs.getMetaData();
					doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
					juur=doc.createElement(tabel);
					doc.appendChild(juur);
					while(rs.next()!=false){
						obj=doc.createElement(tabel.substring(0, tabel.length()-mitmus));
						for(int i=1; i<=rsmd.getColumnCount(); i++){
							column=doc.createElement(rsmd.getColumnName(i));
							column.appendChild(doc.createTextNode(rs.getString(rsmd.getColumnName(i))));
							obj.appendChild(column);
						}
						juur.appendChild(obj);
					}
				}catch(Exception e){return "Tekkis viga: "+e;}
			}else{return "</br>Viga ühenduses baasiga!";}
			try{
				Transformer t=TransformerFactory.newInstance().newTransformer();
				t.transform(new DOMSource(doc), new StreamResult(new FileOutputStream(tabel+".xml")));
			}catch(Exception e){return "</br>Viga xml faili loomisel!";}
		}
		try{cn.close();}catch(Exception e){return "Tekkis viga: "+e;}
		return "</br>Loodi edukalt fail: "+tabel+".xml!";
	}
}