
/**
 * ATKIS-EDBS-Reader to read EDBS-File, convert and write it to an Oracle database
 * Copyright (C) 2000  Stephan Falke, Carsten Kleiner, University of Hannover
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package parser;

/**
 * Diese Klasse enth&aumllt; alle Konstanten der Datenformate, die Aufrufe f&uuml;r die tempor&auml;ren
 * Tabellen, die Aufrufe f&uuml;r den <tt>SQL*loader</tt>, Eingabeaufforderungstexte und 
 * Fehlermeldungen.
 * Diese Klasse mu&szlig; von der Klasse <CODE>
 * <A HREF="../parser/Constants.html">Constants</A>
 * </CODE> erweitert werden.
 * Hier sind alle Daten schon belegt. Die Meldung sind deutsch. Ist eine andere Sprache 
 * gew&uuml;nscht, k&ouml;nnen die Meldungen in der implementierenden Klasse dann &uuml;berschrieben werden.
 * @author <A href="mailto:fad@gmx.ch">Stephan Falke</A>
 */
abstract class ConstantsBase {
  /**
   * Falls beim Parsen der Datei Meldungen ausgegeben werden sollen
   * wird diese Konstante auf <tt>true</tt> anderenfalls auf <tt>false</tt>
   * gesetzt. Die Voreineinstellung ist <tt>false</tt>.
   */
  public static boolean LOG = true;

  /**
   * Trennzeichen f&uuml;r die Datendateien des <tt>SQL*loaders</tt>
   */
  protected final static String TUPEL_DIVIDER = ",";

  /**
   * Erzatzzeichen f&uuml;r das Trennzeichen f&uuml;r die Datendateien des 
   * <tt>SQL*loaders</tt>
   */
  protected final static char REPLACE_TUPEL_DIVIDER = ';';

  /**
   * Zeichenkette eines leeren Objektnummerneintrags
   */
  protected final static String NO_OBJECT_NO = "       ";

  /**
   * Zeichenkette, die in Datendateien des <tt>SQL*loaders</tt> eingetragen wird,
   * wenn der Wert <tt>NULL</tt> sein soll.
   */
  protected final static String NULL_STRING = "";

  /**
   * maximaler Index der Datendateinamen
   */
  protected static int MAX_FILENAME_INDEX = 100;

  /**
   * Beschreibung der Dateien, die akzeptiert werden.
   */
  protected static String FILE_DESCRIBTION = "ATKIS";

  /**
   * Zeichenkette, die am Zeilenbeginn einer EDBS-Datei stehen mu&szlig;.
   */
  protected final static String KEY_WORD = "EDBS";

  /**
   * Maximale Zeilenl&auml;nge in einer EDBS-Datei
   */
  protected final static int MAX_EDBS_LINE_LENGTH = 2050;
  
  /**
   * L&auml;nge eines Zeilenkopfs einer EDBS-Datei 
   */
  protected final static int HEADER_LEGTH = 28;

  /**
   * L&auml;nge der Angabe, bei der &uuml;berpr&uuml;ft wird, ob eine neue Datei 
   * anf&auml;ngt
   */
  protected final static int HEADER_CONTROL_LENGTH = 44; 
  
  /**
   * L&auml;nge der Angabe, die bei einer mehrzeiligen Angabe wegf&auml;llt.
   */
  protected final static int HEADER_NEXT_LENGTH = 36; 
  
  /**
   * Zeichenkette zur Erkennung einer Grundri&szlig;datei
   */
  protected final static String GROUND_DATA = "ULOBNN  ";

  /**
   * Zeichenkette zur Erkennung einer Attributdatei
   */
  protected final static String SPECIAL_DATA = "ULTANN  ";

  /**
   * Zeichenkette, die in den EDBS-Dateien der Standartwiederholungsfaktor ist.
   */
  protected final static String STD_ONE = "0001";

  /**
   * L&auml;nge eines Wiederholungsfaktors
   */
  protected final static int COUNT_LENGTH = 4;

