1 14 package org.compiere.print; 15 16 import java.awt.*; 17 import java.awt.event.*; 18 import javax.swing.*; 19 import javax.swing.event.*; 20 import java.sql.*; 21 import java.io.*; 22 import java.util.*; 23 24 import org.compiere.plaf.*; 25 import org.compiere.swing.*; 26 import org.compiere.apps.*; 27 import org.compiere.apps.search.*; 28 import org.compiere.model.*; 29 import org.compiere.util.*; 30 31 37 public class Viewer extends JFrame 38 implements ActionListener, ChangeListener, WindowStateListener 39 { 40 44 public Viewer (ReportEngine re) 45 { 46 super(); 47 Log.trace(Log.l2_Sub, "Viewer"); 48 m_WindowNo = Env.createWindowNo(this); 49 m_reportEngine = re; 50 m_AD_Table_ID = re.getPrintFormat().getAD_Table_ID(); 51 if (!MRole.getDefault().isCanReport(m_AD_Table_ID)) 52 { 53 ADialog.error(m_WindowNo, this, "AccessCannotReport", m_reportEngine.getName()); 54 this.dispose(); 55 } 56 try 57 { 58 m_viewPanel = re.getView(); 59 m_ctx = m_reportEngine.getCtx(); 60 jbInit(); 61 dynInit(); 62 AEnv.showCenterScreen(this); 63 } 64 catch(Exception e) 65 { 66 Log.error("Viewer", e); 67 ADialog.error(m_WindowNo, this, "LoadError", e.getLocalizedMessage()); 68 this.dispose(); 69 } 70 } 72 73 private int m_WindowNo; 74 75 private Properties m_ctx; 76 77 private int m_pageNo = 1; 78 79 private int m_pageMax = 1; 80 81 private View m_viewPanel; 82 83 private boolean m_setting = false; 84 85 private ReportEngine m_reportEngine; 86 87 private boolean m_drillDown = true; 88 89 private int m_AD_Table_ID = 0; 90 91 private CPanel northPanel = new CPanel(); 93 private JScrollPane centerScrollPane = new JScrollPane(); 94 private StatusBar statusBar = new StatusBar(false); 95 private JMenuBar menuBar = new JMenuBar(); 96 private JToolBar toolBar = new JToolBar(); 97 private CButton bPrint = new CButton(); 98 private CButton bPageSetup = new CButton(); 99 private BorderLayout northLayout = new BorderLayout(); 100 private CButton bCustomize = new CButton(); 101 private CButton bEnd = new CButton(); 102 private CButton bFind = new CButton(); 103 private CButton bExport = new CButton(); 104 private CComboBox comboReport = new CComboBox(); 105 private CButton bPrevious = new CButton(); 106 private CButton bNext = new CButton(); 107 private SpinnerNumberModel spinnerModel = new SpinnerNumberModel(1,1,100,1); 108 private JSpinner spinner = new JSpinner(spinnerModel); 109 private CLabel labelDrill = new CLabel(); 110 private CComboBox comboDrill = new CComboBox(); 111 113 114 118 private void jbInit() throws Exception 119 { 120 CompiereColor.setBackground(this); 121 this.setIconImage(org.compiere.Compiere.getImage16()); 122 this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 123 northPanel.setLayout(northLayout); 125 this.getContentPane().add(northPanel, BorderLayout.NORTH); 126 northPanel.add(toolBar, BorderLayout.EAST); 127 this.getContentPane().add(centerScrollPane, BorderLayout.CENTER); 128 centerScrollPane.getViewport().add(m_viewPanel, null); 129 this.getContentPane().add(statusBar, BorderLayout.SOUTH); 130 131 this.setJMenuBar(menuBar); 133 toolBar.add(bPrevious); 135 toolBar.add(spinner); 136 spinner.setToolTipText(Msg.getMsg(m_ctx, "GoToPage")); 137 toolBar.add(bNext); 138 toolBar.addSeparator(); 140 toolBar.addSeparator(); 144 labelDrill.setText(Msg.getMsg(m_ctx, "Drill") + ": "); 145 toolBar.add(labelDrill); 146 toolBar.add(comboDrill); 147 comboDrill.setToolTipText(Msg.getMsg(m_ctx, "Drill")); 148 toolBar.addSeparator(); 150 toolBar.add(comboReport); 151 comboReport.setToolTipText(Msg.translate(m_ctx, "AD_PrintFormat_ID")); 152 toolBar.add(bCustomize); 153 bCustomize.setToolTipText(Msg.getMsg(m_ctx, "PrintCustomize")); 154 toolBar.add(bFind); 155 bFind.setToolTipText(Msg.getMsg(m_ctx, "Find")); 156 toolBar.addSeparator(); 158 toolBar.add(bPageSetup); 159 bPageSetup.setToolTipText(Msg.getMsg(m_ctx, "PageSetup")); 160 toolBar.add(bPrint); 161 if (MRole.getDefault().isCanExport(m_AD_Table_ID)) 162 { 163 bPrint.setToolTipText(Msg.getMsg(m_ctx, "Export")); 164 toolBar.add(bExport); 165 } 166 toolBar.addSeparator(); 168 toolBar.add(bEnd, null); 169 bEnd.setToolTipText(Msg.getMsg(m_ctx, "End")); 170 } 172 175 private void dynInit() 176 { 177 createMenu(); 178 centerScrollPane.getViewport().addChangeListener(this); 181 182 m_pageMax = m_viewPanel.getPageCount(); 184 spinnerModel.setMaximum(new Integer (m_pageMax)); 185 spinner.addChangeListener(this); 186 187 fillComboReport(m_reportEngine.getPrintFormat().getID()); 188 189 m_viewPanel.addMouseListener(new MouseAdapter() 191 { 192 public void mouseClicked(MouseEvent e) 193 { 194 if (e.getClickCount() > 1) 195 mouse_clicked(e); 196 } 197 }); 198 199 comboDrill.addItem(new ValueNamePair (null,"")); 201 String sql = "SELECT t.AD_Table_ID, t.TableName, e.PrintName, NULLIF(e.PO_PrintName,e.PrintName) " 202 + "FROM AD_Column c " 203 + " INNER JOIN AD_Column used ON (c.ColumnName=used.ColumnName)" 204 + " INNER JOIN AD_Table t ON (used.AD_Table_ID=t.AD_Table_ID AND t.IsView='N' AND t.AD_Table_ID <> c.AD_Table_ID)" 205 + " INNER JOIN AD_Column cKey ON (t.AD_Table_ID=cKey.AD_Table_ID AND cKey.IsKey='Y')" 206 + " INNER JOIN AD_Element e ON (cKey.ColumnName=e.ColumnName) " 207 + "WHERE c.AD_Table_ID=? AND c.IsKey='Y' " 208 + "ORDER BY 3"; 209 boolean trl = !Env.isBaseLanguage(Env.getCtx(), "AD_Element"); 210 if (trl) 211 sql = "SELECT t.AD_Table_ID, t.TableName, et.PrintName, NULLIF(et.PO_PrintName,et.PrintName) " 212 + "FROM AD_Column c" 213 + " INNER JOIN AD_Column used ON (c.ColumnName=used.ColumnName)" 214 + " INNER JOIN AD_Table t ON (used.AD_Table_ID=t.AD_Table_ID AND t.IsView='N' AND t.AD_Table_ID <> c.AD_Table_ID)" 215 + " INNER JOIN AD_Column cKey ON (t.AD_Table_ID=cKey.AD_Table_ID AND cKey.IsKey='Y')" 216 + " INNER JOIN AD_Element e ON (cKey.ColumnName=e.ColumnName)" 217 + " INNER JOIN AD_Element_Trl et ON (e.AD_Element_ID=et.AD_Element_ID) " 218 + "WHERE c.AD_Table_ID=? AND c.IsKey='Y'" 219 + " AND et.AD_Language=? " 220 + "ORDER BY 3"; 221 try 222 { 223 PreparedStatement pstmt = DB.prepareStatement(sql); 224 pstmt.setInt(1, m_reportEngine.getPrintFormat().getAD_Table_ID()); 225 if (trl) 226 pstmt.setString(2, Env.getAD_Language(Env.getCtx())); 227 ResultSet rs = pstmt.executeQuery(); 228 while (rs.next()) 229 { 230 String tableName = rs.getString(2); 231 String name = rs.getString(3); 232 String poName = rs.getString(4); 233 if (poName != null) 234 name += "/" + poName; 235 comboDrill.addItem(new ValueNamePair (tableName, name)); 236 } 237 rs.close(); 238 pstmt.close(); 239 } 240 catch (SQLException e) 241 { 242 Log.error("Viewer.dynInit - Drill", e); 243 } 244 if (comboDrill.getItemCount() == 1) 245 { 246 labelDrill.setVisible(false); 247 comboDrill.setVisible(false); 248 } 249 else 250 comboDrill.addActionListener(this); 251 252 revalidate(); 253 } 255 259 private void fillComboReport(int AD_PrintFormat_ID) 260 { 261 comboReport.removeActionListener(this); 262 comboReport.removeAllItems(); 263 KeyNamePair selectValue = null; 264 String sql = MRole.getDefault().addAccessSQL( 266 "SELECT AD_PrintFormat_ID, Name, Description " 267 + "FROM AD_PrintFormat " 268 + "WHERE AD_Table_ID=?", 269 "AD_PrintFormat", MRole.SQL_NOTQUALIFIED, MRole.SQL_RO); 270 int AD_Table_ID = m_reportEngine.getPrintFormat().getAD_Table_ID(); 271 try 272 { 273 PreparedStatement pstmt = DB.prepareStatement(sql); 274 pstmt.setInt(1, AD_Table_ID); 275 ResultSet rs = pstmt.executeQuery(); 276 while (rs.next()) 277 { 278 KeyNamePair pp = new KeyNamePair(rs.getInt(1), rs.getString(2)); 279 comboReport.addItem(pp); 280 if (rs.getInt(1) == AD_PrintFormat_ID) 281 selectValue = pp; 282 } 283 rs.close(); 284 pstmt.close(); 285 } 286 catch (SQLException e) 287 { 288 Log.error("Viewer.fillComboReport", e); 289 } 290 StringBuffer sb = new StringBuffer ("** ").append(Msg.getMsg(m_ctx, "NewReport")).append(" **"); 291 KeyNamePair pp = new KeyNamePair(-1, sb.toString()); 292 comboReport.addItem(pp); 293 if (selectValue != null) 294 comboReport.setSelectedItem(selectValue); 295 comboReport.addActionListener(this); 296 } 298 301 private void revalidate() 302 { 303 m_pageMax = m_viewPanel.getPageCount(); 304 spinnerModel.setMaximum(new Integer (m_pageMax)); 305 306 centerScrollPane.setPreferredSize(new Dimension 308 (m_viewPanel.getPaperWidth()+30, m_viewPanel.getPaperHeight()+15)); 309 centerScrollPane.getViewport().setViewSize(new Dimension 310 (m_viewPanel.getPaperWidth()+2*View.MARGIN, 311 m_viewPanel.getPaperHeight()+2*View.MARGIN)); 312 313 setTitle(Msg.getMsg(m_ctx, "Report") + ": " + m_reportEngine.getName() + " " + Env.getHeader(m_ctx, 0)); 315 StringBuffer sb = new StringBuffer (); 316 sb.append(m_viewPanel.getPaper().toString(m_ctx)) 317 .append(" - ").append(Msg.getMsg(m_ctx, "DataCols")).append("=") 318 .append(m_reportEngine.getColumnCount()) 319 .append(", ").append(Msg.getMsg(m_ctx, "DataRows")).append("=") 320 .append(m_reportEngine.getRowCount()); 321 statusBar.setStatusLine(sb.toString()); 322 setPage(m_pageNo); 324 } 326 327 330 private void createMenu() 331 { 332 JMenu mFile = AEnv.getMenu("File"); 334 menuBar.add(mFile); 335 AEnv.addMenuItem("PrintScreen", null, KeyStroke.getKeyStroke(KeyEvent.VK_PRINTSCREEN, 0), mFile, this); 336 AEnv.addMenuItem("ScreenShot", null, KeyStroke.getKeyStroke(KeyEvent.VK_PRINTSCREEN, Event.SHIFT_MASK), mFile, this); 337 AEnv.addMenuItem("Report", null, KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.ALT_MASK), mFile, this); 338 mFile.addSeparator(); 339 AEnv.addMenuItem("PrintCustomize", "Preference", null, mFile, this); 340 AEnv.addMenuItem("Translate", null, null, mFile, this); 341 AEnv.addMenuItem("Find", null, KeyStroke.getKeyStroke(KeyEvent.VK_F, Event.CTRL_MASK), mFile, this); 342 mFile.addSeparator(); 343 AEnv.addMenuItem("PageSetup", null, null, mFile, this); 344 AEnv.addMenuItem("Print", null, KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.CTRL_MASK), mFile, this); 345 if (MRole.getDefault().isCanExport(m_AD_Table_ID)) 346 AEnv.addMenuItem("Export", null, null, mFile, this); 347 mFile.addSeparator(); 348 AEnv.addMenuItem("End", null, KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.ALT_MASK), mFile, this); 349 AEnv.addMenuItem("Exit", null, KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.SHIFT_MASK+Event.ALT_MASK), mFile, this); 350 351 JMenu mView = AEnv.getMenu("View"); 353 menuBar.add(mView); 354 AEnv.addMenuItem("InfoProduct", null, KeyStroke.getKeyStroke(KeyEvent.VK_I, Event.CTRL_MASK), mView, this); 355 AEnv.addMenuItem("InfoBPartner", null, KeyStroke.getKeyStroke(KeyEvent.VK_I, Event.SHIFT_MASK+Event.CTRL_MASK), mView, this); 356 AEnv.addMenuItem("InfoAccount", null, KeyStroke.getKeyStroke(KeyEvent.VK_I, Event.ALT_MASK+Event.CTRL_MASK), mView, this); 357 AEnv.addMenuItem("InfoSchedule", null, null, mView, this); 358 mView.addSeparator(); 359 AEnv.addMenuItem("InfoOrder", "Info", null, mView, this); 360 AEnv.addMenuItem("InfoInvoice", "Info", null, mView, this); 361 AEnv.addMenuItem("InfoInOut", "Info", null, mView, this); 362 AEnv.addMenuItem("InfoPayment", "Info", null, mView, this); 363 364 JMenu mGo = AEnv.getMenu("Go"); 366 menuBar.add(mGo); 367 AEnv.addMenuItem("First", "First", KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_UP, Event.ALT_MASK), mGo, this); 368 AEnv.addMenuItem("PreviousPage", "Previous", KeyStroke.getKeyStroke(KeyEvent.VK_UP, Event.ALT_MASK), mGo, this); 369 AEnv.addMenuItem("NextPage", "Next", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, Event.ALT_MASK), mGo, this); 370 AEnv.addMenuItem("Last", "Last", KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN, Event.ALT_MASK), mGo, this); 371 372 JMenu mTools = AEnv.getMenu("Tools"); 374 menuBar.add(mTools); 375 AEnv.addMenuItem("Calculator", null, null, mTools, this); 376 AEnv.addMenuItem("Calendar", null, null, mTools, this); 377 AEnv.addMenuItem("Editor", null, null, mTools, this); 378 AEnv.addMenuItem("Script", null, null, mTools, this); 379 mTools.addSeparator(); 380 AEnv.addMenuItem("Preference", null, null, mTools, this); 381 382 JMenu mHelp = AEnv.getMenu("Help"); 384 menuBar.add(mHelp); 385 AEnv.addMenuItem("Online", null, null, mHelp, this); 386 AEnv.addMenuItem("SendMail", null, null, mHelp, this); 387 AEnv.addMenuItem("About", null, null, mHelp, this); 388 389 setButton(bPrint, "Print", "Print"); 392 setButton(bPageSetup, "PageSetup", "PageSetup"); 393 if (MRole.getDefault().isCanExport(m_AD_Table_ID)) 394 setButton(bExport, "Export", "Export"); 395 setButton(bNext, "NextPage", "Next"); 397 setButton(bPrevious, "PreviousPage", "Previous"); 398 setButton(bFind, "Find", "Find"); 400 setButton(bCustomize, "PrintCustomize", "Preference"); 401 setButton(bEnd, "End", "End"); 403 } 405 411 private void setButton (AbstractButton button, String cmd, String file) 412 { 413 String text = Msg.getMsg(m_ctx, cmd); 414 button.setToolTipText(text); 415 button.setActionCommand(cmd); 416 ImageIcon ii24 = Env.getImageIcon(file+"24.gif"); 418 if (ii24 != null) 419 button.setIcon(ii24); 420 button.setMargin(AppsAction.BUTTON_INSETS); 421 button.setPreferredSize(AppsAction.BUTTON_SIZE); 422 button.addActionListener(this); 423 } 425 428 public void dispose() 429 { 430 Env.clearWinContext(m_WindowNo); 431 m_reportEngine = null; 432 m_viewPanel = null; 433 m_ctx = null; 434 super.dispose(); 435 } 437 438 439 443 public void actionPerformed (ActionEvent e) 444 { 445 if (m_setting) 446 return; 447 String cmd = e.getActionCommand(); 448 Log.trace(Log.l4_Data, "Viewer.actionPerformed", cmd); 449 if (e.getSource() == comboReport) 454 cmd_report(); 455 else if (e.getSource() == comboDrill) 456 cmd_drill(); 457 else if (cmd.equals("First")) 458 setPage(1); 459 else if (cmd.equals("PreviousPage") || cmd.equals("Previous")) 460 setPage(m_pageNo-1); 461 else if (cmd.equals("NextPage") || cmd.equals("Next")) 462 setPage(m_pageNo+1); 463 else if (cmd.equals("Last")) 464 setPage(m_pageMax); 465 else if (cmd.equals("Find")) 466 cmd_find(); 467 else if (cmd.equals("Export")) 468 cmd_export(); 469 else if (cmd.equals("Print")) 470 cmd_print(); 471 else if (cmd.equals("PrintCustomize")) 472 cmd_customize(); 473 else if (cmd.equals("PageSetup")) 474 cmd_pageSetup(); 475 else if (cmd.equals("Translate")) 476 cmd_translate(); 477 else if (cmd.equals("End")) 478 dispose(); 479 else if (!AEnv.actionPerformed(e.getActionCommand(), m_WindowNo, this)) 480 Log.error("AMenu.actionPerformed - unknown action=" + e.getActionCommand()); 481 482 } 484 488 public void stateChanged (ChangeEvent e) 489 { 490 if (m_setting) 491 return; 492 m_setting = true; 494 int newPage = 0; 495 if (e.getSource() == spinner) 496 { 497 newPage = ((Integer )spinnerModel.getValue()).intValue(); 498 } 499 else { 501 Point p = centerScrollPane.getViewport().getViewPosition(); 502 newPage = Math.round(m_viewPanel.getPageNoAt(p)); 503 } 504 setPage(newPage); 505 m_setting = false; 506 } 508 509 513 private void setPage (int page) 514 { 515 m_setting = true; 516 m_pageNo = page; 517 if (m_pageNo < 1) 518 m_pageNo = 1; 519 if (page > m_pageMax) 520 m_pageNo = m_pageMax; 521 bPrevious.setEnabled (m_pageNo != 1); 522 bNext.setEnabled (m_pageNo != m_pageMax); 523 Rectangle pageRectangle = m_viewPanel.getRectangleOfPage(m_pageNo); 525 pageRectangle.x -= View.MARGIN; 526 pageRectangle.y -= View.MARGIN; 527 centerScrollPane.getViewport().setViewPosition(pageRectangle.getLocation()); 528 530 spinnerModel.setValue(new Integer (m_pageNo)); 532 StringBuffer sb = new StringBuffer (Msg.getMsg(m_ctx, "Page")) 533 .append(" ").append(m_pageNo) 534 .append(m_viewPanel.getPageInfo(m_pageNo)) 535 .append(" ").append(Msg.getMsg(m_ctx, "of")).append(" ") 536 .append(m_pageMax) 537 .append(m_viewPanel.getPageInfoMax()); 538 statusBar.setStatusDB(sb.toString()); 539 m_setting = false; 540 } 542 543 544 547 private void cmd_drill() 548 { 549 m_drillDown = comboDrill.getSelectedIndex() < 1; if (m_drillDown) 551 setCursor(Cursor.getDefaultCursor()); 552 else 553 setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 554 } 556 560 private void mouse_clicked(MouseEvent e) 561 { 562 Point point = e.getPoint(); 563 Log.trace(Log.l1_User, "Viewer.mouse_clicked", point); 564 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 565 if (m_drillDown) 566 { 567 MQuery query = m_viewPanel.getDrillDown(point); 568 if (query != null) 569 { 570 Log.trace(Log.l1_User, "Viewer.mouseClicked - Drill Down", query.getWhereClause(true)); 571 executeDrill(query); 572 } 573 } 574 else if (comboDrill.getSelectedItem() != null && comboDrill.getSelectedIndex() > 0) 575 { 576 MQuery query = m_viewPanel.getDrillAcross(point); 577 if (query != null) 578 { 579 NamePair pp = (NamePair)comboDrill.getSelectedItem(); 580 query.setTableName(pp.getID()); 581 Log.trace(Log.l1_User, "Viewer.mouseClicked - Drill Accross", query.getWhereClause(true)); 582 executeDrill(query); 583 } 584 } 585 cmd_drill(); } 588 592 private void executeDrill (MQuery query) 593 { 594 int AD_Table_ID = AReport.getAD_Table_ID(query.getTableName()); 595 if (!MRole.getDefault().isCanReport(AD_Table_ID)) 596 { 597 ADialog.error(m_WindowNo, this, "AccessCannotReport", query.getTableName()); 598 return; 599 } 600 if (AD_Table_ID != 0) 601 new AReport (AD_Table_ID, null, query); 602 else 603 Log.error("Viewer.executeDrill - No Table found for " + query.getWhereClause(true)); 604 } 606 607 608 611 private void cmd_print() 612 { 613 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 614 m_reportEngine.print(true, 1, false, null); 615 cmd_drill(); } 618 621 private void cmd_pageSetup() 622 { 623 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 624 m_reportEngine.pageSetupDialog(); 625 revalidate(); 626 cmd_drill(); } 629 632 private void cmd_export() 633 { 634 Log.trace(Log.l3_Util, "Viewer.cmd_export"); 635 if (!MRole.getDefault().isCanExport(m_AD_Table_ID)) 636 { 637 ADialog.error(m_WindowNo, this, "AccessCannotExport", getTitle()); 638 return; 639 } 640 641 JFileChooser chooser = new JFileChooser(); 643 chooser.setDialogType(JFileChooser.SAVE_DIALOG); 644 chooser.setDialogTitle(Msg.getMsg(m_ctx, "Export") + ": " + getTitle()); 645 chooser.addChoosableFileFilter(new ExtensionFileFilter("ps", Msg.getMsg(m_ctx, "FilePS"))); 647 chooser.addChoosableFileFilter(new ExtensionFileFilter("xml", Msg.getMsg(m_ctx, "FileXML"))); 648 chooser.addChoosableFileFilter(new ExtensionFileFilter("pdf", Msg.getMsg(m_ctx, "FilePDF"))); 649 chooser.addChoosableFileFilter(new ExtensionFileFilter("html", Msg.getMsg(m_ctx, "FileHTML"))); 650 chooser.addChoosableFileFilter(new ExtensionFileFilter("csv", Msg.getMsg(m_ctx, "FileCSV"))); 651 if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) 653 return; 654 655 File outFile = ExtensionFileFilter.getFile(chooser.getSelectedFile(), chooser.getFileFilter()); 657 try 658 { 659 outFile.createNewFile(); 660 } 661 catch (IOException e) 662 { 663 Log.error("Viewer.cmd_export", e); 664 ADialog.error(m_WindowNo, this, "FileCannotCreate", e.getLocalizedMessage()); 665 return; 666 } 667 668 String ext = outFile.getPath(); 669 if (ext.lastIndexOf(".") == -1) 671 { 672 ADialog.error(m_WindowNo, this, "FileInvalidExtension"); 673 return; 674 } 675 ext = ext.substring(ext.lastIndexOf(".")+1).toLowerCase(); 676 Log.trace(Log.l4_Data, "File=" + outFile.getPath() + "; Type=" + ext); 677 678 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 679 if (ext.equals("pdf")) 680 m_reportEngine.createPDF(outFile); 681 else if (ext.equals("ps")) 682 m_reportEngine.createPS(outFile); 683 else if (ext.equals("xml")) 684 m_reportEngine.createXML(outFile); 685 else if (ext.equals("csv")) 686 m_reportEngine.createCSV(outFile, ',', m_reportEngine.getPrintFormat().getLanguage()); 687 else if (ext.equals("html") || ext.equals("htm")) 688 m_reportEngine.createHTML(outFile, false, m_reportEngine.getPrintFormat().getLanguage()); 689 else 690 ADialog.error(m_WindowNo, this, "FileInvalidExtension"); 691 cmd_drill(); } 694 697 private void cmd_report() 698 { 699 KeyNamePair pp = (KeyNamePair)comboReport.getSelectedItem(); 700 if (pp == null) 701 return; 702 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 704 MPrintFormat pf = null; 705 int AD_PrintFormat_ID = pp.getKey(); 706 707 if (AD_PrintFormat_ID == -1) 709 { 710 pf = MPrintFormat.createFromTable(m_ctx, m_reportEngine.getPrintFormat().getAD_Table_ID()); 711 fillComboReport(pf.getID()); 712 } 713 else 714 pf = MPrintFormat.get (AD_PrintFormat_ID, true); 715 716 m_reportEngine.setPrintFormat(pf); 717 revalidate(); 718 719 cmd_drill(); } 722 725 private void cmd_find() 726 { 727 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 728 m_reportEngine.getQuery(); 729 int AD_Table_ID = m_reportEngine.getPrintFormat().getAD_Table_ID(); 730 MTabVO tabVO = MTabVO.create(Env.getCtx(), m_WindowNo, AD_Table_ID); 731 if (tabVO == null) bFind.setEnabled(false); 733 else 734 { 735 Find find = new Find (this, m_WindowNo, new MTab(tabVO)); 736 m_reportEngine.setQuery(find.getQuery()); 737 revalidate(); 738 } 739 cmd_drill(); } 742 745 private void cmd_customize() 746 { 747 AWindow win = new AWindow (); 748 new AWindowListener (win, this); int AD_Window_ID = 240; int AD_PrintFormat_ID = m_reportEngine.getPrintFormat().getID(); 751 win.initWindow(AD_Window_ID, MQuery.getEqualQuery("AD_PrintFormat_ID", AD_PrintFormat_ID), false); 752 AEnv.showCenterScreen(win); 753 } 756 760 public void windowStateChanged (WindowEvent e) 761 { 762 if (e.getID() == WindowEvent.WINDOW_CLOSED && m_reportEngine != null) 764 { 765 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 766 Log.trace(Log.l1_User, "Viewer.windowStateChanged - re-read PrintFormat"); 767 int AD_PrintFormat_ID = m_reportEngine.getPrintFormat().getID(); 768 Language language = m_reportEngine.getPrintFormat().getLanguage(); 769 MPrintFormat pf = MPrintFormat.get (AD_PrintFormat_ID, true); 770 pf.setLanguage (language); pf.setTranslationLanguage (language); 772 m_reportEngine.setPrintFormat(pf); 773 revalidate(); 774 cmd_drill(); } 776 } 778 781 private void cmd_zoom() 782 { 783 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 784 revalidate(); 786 cmd_drill(); } 789 790 794 private void cmd_translate() 795 { 796 ArrayList list = new ArrayList(); 797 ValueNamePair pp = null; 798 String sql = "SELECT Name, AD_Language FROM AD_Language ORDER BY 1"; 799 try 800 { 801 PreparedStatement pstmt = DB.prepareStatement(sql); 802 ResultSet rs = pstmt.executeQuery(); 803 while (rs.next()) 804 list.add(new ValueNamePair (rs.getString(2), rs.getString(1))); 805 rs.close(); 806 pstmt.close(); 807 } 808 catch (SQLException e) 809 { 810 Log.error("Viewer.cmd_translate", e); 811 } 812 813 String title = Msg.getMsg(Env.getCtx(), "PrintFormatTrl", true); 815 String message = Msg.getMsg(Env.getCtx(), "PrintFormatTrl", false); 816 int choice = JOptionPane.showOptionDialog(this, message, title, 817 JOptionPane.OK_OPTION, JOptionPane.QUESTION_MESSAGE, null, 818 list.toArray(), null); 819 if (choice == JOptionPane.CLOSED_OPTION) 820 return; 821 pp = (ValueNamePair)list.get(choice); 823 String AD_Language = pp.getValue(); 824 int AD_PrintFormat_ID = m_reportEngine.getPrintFormat().getID(); 825 Log.trace(Log.l3_Util, "Viewer.cmd_translate", AD_Language + " - AD_PrintFormat_ID=" + AD_PrintFormat_ID); 826 StringBuffer sb = new StringBuffer (); 827 if (Language.isBaseLanguage (AD_Language)) 829 { 830 sb.append("UPDATE AD_PrintFormatItem pfi " 831 + "SET Name = (SELECT e.Name FROM AD_Element e, AD_Column c" 832 + " WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID)," 833 + "PrintName = (SELECT e.PrintName FROM AD_Element e, AD_Column c" 834 + " WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID) " 835 + "WHERE AD_PrintFormat_ID=").append(AD_PrintFormat_ID).append( 836 " AND EXISTS (SELECT * FROM AD_Element e, AD_Column c" 837 + " WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID)"); 838 } 839 else 840 { 841 AD_Language = "'" + AD_Language + "'"; 842 sb.append("UPDATE AD_PrintFormatItem pfi " 843 + "SET Name = (SELECT e.Name FROM AD_Element_Trl e, AD_Column c" 844 + " WHERE e.AD_Language=").append(AD_Language).append( 845 " AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID), " 846 + "PrintName = (SELECT e.PrintName FROM AD_Element_Trl e, AD_Column c" 847 + " WHERE e.AD_Language=").append(AD_Language).append( 848 " AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID) " 849 + "WHERE AD_PrintFormat_ID=").append(AD_PrintFormat_ID).append( 850 " AND EXISTS (SELECT * FROM AD_Element_Trl e, AD_Column c" 851 + " WHERE e.AD_Language=").append(AD_Language).append( 852 " AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID)"); 853 } 854 int count = DB.executeUpdate(sb.toString()); 855 Log.trace(Log.l3_Util, "Viewer.cmd_translate", "Count=" + count); 856 m_reportEngine.setPrintFormat(MPrintFormat.get (AD_PrintFormat_ID, true)); 858 revalidate(); 859 } 861 862 863 867 static public void main (String [] args) 868 { 869 Env.initTest(9, true); 870 871 MQuery q = new MQuery("C_Invoice"); 872 q.addRestriction("C_Invoice_ID", MQuery.EQUAL, new Integer (103)); 873 874 MPrintFormat f = MPrintFormat.get (102, false); 876 ReportEngine re = new ReportEngine(Env.getCtx(), f, q); 877 878 881 new Viewer(re); 882 } 884 } 886 | Popular Tags |