Vollständiger Quell-Code für das Servlet "Catalog"


/****************************************************************************************
 *  Klasse zur Generierung des Menüs zur Auswahl eines Kataloges bzw. eines             *
 *  Unterkataloges                                                                      *
 *                                                                                      *
 ****************************************************************************************/

import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;


public class Catalog extends HttpServlet {

    private OraDBConnect dbcon = null;

    private PageGenerator pageGen = null;

    private String page = null;


    /************************************************************************************
     *  Initialisierungsabschnitt des Servlets                                          *
     *                                                                                  *
     *  - Verbindungsaufbau zur Datenbank                                               *
     *  - Erzeugung des Objekts zur Generierung der dynamischen HTML-Seiten             *
     ************************************************************************************/
    public void init() throws ServletException {
        try {
            dbcon = new OraDBConnect("jdbc:oracle:thin:user/passwd@141.57.9.9:1521:IMNLehre");
            pageGen = new PageGenerator();
        }
        catch (SQLException e) {
            throw new UnavailableException(this, "Initialisierungsfehler: " + e);
        }
    }

    /************************************************************************************
     *  Beendigungsabschnitt des Servlets                                               *
     *                                                                                  *
     *  - Verbindungsabbau zur Datenbank                                                *
     ************************************************************************************/
    public void destroy() {
        try {
            dbcon.OraDBClose();
        }
        catch (SQLException e) {
            // sollte nicht vorkommen
        }
    }

    /************************************************************************************
     *  Verarbeitungsabschnitt des Servlets für Request mittels HTTP-GET-Operation      *
     *                                                                                  *
     ************************************************************************************/
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        String selected_id = null;
        String options = "";
        String gid = null;
        String mgid = null;
        String[] param1 = {"MUTTERGRUPPE_ID"};
        String[] param2 = {"GID","NAME"};
        String[] args = {"name=\"level1\"","width=\"200\"","style=\"width:200px\"",
                         "onChange=\"changeMenu(document.frmCatalog.level1);\""};
        Vector result = null;
        boolean stop = false;
        int level = 1;

        try {
            // selektierten Wert der Auswahlbox abspeichern
            selected_id = request.getParameter("n_group_id");
            if (selected_id == null) selected_id = "";

            // Ebene 1 ... Ebene n-1
            gid = selected_id;
            mgid = gid;
            if (!selected_id.equals("")) {
                do {
                    // Muttergruppe ermitteln
                    result = dbcon.OraDBgetResult("SELECT muttergruppe_id FROM struktur WHERE gid=" + gid, param1, 0);
                    if (result != null) {
                        mgid = (String)result.elementAt(0);
                        if (!gid.equals(mgid)) {
                            // Aufbau anhand Muttergruppe
                            result = dbcon.OraDBgetResult("SELECT name,gid FROM struktur WHERE muttergruppe_id=" + mgid + " AND muttergruppe_id<>gid", param2, 0);
                            // Formatierung als HTML-SELECT
                            options = pageGen.formatSelect(result, args, gid, 0) + "\n" + options;
                            // Gruppen-ID für nächste Ebene neu initialisieren
                            gid = mgid;
                            // Bezeichnung des OPTION-Tags für nächste Ebene anpassen
                            level++;
                            args[0] = "name=\"level"+ level +"\"";
                            args[3] = "onChange=\"changeMenu(document.frmCatalog.level" + level + ");\"";
                        }
                        else stop = true;
                    }
                    else stop = true;
                } while (!stop);
            }
            // Ebene n (Katalogebene)
            result = dbcon.OraDBgetResult("SELECT DISTINCT s.name,s.gid FROM katalog k,struktur s" + " WHERE k.aktiv=1 AND (s.typnr=1 OR s.typnr=4)", param2, 0);
            // Formatierung als HTML-SELECT
            options = pageGen.formatSelect(result, args, mgid, 0) + "\n" + options;

            // Ebene 0 aufbauen, falls Daten vorhanden (unterste Ebene)
            if (!selected_id.equals("")) {
                args[0] = "name=\"level0\"";
                args[3] = "onChange=\"changeMenu(document.frmCatalog.level0);\"";
                result = dbcon.OraDBgetResult("SELECT name,gid FROM struktur WHERE muttergruppe_id=" + selected_id + " AND muttergruppe_id<>gid", param2, 0);
                // Formatierung als HTML-SELECT
                options += pageGen.formatSelect(result, args, mgid, 0);
            }

            // Erzeugung und Ausgabe der HTML-Seite
            try {
                page = pageGen.readPage("/export/pub/jakarta-tomcat-4.0.3/webapps/adia/servlets/navi.html");
                page = pageGen.replaceParam(page,options,"@options@");
            }
            catch (Exception e) {
                page = e.toString();
            }
        }
        catch (SQLException e) {
            page = e.toString();
        }
        out.println(page);
    }

    /************************************************************************************
     *  Verarbeitungsabschnitt des Servlets für Request mittels HTTP-POST-Operation     *
     *                                                                                  *
     ************************************************************************************/
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        // Ausführen des Verarbeitungsabschnitts für die GET-Operation
        doGet(request, response);
    }
}