  /**
   * L&auml;nge einer Koordinatenangabe eines Grundri&szlig;kennzeichen
   */
  protected final static int COORDINATES_LENGTH = 20;

  /**
   * L&auml;nge eines Pr&uuml;fzeichens eines Grundri&szlig;kennzeichen
   */
  protected final static int GROUND_CHECK_LENGTH = 1;

  /**
   * L&auml;nge einer Koordinatenangabe eines Linienendpunktes
   */
  protected final static int LINE_END_POINT_LENGTH = COORDINATES_LENGTH;

  /**
   * L&auml;nge einer Geometrieangabe eines Linienendpunktes
   */
  protected final static int LINE_GEOMETRY_LENGTH = 2;

  /**
   * L&auml;nge einer Linienfunktionsangabe 
   */
  protected final static int LINE_FUNCTION_LENGTH = 29;

  /**
   * L&auml;nge einer Folienangabe
   */
  protected final static int LAYER_LENGTH = 3;

  /**
   * L&auml;nge einer Linienartangabe bei einer Linienfunktionsangabe
   */
  protected final static int LINE_FUNCTION_RACE_LENGTH = 4;

  /**
   * L&auml;nge einer Linienteilungsangabe bei einer Linienfunktionsangabe
   */
  protected final static int LINE_FUNCTION_DIV_LENGTH = 1;

  /**
   * L&auml;nge der Artangabe einer Fachparameters einer Linie
   */
  protected final static int LINE_PARAM_RACE_LENGTH = 1;

  /**
   * L&auml;nge der Typangabe einer Fachparameters einer Linie
   */
  protected final static int LINE_PARAM_TYPE_LENGTH = 1;

  /**
   * L&auml;nge der Wertangabe einer Fachparameters einer Linie
   */
  protected final static int LINE_PARAM_VALUE_LENGTH = 7;

  /**
   * L&auml;nge einer Fachparameterangabe einer Linie
   */
  protected final static int LINE_PARAM_LENGTH = 9;

  /**
   * L&auml;nge einer Koordinatenangabe eines Lageparameters
   */
  protected final static int LINE_DATA_LENGTH = COORDINATES_LENGTH;

  /**
   * L&auml;nge einer Objektfunktionsangabe
   */
  protected final static int OBJECT_DATA_LENGTH = 48;

  /**
   * L&auml;nge einer Objektartangabe einer Objektfunktion
   */
  protected final static int OBJECT_RACE_LENGTH = 4;

  /**
   * L&auml;nge einer Aktualit&auml;tsangabe einer Objektfunktion
   */
  protected final static int OBJECT_ACT_LENGTH = 2;

  /**
   * L&auml;nge einer Objekttypangabe einer Objektfunktion
   */
  protected final static int OBJECT_TYPE_LENGTH = 1;

  /**
   * L&auml;nge einer Nummer bei einer Objektfunktion
   */
  protected final static int OBJECT_NO_LENGTH = 7;

  /**
   * L&auml;nge einer Modelltypangabe einer Objektfunktion
   */
  protected final static int OBJECT_MODEL_TYPE_LENGTH = 2;

  /**
   * L&auml;nge eines Enstehungsdatum bei einer Objektfunktion
   */
  protected final static int OBJECT_DATE_LENGTH = 6;

  /**
   * L&auml;nge einer Ver&auml;nderungskennung einer Objektfunktion
   */
  protected final static int OBJECT_DIFF_LENGTH = 1;

  /**
   * L&auml;nge einer Koordinatenangabe einer Geometrieangabe zu einem Objekt
   */
  protected final static int OBJECT_GEO_LENGTH = COORDINATES_LENGTH;

  /**
   * L&auml;nge einer Informationsartangabe bei einer Objektinformation
   */
  protected final static int OBJECT_DATA_INFO_RACE_LENGTH = 2;

  /**
   * L&auml;nge einer Kartentypangabe bei einer Objektinformation
   */
  protected final static int OBJECT_DATA_MAP_TYPE_LENGTH = 2;

