1 14 package org.compiere.apps; 15 16 import java.awt.event.*; 17 import java.sql.*; 18 import javax.swing.*; 19 20 import org.compiere.apps.form.*; 21 import org.compiere.util.*; 22 23 24 30 public class AMenuStartItem extends Thread implements ActionListener 31 { 32 40 public AMenuStartItem (int ID, boolean isMenu, String name, AMenu menu) 41 { 42 m_ID = ID; 43 m_isMenu = isMenu; 44 m_name = name; 45 m_menu = menu; 46 if (menu != null) 47 m_increment = (menu.progressBar.getMaximum()-menu.progressBar.getMinimum()) / 5; 48 } 50 51 private int m_ID = 0; 52 private boolean m_isMenu = false; 53 private String m_name; 54 private AMenu m_menu; 55 56 private Runnable m_resetPB = new Runnable () 58 { 59 public void run() 60 { 61 m_value = 0; 62 if (m_menu != null) 63 m_menu.progressBar.setValue(0); 64 } 65 }; 66 private Runnable m_tickPB = new Runnable () 68 { 69 public void run() 70 { 71 if (m_menu == null) 72 return; 73 final int tick = 5; 75 if (m_menu.progressBar.getValue() < (m_menu.progressBar.getMaximum() - tick)) 76 m_menu.progressBar.setValue(m_menu.progressBar.getValue() + tick); 77 } 78 }; 79 private Runnable m_updatePB = new Runnable () 81 { 82 public void run() 83 { 84 if (m_menu == null) 85 return; 86 m_value += m_increment; 87 if (m_menu.progressBar.getValue() > m_value) m_menu.progressBar.setValue(m_value); 89 } 90 }; 91 private int m_value = 0; 92 private int m_increment = 20; 93 private javax.swing.Timer m_timer = new javax.swing.Timer (500, this); 95 96 99 public void run() 100 { 101 if (m_menu != null) 102 m_menu.setBusy (true); 103 SwingUtilities.invokeLater(m_resetPB); 104 m_timer.start(); 105 SwingUtilities.invokeLater(m_updatePB); 106 try 107 { 108 String SQL = "SELECT * FROM AD_Menu WHERE AD_Menu_ID=?"; 109 if (!m_isMenu) 110 SQL = "SELECT * FROM AD_WF_Node WHERE AD_WF_Node_ID=?"; 111 PreparedStatement pstmt = DB.prepareStatement(SQL); 112 pstmt.setInt(1, m_ID); 113 ResultSet rs = pstmt.executeQuery(); 114 115 SwingUtilities.invokeLater(m_updatePB); 116 while(rs.next()) { 118 String Action = rs.getString("Action"); 119 String IsSOTrx = "Y"; 120 if (m_isMenu) 121 IsSOTrx = rs.getString("IsSOTrx"); 122 int cmd; 123 if (Action.equals("W")) { 125 cmd = rs.getInt("AD_Window_ID"); 126 startWindow(0, cmd, IsSOTrx); 127 } 128 else if (Action.equals("P") || Action.equals("R")) { 130 cmd = rs.getInt("AD_Process_ID"); 131 startProcess(cmd, IsSOTrx); 132 } 133 else if (Action.equals("B")) { 135 cmd = rs.getInt("AD_Workbench_ID"); 136 startWindow (cmd, 0, IsSOTrx); 137 } 138 else if (Action.equals("F")) { 140 if (m_isMenu) 141 cmd = rs.getInt("AD_Workflow_ID"); 142 else 143 cmd = rs.getInt("Workflow_ID"); 144 if (m_menu != null) 145 m_menu.startWorkFlow(cmd); 146 } 147 else if (Action.equals("T")) { 149 cmd = rs.getInt("AD_Task_ID"); 150 startTask(cmd); 151 } 152 else if (Action.equals("X")) { 154 cmd = rs.getInt("AD_Form_ID"); 155 startForm(cmd); 156 } 157 else 158 Log.error ("AMenuStartItem.run - No valid Action in ID=" + m_ID); 159 } 161 162 SwingUtilities.invokeLater(m_updatePB); 163 rs.close(); 164 pstmt.close(); 165 } 166 catch (Exception e) 167 { 168 Log.error("AMenuStartItem.run ID=" + m_ID, e); 169 ADialog.error(0, null, "Error", Msg.parseTranslation(Env.getCtx(), e.getMessage())); 170 } 171 172 try {Thread.sleep(1000);} catch (InterruptedException ie) {} 174 175 m_timer.stop(); 177 SwingUtilities.invokeLater(m_resetPB); 178 if (m_menu != null) 179 { 180 m_menu.updateMemoryInfo(); 181 m_menu.setBusy(false); 182 } 183 } 185 186 190 public void actionPerformed (ActionEvent e) 191 { 192 SwingUtilities.invokeLater(m_tickPB); 193 } 195 202 private void startWindow(int AD_Workbench_ID, int AD_Window_ID, String IsSOTrx) 203 { 204 SwingUtilities.invokeLater(m_updatePB); AWindow frame = new AWindow(); 206 boolean isSO = false; 207 if (IsSOTrx != null && IsSOTrx.equals("Y")) 208 isSO = true; 209 boolean OK = false; 210 if (AD_Workbench_ID != 0) 211 OK = frame.initWorkbench(AD_Workbench_ID, isSO); 212 else 213 OK = frame.initWindow(AD_Window_ID, null, isSO); if (!OK) 215 return; 216 217 SwingUtilities.invokeLater(m_updatePB); frame.pack(); 219 220 SwingUtilities.invokeLater(m_updatePB); AEnv.showCenterScreen(frame); 223 frame = null; 226 } 228 234 private void startProcess (int AD_Process_ID, String IsSOTrx) 235 { 236 SwingUtilities.invokeLater(m_updatePB); boolean isSO = false; 238 if (IsSOTrx != null && IsSOTrx.equals("Y")) 239 isSO = true; 240 m_timer.stop(); 241 ProcessDialog pd = new ProcessDialog (AD_Process_ID, isSO); 242 if (!pd.init()) 243 return; 244 m_timer.start(); 245 246 SwingUtilities.invokeLater(m_updatePB); pd.pack(); 248 SwingUtilities.invokeLater(m_updatePB); AEnv.showCenterScreen(pd); 251 } 253 257 private void startTask (int AD_Task_ID) 258 { 259 SwingUtilities.invokeLater(m_updatePB); String command = null; 262 String SQL = "SELECT OS_Command FROM AD_Task WHERE AD_Task_ID=?"; 263 try 264 { 265 PreparedStatement pstmt = DB.prepareStatement(SQL); 266 pstmt.setInt(1, AD_Task_ID); 267 ResultSet rs = pstmt.executeQuery(); 268 if (rs.next()) 269 command = rs.getString(1); 270 rs.close(); 271 pstmt.close(); 272 } 273 catch (SQLException e) 274 { 275 Log.error ("AMenuStartItem.startTask", e); 276 } 277 if (command == null) 278 return; 279 280 SwingUtilities.invokeLater(m_updatePB); ATask.start(m_name, command); 282 } 284 288 private void startForm (int AD_Form_ID) 289 { 290 FormFrame ff = new FormFrame(); 291 SwingUtilities.invokeLater(m_updatePB); ff.openForm(AD_Form_ID); 293 SwingUtilities.invokeLater(m_updatePB); ff.pack(); 295 SwingUtilities.invokeLater(m_updatePB); AEnv.showCenterScreen(ff); 298 } 300 } | Popular Tags |