KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > compiere > print > Viewer


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-2002 Jorg Janke, parts
11  * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
12  * Contributor(s): ______________________________________.
13  *****************************************************************************/

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 /**
32  * Print View Frame
33  *
34  * @author Jorg Janke
35  * @version $Id: Viewer.java,v 1.29 2003/10/22 05:48:18 jjanke Exp $
36  */

37 public class Viewer extends JFrame
38     implements ActionListener, ChangeListener, WindowStateListener
39 {
40     /**
41      * Viewer Constructor
42      * @param re report engine
43      */

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 JavaDoc e)
65         {
66             Log.error("Viewer", e);
67             ADialog.error(m_WindowNo, this, "LoadError", e.getLocalizedMessage());
68             this.dispose();
69         }
70     } // Viewer
71

72     /** Window No */
73     private int m_WindowNo;
74     /** Print Context */
75     private Properties m_ctx;
76     /** Page No */
77     private int m_pageNo = 1;
78     /** Max Page Number */
79     private int m_pageMax = 1;
80     /** View Pane */
81     private View m_viewPanel;
82     /** Setting Values */
83     private boolean m_setting = false;
84     /** Report Engine */
85     private ReportEngine m_reportEngine;
86     /** Drill Down/Across */
87     private boolean m_drillDown = true;
88     /** Table ID */
89     private int m_AD_Table_ID = 0;
90
91     //
92
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 // private CComboBox comboZoom = new CComboBox(View.ZOOM_OPTIONS);
112

113
114     /**
115      * Static Layout
116      * @throws Exception
117      */

118     private void jbInit() throws Exception JavaDoc
119     {
120         CompiereColor.setBackground(this);
121         this.setIconImage(org.compiere.Compiere.getImage16());
122         this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
123         //
124
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         // ToolBar
132
this.setJMenuBar(menuBar);
133         // Page Control
134
toolBar.add(bPrevious);
135         toolBar.add(spinner);
136         spinner.setToolTipText(Msg.getMsg(m_ctx, "GoToPage"));
137         toolBar.add(bNext);
138         // Zoom Level
139
toolBar.addSeparator();
140 // toolBar.add(comboZoom, null);
141
// comboZoom.setToolTipText(Msg.getMsg(m_ctx, "Zoom"));
142
// Drill
143
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         // Format, Customize, Find
149
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         // Print/Export
157
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         // End
167
toolBar.addSeparator();
168         toolBar.add(bEnd, null);
169         bEnd.setToolTipText(Msg.getMsg(m_ctx, "End"));
170     } // jbInit
171

172     /**
173      * Dynamic Init
174      */

175     private void dynInit()
176     {
177         createMenu();
178 // comboZoom.addActionListener(this);
179
// Change Listener to set Page no
180
centerScrollPane.getViewport().addChangeListener(this);
181
182         // Max Page
183
m_pageMax = m_viewPanel.getPageCount();
184         spinnerModel.setMaximum(new Integer JavaDoc(m_pageMax));
185         spinner.addChangeListener(this);
186
187         fillComboReport(m_reportEngine.getPrintFormat().getID());
188
189         // View Panel Mouse Listener
190
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         // fill Drill Options (Name, TableName)
200
comboDrill.addItem(new ValueNamePair (null,""));
201         String JavaDoc 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 JavaDoc tableName = rs.getString(2);
231                 String JavaDoc name = rs.getString(3);
232                 String JavaDoc 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     } // dynInit
254

255     /**
256      * Fill ConvoBox comboReport (report options)
257      * @param AD_PrintFormat_ID item to be selected
258      */

259     private void fillComboReport(int AD_PrintFormat_ID)
260     {
261         comboReport.removeActionListener(this);
262         comboReport.removeAllItems();
263         KeyNamePair selectValue = null;
264         // fill Report Options
265
String JavaDoc 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 JavaDoc sb = new StringBuffer JavaDoc("** ").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     } // fillComboReport
297

298     /**
299      * Revalidate settings after change of environment
300      */