  /**
   * L&auml;nge einer Signaturteilnummerangabe bei einer Objektinformation
   */
  protected final static int OBJECT_DATA_SIG_LENGTH = 6;

  /**
   * L&auml;nge eines Texteintrages bei einer Objektinformation
   */
  protected final static int OBJECT_DATA_TEXT_LENGTH = 33;

  /**
   * L&auml;nge einer Artangabe der Geometrieangabe bei einer Objektinformation
   */
  protected final static int OBJECT_DATA_GEO_RACE_LENGTH = 2;

  /**
   * L&auml;nge einer Objektteilnummer
   */
  protected final static int OBJECT_PART_NO_LENGTH = 3;

  /**
   * L&auml;nge der Pr&uuml;fzeichen einer Attributeinheit
   */
  protected final static int ATTRIBUTE_CHECK_LENGTH = 3;

  /**
   * L&auml;nge einer Attributtypangabe bei einem Attributkennzeichen
   */
  protected final static int ATTRIBUTE_TYPE_LENGTH = 4;

  /**
   * L&auml;nge eines Attributwertes bei einem Attributkennzeichen
   */
  protected final static int ATTRIBUTE_VALUE_LENGTH = 7;

  /**
   * Dateinamenendung einer Datendatei f&uuml;r den <tt>SQL*loader</tt>
   */
  protected static String LOAD_FILE_ENDING = ".load";

  /**
   * Fehlermeldung: Ein Wiederholungsfaktor ist fehlerhaft. Zur besseren Spezifikation kann
   * einer der <tt>COUNT_OF_</tt> Variablen angeh&auml;ngt werden, die dann angibt, in 
   * welcher Datengruppe dies der Fall ist. 
   */
  protected static String WRONG_COUNTER_FORMAT = "Fehlerhafter Wiederholungsfaktor ";

  /**
   * Spezifikationsmeldung zu <CODE>
   * <A HREF="../parser/ConstantsBase.html#WRONG_COUNTER_FORMAT">WRONG_COUNTER_FORMAT</A>
   * </CODE> falls der Wiederholungsfaktor am Anfang fehlerhaft ist.
   */
  protected static String COUNT_OF_ALL = " beim Beginn: ";

  /**
   * Spezifikationsmeldung zu <CODE>
   * <A HREF="../parser/ConstantsBase.html#WRONG_COUNTER_FORMAT">WRONG_COUNTER_FORMAT</A>
   * </CODE> falls der Wiederholungsfaktor der Linien fehlerhaft ist.
   */
  protected static String COUNT_OF_LINES = " bei Linien: ";

  /**
   * Spezifikationsmeldung zu <CODE>
   * <A HREF="../parser/ConstantsBase.html#WRONG_COUNTER_FORMAT">WRONG_COUNTER_FORMAT</A>
   * </CODE> falls der Wiederholungsfaktor der Linienfunktionen fehlerhaft ist.
   */
  protected static String COUNT_OF_LINE_FUNCTIONS = " bei Linienfunktionen: ";

  /**
   * Spezifikationsmeldung zu <CODE>
   * <A HREF="../parser/ConstantsBase.html#WRONG_COUNTER_FORMAT">WRONG_COUNTER_FORMAT</A>
   * </CODE> falls der Wiederholungsfaktor der Objekte fehlerhaft ist.
   */
  protected static String COUNT_OF_OBJECTS = " bei Objekten: ";

  /**
   * Spezifikationsmeldung zu <CODE>
   * <A HREF="../parser/ConstantsBase.html#WRONG_COUNTER_FORMAT">WRONG_COUNTER_FORMAT</A>
   * </CODE> falls der Wiederholungsfaktor der Objektinformationen fehlerhaft ist.
   */
  protected static String COUNT_OF_OBJECT_DATAS = " bei Objektinformationen: ";

  /**
   * Spezifikationsmeldung zu <CODE>
   * <A HREF="../parser/ConstantsBase.html#WRONG_COUNTER_FORMAT">WRONG_COUNTER_FORMAT</A>
   * </CODE> falls der Wiederholungsfaktor der Attribute fehlerhaft ist.
   */
  protected static String COUNT_OF_ATTRRIBUTES = " bei Attributen: ";
  
