KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > compiere > apps > ProcessParameter


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;
15
16 import java.awt.*;
17 import java.awt.event.*;
18 import javax.swing.*;
19 import java.beans.*;
20 import java.sql.*;
21 import java.util.*;
22 import java.math.*;
23 import java.text.*;
24
25 import org.compiere.grid.ed.*;
26 import org.compiere.util.*;
27 import org.compiere.model.*;
28 import org.compiere.plaf.*;
29 import org.compiere.swing.*;
30 import org.compiere.process.*;
31
32 /**
33  * Parameter Dialog.
34  * - called from ProcessCtl
35  * - checks, if parameters exist and inquires and saves them
36  *
37  * @author Jorg Janke
38  * @version $Id: ProcessParameter.java,v 1.18 2003/09/05 04:58:59 jjanke Exp $
39  */

40 public class ProcessParameter extends JDialog
41     implements ActionListener, VetoableChangeListener
42 {
43     /**
44      * Dynamic generated Parameter Dialog screen
45      *
46      * @param frame frame
47      * @param WindowNo window
48      * @param pi process info
49      */

50     public ProcessParameter (Frame frame, int WindowNo, ProcessInfo pi)
51     {
52         super(frame, pi.getTitle(), true);
53         setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
54         m_frame = frame;
55         try
56         {
57             jbInit();
58         }
59         catch(Exception JavaDoc ex)
60         {
61             Log.error ("ProcessParameter - " + ex.getMessage());
62         }
63         //
64
m_WindowNo = WindowNo;
65         m_processInfo = pi;
66         //
67
} // ProcessParameter
68

69     private Frame m_frame;
70     private int m_WindowNo;
71     private ProcessInfo m_processInfo;
72     private boolean m_isOK = false;
73     //
74
private GridBagConstraints gbc = new GridBagConstraints();
75     private Insets nullInset = new Insets(0,0,0,0);
76     private Insets labelInset = new Insets(2,12,2,0); // top,left,bottom,right
77
private Insets fieldInset = new Insets(2,5,2,0); // top,left,bottom,right
78
private Insets fieldInsetRight = new Insets(2,5,2,12); // top,left,bottom,right
79
private int m_line = 0;
80     //
81
private ArrayList m_vEditors = new ArrayList();
82     private ArrayList m_vEditors2 = new ArrayList(); // for ranges
83
private ArrayList m_mFields = new ArrayList();
84     private ArrayList m_mFields2 = new ArrayList();
85     //
86
private CPanel mainPanel = new CPanel();
87     private BorderLayout mainLayout = new BorderLayout();
88     private CPanel centerPanel = new CPanel();
89     private GridBagLayout centerLayout = new GridBagLayout();
90     private ConfirmPanel confirmPanel = new ConfirmPanel(true);
91
92     /**
93      * Static Layout
94      * @throws Exception
95      */

96     void jbInit() throws Exception JavaDoc
97     {
98         CompiereColor.setBackground(this);
99         mainPanel.setLayout(mainLayout);
100         centerPanel.setLayout(centerLayout);
101         this.getContentPane().add(mainPanel);
102         mainPanel.add(centerPanel, BorderLayout.CENTER);
103         mainPanel.add(confirmPanel, BorderLayout.SOUTH);
104         confirmPanel.addActionListener(this);
105     } // jbInit
106

107     /**
108      * Dispose
109      */

110     public void dispose()
111     {
112         m_vEditors.clear();
113         m_vEditors2.clear();
114         m_mFields.clear();
115         m_mFields2.clear();
116         this.removeAll();
117         super.dispose();
118     } // dispose
119

120     /**
121      * Read Fields to display
122      * @return true if loaded OK
123      */

124     public boolean initDialog()
125     {
126         Log.trace(Log.l2_Sub, "ProcessParameter.initDialog");
127
128         // Prepare panel
129
gbc.anchor = GridBagConstraints.NORTHWEST;
130         gbc.weightx = 0;
131         gbc.weighty = 0;
132         gbc.gridy = m_line++;
133         gbc.gridx = 0;
134         gbc.gridwidth = 1;
135         gbc.insets = nullInset;
136         gbc.fill = GridBagConstraints.HORIZONTAL;
137         centerPanel.add(Box.createVerticalStrut(10), gbc); // top gap 10+2=12
138

139         //
140
String JavaDoc sql = null;
141         if (Env.isBaseLanguage(Env.getCtx(), "AD_Process_Para"))
142             sql = "SELECT p.Name, p.Description, p.Help, "
143                 + "p.AD_Reference_ID, p.AD_Process_Para_ID, "
144                 + "p.FieldLength, p.IsMandatory, p.IsRange, p.ColumnName, "
145                 + "p.DefaultValue, p.DefaultValue2, p.VFormat, p.ValueMin, p.ValueMax, "
146                 + "p.SeqNo, p.AD_Reference_Value_ID, vr.Code AS ValidationCode "
147                 + "FROM AD_Process_Para p"
148                 + " LEFT OUTER JOIN AD_Val_Rule vr ON (p.AD_Val_Rule_ID=vr.AD_Val_Rule_ID) "
149                 + "WHERE p.AD_Process_ID=?" // 1
150
+ " AND p.IsActive='Y' "
151                 + "ORDER BY SeqNo";
152         else
153             sql = "SELECT t.Name, t.Description, t.Help, "
154                 + "p.AD_Reference_ID, p.AD_Process_Para_ID, "
155                 + "p.FieldLength, p.IsMandatory, p.IsRange, p.ColumnName, "
156                 + "p.DefaultValue, p.DefaultValue2, p.VFormat, p.ValueMin, p.ValueMax, "
157                 + "p.SeqNo, p.AD_Reference_Value_ID, vr.Code AS ValidationCode "
158                 + "FROM AD_Process_Para p"
159                 + " INNER JOIN AD_Process_Para_Trl t ON (p.AD_Process_Para_ID=t.AD_Process_Para_ID)"
160                 + " LEFT OUTER JOIN AD_Val_Rule vr ON (p.AD_Val_Rule_ID=vr.AD_Val_Rule_ID) "
161                 + "WHERE p.AD_Process_ID=?" // 1
162
+ " AND t.AD_Language='" + Env.getAD_Language(Env.getCtx()) + "'"
163                 + " AND p.IsActive='Y' "
164                 + "ORDER BY SeqNo";
165
166         // Create Fields
167
boolean hasFields = false;
168         try
169         {
170             PreparedStatement pstmt = DB.prepareStatement(sql);
171             pstmt.setInt(1, m_processInfo.getAD_Process_ID());
172             ResultSet rs = pstmt.executeQuery();
173             while (rs.next())
174             {
175                 hasFields = true;
176                 createField (rs);
177             }
178             rs.close();
179             pstmt.close();
180         }
181         catch(SQLException e)
182         {
183             Log.error("ProcessParameter.init SQL=" + sql, e);
184         }
185
186         // both vectors the same?
187
if (m_mFields.size() != m_mFields2.size()
188                 || m_mFields.size() != m_vEditors.size()
189                 || m_mFields2.size() != m_vEditors2.size())
190             Log.error("ProcessParameter.initDialog - View & Model vector size is different");
191
192         // clean up
193
if (hasFields)
194         {
195             gbc.gridy = m_line++;
196             centerPanel.add(Box.createVerticalStrut(10), gbc); // bottom gap
197
gbc.gridx = 3;
198             centerPanel.add(Box.createHorizontalStrut(12), gbc); // right gap
199
AEnv.positionCenterWindow(m_frame, this);
200         }
201         else
202             dispose();
203         return hasFields;
204     } // initDialog
205

206
207     /**
208      * Create Field.
209      * - creates Fields and adds it to m_mFields list
210      * - creates Editor and adds it to m_vEditors list
211      * Handeles Ranges by adding additional mField/vEditor.
212      * <p>
213      * mFields are used for default value and mandatory checking;
214      * vEditors are used to retrieve the value (no data binding)
215      *
216      * @param rs result set
217      */

218     private void createField (ResultSet rs)
219     {
220         // Create Field
221
MFieldVO voF = MFieldVO.createParameter(Env.getCtx(), m_WindowNo, rs);
222         MField mField = new MField (voF);
223         m_mFields.add(mField); // add to Fields
224

225         // Label Preparation
226
gbc.gridy = m_line++;
227         gbc.gridwidth = 1;
228         gbc.fill = GridBagConstraints.HORIZONTAL; // required for right justified
229
gbc.gridx = 0;
230         gbc.weightx = 0;
231         JLabel label = VEditorFactory.getLabel(mField);
232         if (label == null)
233         {
234             gbc.insets = nullInset;
235             centerPanel.add(Box.createHorizontalStrut(12), gbc); // left gap
236
}
237         else
238         {
239             gbc.insets = labelInset;
240             centerPanel.add(label, gbc);
241         }
242
243         // Field Preparation
244
gbc.insets = fieldInset;
245         gbc.fill = GridBagConstraints.NONE;
246         gbc.gridwidth = 1;
247         gbc.gridx = 1;
248         gbc.weightx = 1;
249
250         // The Editor
251
VEditor vEditor = VEditorFactory.getEditor(mField, false);
252         vEditor.addVetoableChangeListener(this);
253         // MField => VEditor - New Field value to be updated to editor
254
mField.addPropertyChangeListener(vEditor);
255         // Set Default
256
Object JavaDoc defaultObject = mField.getDefault();
257         mField.setValue (defaultObject, true);
258         //
259
centerPanel.add ((Component)vEditor, gbc);
260         m_vEditors.add (vEditor); // add to Editors
261
//
262
if (voF.isRange)
263         {
264             // To Label
265
gbc.gridx = 2;
266             centerPanel.add (new JLabel(" - "), gbc);
267             // To Field
268
gbc.gridx = 3;
269             gbc.insets = fieldInsetRight;
270             //
271
MFieldVO voF2 = MFieldVO.createParameter(voF);
272             MField mField2 = new MField (voF2);
273             m_mFields2.add (mField2);
274             // The Editor
275
VEditor vEditor2 = VEditorFactory.getEditor(mField2, false);
276             // New Field value to be updated to editor
277
mField2.addPropertyChangeListener(vEditor2);
278             // Set Default
279
Object JavaDoc defaultObject2 = mField2.getDefault();
280             mField2.setValue (defaultObject2, true);
281             //
282
centerPanel.add ((Component)vEditor2, gbc);
283             m_vEditors2.add (vEditor2);
284         }
285         else
286         {
287             m_mFields2.add (null);
288             m_vEditors2.add (null);
289         }
290     } // createField
291

292     /**
293      * Action Listener
294      * @param e event
295      */

296     public void actionPerformed(ActionEvent e)
297     {
298         m_isOK = false;
299         if (e.getActionCommand().equals(ConfirmPanel.A_OK))
300         {
301             // check if saving parameters is complete
302
if (saveParameters())
303             {
304                 m_isOK = true;
305                 dispose();
306             }
307         }
308         else if (e.getActionCommand().equals(ConfirmPanel.A_CANCEL))
309             dispose();
310     } // actionPerformed
311

312     /**
313      * Editor Listener
314      * @param evt Event
315      * @exception PropertyVetoException if the recipient wishes to roll back.
316      */

317     public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException
318     {
319         Log.trace(Log.l5_DData, "ProcessParameter.vetoableChange");
320         String JavaDoc value = evt.getNewValue() == null ? "" : evt.getNewValue().toString();
321         Env.setContext(Env.getCtx(), m_WindowNo, evt.getPropertyName(), value);
322     } // vetoableChange
323

324     /**
325      * Save Parameter values
326      * @return true if parameters saved
327      */

328     private boolean saveParameters()
329     {
330         Log.trace(Log.l2_Sub, "ProcessParameter.saveParameter");
331
332         /**
333          * Mandatory fields
334          * see - MTable.getMandatory
335          */

336         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
337         int size = m_mFields.size();
338         for (int i = 0; i < size; i++)
339         {
340             MField field = (MField)m_mFields.get(i);
341             if (field.isMandatory(true)) // check context
342
{
343                 VEditor vEditor = (VEditor)m_vEditors.get(i);
344                 Object JavaDoc data = vEditor.getValue();
345                 if (data == null || data.toString().length() == 0)
346                 {
347                     field.setInserting (true); // set editable (i.e. updateable) otherwise deadlock
348
field.setError(true);
349                     if (sb.length() > 0)
350                         sb.append(", ");
351                     sb.append(field.getHeader());
352                 }
353                 else
354                     field.setError(false);
355                 // Check for Range
356
VEditor vEditor2 = (VEditor)m_vEditors2.get(i);
357                 if (vEditor2 != null)
358                 {
359                     Object JavaDoc data2 = vEditor.getValue();
360                     MField field2 = (MField)m_mFields2.get(i);
361                     if (data2 == null || data2.toString().length() == 0)
362                     {
363                         field.setInserting (true); // set editable (i.e. updateable) otherwise deadlock
364
field2.setError(true);
365                         if (sb.length() > 0)
366                             sb.append(", ");
367                         sb.append(field.getHeader());
368                     }
369                     else
370                         field2.setError(false);
371                 } // range field
372
} // mandatory
373
} // field loop
374

375
376         if (sb.length() != 0)
377         {
378             ADialog.error(m_WindowNo, this, "FillMandatory", sb.toString());
379             return false;
380         }
381
382         /**********************************************************************
383          * Save Now
384          */

385         for (int i = 0; i < m_mFields.size(); i++)
386         {
387             MPInstance_Para para = new MPInstance_Para (Env.getCtx(), m_processInfo.getAD_PInstance_ID(), i);
388             // ParameterName
389
MField mField = (MField)m_mFields.get(i);
390             para.setParameterName(mField.getColumnName());
391             //
392
VEditor editor = (VEditor)m_vEditors.get(i);
393             VEditor editor2 = (VEditor)m_vEditors2.get(i);
394             Object JavaDoc result = editor.getValue();
395
396             // Date
397
if (result instanceof Timestamp)
398             {
399                 para.setP_Date((Timestamp)result);
400                 if (editor2 != null)
401                     para.setP_Date_To((Timestamp)editor2.getValue());
402             }
403             // Integer
404
else if (result instanceof Integer JavaDoc)
405             {
406                 Integer JavaDoc ii = (Integer JavaDoc)result;
407                 if (ii != null)
408                     para.setP_Number(ii.intValue());
409                 if (editor2 != null)
410                 {
411                     ii = (Integer JavaDoc)editor2.getValue();
412                     if (ii != null)
413                         para.setP_Number_To(ii.intValue());
414                 }
415             }
416             // BigDecimal
417
else if (result instanceof BigDecimal)
418             {
419                 para.setP_Number ((BigDecimal)editor.getValue());
420                 if (editor2 != null)
421                     para.setP_Number_To ((BigDecimal)editor2.getValue());
422             }
423             // String
424
else
425             {
426                 if (editor.getValue() != null)
427                     para.setP_String (editor.getValue().toString());
428                 if (editor2 != null && editor2.getValue() != null)
429                     para.setP_String_To (editor2.getValue().toString());
430             }
431
432             // Info
433
para.setInfo (editor.getDisplay());
434             if (editor2 != null)
435                 para.setInfo_To (editor2.getDisplay());
436             //
437
para.save();
438         } // for every parameter
439

440         return true;
441     } // saveParameters
442

443     /**
444      * Is everything OK?
445      * @return true if parameters saved correctly
446      */

447     public boolean isOK()
448     {
449         return m_isOK;
450     } // isOK
451

452 } // ProcessParameter
453
Popular Tags