SpoolExportWizard.java
上传用户:xiekaiwei
上传日期:2015-07-04
资源大小:620k
文件大小:34k
源码类别:

Telnet客户端

开发平台:

Java

  1. package org.tn5250j.spoolfile;
  2. /**
  3.  * Title: SpoolExportWizard.java
  4.  * Copyright:   Copyright (c) 2002
  5.  * Company:
  6.  * @author  Kenneth J. Pouncey
  7.  * @version 0.1
  8.  *
  9.  * Description:
  10.  *
  11.  * This program is free software; you can redistribute it and/or modify
  12.  * it under the terms of the GNU General Public License as published by
  13.  * the Free Software Foundation; either version 2, or (at your option)
  14.  * any later version.
  15.  *
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  * GNU General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this software; see the file COPYING.  If not, write to
  23.  * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  24.  * Boston, MA 02111-1307 USA
  25.  *
  26.  */
  27. import java.awt.*;
  28. import java.awt.event.*;
  29. import javax.swing.*;
  30. import java.io.*;
  31. import com.ibm.as400.access.*;
  32. import com.ibm.as400.vaccess.*;
  33. import org.tn5250j.tools.*;
  34. import org.tn5250j.event.WizardListener;
  35. import org.tn5250j.event.WizardEvent;
  36. import org.tn5250j.gui.Wizard;
  37. import org.tn5250j.gui.WizardPage;
  38. import org.tn5250j.gui.TN5250jFrame;
  39. import org.tn5250j.gui.TN5250jFileChooser;
  40. import org.tn5250j.SessionGUI;
  41. import org.tn5250j.mailtools.SendEMailDialog;
  42. import com.lowagie.text.pdf.*;
  43. import com.lowagie.text.*;
  44. /**
  45.  *
  46.  */
  47. public class SpoolExportWizard extends TN5250jFrame implements WizardListener {
  48.    JPanel contentPane;
  49.    JLabel statusBar = new JLabel();
  50.    JPanel spoolPanel = new JPanel();
  51.    JPanel spoolData = new JPanel();
  52.    JPanel spoolOptions = new JPanel();
  53.    JPanel destPanel = new JPanel();
  54.    JLabel labelSpooledFile = new JLabel();
  55.    JLabel spooledFile = new JLabel();
  56.    JLabel labelJobName = new JLabel();
  57.    JLabel jobName = new JLabel();
  58.    JLabel labelUser = new JLabel();
  59.    JLabel user = new JLabel();
  60.    JLabel labelNumber = new JLabel();
  61.    JLabel number = new JLabel();
  62.    JLabel labelFileNumber = new JLabel();
  63.    JLabel spooledFileNumber = new JLabel();
  64.    JLabel labelSystem = new JLabel();
  65.    JLabel systemName = new JLabel();
  66.    JLabel labelPages = new JLabel();
  67.    JLabel pages = new JLabel();
  68.    JComboBox cvtType;
  69.    JTextField pcPathInfo;
  70.    JTextField ifsPathInfo;
  71.    JButton pcSave;
  72.    JButton ifsSave;
  73.    JRadioButton pc;
  74.    JRadioButton ifs;
  75.    JRadioButton email;
  76.    // PDF Properties
  77.    JTextField title;
  78.    JTextField subject;
  79.    JTextField author;
  80.    // PDF Options
  81.    JTextField fontSize;
  82.    JComboBox pageSize;
  83.    JRadioButton portrait;
  84.    JRadioButton landscape;
  85.    // Text Options
  86.    JCheckBox openAfter;
  87.    JTextField editor;
  88.    JButton getEditor;
  89.    // Spooled File
  90.    SpooledFile splfile;
  91.    // Session object
  92.    SessionGUI session;
  93.    JPanel twoPDF;
  94.    JPanel twoText;
  95.    // Wizard
  96.    Wizard wizard;
  97.    WizardPage page;
  98.    WizardPage pagePDF;
  99.    WizardPage pageText;
  100.    JButton nextButton;
  101.    // pdf variables
  102.    private PdfWriter bos;
  103.    private Document document;
  104.    private com.lowagie.text.Font font;
  105.    // output stream
  106.    private FileOutputStream fw;
  107.    private IFSFileOutputStream ifsfw;
  108.    // conical path of file
  109.    private String conicalPath;
  110.    // exporting worker thread
  111.    private Thread workingThread;
  112.    //Construct the frame
  113.    public SpoolExportWizard(SpooledFile splfile, SessionGUI session) {
  114.       enableEvents(AWTEvent.WINDOW_EVENT_MASK);
  115.       this.splfile = splfile;
  116.       this.session = session;
  117.       try {
  118.          jbInit();
  119.       }
  120.       catch(Exception e) {
  121.          e.printStackTrace();
  122.       }
  123.    }
  124.    //Component initialization
  125.    private void jbInit() throws Exception  {
  126.       // create ourselves a new wizard
  127.       wizard = new Wizard();
  128.       // create the event handler as being this module
  129.       wizard.addWizardListener(this);
  130.       // add our wizard to the frame
  131.       this.getContentPane().add(wizard);
  132.       // create the first wizard page
  133.       page = new WizardPage(WizardPage.NEXT |
  134.                        WizardPage.FINISH |
  135.                        WizardPage.CANCEL |
  136.                        WizardPage.HELP);
  137.       page.setName(LangTool.getString("spool.titlePage1"));
  138.       setTitle(page.getName());
  139.       // get the next button so we can set it enabled or disabled depending
  140.       // on output type.
  141.       nextButton = page.getNextButton();
  142.       page.getContentPane().add(pageOne(), BorderLayout.CENTER);
  143.       wizard.add(page);
  144.       pagePDF = new WizardPage(WizardPage.PREVIOUS |
  145.                        WizardPage.FINISH |
  146.                        WizardPage.CANCEL |
  147.                        WizardPage.HELP);
  148.       pagePDF.setName(LangTool.getString("spool.titlePage2PDF"));
  149.       pagePDF.getContentPane().add(pageTwoPDF(), BorderLayout.CENTER);
  150.       wizard.add(pagePDF);
  151.       pageText = new WizardPage(WizardPage.PREVIOUS |
  152.                        WizardPage.FINISH |
  153.                        WizardPage.CANCEL |
  154.                        WizardPage.HELP);
  155.       pageText.setName(LangTool.getString("spool.titlePage2Txt"));
  156.       pageText.getContentPane().add(pageTwoText(), BorderLayout.CENTER);
  157.       wizard.add(pageText);
  158.       pack();
  159.       //Center the window
  160.       Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  161.       Dimension frameSize = getSize();
  162.       if (frameSize.height > screenSize.height)
  163.          frameSize.height = screenSize.height;
  164.       if (frameSize.width > screenSize.width)
  165.          frameSize.width = screenSize.width;
  166.       setLocation((screenSize.width - frameSize.width) / 2,
  167.                      (screenSize.height - frameSize.height) / 2);
  168.    }
  169.    /**
  170.     * Create the second page of the wizard pages for PDF
  171.     *
  172.     * @return
  173.     */
  174.    private JPanel pageTwoPDF () {
  175.       twoPDF = new JPanel();
  176.       twoPDF.setLayout(new BorderLayout());
  177.       JPanel docProps = new JPanel();
  178.       docProps.setBorder(BorderFactory.createTitledBorder(
  179.                            LangTool.getString("spool.labelProps")));
  180.       docProps.setLayout(new AlignLayout(2,5,5));
  181.       docProps.add(new JLabel(LangTool.getString("spool.labelPropsTitle")));
  182.       docProps.add(title = new JTextField(40));
  183.       docProps.add(new JLabel(LangTool.getString("spool.labelPropsSubject")));
  184.       docProps.add(subject = new JTextField(40));
  185.       docProps.add(new JLabel(LangTool.getString("spool.labelPropsAuthor")));
  186.       docProps.add(author = new JTextField(40));
  187.       JPanel options = new JPanel();
  188.       options.setBorder(BorderFactory.createTitledBorder(
  189.                            LangTool.getString("spool.labelOpts")));
  190.       options.setLayout(new AlignLayout(2,5,5));
  191.       options.add(new JLabel(LangTool.getString("spool.labelOptsFontSize")));
  192.       options.add(fontSize = new JTextField(5));
  193.       options.add(new JLabel(LangTool.getString("spool.labelOptsPageSize")));
  194.       options.add(pageSize = new JComboBox());
  195.       pageSize.addItem("A3");
  196.       pageSize.addItem("A4");
  197.       pageSize.addItem("A5");
  198.       pageSize.addItem("LETTER");
  199.       pageSize.addItem("LEGAL");
  200.       pageSize.addItem("LEDGER");
  201.       options.add(portrait =
  202.                new JRadioButton(LangTool.getString("spool.labelOptsPortrait")));
  203.       options.add(landscape =
  204.                new JRadioButton(LangTool.getString("spool.labelOptsLandscape")));
  205.       ButtonGroup orientation = new ButtonGroup();
  206.       orientation.add(portrait);
  207.       orientation.add(landscape);
  208.       landscape.setSelected(true);
  209.       twoPDF.add(docProps,BorderLayout.NORTH);
  210.       twoPDF.add(options,BorderLayout.CENTER);
  211.       return twoPDF;
  212.    }
  213.    /**
  214.     * Create the second page of the wizard pages for Text
  215.     *
  216.     * @return
  217.     */
  218.    private JPanel pageTwoText () {
  219.       twoText = new JPanel();
  220.       twoText.setLayout(new BorderLayout());
  221.       JPanel textProps = new JPanel();
  222.       textProps.setBorder(BorderFactory.createTitledBorder(
  223.                            LangTool.getString("spool.labelTextProps")));
  224.       textProps.setLayout(new AlignLayout(2,5,5));
  225.       textProps.add(openAfter =
  226.                   new JCheckBox(LangTool.getString("spool.labelUseExternal")));
  227.       textProps.add(new JLabel());
  228.       textProps.add(editor = new JTextField(30));
  229.       getEditor = new JButton("Browse");
  230.       getEditor.addActionListener(new java.awt.event.ActionListener() {
  231.          public void actionPerformed(ActionEvent e) {
  232.             getEditor();
  233.          }
  234.       });
  235.       textProps.add(getEditor);
  236.       // see if we have an external viewer defined and if we use it or not
  237.       if (session.getSession().getConfiguration().isPropertyExists("useExternal"))
  238.          openAfter.setEnabled(true);
  239.       if (session.getSession().getConfiguration().isPropertyExists("externalViewer"))
  240.          editor.setText(session.getSession().getConfiguration().getStringProperty("externalViewer"));
  241.       twoText.add(textProps,BorderLayout.CENTER);
  242.       return twoText;
  243.    }
  244.    /**
  245.     * Create the first page of the export wizard
  246.     *
  247.     * @return
  248.     * @throws Exception
  249.     */
  250.    private JPanel pageOne () throws Exception {
  251.       contentPane = new JPanel();
  252.       contentPane.setLayout(new BorderLayout());
  253.       statusBar.setText(" ");
  254.       statusBar.setBorder(BorderFactory.createEtchedBorder());
  255.       spoolPanel.setLayout(new BorderLayout());
  256.       contentPane.add(spoolPanel, BorderLayout.CENTER);
  257.       contentPane.add(statusBar, BorderLayout.SOUTH);
  258.       // create the labels to be used for the spooled file data
  259.       labelSpooledFile.setText(LangTool.getString("spool.labelSpooledFile"));
  260.       labelJobName.setText(LangTool.getString("spool.labelJobName"));
  261.       labelUser.setText(LangTool.getString("spool.labelJobUser"));
  262.       labelNumber.setText(LangTool.getString("spool.labelJobNumber"));
  263.       labelFileNumber.setText(LangTool.getString("spool.labelSpoolNumber"));
  264.       labelSystem.setText(LangTool.getString("spool.labelSystem"));
  265.       labelPages.setText(LangTool.getString("spool.labelPages"));
  266.       spoolData.setLayout(new AlignLayout(2,5,5));
  267.       spoolData.setBorder(BorderFactory.createTitledBorder(
  268.                                        LangTool.getString("spool.labelSpoolInfo")));
  269.       // create the data fields to be used for the spooled file data
  270.       spooledFile.setText(splfile.getName());
  271.       jobName.setText(splfile.getJobName());
  272.       user.setText(splfile.getJobUser());
  273.       spooledFileNumber.setText(Integer.toString(splfile.getNumber()));
  274.       number.setText(splfile.getJobNumber());
  275.       systemName.setText(splfile.getSystem().getSystemName());
  276.       pages.setText(splfile.getIntegerAttribute(SpooledFile.ATTR_PAGES).toString());
  277.       spoolData.add(labelSystem, null);
  278.       spoolData.add(systemName, null);
  279.       spoolData.add(labelSpooledFile, null);
  280.       spoolData.add(spooledFile, null);
  281.       spoolData.add(labelJobName, null);
  282.       spoolData.add(jobName, null);
  283.       spoolData.add(labelUser, null);
  284.       spoolData.add(user, null);
  285.       spoolData.add(labelNumber, null);
  286.       spoolData.add(number, null);
  287.       spoolData.add(labelFileNumber, null);
  288.       spoolData.add(spooledFileNumber, null);
  289.       spoolData.add(labelPages, null);
  290.       spoolData.add(pages, null);
  291.       spoolPanel.add(spoolOptions,  BorderLayout.SOUTH);
  292.       // set the spool export panel
  293.       spoolPanel.add(spoolData,  BorderLayout.CENTER);
  294.       spoolOptions.setLayout(new BorderLayout());
  295.       JPanel spoolInfo = new JPanel();
  296.       AlignLayout alignMe2 = new AlignLayout(3,5,5);
  297.       spoolInfo.setLayout(alignMe2);
  298.       spoolInfo.setBorder(BorderFactory.createTitledBorder(
  299.                            LangTool.getString("spool.labelExportInfo")));
  300.       cvtType = new JComboBox();
  301.       cvtType.addItem(LangTool.getString("spool.toPDF"));
  302.       cvtType.addItem(LangTool.getString("spool.toText"));
  303. //         cvtType.addItemListener(new java.awt.event.ItemListener() {
  304. //            public void itemStateChanged(ItemEvent e) {
  305. //   //            if (((String)cvtType.getSelectedItem()).equals(
  306. //   //                                          LangTool.getString("spool.toText"))) {
  307. //   //               twoText.setVisible(true);
  308. //   //               twoPDF.setVisible(false);
  309. //   //            }
  310. //   //            else {
  311. //   //               twoText.setVisible(false);
  312. //   //               twoPDF.setVisible(true);
  313. //   //            }
  314. //            }
  315. //         });
  316.       spoolInfo.add(new JLabel(LangTool.getString("spool.labelFormat")));
  317.       spoolInfo.add(cvtType);
  318.       spoolInfo.add(new JLabel(""));
  319.       pc = new JRadioButton(LangTool.getString("spool.labelPCPath"));
  320.       pcPathInfo = new JTextField(30);
  321.       pcSave = new JButton("...");
  322.       pcSave.addActionListener(new java.awt.event.ActionListener() {
  323.          public void actionPerformed(ActionEvent e) {
  324.             getPCFile();
  325.          }
  326.       });
  327.       spoolInfo.add(pc);
  328.       spoolInfo.add(pcPathInfo);
  329.       spoolInfo.add(pcSave);
  330.       ifs = new JRadioButton(LangTool.getString("spool.labelIFSPath"));
  331.       ifsPathInfo = new JTextField(30);
  332.       ifsSave = new JButton("...");
  333.       ifsSave.addActionListener(new java.awt.event.ActionListener() {
  334.          public void actionPerformed(ActionEvent e) {
  335.             getIFSFile();
  336.          }
  337.       });
  338.       spoolInfo.add(ifs);
  339.       spoolInfo.add(ifsPathInfo);
  340.       spoolInfo.add(ifsSave);
  341.       email = new JRadioButton(LangTool.getString("spool.labelEmail"));
  342.       spoolInfo.add(email);
  343.       spoolInfo.add(new JLabel(""));
  344.       spoolInfo.add(new JLabel(""));
  345.       ButtonGroup bg = new ButtonGroup();
  346.       bg.add(pc);
  347.       bg.add(ifs);
  348.       bg.add(email);
  349.       pc.addItemListener(new java.awt.event.ItemListener() {
  350.          public void itemStateChanged(ItemEvent e) {
  351.             doItemStateChanged(e);
  352.          }
  353.       });
  354.       ifs.addItemListener(new java.awt.event.ItemListener() {
  355.          public void itemStateChanged(ItemEvent e) {
  356.             doItemStateChanged(e);
  357.          }
  358.       });
  359.       email.addItemListener(new java.awt.event.ItemListener() {
  360.          public void itemStateChanged(ItemEvent e) {
  361.             doItemStateChanged(e);
  362.          }
  363.       });
  364.       pc.setSelected(true);
  365.       spoolOptions.add(spoolInfo,BorderLayout.CENTER);
  366.       return contentPane;
  367.    }
  368.    /**
  369.     * React on the state change for radio buttons
  370.     *
  371.     * @param e Item event to react to
  372.     */
  373.    private void doItemStateChanged(ItemEvent e) {
  374.       pcPathInfo.setEnabled(false);
  375.       ifsPathInfo.setEnabled(false);
  376.       pcSave.setEnabled(false);
  377.       ifsSave.setEnabled(false);
  378.       if (e.getStateChange() == ItemEvent.SELECTED) {
  379.          if (pc.isSelected()) {
  380.             pcPathInfo.setEnabled(true);
  381.             pcSave.setEnabled(true);
  382.             pcPathInfo.grabFocus();
  383.          }
  384.          if (ifs.isSelected()) {
  385.             ifsPathInfo.setEnabled(true);
  386.             ifsSave.setEnabled(true);
  387.             ifsPathInfo.grabFocus();
  388.          }
  389.       }
  390.    }
  391.    private boolean pagesValid() {
  392.       if (pc.isSelected()) {
  393.          if (pcPathInfo.getText().length() == 0)
  394.             getPCFile();
  395.          if (pcPathInfo.getText().length() == 0)
  396.             return false;
  397.       }
  398.       return true;
  399.    }
  400.    /**
  401.     * Get the local file from a file chooser
  402.     */
  403.    private void getPCFile() {
  404.       String workingDir = System.getProperty("user.dir");
  405.       TN5250jFileChooser pcFileChooser = new TN5250jFileChooser(workingDir);
  406.       // set the file filters for the file chooser
  407.       ExportFileFilter filter;
  408.       if (((String)cvtType.getSelectedItem()).equals(LangTool.getString("spool.toPDF")))
  409.          filter = new ExportFileFilter("pdf","PDF Files");
  410.       else
  411.          filter = new ExportFileFilter("txt","Text Files");
  412.       pcFileChooser.addChoosableFileFilter(filter );
  413.       int ret = pcFileChooser.showSaveDialog(this);
  414.       // check to see if something was actually chosen
  415.       if (ret == JFileChooser.APPROVE_OPTION) {
  416.          File file = pcFileChooser.getSelectedFile();
  417.          pcPathInfo.setText(filter.setExtension(file));
  418.       }
  419.    }
  420.    /**
  421.     * Get the IFS file from a file chooser
  422.     */
  423.    private void getIFSFile() {
  424.       IFSFileDialog fd = new IFSFileDialog(this, "Save As", splfile.getSystem());
  425.       com.ibm.as400.vaccess.FileFilter[] filterList =
  426.                                        new com.ibm.as400.vaccess.FileFilter[2];
  427.       filterList[0] = new com.ibm.as400.vaccess.FileFilter("All files (*.*)",
  428.                                                             "*.*");
  429.       // Set up the filter based on the type of export specifed
  430.       if (cvtType.getSelectedIndex() == 0) {
  431.          filterList[1] = new com.ibm.as400.vaccess.FileFilter("PDF files (*.pdf)",
  432.                                                                "*.pdf");
  433.       }
  434.       else {
  435.          filterList[1] = new com.ibm.as400.vaccess.FileFilter("Text files (*.txt)",
  436.                                                                "*.txt");
  437.       }
  438.       fd.setFileFilter(filterList, 1);
  439.       // show the dialog and obtain the file if selected
  440.       if (fd.showDialog() == IFSFileDialog.OK) {
  441.          ifsPathInfo.setText(fd.getAbsolutePath());
  442.       }
  443.    }
  444.    /**
  445.     * Get the local file from a file chooser
  446.     */
  447.    private void getEditor() {
  448.       String workingDir = System.getProperty("user.dir");
  449.       TN5250jFileChooser pcFileChooser = new TN5250jFileChooser(workingDir);
  450.       int ret = pcFileChooser.showOpenDialog(this);
  451.       // check to see if something was actually chosen
  452.       if (ret == JFileChooser.APPROVE_OPTION) {
  453.          File file = pcFileChooser.getSelectedFile();
  454.          try {
  455.             editor.setText(file.getCanonicalPath());
  456.          }
  457.          catch (IOException e) {
  458.          }
  459.       }
  460.    }
  461.    /**
  462.     * Overridden so we can exit when window is closed
  463.     */
  464.    protected void processWindowEvent(WindowEvent e) {
  465.       super.processWindowEvent(e);
  466.       if (e.getID() == WindowEvent.WINDOW_CLOSING) {
  467.          this.setVisible(false);
  468.          this.dispose();
  469.       }
  470.    }
  471.    /**
  472.     * Export the spool file
  473.     */
  474.    private void doExport() {
  475.       if (!pagesValid())
  476.          return;
  477.       workingThread = null;
  478.       if (cvtType.getSelectedIndex() == 0)
  479.          workingThread = new Thread(new Runnable () {
  480.             public void run() {
  481.                cvtToPDF();
  482.             }
  483.          });
  484.       else
  485.          workingThread = new Thread(new Runnable () {
  486.             public void run() {
  487.                cvtToText();
  488.             }
  489.          });
  490.       workingThread.start();
  491.    }
  492.    /**
  493.     * E-mail the information after export
  494.     */
  495.    private void emailMe() {
  496.       SendEMailDialog semd = new SendEMailDialog(this,
  497.                                  session,conicalPath);
  498.    }
  499.    /**
  500.     * Convert spoolfile to text file
  501.     */
  502.    private void cvtToText() {
  503.       java.io.PrintStream dw;
  504.       try {
  505.          openOutputFile();
  506.          if (ifs.isSelected())
  507.             dw = new java.io.PrintStream(ifsfw);
  508.          else
  509.             dw = new java.io.PrintStream(fw);
  510.          // Create an AS400 object.  The system name was passed
  511.          // as the first command line argument.
  512.          AS400 system = new AS400 (systemName.getText());
  513.          String splfName = spooledFile.getText();
  514.          int splfNumber = Integer.parseInt(spooledFileNumber.getText());
  515.          String _jobName = jobName.getText();
  516.          String _jobUser = user.getText();
  517.          String _jobNumber = number.getText();
  518.          SpooledFile splF = new SpooledFile(system,
  519.          splfName,
  520.          splfNumber,
  521.          _jobName,
  522.          _jobUser,
  523.          _jobNumber);
  524.          PrintParameterList printParms = new PrintParameterList();
  525.          printParms.setParameter(PrintObject.ATTR_WORKSTATION_CUST_OBJECT,
  526.          "/QSYS.LIB/QWPDEFAULT.WSCST");
  527.          printParms.setParameter(PrintObject.ATTR_MFGTYPE, "*WSCST");
  528.          // get the text (via a transformed input stream) from the spooled file
  529.          PrintObjectTransformedInputStream inStream = splF.getTransformedInputStream(printParms);
  530.          //            DataInputStream dis = new DataInputStream(inStream);
  531.          // get the number of available bytes
  532.          int avail = inStream.available();
  533.          byte[] buf = new byte[avail + 1];
  534.          int read = 0;
  535.          int totBytes = 0;
  536.          StringBuffer sb = new StringBuffer();
  537.          updateStatus("Starting Output");
  538.          // read the transformed spooled file, creating the jobLog String
  539.          while (avail > 0) {
  540.             if (avail > buf.length) {
  541.                buf = new byte[avail + 1];
  542.             }
  543.             read = inStream.read(buf, 0, avail);
  544.             for (int x = 0; x < read; x++) {
  545.                switch (buf[x]) {
  546.                   case 0x0:      // 0x00
  547.                      break;
  548.                   // write line feed to the stream
  549.                   case 0x0A:
  550.                      dw.println(sb.toString().toCharArray());
  551.                      sb.setLength(0);
  552.                      break;
  553.                   // we will skip the carrage return
  554.                   case 0x0D:
  555. //                     sb.append('n');
  556. //                     writeChar("n");
  557. //                     System.out.println();
  558.                      break;
  559.                   // new page
  560.                   case 0x0C:
  561. //                     writeChar(sb.toString());
  562. //                     dw.write(sb.toString().getBytes());
  563.                      dw.println(sb.toString().toCharArray());
  564.                      sb.setLength(0);
  565.                      break;
  566.                   default:
  567.                      sb.append(byte2char(buf[x], "cp850"));
  568.                }
  569.             }
  570.             totBytes += read;
  571.             updateStatus("Bytes read " + totBytes);
  572.             //
  573.             // process the data buffer
  574.             //
  575.             avail = inStream.available();
  576.          }
  577.          if (sb.length() > 0)
  578.             dw.println(sb.toString().toCharArray());
  579.          dw.flush();
  580.          dw.close();
  581.          updateStatus("Total bytes converted " + totBytes);
  582.          // if we are to open it afterwards then execute the program with the
  583.          //  text file as a parameter
  584.          if (openAfter.isSelected()) {
  585.             // not sure if this works on linux yet but here we go.
  586.             try {
  587.                Runtime rt = Runtime.getRuntime();
  588.                String[] cmdArray = {editor.getText(),pcPathInfo.getText()};
  589.                // We need to probably do some checking here in the future
  590.                // Process proc = rt.exec(cmdArray);
  591.                rt.exec(cmdArray);
  592.                // now we set the field to use external viewer or not
  593.                if (openAfter.isSelected())
  594.                   session.getSession().getConfiguration().setProperty("useExternal","");
  595.                else
  596.                   session.getSession().getConfiguration().removeProperty("useExternal");
  597.                // now we set the property for external viewer
  598.                session.getSession().getConfiguration().setProperty("externalViewer",
  599.                                                       editor.getText());
  600.                // save it off
  601.                session.getSession().getConfiguration().saveSessionProps();
  602.             }
  603.             catch (Throwable t) {
  604.                // print a stack trace
  605.                t.printStackTrace();
  606.                // throw up the message error
  607.                JOptionPane.showMessageDialog(this,t.getMessage(),"error",
  608.                                                 JOptionPane.ERROR_MESSAGE);
  609.             }
  610.          }
  611.          if (email.isSelected())
  612.             emailMe();
  613.         }
  614.         catch (Exception e) {
  615.            updateStatus("Error: " + e.getMessage ());
  616.            System.out.println ("Error: " + e.getMessage ());
  617.         }
  618.    }
  619.    /**
  620.     * Convert spoolfile to PDF file
  621.     */
  622.    private void cvtToPDF() {
  623.       try {
  624.          openOutputFile();
  625.          // Create the printparameters to be used in the transform of the
  626.          //    input stream
  627.          PrintParameterList printParms = new PrintParameterList();
  628.          printParms.setParameter(PrintObject.ATTR_WORKSTATION_CUST_OBJECT,
  629.          "/QSYS.LIB/QWPDEFAULT.WSCST");
  630.          printParms.setParameter(PrintObject.ATTR_MFGTYPE, "*WSCST");
  631.          // get the text (via a transformed input stream) from the spooled file
  632.          PrintObjectTransformedInputStream inStream = splfile.getTransformedInputStream(printParms);
  633.          // get the number of available bytes
  634.          int avail = inStream.available();
  635.          byte[] buf = new byte[avail + 1];
  636.          int read = 0;
  637.          int totBytes = 0;
  638.          StringBuffer sb = new StringBuffer();
  639.          updateStatus("Starting Output");
  640.          // read the transformed spooled file, creating the jobLog String
  641.          while (avail > 0) {
  642.             if (avail > buf.length) {
  643.                buf = new byte[avail + 1];
  644.             }
  645.             read = inStream.read(buf, 0, avail);
  646.             for (int x = 0; x < read; x++) {
  647.                switch (buf[x]) {
  648.                   case 0x0:      // 0x00
  649.                      break;
  650.                   // write line feed to the stream
  651.                   case 0x0A:
  652. //                     writeChar(sb.toString());
  653.                      sb.append((char)buf[x]);
  654. //                     System.out.print(sb);
  655. //                     sb.setLength(0);
  656.                      break;
  657.                   // we will skip the carrage return
  658.                   case 0x0D:
  659. //                     sb.append('n');
  660. //                     writeChar("n");
  661. //                     System.out.println();
  662.                      break;
  663.                   // new page
  664.                   case 0x0C:
  665.                      writeBuffer(sb.toString());
  666.                      document.newPage();
  667.                      sb.setLength(0);
  668.                      break;
  669.                   default:
  670.                      sb.append(byte2char(buf[x], "cp850"));
  671.                }
  672.             }
  673.             totBytes += read;
  674.             updateStatus("Bytes read " + totBytes);
  675.             //
  676.             // process the data buffer
  677.             //
  678.             avail = inStream.available();
  679.          }
  680.          closeOutputFile();
  681.          updateStatus("Total bytes converted " + totBytes);
  682.          if (email.isSelected())
  683.             emailMe();
  684.         }
  685.         catch (Exception e) {
  686.            updateStatus("Error: " + e.getMessage ());
  687.            System.out.println ("Error: " + e.getMessage ());
  688.         }
  689.    }
  690.    /**
  691.     *
  692.     * @param s
  693.     */
  694.    private void writeBuffer(String s) {
  695.       if (!document.isOpen())
  696.          document.open();
  697.       try {
  698.          document.add(new Paragraph(s,font));
  699.       }
  700.       catch (com.lowagie.text.DocumentException de) {
  701.          System.out.println(de);
  702.       }
  703.    }
  704.    /**
  705.     * Open the correct type of output file depending on selection(s)
  706.     */
  707.    public void openOutputFile() {
  708.       try {
  709.          // update status
  710.          updateStatus("Opening File");
  711.          // default to txt extention
  712.          String suffix = ".txt";
  713.          String fileName = "";
  714.          // if pdf then change to pdf extenstion
  715.          if (cvtType.getSelectedIndex() == 0)
  716.             suffix = ".pdf";
  717.          // for e-mailing setup a temporary file
  718.          if (email.isSelected()) {
  719.             File dir = new File(System.getProperty("user.dir"));
  720.             //  setup the temp file name
  721.             String tempFile = spooledFile.getText().trim() + '_' +
  722.                               jobName.getText().trim() + '_' +
  723.                               user.getText().trim() + '_' +
  724.                               spooledFileNumber.getText().trim() + '_' +
  725.                               number.getText().trim();
  726.             // create the temporary file
  727.             File f = File.createTempFile(tempFile,suffix,dir);
  728.             System.out.println(f.getName());
  729.             System.out.println(f.getCanonicalPath());
  730.             conicalPath = f.getCanonicalPath();
  731.             // set it to delete on exit
  732.             f.deleteOnExit();
  733.             // create the file
  734.             fw = new FileOutputStream(f);
  735.          }
  736.          else
  737.             if (ifs.isSelected()) {
  738.                fileName = ifsPathInfo.getText().trim();
  739.                ifsfw = new IFSFileOutputStream(splfile.getSystem(),fileName);
  740.             }
  741.             else {
  742.                fileName = pcPathInfo.getText().trim();
  743.                fw = new FileOutputStream(fileName);
  744.             }
  745.          // if not PDF then this is all we have to do so return
  746.          if (cvtType.getSelectedIndex() > 0)
  747.             return;
  748.          // On pdf's then we need to create a PDF document
  749.          if (document == null) {
  750.             document = new Document();
  751.             // create the pdf writer based on selection of pc or ifs file
  752.             if (ifs.isSelected()) {
  753.                bos = PdfWriter.getInstance(document,ifsfw);
  754.             }
  755.             else {
  756.                bos = PdfWriter.getInstance(document,fw);
  757.             }
  758.             // create the base font
  759.             BaseFont bf = BaseFont.createFont("Courier", "Cp1252", false);
  760.             // set the default size of the font to 9.0
  761.             float fontsize = 9.0f;
  762.             // if we have a font selectd then try to use it
  763.             if (fontSize.getText().length() > 0)
  764.                fontsize = Float.parseFloat(fontSize.getText().trim());
  765.             // create the pdf font to use within the document
  766.             font = new com.lowagie.text.Font(bf, fontsize,
  767.                                              com.lowagie.text.Font.NORMAL);
  768.             // set the PDF properties of the supplied properties
  769.             if (author.getText().length() > 0)
  770.                document.addAuthor(author.getText());
  771.             if (title.getText().length() > 0)
  772.                document.addTitle(title.getText());
  773.             if (subject.getText().length() > 0)
  774.                document.addSubject(subject.getText());
  775.             // set the page sizes and the page orientation
  776.             String ps = (String)pageSize.getSelectedItem();
  777.             if (ps.equals("A3")) {
  778.                if (portrait.isSelected())
  779.                   document.setPageSize(PageSize.A3);
  780.                else
  781.                   document.setPageSize(PageSize.A3.rotate());
  782.             }
  783.             if (ps.equals("A4")) {
  784.                if (portrait.isSelected())
  785.                   document.setPageSize(PageSize.A4);
  786.                else
  787.                   document.setPageSize(PageSize.A4.rotate());
  788.             }
  789.             if (ps.equals("A5")) {
  790.                if (portrait.isSelected())
  791.                   document.setPageSize(PageSize.A5);
  792.                else
  793.                   document.setPageSize(PageSize.A5.rotate());
  794.             }
  795.             if (ps.equals("LETTER")) {
  796.                if (portrait.isSelected())
  797.                   document.setPageSize(PageSize.LETTER);
  798.                else
  799.                   document.setPageSize(PageSize.LETTER.rotate());
  800.             }
  801.             if (ps.equals("LEGAL")) {
  802.                if (portrait.isSelected())
  803.                   document.setPageSize(PageSize.LEGAL);
  804.                else
  805.                   document.setPageSize(PageSize.LEGAL.rotate());
  806.             }
  807.             if (ps.equals("LEDGER")) {
  808.                if (portrait.isSelected())
  809.                   document.setPageSize(PageSize.LEDGER);
  810.                else
  811.                   document.setPageSize(PageSize.LEDGER.rotate());
  812.             }
  813.          }
  814.       }
  815.       catch(IOException _ex) {
  816.          System.out.println("Cannot open 1 " + _ex.getMessage());
  817.       }
  818.       catch(Exception _ex2) {
  819.          System.out.println("Cannot open 2 " + _ex2.getMessage());
  820.       }
  821.    }
  822.    private void closeOutputFile() {
  823.          document.close();
  824.          document = null;
  825.    }
  826.    private void updateStatus(final String stat) {
  827.       SwingUtilities.invokeLater(
  828.          new Runnable () {
  829.             public void run() {
  830.                statusBar.setText(stat);
  831.             }
  832.          }
  833.       );
  834.    }
  835.    public void nextBegin(WizardEvent e) {
  836. //      System.out.println(e.getCurrentPage().getName() + " Next Begin");
  837.       if (((String)cvtType.getSelectedItem()).equals(
  838.                                     LangTool.getString("spool.toText"))) {
  839.          twoText.add(statusBar,BorderLayout.SOUTH);
  840.          e.setNewPage(pageText);
  841.       }
  842.       else {
  843.          twoPDF.add(statusBar,BorderLayout.SOUTH);
  844.          e.setNewPage(pagePDF);
  845.       }
  846.    }
  847.    public void nextComplete(WizardEvent e) {
  848. //      System.out.println(e.getCurrentPage().getName() + " Next Complete");
  849.       setTitle(e.getNewPage().getName());
  850.    }
  851.    public void previousBegin(WizardEvent e){
  852. //      System.out.println(e.getCurrentPage().getName() + " Prev Begin");
  853.       e.setNewPage(page);
  854.       contentPane.add(statusBar,BorderLayout.SOUTH);
  855.    }
  856.    public void previousComplete(WizardEvent e) {
  857. //      System.out.println(e.getCurrentPage().getName() + " Prev Complete");
  858.       setTitle(e.getNewPage().getName());
  859.    }
  860.    public void finished(WizardEvent e) {
  861.       doExport();
  862.    }
  863.    public void canceled(WizardEvent e) {
  864. //      System.out.println("It is canceled!");
  865.       if (workingThread != null) {
  866.          workingThread.interrupt();
  867.          workingThread = null;
  868.       }
  869.       this.setVisible(false);
  870.       this.dispose();
  871.    }
  872.    public void help(WizardEvent e) {
  873.       System.out.println(e.getCurrentPage().getName());
  874.    }
  875.    /**
  876.     * Converts a byte to a char
  877.     *
  878.     * @param b the byte to be converted
  879.     * @param charsetName the name of a charset in the which the byte is encoded
  880.     * @return the converted char
  881.     */
  882.    public static char byte2char(byte b, String charsetName) {
  883.       char c = ' ';
  884.       try {
  885.          byte[] bytes = {b};
  886.          c = (new String(bytes, charsetName)).charAt(0);
  887.       } catch (java.io.UnsupportedEncodingException uee) {
  888.          System.err.println(uee);
  889.          System.err.println("Error while converting byte to char, returning blank...");
  890.       }
  891.       return c;
  892.    }
  893. }