  /**
   * Fehlermeldung: Eine leere Zeile wurde eingelesen.
   */
  protected static String EMPTY_LINE = "Leere Zeile wurde eingelesen.";
  
  /**
   * Fehlermeldung: Konnte Datei nicht erstellen.
   */
  protected static String COULDNOT_CREATE_FILE = "Konnte Datei nicht erstellen: ";
  
  /**
   * Fehlermeldung: Konnte Datei nicht schlie&szlig;en.
   */
  protected static String COULDNOT_CLOSE_FILE = "Konnte Datei nicht schlie\u00dfen :";
  
  /**
   * Fehlermeldung: Konnte die angegebene Datei nicht finden.
   */
  protected static String FILE_NOT_FOUND = "Konnte die angegebene Datei nicht finden.";
  
  /**
   * Fehlermeldung: Habe Zugriff eine ge&ouml;ffnete Datei verlohren.
   */
  protected static String LOST_FILE = "Habe Zugriff eine ge\u00f6ffnete Datei verlohren.";
  
  /**
   * Meldung: Datei ausgew&auml;hlt.
   */
  protected static String FILE_CHOSEN = "Datei ausgew\u00e4hlt: ";
  
  /**
   * Fehlermeldung: Gew&auml;hlte Datei kann nicht ge&ouml;ffnet werden.
   */
  protected static String CANNOT_OPEN_FILE = "Gew\u00e4hlte Datei kann nicht ge\u00f6ffnet werden: ";
  
  /**
   * Fehlermeldung: Kennwort stimmt nicht mit mit dem Schl&uuml;sselwort &uuml;berein.
   * Dieses ist durch <CODE>
   * <A HREF="../parser/ConstantsBase.html#KEY_WORD">KEY_WORD</A>
   * </CODE> definiert.
   */
  protected static String NO_KEY_WORD = "Kennwort stimmt nicht mit " + KEY_WORD + "\u00fcberein: ";
  
  /**
   * Fehlermeldung: Zeile ist zu kurz.
   */
  protected static String LINE_TO_SHORT = "Zu kurze Zeile: ";
  
  /**
   * Fehlermeldung: Unbekanntes Datenformat.
   */
  protected static String CANNOT_SPECIFY_DATA = "Unbekanntes Datenformat: ";  
  
  /**
   * Fehlermeldung: Fehlerhafte Koordinatenangaben.
   */
  protected static String WRONG_COORDINATES = "Fehlerhafte Koordinatenangaben: ";
  
  /**
   * Fehlermeldung: Konnte kein Tupel erstellen.
   * Wird ausgegeben, wenn ein eingelesenes Datentupel nicht zu einer Zeichenkette f&uuml;r
   * einer Datendatei f&uuml;r den <tt>SQL*loader</tt> zusammengef&uuml;gt werden kann.
   */
  protected static String TUPEL_ERROR = "Konnte kein Tupel erstellen. ";

  /**
   * Fehlermeldung: Konnte kein Tupel erstellen.
   * Wird ausgegeben, wenn ein eingelesenes Datentupel nicht in einer Datendatei f&uuml;r den 
   * <tt>SQL*loader</tt> eingef&uuml;gt werden kann.
   */
  protected static String COULDNOT_WRITE_TUPEL = "Konnte folgendes Tupel nicht in eine Datei eintragen: ";
  
  /**
   * Fehlermeldung: Konnte keine Kontrolldatei f&uuml;r den <tt>SQL*loader</tt> erzeugen 
   * f&uuml;r die Tabelle...
   */
  protected static String COULDNOT_CREATE_CONTROLER_FILE = "Konnte keine Kontrolldatei f\u00fcd den SQL*loader erzeugen f\u00fcr die Tabelle ";
  
  /**
   * Eingabeaufforderung: Bitte geben Sie Ihren Username f&uuml;r die Datenbank ein.
   */
  protected static String USER_NAME_PLEASE = "Bitte geben Sie Ihren Username f\u00fcr die Datenbank ein.";
  
