// Programm 5-14var: BSP_ROOT/meinewebapp/WEB-INF/meineapps/Dispatcher.java
package meineapps;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;

public class Dispatcher extends HttpServlet {

  static Statement s;
  static String meldung;
  static {
    try {
      Class.forName("org.gjt.mm.mysql.Driver");
      Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/weinladen?user=root&passwd=");
      s = c.createStatement();
    }
    catch(Exception ex) { 
      StringWriter aus = new StringWriter();
      ex.printStackTrace(new PrintWriter(aus));
      meldung = aus.toString();
    }
  }
  public void doPost(HttpServletRequest rq, HttpServletResponse rs)
                                     throws ServletException, IOException {
    doGet(rq, rs);
  }
/* Aktionsdidentifizierungen, zugleich Knopfbeschriftungen */
  final static String bsuchen = "Nach Schlüssel suchen";
  final static String bweiter = "Weiter ohne Änderung";
  final static String baendern = "Ändern!";
  final static String bloeschen = "Löschen!";
  final static String bneu = "Neuer Datensatz";
  final static String bhome = "Zur Startseite";
  final static String breset = "Zurücksetzen";
  final static String bliste = "Als Liste anzeigen";

  public void doGet(HttpServletRequest rq, HttpServletResponse rs)
                                        throws ServletException, IOException {
    PrintWriter out = rs.getWriter();   
/* Formularparameter einlesen */
    String ident = rq.getParameter("ident");
    ident = ident == null ? "" : ident;
    String wnr = rq.getParameter("wnr");
    wnr = wnr == null ? "" : wnr;
    String weinname = rq.getParameter("weinname");
    weinname = weinname == null ? "" : weinname;
    String praedikat  = rq.getParameter("praedikat");
    praedikat = praedikat == null ? "" : praedikat;
/* Farben der Eingabefeldlegenden */
    String cwnr = "black";   // cweinname und cpraedikat wurden gestrichen!
/* Dispatcher */
    String sql = "", liste = "";
    try {
      if (baendern.equals(ident)) {               //*** Ändern
        sql = "UPDATE weine SET weinname='" + weinname + "',praedikat='" + praedikat + "' WHERE wnr=" + wnr;
        s.executeUpdate(sql);
      }
      if (bloeschen.equals(ident)) {             //*** Löschen
        sql = "DELETE FROM weine WHERE wnr=" + wnr;
        s.executeUpdate(sql);
        wnr = weinname = praedikat = "";
      }
      if (bneu.equals(ident)) {                  //*** Neu
        sql = "INSERT INTO weine(weinname) VALUES('')";
        s.executeUpdate(sql);
        sql = "SELECT MAX(wnr) AS xwnr FROM weine";
        ResultSet rset = s.executeQuery(sql);
        if (rset.next()) {
          wnr = rset.getString("xwnr");
          weinname = praedikat = "";
        }
      }
      if (bsuchen.equals(ident)) {               //*** Suchen
        sql = "SELECT * FROM weine WHERE wnr=" + wnr;
        ResultSet rset = s.executeQuery(sql);
        if (rset.next()) {
          weinname = rset.getString("weinname");
          praedikat = rset.getString("praedikat");
        }
        else {
          wnr = weinname = praedikat = ""; 
          cwnr = "red";
        }
      }
      if (bliste.equals(ident)) {               //*** Alles auflisten
        sql = "SELECT * FROM weine ORDER BY preis";
        ResultSet rset = s.executeQuery(sql);
        liste += "<TABLE>";
        while (rset.next()) {
          liste += "<TR><TD>" + rset.getString("wnr") + "<TD>" + rset.getString("weinname")
                     + "<TD>" + rset.getString("praedikat") + "<TD Align=right>" + rset.getString("preis");
        }
        liste += "</TABLE>";
      }
      if (bhome.equals(ident)) {                //*** Zur Startseite
        rs.sendRedirect("/");
      }
      if (bweiter.equals(ident)) {              //*** Weiter
        rs.sendRedirect(rq.getContextPath() + rq.getServletPath());
          /* z.B. "/meinewebapp" + "/servlet/meineapps.Dispatcher" */
      }
    }
    catch(Exception ex) { 
      StringWriter aus = new StringWriter();
      ex.printStackTrace(new PrintWriter(aus));
      cwnr = "red"; wnr = ""
      meldung = "SuchenErr: " + sql + "\n" + aus.toString();
    }
/* HTML, HTML-Formular */
    rs.setContentType("text/html");
    out.println("<TITLE>Muster-Dispatcher</TITLE><H1>Muster-Dispatcher</H1>");
    out.println("<FORM Method=GET><TABLE>\n"
    +"<TR><TD Align=right><FONT Color=" + cwnr + ">Schlüssel"
    +"    <TD><INPUT Type=text Name=wnr Value='" + wnr + "'>"
    +"    <TD><INPUT Name=ident Type=submit Value='" + bsuchen + "'>\n"
    +"<TR><TD Align=right>Weinname"
    +"    <TD><INPUT Type=text Name=weinname Value='" + weinname + "'>"
    +"    <TD><INPUT Name=ident Type=submit Value='" + bweiter + "'>\n"
    +"<TR><TD Align=right>Prädikat"
    +"    <TD><INPUT Type=text Name=praedikat Value='" + praedikat + "'>"
    +"    <TD><INPUT Name=ident Type=submit Value='" + baendern + "'>\n"
    +"<TR><TD><TD><TD><INPUT Name=ident Type=submit Value='" + bneu + "'>\n"
    +"<TR><TD Colspan=2><INPUT Name=ident Type=submit Value='" + bhome + "'>"
    +"        <INPUT Name=ident Type=reset Value='" + breset + "'>"
    +"    <TD><INPUT Name=ident Type=submit Value='" + bloeschen + "'>\n"
    +"<TR><TD><TD><TD><INPUT Name=ident Type=submit Value='" + bliste + "'>\n"
    +"</TABLE></FORM>\n"
    );
    out.println(liste);
  }
}