001: package de.webman.form.db.queries;
002:
003: import java.sql.Connection;
004: import java.sql.SQLException;
005: import java.util.Enumeration;
006: import com.teamkonzept.db.TKPrepQuery;
007: import com.teamkonzept.lib.TKHashtable;
008: import de.webman.form.db.FieldConstants;
009: import de.webman.form.db.FormConstants;
010:
011: /**
012: * Searches form definitions by their attributes in the database.
013: * This query is generic, i.e. the SQL statement is constructed at
014: * runtime depending on the parameters set. There has to be at least
015: * one parameter in order to generate a valid query.
016: * <TABLE>
017: * <TR>
018: * <TD><B>Order</B></TD>
019: * <TD><B>Name</B></TD>
020: * <TD><B>Type</B></TD>
021: * </TR>
022: * <TR>
023: * <TD COLSPAN="3"><I>Parameters</I></TD>
024: * </TR>
025: * <TR>
026: * <TD><TT>1</TT></TD>
027: * <TD><TT>de.webman.form.db.FormConstants.FORM_ID</TT></TD>
028: * <TD><TT>java.lang.Integer</TT></TD>
029: * </TR>
030: * <TR>
031: * <TD><TT>2</TT></TD>
032: * <TD><TT>de.webman.form.db.FormConstants.FORM_TYPE</TT></TD>
033: * <TD><TT>java.lang.Integer</TT></TD>
034: * </TR>
035: * <TR>
036: * <TD><TT>3</TT></TD>
037: * <TD><TT>de.webman.form.db.FieldConstants.FIELD_NAME</TT> or
038: * <TT>de.webman.form.db.FormConstants.FORM_NAME</TT></TD>
039: * <TD><TT>java.lang.String</TT></TD>
040: * </TR>
041: * <TR>
042: * <TD><TT>4</TT></TD>
043: * <TD><TT>de.webman.form.db.FieldConstants.FIELD_SHOW_NAME</TT> or
044: * <TT>de.webman.form.db.FormConstants.FORM_DESCRIPTION</TT></TD>
045: * <TD><TT>java.lang.String</TT></TD>
046: * </TR>
047: * <TR>
048: * <TD COLSPAN="3"><I>Results</I></TD>
049: * </TR>
050: * <TR>
051: * <TD><TT>1</TT></TD>
052: * <TD><TT>de.webman.form.db.FormConstants.FORM_ID</TT></TD>
053: * <TD><TT>java.lang.Integer</TT></TD>
054: * </TR>
055: * </TABLE>
056: *
057: * @author $Author: uli $
058: * @version $Revision: 1.3 $
059: */
060: public class FormExists extends TKPrepQuery {
061:
062: // Constants.
063:
064: /**
065: * The preparation state.
066: */
067: private final static boolean IS_PREPARED = true;
068:
069: /**
070: * The relevance state.
071: */
072: private final static boolean[] SET_RELEVANTS = { true };
073:
074: // Implementation of 'com.teamkonzept.db.TKQuery'
075:
076: /**
077: * Initializes the query with the given connection.
078: *
079: * @param connection the connection.
080: */
081: public final void initQuery(Connection connection) {
082: super .initQuery(connection, IS_PREPARED, null, null,
083: SET_RELEVANTS, null);
084: }
085:
086: /**
087: * Executes the query.
088: *
089: * @return <CODE>true</CODE>, if the query has been executed
090: * successfully, otherwise <CODE>false</CODE>.
091: * @throws SQLException if any error occurred during query execution.
092: */
093: public final boolean execute() throws SQLException {
094: // Initialize parameter order array.
095: String[] order = new String[super .queryParams.size()];
096:
097: // Initialize parameter types hash.
098: TKHashtable types = new TKHashtable();
099:
100: // Initialize SQL buffer.
101: StringBuffer sql = new StringBuffer(
102: "SELECT FO.FORM_ID FROM FORM FO, FIELD FI WHERE ");
103:
104: // Initialize parameter order index.
105: int index = 0;
106:
107: // Get parameter names.
108: Enumeration keys = super .queryParams.keys();
109:
110: while (keys.hasMoreElements()) {
111: // Build SQL.
112: if (index > 0) {
113: sql.append("AND ");
114: }
115:
116: // Get parameter name.
117: String parameter = keys.nextElement().toString();
118:
119: // Build parameter order and increment index.
120: order[index++] = parameter;
121:
122: if (FormConstants.COLUMN_NAMES[FormConstants.FORM_ID]
123: .equals(parameter)) {
124: // Build parameter type.
125: types
126: .put(
127: parameter,
128: FormConstants.COLUMN_TYPES[FormConstants.FORM_ID]);
129:
130: // Build SQL.
131: sql.append("FO.FORM_ID != ? ");
132:
133: // Proceed.
134: continue;
135: }
136:
137: if (FormConstants.COLUMN_NAMES[FormConstants.FORM_TYPE]
138: .equals(parameter)) {
139: // Build parameter type.
140: types
141: .put(
142: parameter,
143: FormConstants.COLUMN_TYPES[FormConstants.FORM_TYPE]);
144:
145: // Build SQL.
146: sql.append("FO.FORM_TYPE = ? ");
147:
148: // Proceed.
149: continue;
150: }
151:
152: if (FieldConstants.COLUMN_NAMES[FieldConstants.FIELD_NAME]
153: .equals(parameter)
154: || FormConstants.COLUMN_NAMES[FormConstants.FORM_NAME]
155: .equals(parameter)) {
156: // Build parameter type.
157: types
158: .put(
159: parameter,
160: FieldConstants.COLUMN_TYPES[FieldConstants.FIELD_NAME]);
161:
162: // Build SQL.
163: sql.append("FI.FIELD_NAME = ? ");
164:
165: // Proceed.
166: continue;
167: }
168:
169: if (FieldConstants.COLUMN_NAMES[FieldConstants.FIELD_SHOW_NAME]
170: .equals(parameter)
171: || FormConstants.COLUMN_NAMES[FormConstants.FORM_DESCRIPTION]
172: .equals(parameter)) {
173: // Build parameter type.
174: types
175: .put(
176: parameter,
177: FieldConstants.COLUMN_TYPES[FieldConstants.FIELD_SHOW_NAME]);
178:
179: // Build SQL.
180: sql.append("FI.FIELD_SHOW_NAME = ? ");
181:
182: // Proceed.
183: continue;
184: }
185: }
186:
187: // Build SQL.
188: sql
189: .append("AND FO.FORM_TYPE != 42 AND FO.FORM_ID = FI.FORM_ID AND FI.FIELD_ID = 0");
190:
191: // Set parameter order.
192: super .paramOrder = order;
193:
194: // Set parameter types.
195: super .paramTypes = types;
196:
197: // Set SQL string.
198: super .sqlString = sql.toString();
199:
200: // Set JDBC statement.
201: super.stmt = super.conn.prepareStatement(super.sqlString);
202:
203: return super.execute();
204: }
205:
206: }
|