  /**
   * Eingabeaufforderung: Bitte geben Sie Ihr Pa&szlig;wort f&uuml;r die Datenbank ein.
   */
  protected static String PASS_WORD_PLEASE = "Bitte geben Sie Ihr Pa\u00dfwort f\u00fcr die Datenbank ein.";

  /**
   * Verwaltungsnummer der Datendatei der Objekte
   */ 
  protected final static int LFP_OBJ = 0;

  /**
   * Verwaltungsnummer der Datendatei der Objektinformationen
   */ 
  protected final static int LFP_OBJ_DATA = 1;

  /**
   * Verwaltungsnummer der Datendatei der Geometrieangaben der Objektinformationen
   */ 
  protected final static int LFP_OBJ_GEO = 2;

  /**
   * Verwaltungsnummer der Datendatei der Linien
   */ 
  protected final static int LFP_LINE = 3;

  /**
   * Verwaltungsnummer der Datendatei der Linienfunktionen
   */ 
  protected final static int LFP_LINE_FUNC = 4;

  /**
   * Verwaltungsnummer der Datendatei der Lageparameter der Linien
   */ 
  protected final static int LFP_LINE_PARAM = 5;

  /**
   * Verwaltungsnummer der Datendatei der Facheparameter der Linien
   */ 
  protected final static int LFP_LINE_DATA = 6;

  /**
   * Verwaltungsnummer der Datendatei der Attribute
   */ 
  protected final static int LFP_ATT = 7;

  /**
   * Anzahl der Datendateien
   */ 
  protected final static int LOAD_FILE_COUNTER = 8;
  
  /**
   * Fehlermeldung: Verbindung mit der Datenbank nicht m&ouml;glich.
   */
  protected static String CANNOT_CONNECT = "Verbindung mit der Datenbank nicht m\u00d6glich.";
  
  /**
   * Fehlermeldung: Konnte Tabelle nicht anlegen, da keiner der Namen frei war.
   */
  protected static String COULDNOT_FIND_NAME = "Konnte Tabelle nicht anlegen, da keiner der Namen frei war.";
  
  /**
   * Fehlermeldung: Konnte Tabelle nicht l&ouml;schen.
   */
  protected static String COULDNOT_DROP = "Konnte Tabelle nicht l\u00f6schen: ";

  /**
   * der Name das Datenbanksystems
   */
  protected static String DATA_BASE = "jdbc:oracle:thin:@host:port:instance";
  
  /**
   * maximaler Index der tempor&auml;ren Tabellen
   */
  protected static int MAX_TRY_CREATE = 100;
  
  /**
   * Namen der tempor&auml;ren Tabellen
   */
  protected final static String TABLE_NAMES[] = {  "t_object",
                        "t_object_data",
                        "t_object_geo",
                        "t_line",
                        "t_line_function",
                        "t_line_param",
                        "t_line_data",
                        "t_attribute"};
  
  /**
   * Spaltennamen der tempor&auml;ren Tabellen
   */
  protected final static String COLUM[][] = {  { "ObjNo",
                        "ObjCoorX",
                        "ObjCoorY",
                        "Layer",
                        "ObjRace",
                        "Actual",
                        "ObjType",
                        "ModType",
                        "BuildDate",
                        "Differnt"},
                      { "ObjNo",
                        "ObjDataNo",
                        "InfoRace",
                        "MapType",
                        "SigNo",
                        "Text",
                        "GeoRace",
                        "ObjPartNo"},
                      { "ObjNo",
                        "ObjDataNo",
                        "ObjParaNo",
                        "CoorX",
                        "CoorY"},
                      { "LineNo",
                        "CoordX",
                        "CoordY",
                        "EndPointX",
                        "EndPointY",
                        "Geometry"},
                      { "LineNo",
                        "LineFunctionNo",
                        "Layer",
                        "LineRace",
                        "ObjNoR",
                        "ObjNoL",
                        "ObjPartNoR",
                        "ObjPartNoL",
                        "LineDifR",
                        "LineDifL"},
                      { "LineNo",
                        "LineFunctionNo",
                        "LineParamNo",
                        "Race",
                        "Type",
                        "Value"},
                      { "LineNo",
                        "LineDataNo",
                        "CoordX",
                        "CoordY"},
                      { "ObjNo",
                        "ObjPartNo",
                        "Type",
                        "Value"}};
  
  /**
   * Definitionstexte der tempor&auml;reren Tabellen
   */
  protected final static String TABLE_COLUMS[][] = {
  { "( " + COLUM[0][0] + " VARCHAR2(7) NOT NULL CONSTRAINT t_pk", "_object PRIMARY KEY,\n" +
    COLUM[0][1] + " NUMBER(9) NOT NULL,\n" +
    COLUM[0][2] + " NUMBER(9) NOT NULL,\n" +
    COLUM[0][3] + " VARCHAR2(3) NOT NULL,\n" +
    COLUM[0][4] + " VARCHAR2(4) NOT NULL,\n" +
    COLUM[0][5] + " VARCHAR2(2) NOT NULL,\n" +
    COLUM[0][6] + " VARCHAR2(1) NOT NULL,\n" +
    COLUM[0][7] + " VARCHAR2(2) NOT NULL,\n" +
    COLUM[0][8] + " VARCHAR2(6) NOT NULL,\n" +
    COLUM[0][9] + " VARCHAR2(1) NOT NULL)"},
  { "( " + COLUM[1][0] + " VARCHAR2(7) NOT NULL CONSTRAINT t_fk_", "obj_data_object REFERENCES " + TABLE_NAMES[0], "(" + COLUM[0][0] + "),\n" +
    COLUM[1][1] + " NUMBER NOT NULL,\n" +
    COLUM[1][2] + " VARCHAR(2) NOT NULL,\n" +
    COLUM[1][3] + " VARCHAR(2) NOT NULL,\n" +
    COLUM[1][4] + " VARCHAR(6) NOT NULL,\n" +
    COLUM[1][5] + " VARCHAR(33) NOT NULL,\n" +
    COLUM[1][6] + " VARCHAR(2) NOT NULL,\n" +
    COLUM[1][7] + " VARCHAR(3) NOT NULL,\n" +
    "CONSTRAINT t_pk_", "object_data PRIMARY KEY (" + COLUM[1][0] + ", " + COLUM[1][1] + ") )"},
  { "( " + COLUM[2][0] + " VARCHAR2(7) NOT NULL,\n" +
    COLUM[2][1] + " NUMBER NOT NULL,\n" +
    COLUM[2][2] + " NUMBER NOT NULL,\n" +
    COLUM[2][3] + " NUMBER(9) NOT NULL,\n" +
    COLUM[2][4] + " NUMBER(9) NOT NULL,\n" +
    "CONSTRAINT t_fk_", "obj_geo_obj_data FOREIGN KEY (" + COLUM[2][0] + ", " + COLUM[2][1] + ") REFERENCES " + TABLE_NAMES[1], "(" + COLUM[2][0] +", " + COLUM[1][1] + "),\n" +
    "CONSTRAINT t_pk_", "object_geo PRIMARY KEY (" + COLUM[2][0] + ", " + COLUM[2][1] + ", " + COLUM[2][2] +") )"},
  { "( " + COLUM[3][0] + " NUMBER NOT NULL CONSTRAINT t_pk_", "line PRIMARY KEY,\n" +
    COLUM[3][1] + " NUMBER(9) NOT NULL,\n" +
    COLUM[3][2] + " NUMBER(9) NOT NULL,\n" +
    COLUM[3][3] + " NUMBER(9) NOT NULL,\n" +
    COLUM[3][4] + " NUMBER(9) NOT NULL,\n" +
    COLUM[3][5] + " VARCHAR(2) NOT NULL)"},
  { "( " + COLUM[4][0] + " NUMBER NOT NULL CONSTRAINT t_fk_", "l_func_line_no REFERENCES " + TABLE_NAMES[3], "(" + COLUM[3][0] + "),\n" +
    COLUM[4][1] + " NUMBER NOT NULL,\n" +
    COLUM[4][2] + " VARCHAR2(3) NOT NULL,\n" +
    COLUM[4][3] + " VARCHAR2(4) NOT NULL,\n" +
    COLUM[4][4] + " VARCHAR2(7) CONSTRAINT t_fk_", "l_func_obj_no_r REFERENCES " + TABLE_NAMES[0], "(" + COLUM[0][0] + "),\n" + 
    COLUM[4][5] + " VARCHAR2(7) CONSTRAINT t_fk_", "l_func_obj_no_l REFERENCES " + TABLE_NAMES[0], "(" + COLUM[0][0] + "),\n" + 
    COLUM[4][6] + " VARCHAR2(3),\n" +
    COLUM[4][7] + " VARCHAR2(3),\n" +
    COLUM[4][8] + " VARCHAR2(1),\n" +
    COLUM[4][9] + " VARCHAR2(1),\n" +
    "CONSTRAINT t_pk_", "line_function PRIMARY KEY (" + COLUM[4][0] +", " + COLUM[4][1] + ") )"},
  { "( " + COLUM[5][0] + " NUMBER NOT NULL,\n" +
    COLUM[5][1] + " NUMBER NOT NULL,\n" +
    COLUM[5][2] + " NUMBER NOT NULL," +
    COLUM[5][3] + " VARCHAR2(1) NOT NULL,\n" +
    COLUM[5][4] + " VARCHAR2(1) NOT NULL,\n" +
    COLUM[5][5] + " VARCHAR2(7) NOT NULL,\n" +
    "CONSTRAINT t_fk_", "line_param_line_function FOREIGN KEY (" + COLUM[5][0] + ", " + COLUM[5][1] + ") REFERENCES " + TABLE_NAMES[4], "(" + COLUM[4][0] + ", " + COLUM[4][1] + "),\n" +
    "CONSTRAINT t_pk_", "line_param PRIMARY KEY (" + COLUM[5][0] + ", " + COLUM[5][1] + ", " + COLUM[5][2] + ") )"},
  { "( " + COLUM[6][0] + " NUMBER NOT NULL CONSTRAINT t_fk_", "l_data_line_no REFERENCES " + TABLE_NAMES[3], "(" + COLUM[4][0] + "),\n" +
    COLUM[6][1] + " NUMBER NOT NULL,\n" +
    COLUM[6][2] + " NUMBER(9) NOT NULL,\n" +
    COLUM[6][3] + " NUMBER(9) NOT NULL,\n" +
    "CONSTRAINT t_pk_", "line_data PRIMARY KEY (" + COLUM[6][0] + ", " + COLUM[6][1] + ") )"},
  { "( " + COLUM[7][0] + " VARCHAR2(7) NOT NULL CONSTRAINT t_fk_", "attribute_object REFERENCES "+ TABLE_NAMES[0], "(" + COLUM[0][0] + "),\n" +
    COLUM[7][1] + " VARCHAR2(3) NOT NULL,\n" +
    COLUM[7][2] + " VARCHAR2(4) NOT NULL,\n" +
    COLUM[7][3] + " VARCHAR2(7) NOT NULL,\n" +
    "CONSTRAINT t_pk_", "attribute", " PRIMARY KEY (" + COLUM[7][0] + ", " + COLUM[7][1] + ", " + COLUM[7][2] + ") )"}};

