KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > compiere > apps > search > InfoGeneral


1 /******************************************************************************
2  * The contents of this file are subject to the Compiere License Version 1.1
3  * ("License"); You may not use this file except in compliance with the License
4  * You may obtain a copy of the License at http://www.compiere.org/license.html
5  * Software distributed under the License is distributed on an "AS IS" basis,
6  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
7  * the specific language governing rights and limitations under the License.
8  * The Original Code is Compiere ERP & CRM Business Solution
9  * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
10  * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
11  * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
12  * Contributor(s): ______________________________________.
13  *****************************************************************************/

14 package org.compiere.apps.search;
15
16 import java.awt.*;
17 import java.awt.event.*;
18
19 import javax.swing.*;
20 import javax.swing.event.*;
21 import javax.swing.table.*;
22
23 import java.sql.*;
24 import java.text.*;
25 import java.util.*;
26 import java.math.*;
27
28 import org.compiere.apps.*;
29 import org.compiere.grid.ed.*;
30 import org.compiere.minigrid.*;
31 import org.compiere.util.*;
32 import org.compiere.model.*;
33 import org.compiere.plaf.*;
34 import org.compiere.swing.*;
35
36 /**
37  * Generic Table Search
38  *
39  * @author Jorg Janke
40  * @version $Id: InfoGeneral.java,v 1.16 2003/11/06 07:08:28 jjanke Exp $
41  */

