📄 processparameter.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Business Solution
* The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
* Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
* created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.apps;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.util.*;
import java.math.*;
import java.text.*;
import org.compiere.grid.ed.*;
import org.compiere.util.*;
import org.compiere.model.*;
import org.compiere.plaf.*;
import org.compiere.swing.*;
import org.compiere.process.*;
/**
* Parameter Dialog.
* - called from ProcessCtl
* - checks, if parameters exist and inquires and saves them
*
* @author Jorg Janke
* @version $Id: ProcessParameter.java,v 1.13 2003/02/15 06:31:42 jjanke Exp $
*/
public class ProcessParameter extends JDialog implements ActionListener
{
/**
* Dynamic generated Parameter Dialog screen
*
* @param frame frame
* @param WindowNo window
* @param pi process info
*/
public ProcessParameter (Frame frame, int WindowNo, ProcessInfo pi)
{
super(frame, pi.Title, true);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
m_frame = frame;
try
{
jbInit();
}
catch(Exception ex)
{
Log.error ("ProcessParameter - " + ex.getMessage());
}
//
m_WindowNo = WindowNo;
m_processInfo = pi;
//
} // ProcessParameter
private Frame m_frame;
private int m_WindowNo;
private ProcessInfo m_processInfo;
private boolean m_isOK = false;
//
private GridBagConstraints gbc = new GridBagConstraints();
private Insets nullInset = new Insets(0,0,0,0);
private Insets labelInset = new Insets(2,12,2,0); // top,left,bottom,right
private Insets fieldInset = new Insets(2,5,2,0); // top,left,bottom,right
private Insets fieldInsetRight = new Insets(2,5,2,12); // top,left,bottom,right
private int m_line = 0;
//
private ArrayList m_vEditors = new ArrayList();
private ArrayList m_vEditors2 = new ArrayList(); // for ranges
private ArrayList m_mFields = new ArrayList();
private ArrayList m_mFields2 = new ArrayList();
//
private CPanel mainPanel = new CPanel();
private BorderLayout mainLayout = new BorderLayout();
private CPanel centerPanel = new CPanel();
private GridBagLayout centerLayout = new GridBagLayout();
private ConfirmPanel confirmPanel = new ConfirmPanel(true);
/**
* Static Layout
* @throws Exception
*/
void jbInit() throws Exception
{
CompiereColor.setBackground(this);
mainPanel.setLayout(mainLayout);
centerPanel.setLayout(centerLayout);
this.getContentPane().add(mainPanel);
mainPanel.add(centerPanel, BorderLayout.CENTER);
mainPanel.add(confirmPanel, BorderLayout.SOUTH);
confirmPanel.addActionListener(this);
} // jbInit
/**
* Dispose
*/
public void dispose()
{
m_vEditors.clear();
m_vEditors2.clear();
m_mFields.clear();
m_mFields2.clear();
this.removeAll();
super.dispose();
} // dispose
/**
* Read Fields to display
* @return true if loaded OK
*/
public boolean initDialog()
{
Log.trace(Log.l2_Sub, "ProcessParameter.initDialog");
// Prepare panel
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.weightx = 0;
gbc.weighty = 0;
gbc.gridy = m_line++;
gbc.gridx = 0;
gbc.gridwidth = 1;
gbc.insets = nullInset;
gbc.fill = GridBagConstraints.HORIZONTAL;
centerPanel.add(Box.createVerticalStrut(10), gbc); // top gap 10+2=12
//
String sql = null;
if (Env.isBaseLanguage(Env.getCtx(), "AD_Process_Para"))
sql = "SELECT Name, Description, Help, "
+ "AD_Reference_ID, AD_Process_Para_ID, "
+ "FieldLength, IsMandatory, IsRange, ColumnName, "
+ "DefaultValue, DefaultValue2, VFormat, ValueMin, ValueMax "
+ "FROM AD_Process_Para "
+ "WHERE AD_Process_ID=?" // 1
+ " AND IsActive='Y' "
+ "ORDER BY SeqNo";
else
sql = "SELECT p.SeqNo, t.Name, t.Description, t.Help,"
+ "p.AD_Reference_ID, p.AD_Process_Para_ID, "
+ "p.FieldLength, p.IsMandatory, p.IsRange, p.ColumnName, "
+ "p.DefaultValue, p.DefaultValue2, p.VFormat, p.ValueMin, p.ValueMax "
+ "FROM AD_Process_Para p, AD_Process_Para_Trl t "
+ "WHERE p.AD_Process_ID=?" // 1
+ " AND p.AD_Process_Para_ID=t.AD_Process_Para_ID"
+ " AND t.AD_Language='" + Env.getAD_Language(Env.getCtx()) + "'"
+ " AND p.IsActive='Y'"
+ "ORDER BY SeqNo";
// Create Fields
boolean hasFields = false;
try
{
PreparedStatement pstmt = DB.prepareStatement(sql);
pstmt.setInt(1, m_processInfo.AD_Process_ID);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
hasFields = true;
createField (rs);
}
rs.close();
pstmt.close();
}
catch(SQLException e)
{
Log.error("ProcessParameter.init SQL=" + sql, e);
}
// both vectors the same?
if (m_mFields.size() != m_mFields2.size()
|| m_mFields.size() != m_vEditors.size()
|| m_mFields2.size() != m_vEditors2.size())
Log.error("ProcessParameter.initDialog - View & Model vector size is different");
// clean up
if (hasFields)
{
gbc.gridy = m_line++;
centerPanel.add(Box.createVerticalStrut(10), gbc); // bottom gap
gbc.gridx = 3;
centerPanel.add(Box.createHorizontalStrut(12), gbc); // right gap
AEnv.positionCenterWindow(m_frame, this);
}
else
dispose();
return hasFields;
} // initDialog
/**
* Create Field.
* - creates Fields and adds it to m_mFields list
* - creates Editor and adds it to m_vEditors list
* Handeles Ranges by adding additional mField/vEditor.
* <p>
* mFields are used for default value and mandatory checking;
* vEditors are used to retrieve the value (no data binding)
*
* @param rs result set
*/
private void createField (ResultSet rs)
{
// Create Field
MFieldVO voF = MFieldVO.createParameter(Env.getCtx(), m_WindowNo, rs);
MField mField = new MField (voF);
m_mFields.add(mField); // add to Fields
// Label Preparation
gbc.gridy = m_line++;
gbc.gridwidth = 1;
gbc.fill = GridBagConstraints.HORIZONTAL; // required for right justified
gbc.gridx = 0;
gbc.weightx = 0;
JLabel label = VEditorFactory.getLabel(mField);
if (label == null)
{
gbc.insets = nullInset;
centerPanel.add(Box.createHorizontalStrut(12), gbc); // left gap
}
else
{
gbc.insets = labelInset;
centerPanel.add(label, gbc);
}
// Field Preparation
gbc.insets = fieldInset;
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;
gbc.gridx = 1;
gbc.weightx = 1;
// The Editor
VEditor vEditor = VEditorFactory.getEditor(mField, false);
// MField => VEditor - New Field value to be updated to editor
mField.addPropertyChangeListener(vEditor);
// Set Default
Object defaultObject = mField.getDefault();
mField.setValue (defaultObject, true);
//
centerPanel.add ((Component)vEditor, gbc);
m_vEditors.add (vEditor); // add to Editors
//
if (voF.isRange)
{
// To Label
gbc.gridx = 2;
centerPanel.add (new JLabel(" - "), gbc);
// To Field
gbc.gridx = 3;
gbc.insets = fieldInsetRight;
//
MFieldVO voF2 = MFieldVO.createParameter(voF);
MField mField2 = new MField (voF2);
m_mFields2.add (mField2);
// The Editor
VEditor vEditor2 = VEditorFactory.getEditor(mField2, false);
// New Field value to be updated to editor
mField2.addPropertyChangeListener(vEditor2);
// Set Default
Object defaultObject2 = mField2.getDefault();
mField2.setValue (defaultObject2, true);
//
centerPanel.add ((Component)vEditor2, gbc);
m_vEditors2.add (vEditor2);
}
else
{
m_mFields2.add (null);
m_vEditors2.add (null);
}
} // createField
/**
* Action Listener
* @param e event
*/
public void actionPerformed(ActionEvent e)
{
m_isOK = false;
if (e.getActionCommand().equals(ConfirmPanel.A_OK))
{
// check if saving parameters is complete
if (saveParameters())
{
m_isOK = true;
dispose();
}
}
else if (e.getActionCommand().equals(ConfirmPanel.A_CANCEL))
dispose();
} // actionPerformed
/**
* Save Parameter values
* @return true if parameters saved
*/
private boolean saveParameters()
{
Log.trace(Log.l2_Sub, "ProcessParameter.saveParameter");
/**
* Mandatory fields
* see - MTable.getMandatory
*/
StringBuffer sb = new StringBuffer();
int size = m_mFields.size();
for (int i = 0; i < size; i++)
{
MField field = (MField)m_mFields.get(i);
if (field.isMandatory(true)) // check context
{
VEditor vEditor = (VEditor)m_vEditors.get(i);
Object data = vEditor.getValue();
if (data == null || data.toString().length() == 0)
{
field.setInserting (true); // set editable (i.e. updateable) otherwise deadlock
field.setError(true);
if (sb.length() > 0)
sb.append(", ");
sb.append(field.getHeader());
}
else
field.setError(false);
// Check for Range
VEditor vEditor2 = (VEditor)m_vEditors2.get(i);
if (vEditor2 != null)
{
Object data2 = vEditor.getValue();
MField field2 = (MField)m_mFields2.get(i);
if (data2 == null || data2.toString().length() == 0)
{
field.setInserting (true); // set editable (i.e. updateable) otherwise deadlock
field2.setError(true);
if (sb.length() > 0)
sb.append(", ");
sb.append(field.getHeader());
}
else
field2.setError(false);
} // range field
} // mandatory
} // field loop
if (sb.length() != 0)
{
ADialog.error(m_WindowNo, this, "FillMandatory", sb.toString());
return false;
}
/**********************************************************************
* Save Now
*/
String SQL = "INSERT INTO AD_PInstance_Para "
+ "(AD_PInstance_ID, SeqNo, ParameterName, "
+ "P_String, P_String_To,"
+ "P_Number, P_Number_To,"
+ "P_Date, P_Date_To,"
+ "Info, Info_To)"
+ " VALUES (?,?,?, ?,?, ?,?, ?,?, ?,?)";
try
{
PreparedStatement pstmt = DB.prepareStatement(SQL);
for (int i = 0; i < m_mFields.size(); i++)
{
// AD_PInstance_ID
pstmt.setInt(1, m_processInfo.AD_PInstance_ID);
// SeqNo
pstmt.setInt(2, i);
// ParameterName
MField mField = (MField)m_mFields.get(i);
pstmt.setString(3, mField.getColumnName());
//
String P_String = null;
BigDecimal P_Number = null;
Timestamp P_Date = null;
String P_String2 = null;
BigDecimal P_Number2 = null;
Timestamp P_Date2 = null;
//
VEditor editor = (VEditor)m_vEditors.get(i);
VEditor editor2 = (VEditor)m_vEditors2.get(i);
Object result = editor.getValue();
// Date
if (result instanceof Timestamp)
{
P_Date = (Timestamp)result;
if (editor2 != null)
P_Date2 = (Timestamp)editor2.getValue();
}
// Integer
else if (result instanceof Integer)
{
Integer ii = (Integer)result;
if (ii != null)
P_Number = new BigDecimal (ii.doubleValue());
if (editor2 != null)
{
ii = (Integer)editor2.getValue();
if (ii != null)
P_Number2 = new BigDecimal (ii.doubleValue());
}
}
// BigDecimal
else if (result instanceof BigDecimal)
{
P_Number = (BigDecimal)editor.getValue();
if (editor2 != null)
P_Number2 = (BigDecimal)editor2.getValue();
}
// String
else
{
if (editor.getValue() != null)
P_String = editor.getValue().toString();
if (editor2 != null && editor2.getValue() != null)
P_String2 = editor2.getValue().toString();
}
// Info
String Info = editor.getDisplay();
String Info2 = null;
if (editor2 != null)
Info2 = editor2.getDisplay();
// -----------------------------------------------------------
// P_String
if (P_String == null)
pstmt.setNull(4, Types.VARCHAR);
else
pstmt.setString(4, P_String);
if (P_String2 == null)
pstmt.setNull(5, Types.VARCHAR);
else
pstmt.setString(5, P_String2);
// P_Number
if (P_Number == null)
pstmt.setNull(6, Types.NUMERIC);
else
pstmt.setBigDecimal(6, P_Number);
if (P_Number2 == null)
pstmt.setNull(7, Types.NUMERIC);
else
pstmt.setBigDecimal(7, P_Number2);
// P_Date
if (P_Date == null)
pstmt.setNull(8, Types.TIMESTAMP);
else
pstmt.setTimestamp(8, P_Date);
if (P_Date2 == null)
pstmt.setNull(9, Types.TIMESTAMP);
else
pstmt.setTimestamp(9, P_Date2);
// Info
if (Info == null)
pstmt.setNull(10, Types.VARCHAR);
else
pstmt.setString(10, Info);
if (Info2 == null)
pstmt.setNull(11, Types.VARCHAR);
else
pstmt.setString(11, Info2);
// Print info
StringBuffer buffer = new StringBuffer("PInstance=");
buffer.append(m_processInfo.AD_PInstance_ID).append("; SeqNo=").append(i).append("; ParaName=").append(mField.getColumnName());
if (P_String != null)
buffer.append("; PString=").append(P_String).append("->").append(P_String2);
if (P_Number != null)
buffer.append("; PNumber=").append(P_Number).append("->").append(P_Number2);
if (P_Date != null)
buffer.append("; PDate=").append(P_Date).append("->").append(P_Date2);
Log.trace(Log.l5_DData, buffer.toString());
int rows = pstmt.executeUpdate();
} // for every parameter
}
catch (SQLException e)
{
Log.error("ProcessParameter.saveParameter", e);
return false;
}
return true;
} // saveParameters
/**
* Is everything OK?
* @return true if parameters saved correctly
*/
public boolean isOK()
{
return m_isOK;
} // isOK
} // ProcessParameter
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -