/*  J2Printer14PreviewPrintDialog
    (C) Copyright 2009
    Wildcrest Associates
    http://www.wildcrest.com
This source code may be freely used, modified, incorporated, and
distributed without restriction as part of any software that uses
J2PrinterWorks by Wildcrest Associates.
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.wildcrest.j2printerworks.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import javax.print.PrintService;
import javax.print.DocFlavor;
import java.util.ResourceBundle;
import java.io.IOException;
import java.io.FileReader;
import java.io.BufferedReader;

class J2Printer14PrintPlusPreviewDialog {
    static J2Printer14 printer;
    static JList list;
    static JCheckBox checkbox;

    static public void main(String args[]){
        StringBuffer buffer = new StringBuffer();
        try {
           BufferedReader inData = new BufferedReader(new FileReader("J2PrinterWorksFreeTrialLicense.html"));
           String inLine;
           while ( (inLine = inData.readLine()) != null) { buffer.append(inLine); buffer.append('\n'); }
           inData.close();
        } catch (IOException e) {}
        String str = buffer.toString();
        JTextPane pane = new JTextPane();
        pane.setContentType("text/html");
        pane.setText(str);

        JFrame frame = new JFrame("J2Printer14 test");
        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(new JScrollPane(pane), "Center");
        frame.setSize(576,720);
        frame.setVisible(true);

        printer = new J2Printer14();
        printer.setSeparatePrintThread(false);
        printer.addPageable(new J2TextPrinter(pane));
        printer.setPrintDialogUsed(false);

        //test: printPrinterAttributes(printer); // printer attributes before
        PrintPlusPreviewDialog pppd = new PrintPlusPreviewDialog(frame, printer);
        if (pppd.showDialog()==PrintPlusPreviewDialog.PRINT) printer.print();
        //test: printPrinterAttributes(printer); // printer attributes after

        System.exit(0);
    }

    static void printPrinterAttributes(J2Printer14 printer) {
      System.out.println("PrintRequestAttributeSet: ");
      PrintRequestAttributeSet aset = printer.getPrintRequestAttributeSet();
      Attribute at[] = aset.toArray();
      for (int i=0; i<at.length; i++) {
        System.out.println(at[i].getName());
      }
      System.out.println();
      System.out.println("Default printer: " + printer.getDefaultPrinterName());
      System.out.println("Current printer: " + printer.getPrinter());

      System.out.println("Supported attribute categories:");
      PrintService ps = printer.getPrinterJob().getPrintService();

      Class[] supportedAttributes = ps.getSupportedAttributeCategories();
      for (int i=0; i<supportedAttributes.length; i++) {
        System.out.println(supportedAttributes[i].getName());
      }

      CopiesSupported cs = (CopiesSupported)ps.getSupportedAttributeValues(Copies.class, null, null);
      System.out.println("CopiesSupported: " + cs);

      System.out.println("getDefaultAttributeValue for PageRanges: " + ps.getDefaultAttributeValue(PageRanges.class));

      System.out.println("PrinterJob.getCopies(): " + printer.getPrinterJob().getCopies());

      try {
        Copies copies = (Copies) aset.get(Copies.class);
        System.out.println("Attribute Copies: " + copies.getValue());
      }
      catch (Exception e) {
        System.out.println("Copies not specified");
      }

      try {
        PageRanges pr = (PageRanges) aset.get(PageRanges.class);
        System.out.println("Attribute PageRanges: " + pr.toString());
      }
      catch (Exception e) {
        System.out.println("PageRanges not specified");
      }

      try {
        Media m = (Media) aset.get(Media.class);
        System.out.println("Attribute Media: " + m.toString());
      }
      catch (Exception e) {
        System.out.println("Media not specified");
      }

      ResourceBundle mediaNamesResourceBundle;

      try { mediaNamesResourceBundle = ResourceBundle.getBundle("sun.print.resources.serviceui"); }
      catch (java.util.MissingResourceException e) { throw new Error("Resource for ServiceUI missing"); }
      try {
         Object values = ps.getSupportedAttributeValues(Media.class, null, null);
         Media[] mediaNames = (Media[]) values;

         for (int i = 0; i < mediaNames.length; i++) {
            Media mediaName = mediaNames[i];

            if (mediaName instanceof MediaSizeName) {
               try {
                  String val = mediaName.toString().replace(' ',
                      '-').replace('#', 'n');
                  String s = mediaNamesResourceBundle.getString(val);
               }
               catch (Exception e) {}
            }
         }
      } catch (Exception ee) { };

      System.out.println();
     }
 }
