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


/****************************************************************************************
 *  Klasse zur Bearbeitung der Herstellerdaten                                          *
 *                                                                                      *
 ****************************************************************************************/

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


public class EditProducer extends HttpServlet {

    private OraDBConnect dbcon = null;

    private PageGenerator pageGen = null;

    private String page = null;

    // globaler Fehlercode
    private String error = null;

    // globale Fehlervariable
    private boolean noError = true;

    // Feldnamen innerhalb der HTML-Seite
    private static String[] fieldNames = {"ADID","Name","Name2","Street","Number","ZIP","City","State","Country","Fon","Fax","EMail","URL"};

    // Spaltennamen für SQL-Abfrage
    private static String[] columnNames = {"ADID","NAME","NAME2","STRASSE","NUMMER","PLZ","STADT","BUNDESLAND","LAND","TELEFON","FAX","E_MAIL","INTERNETADRESSE"};

    // Stringarray zur Aufnahme der Spaltenwerte aus dem HTML-Formular
    private String[] values = {"","","","","","","","","","","","",""};

    /************************************************************************************
     *  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();

        Vector product = new Vector();
        Vector address = new Vector();
        String producers = "";
        String producerName = "";
        String producer_id = "";
        String address_id = "";
        String addresses = "<SELECT name=\"addresses\" width=\"280\" style=\"width:280px\"></SELECT>";
        String disabled = " disabled";
        String action = "";
        String filename = "";

        noError = true;
        for (int i=0; i<columnNames.length; i++) address.addElement(""); // Eingabefelder zur Adressbearbeitung initialisieren
        // Parameter "producer_choice" der Navigationsseite abfragen
        String producer = request.getParameter("producer_choice");
        String choice = request.getParameter("choice");
        if (producer != null) {
            // neuen Datensatz anlegen
            if (producer.equals("1")) {
                filename = "/export/pub/jakarta-tomcat-4.0.3/webapps/adia/servlets/producer-create.html";
                if (choice != null) {
                    // Hersteller hinzufügen
                    if (choice.equals("1")) {
                        producer_id = request.getParameter("pid");
                        producerName = request.getParameter("name");
                        if ((producer_id != null) && (producerName != null)) {
                            noError = insertProducer(producer_id, producerName);
                        }
                    }
                    // Hersteller entfernen
                    else if (choice.equals("2")) {
                        producer_id = request.getParameter("producers");
                        if (producers != null) noError = deleteData("DELETE FROM hersteller WHERE hid=" + producer_id);
                    }
                }
            }
            // bestehenden Datensatz bearbeiten
            else if (producer.equals("2")) {
                filename = "/export/pub/jakarta-tomcat-4.0.3/webapps/adia/servlets/producer-edit.html";
                // Hersteller-ID ermitteln
                producer_id = request.getParameter("producer_id");
                if (producer_id == null) producer_id ="";
                if (!producer_id.equals("")) {
                    // Herstellername wiederherstellen
                    if (request.getParameter("producerName") != null) producerName = request.getParameter("producerName");
                    // Auflistung weiterer Herstellerparameter (Aufruf aus Bearbeitungsformular selbst)
                    address_id = request.getParameter("addresses");
                    if (address_id == null) address_id = "";
                    // Name updaten
                    if (choice != null) {
                        if (choice.equals("1")) {
                            noError = updateProducerName(producerName, producer_id);
                        }
                        // Adresse zum Bearbeiten auflisten
                        else if (choice.equals("2") && noError) {
                            address = listAddress(address_id);
                            disabled = "";
                            action = "update";
                        }
                        // neue Adresse hinzufügen bzw. aktualisieren
                        else if (choice.equals("3") && noError) {
                            action = request.getParameter("action");
                            if (action != null) {
                                if (action.equals("insert")) {
                                    noError = insertAddress(producer_id, request);
                                }
                                else if (action.equals("update")) {
                                    noError = updateAddress(address_id, request);
                                }
                            }
                        }
                        // bestehende Adresse entfernen
                        else if (choice.equals("4") && noError) {
                            noError = deleteData("DELETE FROM adresse WHERE adid=" + address_id);
                        }
                    }
                    // Adressen des Herstellers auflisten
                    if (noError) {
                        addresses = listAddresses(producer_id, address_id);
                    }
                }
            }
            // Herstellerliste erzeugen
            if (noError) {
                producers = listProducers(producer_id);
            }
        }
        else {
            noError = false;
            error = "Hersteller-ID = null";
        }

        // Erzeugung und Ausgabe der HTML-Seite
        try {
            // wenn keine Fehler aufgetreten sind
            if (noError) {
                page = pageGen.readPage(filename);
                page = pageGen.replaceParam(page,producers,"@producers@");
                if (producer.equals("2")) {
                    page = pageGen.replaceParam(page,producerName,"@producerName@");
                    page = pageGen.replaceParam(page,addresses,"@addresses@");
                    page = pageGen.replaceParam(page,producer_id,"@producer_id@");
                    page = pageGen.replaceParam(page,disabled,"@disabled@");
                    page = pageGen.replaceParam(page,action,"@action@");
                    for (int i=0; i<fieldNames.length; i++) {
                        if (address != null) {
                            page = pageGen.replaceParam(page,(String)address.elementAt(i),"@adr" + fieldNames[i] + "@");
                        }
                        else {
                            page = pageGen.replaceParam(page,"","@adr" + fieldNames[i] + "@");
                        }
                    }
                }
            }
            // Fehlerausgabe
            else {
                page = pageGen.readPage("/export/pub/jakarta-tomcat-4.0.3/webapps/adia/servlets/error.html");
                page = pageGen.replaceParam(page,error,"@error@");
            }
        }
        catch (Exception 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
    {
        doGet(request, response);
    }

    /************************************************************************************
     *  alle vorhandenen Herstellernamen in einer SELECT-Box auflisten                  *
     *                                                                                  *
     *  @producer_id: Hersteller-ID                                                     *
     ************************************************************************************/
    private String listProducers(String producer_id) {
        Vector producers = new Vector();
        String result = "";
        String[] args = {"name=\"producers\" width=\"200\" style=\"width:200px\" onChange=\"changeMenu();\""};

        try {
            String[] param1 = {"HID","NAME"};
            producers = dbcon.OraDBgetResult("SELECT * FROM hersteller", param1, 0);
            result = pageGen.formatSelect(producers, args, producer_id, 1);
        }
        catch (SQLException e) {
            noError = false;
            result = null;
            error = e.toString();
        }
        return result;
    }

