// File: Students.java
// Last Updated: 9-Jan-2013

package mypackage;

//Import Servlet Libraries
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

//Import Java Libraries
import java.io.*;
import java.sql.*;

@WebServlet("/students")
public class Students extends HttpServlet {

	String driver = "com.mysql.jdbc.Driver";
	
	// Θα χρειαστεί να προσαρμόσετε την βάση δεδομένων στην teddb<AM>
	String dbURL = "jdbc:mysql://localhost/teddb?user=ted&password=ted!"; 

	public void doGet(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		String qry = "select id, first_name, last_name, semester, email from students";
		String[] columns = new String[] { "id", 
				"first_name", "last_name",
				"semester", "email" };
		String[] columnsVisible = new String [] {
				"ΑΜ","ΟΝΟΜΑ","ΕΠΩΝΥΜΟ","ΕΞΑΜΗΝΟ","EMAIL"
		};
		
		Connection dbCon;

		res.setContentType("text/html");
		res.setCharacterEncoding("utf-8");
		PrintWriter out = res.getWriter();
		
		try {

			Class.forName(driver);
			dbCon = DriverManager.getConnection(dbURL);
			ResultSet rs;
			Statement stmt;
			stmt = dbCon.createStatement();
			rs = stmt.executeQuery(qry);
			
			out.println("<!DOCTYPE html><html><body>");
			
			printForm(out);
			printAnyError(out, req);
			
			//Printing the table
			out.println("<hr/>");
			out.println("<table border=1><tr>");
			for (int i = 0; i < columns.length; i++) {
				out.print("<td><b>");
				out.print(columnsVisible[i].toUpperCase());
				out.print("</b></td>");
			}

			while (rs.next()) {
				out.println("<tr>");
				for (int i = 0; i < columns.length; i++) {
					out.println("<td>");
					out.println(rs.getString(columns[i]));
					out.println("</td>");
				}
				out.println("</tr>\n");
			}
			out.println("</table></body></html>");
			
			rs.close();
			stmt.close();
			dbCon.close();
			
		} catch (Exception e) {
			out.println(e.toString());
		} finally {
			out.close();
		}
	}

	public void doPost(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		String qry = "insert into students (id, first_name, last_name, semester, email) values (? ,? ,? ,?, ?)";

		Connection dbCon;

		req.setCharacterEncoding("utf-8");
		
		String am = req.getParameter("am");
		String onoma = req.getParameter("onoma");
		String eponimo = req.getParameter("eponimo");
		String examino = req.getParameter("examino");
		String email = req.getParameter("email");

		try {

			Class.forName(driver);
			dbCon = DriverManager.getConnection(dbURL);

			PreparedStatement stmt;
			stmt = dbCon.prepareStatement(qry);
			stmt.setString(1, am);
			stmt.setString(2, onoma);
			stmt.setString(3, eponimo);
			stmt.setString(4, examino);
			stmt.setString(5, email);

			int i = stmt.executeUpdate();
			System.out.println("Inserted " + i + " row(s)");

			res.sendRedirect("students");

		} catch (Exception e) {
			res.sendRedirect("students?errormsg=" + e.getMessage());
		}
	}

	void printForm(PrintWriter out) {

		out.println("<form action=\"students\" method=\"POST\">");
		out.println("<b> Παρακαλώ δώστε τα ακόλουθα στοιχεία: </b> <br>");
		out.println("<b> Όνομα :  </b> <input type=\"text\" name=\"onoma\" ><br>");
		out.println("<b> Επώνυμο :  </b> <input type=\"text\" name=\"eponimo\" ><br>");
		out.println("<b> Αριθμός Μητρώου: </b> <input type=\"text\" name=\"am\" ><br>");
		out.println("<b> Εξάμηνο: </b>  <input type=\"text\" name=\"examino\" ><br>");
		out.println("<b> Email: </b> <input type=\"text\" name=\"email\" ><br>");
		out.println("<input type=\"submit\"  value=\"Save\"> ");
		out.println("</form>");

	}

	void printAnyError(PrintWriter out, HttpServletRequest req) {
		String errorMessage = req.getParameter("errormsg");
		if (errorMessage != null) {
			out.println("<br><strong style=\"color:red\"> Error: "+ errorMessage + "</strong>");
		}
	}
}