  /**
   * Anzahl der tempor&auml;ren Tabellen
   */
  protected final static int TEMP_TABLE_COUNT = TABLE_NAMES.length < TABLE_COLUMS.length ? TABLE_NAMES.length : TABLE_COLUMS.length;

  
  /**
   * Fehlermeldung: Konnte tempor&auml;re Tabellen nicht erstellen.
   */
  protected static String COULDNOT_CREATE_TEMP_TABLES = "Konnte tempor\u00e4re Tabellen nicht erstellen.";

  /**
   * Texte f&uuml;r die Kontrolldateien des <tt>SQL*loaders</tt>
   */
  protected final static String CONTROL_FILE_STRINGS[] = {"load data\ninfile ", "'", "\ninto table ", "\nfields terminated by ", "\n(", ")\n"};

  /**
   * maximaler Index der Kontrolldateinamen des <tt>SQL*loaders</tt>
   */
  protected static int MAX_CONTROL_FILE_COUNT = 100;

  /**
   * Dateinamenendung der Kontrolldateinamen des <tt>SQL*loaders</tt>
   */
  protected static String CONTROL_FILE_NAME_ENDING = ".control";

  /**
   * Beginn einer <tt>SQL*loaders</tt>-Anweisung
   */
  protected final static String LOADER_INSTRUCTION_BEGIN = "sqlldr USERID=";

