📄 find.java
字号:
m_targetFields = null;
//
removeAll();
super.dispose();
} // dispose
/*************************************************************************/
/**
* Action Listener
* @param e ActionEvent
*/
public void actionPerformed (ActionEvent e)
{
Log.trace(Log.l1_User, "Find.actionPerformed", e.getActionCommand());
//
if (e.getActionCommand() == ConfirmPanel.A_CANCEL)
cmd_cancel();
else if (e.getActionCommand() == ConfirmPanel.A_REFRESH)
cmd_refresh();
//
else if (e.getSource() == bIgnore)
cmd_ignore();
else if (e.getSource() == bNew)
cmd_new();
else if (e.getSource() == bSave)
cmd_save();
else if (e.getSource() == bDelete)
cmd_delete();
//
else // ConfirmPanel.A_OK and enter in fields
{
if (e.getSource() == confirmPanelA.getOKButton())
cmd_ok_Advanced();
else
cmd_ok_Simple();
}
} // actionPerformed
/**
* Change Listener (tab change)
* @param e ChangeEbent
*/
public void stateChanged(ChangeEvent e)
{
Log.trace(Log.l1_User, "Find.stateChanged");
if (tabbedPane.getSelectedIndex() == 0)
this.getRootPane().setDefaultButton(confirmPanelS.getOKButton());
else
{
initFindAdvanced();
this.getRootPane().setDefaultButton(confirmPanelA.getOKButton());
}
} // stateChanged
/**
* Simple OK Button pressed
*/
private void cmd_ok_Simple()
{
// Create Query String
m_query = new MQuery(m_targetTab.getTableName());
if (hasValue && !valueField.getText().equals("%") && valueField.getText().length() != 0)
{
String value = valueField.getText().toUpperCase();
if (!value.endsWith("%"))
value += "%";
m_query.addRestriction("UPPER(Value)", MQuery.LIKE, value, valueLabel.getText(), value);
}
//
if (hasDocNo && !docNoField.getText().equals("%") && docNoField.getText().length() != 0)
{
String value = docNoField.getText().toUpperCase();
if (!value.endsWith("%"))
value += "%";
m_query.addRestriction("UPPER(DocumentNo)", MQuery.LIKE, value, docNoLabel.getText(), value);
}
//
if ((hasName) && !nameField.getText().equals("%") && nameField.getText().length() != 0)
{
String value = nameField.getText().toUpperCase();
if (!value.endsWith("%"))
value += "%";
m_query.addRestriction("UPPER(Name)", MQuery.LIKE, value, nameLabel.getText(), value);
}
//
if (hasDescription && !descriptionField.getText().equals("%") && descriptionField.getText().length() != 0)
{
String value = descriptionField.getText().toUpperCase();
if (!value.endsWith("%"))
value += "%";
m_query.addRestriction("UPPER(Description)", MQuery.LIKE, value, descriptionLabel.getText(), value);
}
// Special Editors
for (int i = 0; i < m_sEditors.size(); i++)
{
VEditor ved = (VEditor)m_sEditors.get(i);
Object value = ved.getValue();
if (value != null)
{
String ColumnName = ((Component)ved).getName ();
Log.trace (Log.l5_DData, "Find.cmd_ok_Simple - " + ColumnName, value);
m_query.addRestriction(ColumnName, MQuery.EQUAL, value, ColumnName, ved.getDisplay());
}
} // editors
// Test for no records
if (getNoOfRecords(m_query) != 0)
dispose();
} // cmd_ok_Simple
/**
* Advanced OK Button pressed
*/
private void cmd_ok_Advanced()
{
// save pending
if (bSave.isEnabled())
cmd_save();
if (getNoOfRecords(m_query) != 0)
dispose();
} // cmd_ok_Advanced
/**
* Cancel Button pressed
*/
private void cmd_cancel()
{
Log.trace(Log.l1_User, "Find.cmd_cancel");
m_query = null;
dispose();
} // cmd_ok
/**
* Ignore
*/
private void cmd_ignore()
{
Log.trace(Log.l1_User, "Find.cmd_ignore");
} // cmd_ignore
/**
* New record
*/
private void cmd_new()
{
Log.trace(Log.l1_User, "Find.cmd_new");
DefaultTableModel model = (DefaultTableModel)advancedTable.getModel();
model.addRow(new Object[] {null, MQuery.OPERATORS[MQuery.EQUAL_INDEX], null, null});
} // cmd_new
/**
* Save
*/
private void cmd_save()
{
Log.trace(Log.l1_User, "Find.cmd_save");
advancedTable.stopEditor(true);
//
m_query = new MQuery();
for (int row = 0; row < advancedTable.getRowCount(); row++)
{
// Column
Object column = advancedTable.getValueAt(row, INDEX_COLUMNNAME);
if (column == null)
continue;
String ColumnName = ((ValueNamePair)column).getValue();
String infoName = column.toString();
MField field = getTargetMField(ColumnName);
// Op
Object op = advancedTable.getValueAt(row, INDEX_OPERATOR);
if (op == null)
continue;
String Operator = ((ValueNamePair)op).getValue();
// Value
Object value = advancedTable.getValueAt(row, INDEX_VALUE);
if (value == null)
continue;
Object parsedValue = parseValue(field, value);
if (parsedValue == null)
continue;
String infoDisplay = value.toString();
if (field.isLookup())
infoDisplay = field.getLookup().getDisplay(value);
else if (field.getDisplayType() == DisplayType.YesNo)
infoDisplay = Msg.getMsg(Env.getCtx(), infoDisplay.equals("Y") ? "Yes" : "No");
//
if (MQuery.OPERATORS[MQuery.BETWEEN_INDEX].equals(op))
{
Object value2 = advancedTable.getValueAt(row, INDEX_VALUE2);
if (value2 == null)
continue;
Object parsedValue2 = parseValue(field, value2);
String infoDisplay_to = value2.toString();
if (parsedValue2 == null)
continue;
m_query.addRangeRestriction(ColumnName, parsedValue, parsedValue2,
infoName, infoDisplay, infoDisplay_to);
}
else
m_query.addRestriction(ColumnName, Operator, parsedValue,
infoName, infoDisplay);
}
} // cmd_save
/**
* Parse Value
* @param field column
* @param in value
* @return data type corected value
*/
private Object parseValue (MField field, Object in)
{
if (in == null)
return null;
int dt = field.getDisplayType();
try
{
// Return Integer
if (DisplayType.isID(dt) && field.getColumnName().endsWith("_ID"))
{
if (in instanceof Integer)
return in;
int i = Integer.parseInt(in.toString());
return new Integer(i);
}
// Return BigDecimal
else if (DisplayType.isNumeric(dt))
{
if (in instanceof BigDecimal)
return in;
return DisplayType.getNumberFormat(dt).parse(in.toString());
}
// Return Timestamp
else if (DisplayType.isDate(dt))
{
if (in instanceof Timestamp)
return in;
long time = 0;
try
{
time = DisplayType.getDateFormat_JDBC().parse(in.toString()).getTime();
return new Timestamp(time);
}
catch (Exception e)
{
Log.error("Find.parseValue " + in + "(" + in.getClass() + ")" + e);
time = DisplayType.getDateFormat(dt).parse(in.toString()).getTime();
}
return new Timestamp(time);
}
}
catch (Exception ex)
{
ex.printStackTrace();
String error = ex.getLocalizedMessage();
if (error == null || error.length() == 0)
error = ex.toString();
StringBuffer errMsg = new StringBuffer();
errMsg.append(field.getColumnName()).append(" = ").append(in).append(" - ").append(error);
//
ADialog.error(0, this, "ValidationError", errMsg.toString());
return null;
}
return in;
} // parseValue
/**
* Delete
*/
private void cmd_delete()
{
Log.trace(Log.l1_User, "Find.cmd_delete");
DefaultTableModel model = (DefaultTableModel)advancedTable.getModel();
int row = advancedTable.getSelectedRow();
if (row >= 0)
model.removeRow(row);
cmd_refresh();
} // cmd_delete
/**
* Refresh
*/
private void cmd_refresh()
{
Log.trace(Log.l1_User, "Find.cmd_refresh");
int records = getNoOfRecords(m_query);
setStatusDB (records);
statusBar.setStatusLine("");
} // cmd_refresh
/*************************************************************************/
/**
* Get Query - Retrieve result
* @return String representation of query
*/
public MQuery getQuery()
{
Log.trace(Log.l1_User, "Find.getQuery=" + m_query);
return m_query;
} // getQuery
/**
* Get the number of records of target tab
* @param query where clause for target tab
* @return number of selected records
*/
private int getNoOfRecords(MQuery query)
{
Log.trace(Log.l4_Data, "Find.getNoOfRecords - " + query);
StringBuffer sql = new StringBuffer("SELECT COUNT(*) FROM ");
sql.append(m_targetTab.getTableName());
boolean hasWhere = false;
if (m_targetTab.getWhereExtended().length() > 0)
{
sql.append(" WHERE ").append(m_targetTab.getWhereExtended());
hasWhere = true;
}
if (query != null && query.isActive())
{
if (hasWhere)
sql.append(" AND ");
else
sql.append(" WHERE ");
sql.append(query.getWhereClause());
}
// Add Access
String finalSQL = Access.addRWAccessSQL(Env.getCtx(), sql.toString(), m_targetTab.getTableName(), false);
finalSQL = Env.parseContext(Env.getCtx(), m_targetWindowNo, finalSQL, false);
Env.setContext(Env.getCtx(), m_targetWindowNo, TABNO, "FindSQL", finalSQL);
int count = 0;
// Execute Qusery
try
{
Statement stmt = DB.createStatement();
ResultSet rs = stmt.executeQuery(finalSQL);
if (rs.next())
count = rs.getInt(1);
rs.close();
stmt.close();
}
catch (SQLException e)
{
Log.error("Find.getNoOfRecords SQL=" + finalSQL, e);
}
if (count == 0)
ADialog.info(m_targetWindowNo, this, "FindZeroRecords");
if (query != null)
statusBar.setStatusToolTip (query.getWhereClause());
return count;
} // getNoOfRecords
/**
* Display current count
* @param currentCount String representation of current/total
*/
private void setStatusDB (int currentCount)
{
String text = " " + currentCount + " / " + m_total + " ";
statusBar.setStatusDB(text);
} // setDtatusDB
/*************************************************************************/
/**
* Grid Status Changed.
* @param e DataStatueEvent
*/
public void dataStatusChanged (DataStatusEvent e)
{
Log.trace(Log.l4_Data, "Find.dataStatusChanged", e.getMessage());
// Action control
boolean changed = e.isChanged();
bIgnore.setEnabled(changed);
bNew.setEnabled(!changed);
bSave.setEnabled(changed);
bDelete.setEnabled(!changed);
} // statusChanged
/**
* Get Target MField
* @param columnName column name
* @return MField
*/
public MField getTargetMField (String columnName)
{
if (columnName == null)
return null;
for (int c = 0; c < m_targetTab.getFieldCount(); c++)
{
MField field = m_targetTab.getField(c);
if (columnName.equals(field.getColumnName()))
return field;
}
return null;
} // getTargetMField
} // Find
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -