1 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 40 public class ProcessParameter extends JDialog 41 implements ActionListener, VetoableChangeListener 42 { 43 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 ex) 60 { 61 Log.error ("ProcessParameter - " + ex.getMessage()); 62 } 63 m_WindowNo = WindowNo; 65 m_processInfo = pi; 66 } 69 private Frame m_frame; 70 private int m_WindowNo; 71 private ProcessInfo m_processInfo; 72 private boolean m_isOK = false; 73 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); private Insets fieldInset = new Insets(2,5,2,0); private Insets fieldInsetRight = new Insets(2,5,2,12); private int m_line = 0; 80 private ArrayList m_vEditors = new ArrayList(); 82 private ArrayList m_vEditors2 = new ArrayList(); private ArrayList m_mFields = new ArrayList(); 84 private ArrayList m_mFields2 = new ArrayList(); 85 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 96 void jbInit() throws Exception 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 } 107 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 } 120 124 public boolean initDialog() 125 { 126 Log.trace(Log.l2_Sub, "ProcessParameter.initDialog"); 127 128 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); 139 String 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=?" + " 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=?" + " AND t.AD_Language='" + Env.getAD_Language(Env.getCtx()) + "'" 163 + " AND p.IsActive='Y' " 164 + "ORDER BY SeqNo"; 165 166 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 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 if (hasFields) 194 { 195 gbc.gridy = m_line++; 196 centerPanel.add(Box.createVerticalStrut(10), gbc); gbc.gridx = 3; 198 centerPanel.add(Box.createHorizontalStrut(12), gbc); AEnv.positionCenterWindow(m_frame, this); 200 } 201 else 202 dispose(); 203 return hasFields; 204 } 206 207 218 private void createField (ResultSet rs) 219 { 220 MFieldVO voF = MFieldVO.createParameter(Env.getCtx(), m_WindowNo, rs); 222 MField mField = new MField (voF); 223 m_mFields.add(mField); 225 gbc.gridy = m_line++; 227 gbc.gridwidth = 1; 228 gbc.fill = GridBagConstraints.HORIZONTAL; 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); } 237 else 238 { 239 gbc.insets = labelInset; 240 centerPanel.add(label, gbc); 241 } 242 243 gbc.insets = fieldInset; 245 gbc.fill = GridBagConstraints.NONE; 246 gbc.gridwidth = 1; 247 gbc.gridx = 1; 248 gbc.weightx = 1; 249 250 VEditor vEditor = VEditorFactory.getEditor(mField, false); 252 vEditor.addVetoableChangeListener(this); 253 mField.addPropertyChangeListener(vEditor); 255 Object defaultObject = mField.getDefault(); 257 mField.setValue (defaultObject, true); 258 centerPanel.add ((Component)vEditor, gbc); 260 m_vEditors.add (vEditor); if (voF.isRange) 263 { 264 gbc.gridx = 2; 266 centerPanel.add (new JLabel(" - "), gbc); 267 gbc.gridx = 3; 269 gbc.insets = fieldInsetRight; 270 MFieldVO voF2 = MFieldVO.createParameter(voF); 272 MField mField2 = new MField (voF2); 273 m_mFields2.add (mField2); 274 VEditor vEditor2 = VEditorFactory.getEditor(mField2, false); 276 mField2.addPropertyChangeListener(vEditor2); 278 Object defaultObject2 = mField2.getDefault(); 280 mField2.setValue (defaultObject2, true); 281 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 } 292 296 public void actionPerformed(ActionEvent e) 297 { 298 m_isOK = false; 299 if (e.getActionCommand().equals(ConfirmPanel.A_OK)) 300 { 301 if (saveParameters()) 303 { 304 m_isOK = true; 305 dispose(); 306 } 307 } 308 else if (e.getActionCommand().equals(ConfirmPanel.A_CANCEL)) 309 dispose(); 310 } 312 317 public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException 318 { 319 Log.trace(Log.l5_DData, "ProcessParameter.vetoableChange"); 320 String value = evt.getNewValue() == null ? "" : evt.getNewValue().toString(); 321 Env.setContext(Env.getCtx(), m_WindowNo, evt.getPropertyName(), value); 322 } 324 328 private boolean saveParameters() 329 { 330 Log.trace(Log.l2_Sub, "ProcessParameter.saveParameter"); 331 332 336 StringBuffer sb = new StringBuffer (); 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)) { 343 VEditor vEditor = (VEditor)m_vEditors.get(i); 344 Object data = vEditor.getValue(); 345 if (data == null || data.toString().length() == 0) 346 { 347 field.setInserting (true); field.setError(true); 349 if (sb.length() > 0) 350 sb.append(", "); 351 sb.append(field.getHeader()); 352 } 353 else 354 field.setError(false); 355 VEditor vEditor2 = (VEditor)m_vEditors2.get(i); 357 if (vEditor2 != null) 358 { 359 Object data2 = vEditor.getValue(); 360 MField field2 = (MField)m_mFields2.get(i); 361 if (data2 == null || data2.toString().length() == 0) 362 { 363 field.setInserting (true); field2.setError(true); 365 if (sb.length() > 0) 366 sb.append(", "); 367 sb.append(field.getHeader()); 368 } 369 else 370 field2.setError(false); 371 } } } 375 376 if (sb.length() != 0) 377 { 378 ADialog.error(m_WindowNo, this, "FillMandatory", sb.toString()); 379 return false; 380 } 381 382 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 MField mField = (MField)m_mFields.get(i); 390 para.setParameterName(mField.getColumnName()); 391 VEditor editor = (VEditor)m_vEditors.get(i); 393 VEditor editor2 = (VEditor)m_vEditors2.get(i); 394 Object result = editor.getValue(); 395 396 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 else if (result instanceof Integer ) 405 { 406 Integer ii = (Integer )result; 407 if (ii != null) 408 para.setP_Number(ii.intValue()); 409 if (editor2 != null) 410 { 411 ii = (Integer )editor2.getValue(); 412 if (ii != null) 413 para.setP_Number_To(ii.intValue()); 414 } 415 } 416 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 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 para.setInfo (editor.getDisplay()); 434 if (editor2 != null) 435 para.setInfo_To (editor2.getDisplay()); 436 para.save(); 438 } 440 return true; 441 } 443 447 public boolean isOK() 448 { 449 return m_isOK; 450 } 452 } | Popular Tags |