42 public final class InfoGeneral extends Info
43 {
44     /**
45      * Detail Protected Constructor.
46      *
47      * @param frame parent
48      * @param modal modal
49      * @param WindowNo window no
50      * @param value QueryValue
51      * @param tableName table name
52      * @param keyColumn key column
53      * @param multiSelection multiple selections
54      * @param whereClause where clause
55      */

56     protected InfoGeneral (Frame frame, boolean modal, int WindowNo, String JavaDoc value,
57         String JavaDoc tableName, String JavaDoc keyColumn,
58         boolean multiSelection, String JavaDoc whereClause)
59     {
60         super (frame, modal, WindowNo, tableName, keyColumn, multiSelection, whereClause);
61         Log.trace(Log.l1_User, "InfoGeneral", tableName + " - " + keyColumn + " - " + whereClause);
62         setTitle(Msg.getMsg(Env.getCtx(), "Info"));
63         //
64
statInit();
65         p_loadedOK = initInfo ();
66         //
67
int no = p_table.getRowCount();
68         setStatusLine(Integer.toString(no) + " " + Msg.getMsg(Env.getCtx(), "SearchRows_EnterQuery"), false);
69         setStatusDB(Integer.toString(no));
70         // Focus
71
textField1.setValue(value);
72         textField1.requestFocus();
73     } // InfoGeneral
74

75     /** String Array of Column Info */
76     private Info_Column[] m_generalLayout;
77     /** list of query columns */
78     private ArrayList m_queryColumns = new ArrayList();
79
80     // Static data
81
private CLabel label1 = new CLabel();
82     private CTextField textField1 = new CTextField(10);
83     private CLabel label2 = new CLabel();
84     private CTextField textField2 = new CTextField(10);
85     private CLabel label3 = new CLabel();
86     private CTextField textField3 = new CTextField(10);
87     private CLabel label4 = new CLabel();
88     private CTextField textField4 = new CTextField(10);
89
90     /**
91      * Static Setup - add fields to parameterPanel (GridLayout)
92      */

93     private void statInit()
94     {
95         label1.setLabelFor(textField1);
96         label1.setText("Label1");
97         label1.setHorizontalAlignment(JLabel.LEADING);
98         textField1.setBackground(CompierePLAF.getInfoBackground());
99         label2.setLabelFor(textField2);
100         label2.setText("Label2");
101         label2.setHorizontalAlignment(JLabel.LEADING);
102         textField2.setBackground(CompierePLAF.getInfoBackground());
103         label3.setLabelFor(textField3);
104         label3.setText("Label3");
105         label3.setHorizontalAlignment(JLabel.LEADING);
106         textField3.setBackground(CompierePLAF.getInfoBackground());
107         label4.setLabelFor(textField4);
108         label4.setText("Label4");
109         label4.setHorizontalAlignment(JLabel.LEADING);
110         textField4.setBackground(CompierePLAF.getInfoBackground());
111         //
112
parameterPanel.setLayout(new ALayout());
113         parameterPanel.add(label1, new ALayoutConstraint(0,0));
114         parameterPanel.add(label2, null);
115         parameterPanel.add(label3, null);
116         parameterPanel.add(label4, null);
117         //
118
parameterPanel.add(textField1, new ALayoutConstraint(1,0));
119         parameterPanel.add(textField2, null);
120         parameterPanel.add(textField3, null);
121         parameterPanel.add(textField4, null);
122     } // statInit
123

124     /**
125      * General Init
126      * @return true, if success
127      */

128     private boolean initInfo ()
129     {
130         if (!initInfoTable())
131             return false;
132
133         // prepare table
134
StringBuffer JavaDoc where = new StringBuffer JavaDoc("IsActive='Y'");
135         if (p_whereClause.length() > 0)
136             where.append(" AND ").append(p_whereClause);
137         prepareTable(m_generalLayout,
138             p_tableName,
139             where.toString(),
140             "2");
141
142         // Set & enable Fields
143
label1.setText(Msg.translate(Env.getCtx(), m_queryColumns.get(0).toString()));
144         textField1.addActionListener(this);
145         if (m_queryColumns.size() > 1)
146         {
147             label2.setText(Msg.translate(Env.getCtx(), m_queryColumns.get(1).toString()));
148             textField2.addActionListener(this);
149         }
150         else
151         {
152             label2.setVisible(false);
153             textField2.setVisible(false);
154         }
155         if (m_queryColumns.size() > 2)
156         {
157             label3.setText(Msg.translate(Env.getCtx(), m_queryColumns.get(2).toString()));
158             textField3.addActionListener(this);
159         }
160         else
161         {
162             label3.setVisible(false);
163             textField3.setVisible(false);
164         }
165         if (m_queryColumns.size() > 3)
166         {
167             label4.setText(Msg.translate(Env.getCtx(), m_queryColumns.get(3).toString()));
168             textField4.addActionListener(this);
169         }
170         else
171         {
172             label4.setVisible(false);
173             textField4.setVisible(false);
174         }
175         return true;
176     } // initInfo
177

178
179     /**
180      * Init info with Table.
181      * - find QueryColumns (Value, Name, ..)
182      * - build gridController & columsn
183      * @return true if success
184      */

185     private boolean initInfoTable ()
186     {
187         // Get Query Columns -------------------------------------------------
188
String JavaDoc sql = "SELECT c.ColumnName, t.AD_Table_ID, t.TableName "
189             + "FROM AD_Table t, AD_Column c "
190             + "WHERE t.AD_Table_ID=c.AD_Table_ID AND AD_Reference_ID=10" // String
191
+ " AND t.TableName=? "
192             + "ORDER BY c.IsIdentifier DESC, c.SeqNo";
193
194         int AD_Table_ID = 0;
195         String JavaDoc tableName = null;
196         try
197         {
198             PreparedStatement pstmt = DB.prepareStatement(sql);
199             pstmt.setString(1, p_tableName);
200             ResultSet rs = pstmt.executeQuery();
201             while (rs.next())
202             {
203                 m_queryColumns.add(rs.getString(1));
204                 if (AD_Table_ID == 0)
205                 {
206                     AD_Table_ID = rs.getInt(2);
207                     tableName = rs.getString(3);
208                 }
209             }
210             rs.close();
211             pstmt.close();
212         }
213         catch (SQLException e)
214         {
215             Log.error("InfoGeneral.initInfoTable 1", e);
216             return false;
217         }
218         // Miminum check
219
if (m_queryColumns.size() == 0)
220         {
221             Log.error("InfoGeneral.initInfoTable - no query columns found");
222             return false;
223         }
224         Log.trace(8, "InfoGeneral.initInfoTable", "Table ID=" + AD_Table_ID + " " + tableName
225             + ", QueryColumns #" + m_queryColumns.size());
226         // Only 4 Query Columns
227
while (m_queryColumns.size() > 4)
228             m_queryColumns.remove(m_queryColumns.size()-1);
229         // Set Title
230
String JavaDoc title = Msg.translate(Env.getCtx(), tableName + "_ID"); // best bet
231
if (title.endsWith("_ID"))
232             title = Msg.translate(Env.getCtx(), tableName); // second best bet
233
setTitle(getTitle() + " " + title);
234
235
236         // Get Display Columns -----------------------------------------------
237
ArrayList list = new ArrayList();
238         sql = "SELECT c.ColumnName, c.AD_Reference_ID, c.IsKey, f.IsDisplayed, c.AD_Reference_Value_ID "
239             + "FROM AD_Column c"
240             + " INNER JOIN AD_Table t ON (c.AD_Table_ID=t.AD_Table_ID)"
241             + " INNER JOIN AD_Tab tab ON (t.AD_Window_ID=tab.AD_Window_ID)"
242             + " INNER JOIN AD_Field f ON (tab.AD_Tab_ID=f.AD_Tab_ID AND f.AD_Column_ID=c.AD_Column_ID) "
243             + "WHERE t.AD_Table_ID=? "
244             + "ORDER BY c.IsKey DESC, f.SeqNo";
245         try
246         {
247             PreparedStatement pstmt = DB.prepareStatement(sql);
248             pstmt.setInt(1, AD_Table_ID);
249             ResultSet rs = pstmt.executeQuery();
250             while (rs.next())
251             {
252                 String JavaDoc columnName = rs.getString(1);
253                 int displayType = rs.getInt(2);
254                 boolean isKey = rs.getString(3).equals("Y");
255                 boolean isDisplayed = rs.getString(4).equals("Y");
256                 int AD_Reference_Value_ID = rs.getInt(5);
257                 // Default
258
StringBuffer JavaDoc colSql = new StringBuffer JavaDoc(columnName);
259                 Class JavaDoc colClass = null;
260                 //
261
if (isKey)
262                     colClass = IDColumn.class;
263                 else if (!isDisplayed)
264                     ;
265                 else if (displayType == DisplayType.YesNo)
266                     colClass = Boolean JavaDoc.class;
267                 else if (displayType == DisplayType.Amount)
268                     colClass = BigDecimal.class;
269                 else if (displayType == DisplayType.Number || displayType == DisplayType.Quantity)
270                     colClass = Double JavaDoc.class;
271                 else if (displayType == DisplayType.Integer)
272                     colClass = Integer JavaDoc.class;
273                 else if (displayType == DisplayType.String || displayType == DisplayType.Text || displayType == DisplayType.Memo)
274                     colClass = String JavaDoc.class;
275                 else if (DisplayType.isDate(displayType))
276                     colClass = Timestamp.class;
277                 // ignore Binary, Button, ID, RowID
278
// else if (displayType == DisplayType.Account)
279
// else if (displayType == DisplayType.Location)
280
// else if (displayType == DisplayType.Locator)
281
else if (displayType == DisplayType.List)
282                 {
283                     if (Env.isBaseLanguage(Env.getCtx(), "AD_Ref_List"))
284                         colSql = new StringBuffer JavaDoc("(SELECT l.Name FROM AD_Ref_List l WHERE l.AD_Reference_ID=")
285                             .append(AD_Reference_Value_ID).append(" AND l.Value=").append(columnName)
286                             .append(") AS ").append(columnName);
287                     else
288                         colSql = new StringBuffer JavaDoc("(SELECT t.Name FROM AD_Ref_List l, AD_Ref_List_Trl t "
289                             + "WHERE l.AD_Ref_List_ID=t.AD_Ref_List_ID AND l.AD_Reference_ID=")
290                             .append(AD_Reference_Value_ID).append(" AND l.Value=").append(columnName)
291                             .append(" AND t.AD_Language='").append(Env.getAD_Language(Env.getCtx()))
292                             .append("') AS ").append(columnName);
293                     colClass = String JavaDoc.class;
294                 }
295             // else if (displayType == DisplayType.Table)
296
// else if (displayType == DisplayType.TableDir || displayType == DisplayType.Search)
297

298                 if (colClass != null)
299                 {
300                     list.add(new Info_Column(Msg.translate(Env.getCtx(), columnName), colSql.toString(), colClass));
301                     Log.trace(8, "InfoGeneral.initInfoTable", "Added Column=" + columnName);
302                 }
303                 else
304                     Log.trace(8, "InfoGeneral.initInfoTable", "Not Added Column=" + columnName);
305             }
306             rs.close();
307             pstmt.close();
308         }
309         catch (SQLException e)
310         {
311             Log.error("InfoGeneral.initInfoTable 2", e);
312             return false;
313         }
314         if (list.size() == 0)
315         {
316             ADialog.error(p_WindowNo, this, "Error", "No Info Columns");
317             Log.error("InfoGeneral.initInfoTable - No Info for AD_Table_ID=" + AD_Table_ID + " - " + sql);
318             return false;
319         }
320         Log.trace(8, "InfoGeneral.initInfoTable", "InfoColumns #" + list.size());
321
322         // Convert ArrayList to Array
323
m_generalLayout = new Info_Column[list.size()];
324         list.toArray(m_generalLayout);
325         return true;
326     } // initInfoTable
327

328
329     /*************************************************************************/
330
331     /**
332      * Construct SQL Where Clause and define parameters.
333      * (setParameters needs to set parameters)
334      * Includes first AND
335      * @return where clause
336      */

337     String JavaDoc getSQLWhere()
338     {
339         StringBuffer JavaDoc sql = new StringBuffer JavaDoc();
340         addSQLWhere (sql, 0, textField1.getText().toUpperCase());
341         addSQLWhere (sql, 1, textField2.getText().toUpperCase());
342         addSQLWhere (sql, 2, textField3.getText().toUpperCase());
343         addSQLWhere (sql, 3, textField4.getText().toUpperCase());
344         return sql.toString();
345     } // getSQLWhere
346

347     /**
348      * Add directly Query as Strings
349      * @param sql sql buffer
350      * @param index index
351      * @param value value
352      */

353     private void addSQLWhere(StringBuffer JavaDoc sql, int index, String JavaDoc value)
354     {
355         if (!(value.equals("") || value.equals("%")) && index < m_queryColumns.size())
356         {
357             sql.append(" AND UPPER(").append(m_queryColumns.get(index).toString()).append(") LIKE '");
358             sql.append(value);
359             if (value.endsWith("%"))
360                 sql.append("'");
361             else
362                 sql.append("%'");
363         }
364     } // addSQLWhere
365

366     /**
367      * Set Parameters for Query.
368      * (as defined in getSQLWhere)
369      * @param pstmt statement
370      * @throws SQLException
371      */

372     void setParameters(PreparedStatement pstmt) throws SQLException
373     {
374         int index = 1;
375     } // setParameters
376

377 } // InfoGeneral
378
Popular Tags