    /************************************************************************************
     *  alle vorhandenen Adressen eines Herstellers in einer SELECT-Box auflisten       *
     *                                                                                  *
     *  @producer_id: Hersteller-ID                                                     *
     *  @address_id : Adress-ID                                                         *
     ************************************************************************************/
    private String listAddresses(String producer_id, String address_id) {
        Vector addresses = new Vector();
        Vector temp = new Vector();
        String result = "";
        String adr = "";
        String[] args = {"name=\"addresses\" width=\"280\" style=\"width:280px\" onChange=\"disableComponents(true);\""};
        int anz = 0;

        try {
            String[] param1 = {"ADID","PLZ","STADT","STRASSE","NUMMER"};
            temp = dbcon.OraDBgetResult("SELECT adid,plz,stadt,strasse,nummer FROM adresse WHERE hid=" + producer_id, param1, 0);
            if (temp != null) {
                // Umwandlung von PLZ, Stadt, Strasse und Nummer zu einem String
                String[] separator = {" ",", "," ",""};
                anz = temp.size();
                for (int i=0; i<anz; i += 5) {
                    adr = "";
                    for (int j=1; j<5; j++) {
                        // wenn String in der Liste an Stelle j nicht leer ist
                        if (!((String)temp.elementAt(i+j)).equals("")) adr += (String)temp.elementAt(i+j) + separator[j-1];
                    }
                    addresses.addElement(temp.elementAt(i));
                    addresses.addElement(adr);
                }
            }
            // SELECT-Box generieren
            result = pageGen.formatSelect(addresses, args, address_id, 1);
        }
        catch (SQLException e) {
            noError = false;
            result = null;
            error = e.toString();
        }
        return result;
    }

    /************************************************************************************
     *  alle Daten einer Adresse ermitteln und in Form einer String-Liste zurückgeben   *
     *                                                                                  *
     *  @address_id: Adress-ID                                                         *
     ************************************************************************************/
    private Vector listAddress(String address_id) {
        Vector result = new Vector();

        try {
            result = dbcon.OraDBgetResult("SELECT * FROM adresse WHERE adid=" + address_id, columnNames, 0);
        }
        catch (SQLException e) {
            noError = false;
            result = null;
            error = e.toString();
        }
        return result;
    }

