⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 processparameter.java

📁 Java写的ERP系统
💻 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 + -