  /**
   * Schl&uuml;sselw&ouml;rter der Dateien, die der <tt>SQL*loaders</tt> benutzt.
   */
  protected final static String LOADER_FILE_TAGS[] = {" CONTROL=", " DATA=", " LOG=", " BAD="};

  /**
   * Ende einer <tt>SQL*loaders</tt>-Anweisung
   */
  protected final static String LOADER_INSTRUCTION_END = LOG ? " ERRORS=999" : " ERRORS=999 SILENT=HEADER,FEEDBACK";

  /**
   * Dateinamenendung der Fehlerdatei des <tt>SQL*loaders</tt>
   */
  protected static String BAD_FILE_ENDING = ".bad";

  /**
   * Dateinamenendung der Log-Datei des <tt>SQL*loaders</tt>
   */
  protected static String LOG_FILE_ENDING = ".log";

  /**
   * Trennzeichen zwischen Benutzername dessen Pa&szlig;wort beim Aufruf des
   * <tt>SQL*loaders</tt>
   */
  protected final static String LOADER_USER_PASS = "/";

  
  /**
   * Fehlermeldung: Keine Spaltennamen angegeben f&uuml;r eine Tabelle.
   */
  protected static String NO_COLUMS = "Keine Spaltennamen angegeben f\u00fc die Tabelle ";

  /**
   * Dateiname der debug-Datei
   */
  protected static String DEBUG_FILE_NAME = "debug";
	
	/**
	 * 
	 */
	protected static String SQL_FILE[] = {"set serveroutput on size 1000000;\nset linesize 100;\nset pagesize 70;\nexecute fad.create_db('", 
																				"');\nquit\n"};
	
	/**
	 * Dateiname der erzeugten Datei f&uuml;r <tt>sqlplus</tt>, die aufgerufen wird
	 * um aus der tempor"aren Datenbank die Zieldatenbank zu erstellen.
	 */
	protected static String SQL_FILE_NAME = "make_db.sql";
	
	/**
	 * Fehlermeldung, die ausgegeben wird, wenn die Datei f&uuml;r <tt>sqlplus</tt>
	 * nicht erstellt werden kann.
	 */
	protected static String COULDNOT_CREATE_SQL_FILE = "Konnte keine SQL-Datei erstellen.";
	
	/**
	 * Zeichenketten zum Starten von <tt>sqlplus</tt>
	 */
	protected static String SQL_INSTRUCTION[] = {"sqlplus ", "/", " @", "; "};

	/**
	 * Befehl zum Starten einer ausf&uuml;hrbaren Datei
	 */
	protected static String START_FILE = "xterm -e sh -c ";

	/**
	 * Befehl, um eine Datei als ausf"uhrbar zu kennzeichnen.
	 */
	protected static String	MAKE_EXECUTABLE = "chmod u+x ";

	/**
	 * Zeichenketten zum Befehl zum L&ouml;schen der <tt>SQL*loader</tt>-Dateien
	 */
	protected static String RM_INSTRUCTION[] = {"rm *", " *", " -f;"};
	
	/**
	 * Endung der Dateinamen, die vom Dateifilter akzeptiert werden
	 */
	protected static String EDBS_FILE_NAME_ENDING = ".EBS";
}