    /************************************************************************************
     *  Veränderung des Herstellernamen                                                 *
     *                                                                                  *
     *  @producerName: neuer Herstellername                                             *
     *  @producer_id : Hersteller-ID                                                    *
     ************************************************************************************/
    private boolean updateProducerName(String producerName, String producer_id) {
        try {
            int count = dbcon.OraDBexecuteUpdate("UPDATE hersteller SET name='" + producerName + "' WHERE hid=" + producer_id);
            if (count == 0) return false;
        }
        catch (SQLException e) {
            error = e.toString();
            return false;
        }
        return true;
    }

    /************************************************************************************
     *  neuen Hersteller einfügen                                                       *
     *                                                                                  *
     *  @pid : Hersteller-ID                                                            *
     *  @name: Herstellername                                                           *
     ************************************************************************************/
    private boolean insertProducer(String pid, String name) {
        try {
            String sql = "INSERT INTO hersteller VALUES (" + pid + ",'" + name + "')";
            // SQL-Befehl ausführen
            int count = dbcon.OraDBexecuteUpdate(sql);
            if (count == 0) return false;
        }
        catch(SQLException e) {
            error = e.toString();
            return false;
        }
        return true;
    }

    /************************************************************************************
     *  neue Adressdaten für einen Hersteller einfügen                                  *
     *                                                                                  *
     *  @producer_id: Hersteller-ID                                                     *
     *  @request    : Request-Objekt des aufrufenden HTML-Formulars                     *
     ************************************************************************************/
    private boolean insertAddress(String producer_id, HttpServletRequest request) {

        try {
            // einzufügende Werte ermitteln
            for (int i=0; i<13; i++) {
                values[i] = request.getParameter("adr" + fieldNames[i]);
                if (values[i] == null) values[i] = "";
            }
            // SQL-Statement generieren
            String sql = "INSERT INTO adresse VALUES (";
            for (int i=0; i<13; i++) {
                switch (i) {
                    case  0: sql += values[i] + "," + producer_id + ",";
                             break;
                    case  4:
                    case  5: sql += values[i] + ",";
                             break;
                    case 12: sql += "'" + values[i] + "')";
                             break;
                    default: sql += "'" + values[i] + "',";
                }
            }
            // SQL-Befehl ausführen
            int count = dbcon.OraDBexecuteUpdate(sql);
            if (count == 0) return false;
        }
        catch(SQLException e) {
            error = e.toString();
            return false;
        }
        return true;
    }

    /************************************************************************************
     *  Adressdaten aus Datenbank entfernen                                             *
     *                                                                                  *
     *  @sql: SQL-Statement zum Löschen des Datensatzes                                 *
     ************************************************************************************/
    private boolean deleteData(String sql) {
        try {
            int count = dbcon.OraDBexecuteUpdate(sql);
            if (count == 0) return false;
        }
        catch (SQLException e) {
            error = e.toString();
            return false;
        }
        return true;
    }

    /************************************************************************************
     *  Adressdaten aktualisieren                                                       *
     *                                                                                  *
     *  @address_id: Adress-ID                                                          *
     *  @request   : Request-Objekt des aufrufenden HTML-Formulars                      *
     ************************************************************************************/
    private boolean updateAddress(String address_id, HttpServletRequest request) {

        try {
            // einzufügende Werte ermitteln
            for (int i=1; i<13; i++) {
                values[i] = request.getParameter("adr" + fieldNames[i]);
                if (values[i] == null) values[i] = "";
            }
            // SQL-Statement generieren
            String sql = "UPDATE adresse SET ";
            for (int i=1; i<13; i++) {
                switch (i) {
                    case  4:
                    case  5: sql += columnNames[i] + "=" + values[i] + ",";
                             break;
                    case 12: sql += columnNames[i] + "=" + "'" + values[i] + "' WHERE adid=" + address_id;
                             break;
                    default: sql += columnNames[i] + "=" + "'" + values[i] + "',";
                }
            }
            // SQL-Befehl ausführen
            int count = dbcon.OraDBexecuteUpdate(sql);
            if (count == 0) return false;
        }
        catch(SQLException e) {
            error = e.toString();
            return false;
        }
        return true;
    }
}