001: /*
002: * $Header: /cvsroot/webman-cms/source/webman/com/teamkonzept/field/TKTableShowIterator.java,v 1.8 2001/02/11 14:48:15 alex Exp $
003: *
004: */
005: /**
006: * Die Zellen einer Tabelle beinhalten jeweils das gleiche BaseField.
007: * Dies gilt auch fuer die Zusatz-Zeile/Spalte.
008: *
009: * Folgende Moeglichkeiten bestehen:
010: * 1. Anlegen von Tabellen variabler Groesse
011: * 2. Anlegen von einer Zeile/Spalte, die Zusatzinformationen enthalten
012: * 3. Auswahl der Inhalte (Fields) der Zellen
013: * 4. Auswahl der Inhalte (Fields) der Zusatzz-Zeilen/Spalten
014: * 5. Anzeigen der Tabelle
015: * 6. Das modifizieren der Tabelle selbst
016: * - Loeschen von Zeilen/Spalten
017: * - Einfuegen von Zeilen/Spalten
018: * - Vertauschen von Zeilen/Spalten
019: * 7. Speichern aller Daten in die Datenbank
020: * 8. Speichern aller Strukturinformationen in die Datenbank
021: *
022: * Um Verwechselungen zu vermeiden:
023: *
024: * --------------------------------
025: * | Col-Zusatz-Vektor |
026: * --------------------------------
027: * ------
028: * | Row- |
029: * | zu- |
030: * | satz | TABELLE
031: * | vek- |
032: * | tor |
033: * | |
034: * ------
035: */package com.teamkonzept.field;
036:
037: import com.teamkonzept.lib.*;
038: import com.teamkonzept.web.*;
039:
040: public class TKTableShowIterator implements TKListIterator {
041:
042: TKListIterator oldIterator;
043: String outerList;
044: String innerList;
045: TKFieldTableRealData dataClass;
046: String tableScope;
047: String scope;
048: String fieldTableName;
049: //int outerIndex;
050: String fieldType;
051: TKBaseField rowField;
052: TKBaseField colField;
053: TKBaseField contentField;
054: String listRowForInfo;
055:
056: public TKTableShowIterator(TKFieldTableRealData dataClass,
057: TKBaseField contentField, TKBaseField rowField,
058: TKBaseField colField, String scope, String fieldTableName,
059: TKListIterator oldIterator, String outerList,
060: String innerList, String listRowForInfo) {
061: this .oldIterator = oldIterator;
062: this .outerList = outerList;
063: this .innerList = innerList;
064: this .dataClass = dataClass;
065: this .fieldType = fieldType;
066: this .rowField = rowField;
067: this .colField = colField;
068: this .contentField = contentField;
069: this .listRowForInfo = listRowForInfo;
070: //this.outerIndex = 0;
071: this .fieldTableName = fieldTableName;
072: this .scope = scope;
073: this .tableScope = scope + "." + fieldTableName;
074:
075: }
076:
077: /**
078: * ODD: gibt an, ob der aktuelle Index gerade oder ungerade ist.
079: * Hiermit besteht die Moeglichkeit (z.B.) Jede 2. Zeile/Spalte
080: * anders zu colorieren
081: */
082: public static final void enterCounter(TKHTMLTemplate t, int idx,
083: String scope, String kind) {
084: t.set(scope + "." + kind + "IDX", String.valueOf(idx + 1));
085: if (idx % 2 == 1)
086: t.set(scope + ".ODD" + kind, Boolean.TRUE);
087: }
088:
089: public static final void enterEntry(TKHTMLTemplate t, int idx,
090: Object data, TKBaseField showField, String scope,
091: String kind) {
092: enterCounter(t, idx, scope, kind);
093: showField.fillIntoPresentation(t, data, scope);
094: }
095:
096: public boolean apply(TKTemplate t, int i, String currListName) {
097: TKHTMLTemplate template = (TKHTMLTemplate) t;
098: TKVector dataVector = (TKVector) dataClass.contentData;
099: //---- Row mit den Infos ----//
100: if (currListName.equalsIgnoreCase(tableScope + "."
101: + listRowForInfo)) {
102: TKVector colDataVector = dataClass.colData;
103: if ((colDataVector == null) || (i >= colDataVector.size()))
104: return false;
105:
106: template.set("SCOPE", tableScope);
107: enterEntry(template, i, colDataVector.elementAt(i),
108: colField, tableScope + ".COLS", "COL");
109: return true;
110: }
111: //---- aeussere liste ----//
112: if (currListName.equalsIgnoreCase(tableScope + "." + outerList)) {
113: if ((dataVector == null) || (i >= dataVector.size()))
114: return false;
115: //outerIndex = i;
116: template
117: .setEnumerationContext(currListName, new Integer(i));
118: template.set("SCOPE", tableScope);
119: enterCounter(template, i, tableScope, "ROW");
120:
121: //---- Zusatz Row ----//
122: TKVector rowDataVector = dataClass.rowData;
123: if ((rowDataVector != null) && (rowDataVector.size() > 0)) {
124: enterEntry(template, i, rowDataVector.elementAt(i),
125: rowField, tableScope + ".ROWS", "ROW");
126: }
127: return true;
128: }
129: //---- innere liste ----//
130: else if (currListName.equalsIgnoreCase(tableScope + "."
131: + innerList)) {
132: if (dataVector == null)
133: return false;
134:
135: int outerIndex = ((Integer) template
136: .getEnumerationContext(tableScope + "." + outerList))
137: .intValue();
138: TKVector dataRow = (TKVector) dataVector.get(outerIndex);
139: if (i >= dataRow.size())
140: return false;
141:
142: enterEntry(template, i, dataRow.get(i), contentField,
143: tableScope, "COL");
144:
145: //---- Zusatz Row ----//
146: TKVector colDataVector = dataClass.colData;
147: if ((colDataVector != null)) {
148: enterEntry(template, i, colDataVector.elementAt(i),
149: colField, tableScope + ".COLS", "COL");
150: }
151:
152: return true;
153: } else if (oldIterator != null) {
154: return oldIterator.apply(template, i, currListName);
155: } else {
156: return false;
157: }
158: }
159: }//end class
|