301     private void revalidate()
302     {
303         m_pageMax = m_viewPanel.getPageCount();
304         spinnerModel.setMaximum(new Integer JavaDoc(m_pageMax));
305
306         // scroll area (page size dependent)
307
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         // Report Info
314
setTitle(Msg.getMsg(m_ctx, "Report") + ": " + m_reportEngine.getName() + " " + Env.getHeader(m_ctx, 0));
315         StringBuffer JavaDoc sb = new StringBuffer JavaDoc ();
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         //
323
setPage(m_pageNo);
324     } // revalidate
325

326
327     /**
328      * Create Menu
329      */

330     private void createMenu()
331     {
332         // File
333
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         // View
352
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         // Go
365
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         // Tools
373
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         // Help
383
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         // ---- ToolBar ----
390
//
391
setButton(bPrint, "Print", "Print");
392         setButton(bPageSetup, "PageSetup", "PageSetup");
393         if (MRole.getDefault().isCanExport(m_AD_Table_ID))
394             setButton(bExport, "Export", "Export");
395         //
396
setButton(bNext, "NextPage", "Next");
397         setButton(bPrevious, "PreviousPage", "Previous");
398         //
399
setButton(bFind, "Find", "Find");
400         setButton(bCustomize, "PrintCustomize", "Preference");
401         //
402
setButton(bEnd, "End", "End");
403     } // createMenu
404

405     /**
406      * Set Button
407      * @param button button
408      * @param cmd command
409      * @param file fine mame
410      */

411     private void setButton (AbstractButton button, String JavaDoc cmd, String JavaDoc file)
412     {
413         String JavaDoc text = Msg.getMsg(m_ctx, cmd);
414         button.setToolTipText(text);
415         button.setActionCommand(cmd);
416         //
417
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     } // setButton
424

425     /**
426      * Dispose
427      */

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     } // dispose
436

437     /*************************************************************************/
438
439     /**
440      * Action Listener
441      * @param e event
442      */

443     public void actionPerformed (ActionEvent e)
444     {
445         if (m_setting)
446             return;
447         String JavaDoc cmd = e.getActionCommand();
448         Log.trace(Log.l4_Data, "Viewer.actionPerformed", cmd);
449         //
450
// if (e.getSource() == comboZoom)
451
// cmd_zoom();
452
// else
453
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     } // actionPerformed
483

484     /**
485      * Change Listener (spinner, viewpoint)
486      * @param e event
487      */

488     public void stateChanged (ChangeEvent e)
489     {
490         if (m_setting)
491             return;
492     // Log.trace(Log.l4_Data, "Viewer.stateChanged", e);
493
m_setting = true;
494         int newPage = 0;
495         if (e.getSource() == spinner)
496         {
497             newPage = ((Integer JavaDoc)spinnerModel.getValue()).intValue();
498         }
499         else // Viewpoint
500
{
501             Point p = centerScrollPane.getViewport().getViewPosition();
502             newPage = Math.round(m_viewPanel.getPageNoAt(p));
503         }
504         setPage(newPage);
505         m_setting = false;
506     } // stateChanged
507

508
509     /**
510      * Set Page No
511      * @param page page no
512      */

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         //
524
Rectangle pageRectangle = m_viewPanel.getRectangleOfPage(m_pageNo);
525         pageRectangle.x -= View.MARGIN;
526         pageRectangle.y -= View.MARGIN;
527         centerScrollPane.getViewport().setViewPosition(pageRectangle.getLocation());
528     // System.out.println("scrollTo " + pageRectangle);
529

530         // Set Page
531
spinnerModel.setValue(new Integer JavaDoc(m_pageNo));
532         StringBuffer JavaDoc sb = new StringBuffer JavaDoc (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     } // setPage
541

542     /*************************************************************************/
543
544     /**
545      * (Re)Set Drill Accross Cursor
546      */

547     private void cmd_drill()
548     {
549         m_drillDown = comboDrill.getSelectedIndex() < 1; // -1 or 0
550
if (m_drillDown)
551             setCursor(Cursor.getDefaultCursor());
552         else
553             setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
554     } // cmd_drill
555

556     /**
557      * Mouse clicked
558      * @param e event
559      */

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(); // setCursor
586
} // mouse_clicked
587

