1 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 42 public final class InfoGeneral extends Info 43 { 44 56 protected InfoGeneral (Frame frame, boolean modal, int WindowNo, String value, 57 String tableName, String keyColumn, 58 boolean multiSelection, String 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 statInit(); 65 p_loadedOK = initInfo (); 66 int no = p_table.getRowCount(); 68 setStatusLine(Integer.toString(no) + " " + Msg.getMsg(Env.getCtx(), "SearchRows_EnterQuery"), false); 69 setStatusDB(Integer.toString(no)); 70 textField1.setValue(value); 72 textField1.requestFocus(); 73 } 75 76 private Info_Column[] m_generalLayout; 77 78 private ArrayList m_queryColumns = new ArrayList(); 79 80 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 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 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 parameterPanel.add(textField1, new ALayoutConstraint(1,0)); 119 parameterPanel.add(textField2, null); 120 parameterPanel.add(textField3, null); 121 parameterPanel.add(textField4, null); 122 } 124 128 private boolean initInfo () 129 { 130 if (!initInfoTable()) 131 return false; 132 133 StringBuffer where = new StringBuffer ("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 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 } 178 179 185 private boolean initInfoTable () 186 { 187 String 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" + " AND t.TableName=? " 192 + "ORDER BY c.IsIdentifier DESC, c.SeqNo"; 193 194 int AD_Table_ID = 0; 195 String 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 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 while (m_queryColumns.size() > 4) 228 m_queryColumns.remove(m_queryColumns.size()-1); 229 String title = Msg.translate(Env.getCtx(), tableName + "_ID"); if (title.endsWith("_ID")) 232 title = Msg.translate(Env.getCtx(), tableName); setTitle(getTitle() + " " + title); 234 235 236 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 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 StringBuffer colSql = new StringBuffer (columnName); 259 Class colClass = null; 260 if (isKey) 262 colClass = IDColumn.class; 263 else if (!isDisplayed) 264 ; 265 else if (displayType == DisplayType.YesNo) 266 colClass = Boolean .class; 267 else if (displayType == DisplayType.Amount) 268 colClass = BigDecimal.class; 269 else if (displayType == DisplayType.Number || displayType == DisplayType.Quantity) 270 colClass = Double .class; 271 else if (displayType == DisplayType.Integer) 272 colClass = Integer .class; 273 else if (displayType == DisplayType.String || displayType == DisplayType.Text || displayType == DisplayType.Memo) 274 colClass = String .class; 275 else if (DisplayType.isDate(displayType)) 276 colClass = Timestamp.class; 277 else if (displayType == DisplayType.List) 282 { 283 if (Env.isBaseLanguage(Env.getCtx(), "AD_Ref_List")) 284 colSql = new StringBuffer ("(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 ("(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 .class; 294 } 295 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 m_generalLayout = new Info_Column[list.size()]; 324 list.toArray(m_generalLayout); 325 return true; 326 } 328 329 330 331 337 String getSQLWhere() 338 { 339 StringBuffer sql = new StringBuffer (); 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 } 347 353 private void addSQLWhere(StringBuffer sql, int index, String 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 } 366 372 void setParameters(PreparedStatement pstmt) throws SQLException 373 { 374 int index = 1; 375 } 377 } | Popular Tags |