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;
}
}