588     /**
589      * Execute Drill to Query
590      * @param query query
591      */

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     } // executeDrill
605

606     /*************************************************************************/
607
608     /**
609      * Print Report
610      */

611     private void cmd_print()
612     {
613         setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
614         m_reportEngine.print(true, 1, false, null);
615         cmd_drill(); // setCursor
616
} // cmd_print
617

618     /**
619      * Print Setup Dialog
620      */

621     private void cmd_pageSetup()
622     {
623         setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
624         m_reportEngine.pageSetupDialog();
625         revalidate();
626         cmd_drill(); // setCursor
627
} // cmd_pageSetup
628

629     /**
630      * Export
631      */

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         //
642
JFileChooser chooser = new JFileChooser();
643         chooser.setDialogType(JFileChooser.SAVE_DIALOG);
644         chooser.setDialogTitle(Msg.getMsg(m_ctx, "Export") + ": " + getTitle());
645         //
646
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         //
652
if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION)
653             return;
654
655         // Create File
656
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 JavaDoc ext = outFile.getPath();
669         // no extension
670
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(); // setCursor
692
} // cmd_export
693

694     /**
695      * Report Combo - Start other Report or create new one
696      */

697     private void cmd_report()
698     {
699         KeyNamePair pp = (KeyNamePair)comboReport.getSelectedItem();
700         if (pp == null)
701             return;
702         //
703
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
704         MPrintFormat pf = null;
705         int AD_PrintFormat_ID = pp.getKey();
706
707         // create new
708
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(); // setCursor
720
} // cmd_report
721

722     /**
723      * Query Report
724      */

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) // No Tab for Table exists
732
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(); // setCursor
740
} // cmd_find
741

742     /**
743      * Call Customize
744      */

745     private void cmd_customize()
746     {
747         AWindow win = new AWindow ();
748         new AWindowListener (win, this); // forwards Window Events
749
int AD_Window_ID = 240; // hardcoded
750
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         // see windowStateChanged for applying change
754
} // cmd_customize
755

756     /**
757      * Window State Listener for Customize Window
758      * @param e event
759      */

760     public void windowStateChanged (WindowEvent e)
761     {
762         // The Customize Window was closed
763
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); // needs to be re-set - otherwise viewer will be blank
771
pf.setTranslationLanguage (language);
772             m_reportEngine.setPrintFormat(pf);
773             revalidate();
774             cmd_drill(); // setCursor
775
}
776     } // windowStateChanged
777

778     /**
779      * Set Zoom Level
780      */

781     private void cmd_zoom()
782     {
783         setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
784 // m_viewPanel.setZoomLevel(comboZoom.getSelectedIndex());
785
revalidate();
786         cmd_drill(); // setCursor
787
} // cmd_zoom
788

789
790     /**
791      * Show Translation Dialog.
792      * Translate base table entry, will be copied to trl tables if not multi-lingual
793      */

794     private void cmd_translate()
795     {
796         ArrayList list = new ArrayList();
797         ValueNamePair pp = null;
798         String JavaDoc 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         // Dialog
814
String JavaDoc title = Msg.getMsg(Env.getCtx(), "PrintFormatTrl", true);
815         String JavaDoc 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         //
822
pp = (ValueNamePair)list.get(choice);
823         String JavaDoc 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 JavaDoc sb = new StringBuffer JavaDoc();
827         // English
828
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         //
857
m_reportEngine.setPrintFormat(MPrintFormat.get (AD_PrintFormat_ID, true));
858         revalidate();
859     } // cmd_translate
860

861     /*************************************************************************/
862
863     /**
864      * Test
865      * @param args args
866      */

867     static public void main (String JavaDoc[] 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 JavaDoc(103));
873
874         // 102 = Invoice - 100 = Order
875
MPrintFormat f = MPrintFormat.get (102, false);
876         ReportEngine re = new ReportEngine(Env.getCtx(), f, q);
877
878     // MPrintFormat f = new MPrintFormat(Env.getCtx(), 101);
879
// ReportEngine re = new ReportEngine(f, null);
880

881         new Viewer(re);
882     } // main
883

884 } // Viewer
885

886
Popular Tags