jdk/src/java.desktop/windows/classes/sun/print/Win32PrintService.java
author prr
Sat, 19 Sep 2015 15:45:59 -0700
changeset 32865 f9cb6e427f9e
parent 25859 3317bb8137f4
child 39552 5906515abb4b
permissions -rw-r--r--
8136783: Run blessed-modifier-order script on java.desktop Reviewed-by: martin, serb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
/*
22584
eed64ee05369 8032733: Fix cast lint warnings in client libraries
darcy
parents: 19781
diff changeset
     2
 * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
90ce3da70b43 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 715
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 715
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    10
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
90ce3da70b43 Initial load
duke
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
90ce3da70b43 Initial load
duke
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
 * accompanied this code).
90ce3da70b43 Initial load
duke
parents:
diff changeset
    16
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
90ce3da70b43 Initial load
duke
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    20
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 715
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 715
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 715
diff changeset
    23
 * questions.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
90ce3da70b43 Initial load
duke
parents:
diff changeset
    26
package sun.print;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    27
19781
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
    28
import java.awt.Window;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
    29
import java.awt.print.PrinterJob;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    30
import java.io.File;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    31
import java.net.URI;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    32
import java.net.URISyntaxException;
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
    33
import java.util.ArrayList;
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
    34
import java.util.HashMap;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    35
import javax.print.DocFlavor;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    36
import javax.print.DocPrintJob;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    37
import javax.print.PrintService;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    38
import javax.print.ServiceUIFactory;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    39
import javax.print.attribute.Attribute;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    40
import javax.print.attribute.AttributeSet;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    41
import javax.print.attribute.AttributeSetUtilities;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    42
import javax.print.attribute.EnumSyntax;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    43
import javax.print.attribute.HashAttributeSet;
19781
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
    44
import javax.print.attribute.PrintRequestAttributeSet;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    45
import javax.print.attribute.PrintServiceAttribute;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    46
import javax.print.attribute.PrintServiceAttributeSet;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    47
import javax.print.attribute.HashPrintServiceAttributeSet;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    48
import javax.print.attribute.standard.PrinterName;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    49
import javax.print.attribute.standard.PrinterIsAcceptingJobs;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    50
import javax.print.attribute.standard.QueuedJobCount;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    51
import javax.print.attribute.standard.JobName;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    52
import javax.print.attribute.standard.RequestingUserName;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    53
import javax.print.attribute.standard.Chromaticity;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    54
import javax.print.attribute.standard.Copies;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    55
import javax.print.attribute.standard.CopiesSupported;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    56
import javax.print.attribute.standard.Destination;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    57
import javax.print.attribute.standard.Fidelity;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    58
import javax.print.attribute.standard.Media;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    59
import javax.print.attribute.standard.MediaSizeName;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    60
import javax.print.attribute.standard.MediaSize;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    61
import javax.print.attribute.standard.MediaTray;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    62
import javax.print.attribute.standard.MediaPrintableArea;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    63
import javax.print.attribute.standard.OrientationRequested;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    64
import javax.print.attribute.standard.PageRanges;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    65
import javax.print.attribute.standard.PrinterState;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    66
import javax.print.attribute.standard.PrinterStateReason;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    67
import javax.print.attribute.standard.PrinterStateReasons;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    68
import javax.print.attribute.standard.Severity;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    69
import javax.print.attribute.standard.Sides;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    70
import javax.print.attribute.standard.ColorSupported;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    71
import javax.print.attribute.standard.PrintQuality;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    72
import javax.print.attribute.standard.PrinterResolution;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    73
import javax.print.attribute.standard.SheetCollate;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    74
import javax.print.event.PrintServiceAttributeListener;
19781
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
    75
import sun.awt.windows.WPrinterJob;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    76
90ce3da70b43 Initial load
duke
parents:
diff changeset
    77
public class Win32PrintService implements PrintService, AttributeUpdater,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    78
                                          SunPrinterJobService {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    79
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
    80
    public static MediaSize[] predefMedia = Win32MediaSize.getPredefMedia();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    81
90ce3da70b43 Initial load
duke
parents:
diff changeset
    82
    private static final DocFlavor[] supportedFlavors = {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    83
        DocFlavor.BYTE_ARRAY.GIF,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    84
        DocFlavor.INPUT_STREAM.GIF,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    85
        DocFlavor.URL.GIF,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    86
        DocFlavor.BYTE_ARRAY.JPEG,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    87
        DocFlavor.INPUT_STREAM.JPEG,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    88
        DocFlavor.URL.JPEG,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    89
        DocFlavor.BYTE_ARRAY.PNG,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    90
        DocFlavor.INPUT_STREAM.PNG,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    91
        DocFlavor.URL.PNG,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    92
        DocFlavor.SERVICE_FORMATTED.PAGEABLE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    93
        DocFlavor.SERVICE_FORMATTED.PRINTABLE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    94
        DocFlavor.BYTE_ARRAY.AUTOSENSE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    95
        DocFlavor.URL.AUTOSENSE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    96
        DocFlavor.INPUT_STREAM.AUTOSENSE
90ce3da70b43 Initial load
duke
parents:
diff changeset
    97
    };
90ce3da70b43 Initial load
duke
parents:
diff changeset
    98
90ce3da70b43 Initial load
duke
parents:
diff changeset
    99
    /* let's try to support a few of these */
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   100
    private static final Class<?>[] serviceAttrCats = {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   101
        PrinterName.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   102
        PrinterIsAcceptingJobs.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   103
        QueuedJobCount.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   104
        ColorSupported.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   105
    };
90ce3da70b43 Initial load
duke
parents:
diff changeset
   106
90ce3da70b43 Initial load
duke
parents:
diff changeset
   107
    /*  it turns out to be inconvenient to store the other categories
90ce3da70b43 Initial load
duke
parents:
diff changeset
   108
     *  separately because many attributes are in multiple categories.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   109
     */
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   110
    private static Class<?>[] otherAttrCats = {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   111
        JobName.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   112
        RequestingUserName.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   113
        Copies.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   114
        Destination.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   115
        OrientationRequested.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   116
        PageRanges.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   117
        Media.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   118
        MediaPrintableArea.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   119
        Fidelity.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   120
        // We support collation on 2D printer jobs, even if the driver can't.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   121
        SheetCollate.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   122
        SunAlternateMedia.class,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   123
        Chromaticity.class
90ce3da70b43 Initial load
duke
parents:
diff changeset
   124
    };
90ce3da70b43 Initial load
duke
parents:
diff changeset
   125
90ce3da70b43 Initial load
duke
parents:
diff changeset
   126
90ce3da70b43 Initial load
duke
parents:
diff changeset
   127
    /*
90ce3da70b43 Initial load
duke
parents:
diff changeset
   128
     * This table together with methods findWin32Media and
90ce3da70b43 Initial load
duke
parents:
diff changeset
   129
     * findMatchingMediaSizeNameMM are declared public as these are also
90ce3da70b43 Initial load
duke
parents:
diff changeset
   130
     * used in WPrinterJob.java.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   131
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   132
    public static final MediaSizeName[] dmPaperToPrintService = {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   133
      MediaSizeName.NA_LETTER, MediaSizeName.NA_LETTER,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   134
      MediaSizeName.TABLOID, MediaSizeName.LEDGER,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   135
      MediaSizeName.NA_LEGAL, MediaSizeName.INVOICE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   136
      MediaSizeName.EXECUTIVE, MediaSizeName.ISO_A3,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   137
      MediaSizeName.ISO_A4, MediaSizeName.ISO_A4,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   138
      MediaSizeName.ISO_A5, MediaSizeName.JIS_B4,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   139
      MediaSizeName.JIS_B5, MediaSizeName.FOLIO,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   140
      MediaSizeName.QUARTO, MediaSizeName.NA_10X14_ENVELOPE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   141
      MediaSizeName.B, MediaSizeName.NA_LETTER,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   142
      MediaSizeName.NA_NUMBER_9_ENVELOPE, MediaSizeName.NA_NUMBER_10_ENVELOPE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   143
      MediaSizeName.NA_NUMBER_11_ENVELOPE, MediaSizeName.NA_NUMBER_12_ENVELOPE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   144
      MediaSizeName.NA_NUMBER_14_ENVELOPE, MediaSizeName.C,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   145
      MediaSizeName.D, MediaSizeName.E,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   146
      MediaSizeName.ISO_DESIGNATED_LONG, MediaSizeName.ISO_C5,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   147
      MediaSizeName.ISO_C3, MediaSizeName.ISO_C4,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   148
      MediaSizeName.ISO_C6, MediaSizeName.ITALY_ENVELOPE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   149
      MediaSizeName.ISO_B4, MediaSizeName.ISO_B5,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   150
      MediaSizeName.ISO_B6, MediaSizeName.ITALY_ENVELOPE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   151
      MediaSizeName.MONARCH_ENVELOPE, MediaSizeName.PERSONAL_ENVELOPE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   152
      MediaSizeName.NA_10X15_ENVELOPE, MediaSizeName.NA_9X12_ENVELOPE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   153
      MediaSizeName.FOLIO, MediaSizeName.ISO_B4,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   154
      MediaSizeName.JAPANESE_POSTCARD, MediaSizeName.NA_9X11_ENVELOPE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   155
    };
90ce3da70b43 Initial load
duke
parents:
diff changeset
   156
90ce3da70b43 Initial load
duke
parents:
diff changeset
   157
    private static final MediaTray[] dmPaperBinToPrintService = {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   158
      MediaTray.TOP, MediaTray.BOTTOM, MediaTray.MIDDLE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   159
      MediaTray.MANUAL, MediaTray.ENVELOPE, Win32MediaTray.ENVELOPE_MANUAL,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   160
      Win32MediaTray.AUTO, Win32MediaTray.TRACTOR,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   161
      Win32MediaTray.SMALL_FORMAT, Win32MediaTray.LARGE_FORMAT,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   162
      MediaTray.LARGE_CAPACITY, null, null,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   163
      MediaTray.MAIN, Win32MediaTray.FORMSOURCE,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   164
    };
90ce3da70b43 Initial load
duke
parents:
diff changeset
   165
90ce3da70b43 Initial load
duke
parents:
diff changeset
   166
    // from wingdi.h
90ce3da70b43 Initial load
duke
parents:
diff changeset
   167
    private static int DM_PAPERSIZE = 0x2;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   168
    private static int DM_PRINTQUALITY = 0x400;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   169
    private static int DM_YRESOLUTION = 0x2000;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   170
    private static final int DMRES_MEDIUM = -3;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   171
    private static final int DMRES_HIGH = -4;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   172
    private static final int DMORIENT_LANDSCAPE = 2;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   173
    private static final int DMDUP_VERTICAL = 2;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   174
    private static final int DMDUP_HORIZONTAL = 3;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   175
    private static final int DMCOLLATE_TRUE = 1;
18116
f26d5963f5cb 8016485: Windows native print dialog does not reflect default printer settings
prr
parents: 9035
diff changeset
   176
    private static final int DMCOLOR_MONOCHROME = 1;
f26d5963f5cb 8016485: Windows native print dialog does not reflect default printer settings
prr
parents: 9035
diff changeset
   177
    private static final int DMCOLOR_COLOR = 2;
f26d5963f5cb 8016485: Windows native print dialog does not reflect default printer settings
prr
parents: 9035
diff changeset
   178
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   179
90ce3da70b43 Initial load
duke
parents:
diff changeset
   180
    // media sizes with indices above dmPaperToPrintService' length
90ce3da70b43 Initial load
duke
parents:
diff changeset
   181
    private static final int DMPAPER_A2 = 66;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   182
    private static final int DMPAPER_A6 = 70;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   183
    private static final int DMPAPER_B6_JIS = 88;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   184
90ce3da70b43 Initial load
duke
parents:
diff changeset
   185
90ce3da70b43 Initial load
duke
parents:
diff changeset
   186
    // Bit settings for getPrinterCapabilities which matches that
90ce3da70b43 Initial load
duke
parents:
diff changeset
   187
    // of native getCapabilities in WPrinterJob.cpp
90ce3da70b43 Initial load
duke
parents:
diff changeset
   188
    private static final int DEVCAP_COLOR = 0x0001;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   189
    private static final int DEVCAP_DUPLEX = 0x0002;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   190
    private static final int DEVCAP_COLLATE = 0x0004;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   191
    private static final int DEVCAP_QUALITY = 0x0008;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   192
    private static final int DEVCAP_POSTSCRIPT = 0x0010;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   193
90ce3da70b43 Initial load
duke
parents:
diff changeset
   194
    private String printer;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   195
    private PrinterName name;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   196
    private String port;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   197
32865
f9cb6e427f9e 8136783: Run blessed-modifier-order script on java.desktop
prr
parents: 25859
diff changeset
   198
    private transient PrintServiceAttributeSet lastSet;
f9cb6e427f9e 8136783: Run blessed-modifier-order script on java.desktop
prr
parents: 25859
diff changeset
   199
    private transient ServiceNotifier notifier = null;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   200
90ce3da70b43 Initial load
duke
parents:
diff changeset
   201
    private MediaSizeName[] mediaSizeNames;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   202
    private MediaPrintableArea[] mediaPrintables;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   203
    private MediaTray[] mediaTrays;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   204
    private PrinterResolution[] printRes;
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   205
    private HashMap<MediaSizeName, MediaPrintableArea> mpaMap;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   206
    private int nCopies;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   207
    private int prnCaps;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   208
    private int[] defaultSettings;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   209
90ce3da70b43 Initial load
duke
parents:
diff changeset
   210
    private boolean gotTrays;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   211
    private boolean gotCopies;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   212
    private boolean mediaInitialized;
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   213
    private boolean mpaListInitialized;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   214
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   215
    private ArrayList<Integer> idList;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   216
    private MediaSize[] mediaSizes;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   217
90ce3da70b43 Initial load
duke
parents:
diff changeset
   218
    private boolean isInvalid;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   219
90ce3da70b43 Initial load
duke
parents:
diff changeset
   220
    Win32PrintService(String name) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   221
        if (name == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   222
            throw new IllegalArgumentException("null printer name");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   223
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   224
        printer = name;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   225
90ce3da70b43 Initial load
duke
parents:
diff changeset
   226
        // initialize flags
90ce3da70b43 Initial load
duke
parents:
diff changeset
   227
        mediaInitialized = false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   228
        gotTrays = false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   229
        gotCopies = false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   230
        isInvalid = false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   231
        printRes = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   232
        prnCaps = 0;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   233
        defaultSettings = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   234
        port = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   235
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   236
90ce3da70b43 Initial load
duke
parents:
diff changeset
   237
    public void invalidateService() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   238
        isInvalid = true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   239
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   240
90ce3da70b43 Initial load
duke
parents:
diff changeset
   241
    public String getName() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   242
        return printer;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   243
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   244
90ce3da70b43 Initial load
duke
parents:
diff changeset
   245
    private PrinterName getPrinterName() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   246
        if (name == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   247
            name = new PrinterName(printer, null);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   248
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   249
        return name;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   250
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   251
90ce3da70b43 Initial load
duke
parents:
diff changeset
   252
    public int findPaperID(MediaSizeName msn) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   253
        if (msn instanceof Win32MediaSize) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   254
            Win32MediaSize winMedia = (Win32MediaSize)msn;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   255
            return winMedia.getDMPaper();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   256
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   257
            for (int id=0; id<dmPaperToPrintService.length;id++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   258
                if (dmPaperToPrintService[id].equals(msn)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   259
                    return id+1; // DMPAPER_LETTER == 1
90ce3da70b43 Initial load
duke
parents:
diff changeset
   260
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   261
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   262
            if (msn.equals(MediaSizeName.ISO_A2)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   263
                return DMPAPER_A2;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   264
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   265
            else if (msn.equals(MediaSizeName.ISO_A6)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   266
                return DMPAPER_A6;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   267
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   268
            else if (msn.equals(MediaSizeName.JIS_B6)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   269
                return DMPAPER_B6_JIS;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   270
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   271
        }
8408
e3dac3bc81d1 7022228: JPRT failure: RuntimeException in SupportedMedia regression test
jgodinez
parents: 8365
diff changeset
   272
e3dac3bc81d1 7022228: JPRT failure: RuntimeException in SupportedMedia regression test
jgodinez
parents: 8365
diff changeset
   273
        // If not found in predefined Windows ID, then we search through
e3dac3bc81d1 7022228: JPRT failure: RuntimeException in SupportedMedia regression test
jgodinez
parents: 8365
diff changeset
   274
        // the returned IDs of the driver because they can define their own
e3dac3bc81d1 7022228: JPRT failure: RuntimeException in SupportedMedia regression test
jgodinez
parents: 8365
diff changeset
   275
        // unique IDs.
e3dac3bc81d1 7022228: JPRT failure: RuntimeException in SupportedMedia regression test
jgodinez
parents: 8365
diff changeset
   276
        initMedia();
e3dac3bc81d1 7022228: JPRT failure: RuntimeException in SupportedMedia regression test
jgodinez
parents: 8365
diff changeset
   277
e3dac3bc81d1 7022228: JPRT failure: RuntimeException in SupportedMedia regression test
jgodinez
parents: 8365
diff changeset
   278
        if ((idList != null) && (mediaSizes != null) &&
e3dac3bc81d1 7022228: JPRT failure: RuntimeException in SupportedMedia regression test
jgodinez
parents: 8365
diff changeset
   279
            (idList.size() == mediaSizes.length)) {
e3dac3bc81d1 7022228: JPRT failure: RuntimeException in SupportedMedia regression test
jgodinez
parents: 8365
diff changeset
   280
            for (int i=0; i< idList.size(); i++) {
e3dac3bc81d1 7022228: JPRT failure: RuntimeException in SupportedMedia regression test
jgodinez
parents: 8365
diff changeset
   281
                if (mediaSizes[i].getMediaSizeName() == msn) {
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   282
                    return idList.get(i).intValue();
8408
e3dac3bc81d1 7022228: JPRT failure: RuntimeException in SupportedMedia regression test
jgodinez
parents: 8365
diff changeset
   283
                }
e3dac3bc81d1 7022228: JPRT failure: RuntimeException in SupportedMedia regression test
jgodinez
parents: 8365
diff changeset
   284
            }
e3dac3bc81d1 7022228: JPRT failure: RuntimeException in SupportedMedia regression test
jgodinez
parents: 8365
diff changeset
   285
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   286
        return 0;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   287
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   288
19781
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   289
    public int findTrayID(MediaTray tray) {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   290
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   291
        getMediaTrays(); // make sure they are initialised.
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   292
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   293
        if (tray instanceof Win32MediaTray) {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   294
            Win32MediaTray winTray = (Win32MediaTray)tray;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   295
            return winTray.getDMBinID();
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   296
        }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   297
        for (int id=0; id<dmPaperBinToPrintService.length; id++) {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   298
            if (tray.equals(dmPaperBinToPrintService[id])) {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   299
                return id+1; // DMBIN_FIRST = 1;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   300
            }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   301
        }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   302
        return 0; // didn't find the tray
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   303
    }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
   304
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   305
    public MediaTray findMediaTray(int dmBin) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   306
        if (dmBin >= 1 && dmBin <= dmPaperBinToPrintService.length) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   307
            return dmPaperBinToPrintService[dmBin-1];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   308
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   309
        MediaTray[] trays = getMediaTrays();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   310
        if (trays != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   311
            for (int i=0;i<trays.length;i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   312
                if(trays[i] instanceof Win32MediaTray) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   313
                    Win32MediaTray win32Tray = (Win32MediaTray)trays[i];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   314
                    if (win32Tray.winID == dmBin) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   315
                        return win32Tray;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   316
                    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   317
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   318
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   319
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   320
        return Win32MediaTray.AUTO;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   321
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   322
90ce3da70b43 Initial load
duke
parents:
diff changeset
   323
    public MediaSizeName findWin32Media(int dmIndex) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   324
        if (dmIndex >= 1 && dmIndex <= dmPaperToPrintService.length) {
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   325
            return dmPaperToPrintService[dmIndex - 1];
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   326
        }
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   327
        switch(dmIndex) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   328
            /* matching media sizes with indices beyond
90ce3da70b43 Initial load
duke
parents:
diff changeset
   329
               dmPaperToPrintService's length */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   330
            case DMPAPER_A2:
90ce3da70b43 Initial load
duke
parents:
diff changeset
   331
                return MediaSizeName.ISO_A2;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   332
            case DMPAPER_A6:
90ce3da70b43 Initial load
duke
parents:
diff changeset
   333
                return MediaSizeName.ISO_A6;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   334
            case DMPAPER_B6_JIS:
90ce3da70b43 Initial load
duke
parents:
diff changeset
   335
                return MediaSizeName.JIS_B6;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   336
            default:
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   337
                return null;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   338
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   339
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   340
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   341
    private boolean addToUniqueList(ArrayList<MediaSizeName> msnList,
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   342
                                    MediaSizeName mediaName) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   343
        MediaSizeName msn;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   344
        for (int i=0; i< msnList.size(); i++) {
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   345
            msn = msnList.get(i);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   346
            if (msn == mediaName) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   347
                return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   348
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   349
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   350
        msnList.add(mediaName);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   351
        return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   352
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   353
90ce3da70b43 Initial load
duke
parents:
diff changeset
   354
    private synchronized void initMedia() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   355
        if (mediaInitialized == true) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   356
            return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   357
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   358
        mediaInitialized = true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   359
        int[] media = getAllMediaIDs(printer, getPort());
90ce3da70b43 Initial load
duke
parents:
diff changeset
   360
        if (media == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   361
            return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   362
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   363
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   364
        ArrayList<MediaSizeName> msnList = new ArrayList<>();
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   365
        ArrayList<Win32MediaSize> trailingWmsList = new ArrayList<Win32MediaSize>();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   366
        MediaSizeName mediaName;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   367
        boolean added;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   368
        boolean queryFailure = false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   369
        float[] prnArea;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   370
90ce3da70b43 Initial load
duke
parents:
diff changeset
   371
        // Get all mediaSizes supported by the printer.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   372
        // We convert media to ArrayList idList and pass this to the
90ce3da70b43 Initial load
duke
parents:
diff changeset
   373
        // function for getting mediaSizes.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   374
        // This is to ensure that mediaSizes and media IDs have 1-1 correspondence.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   375
        // We remove from ID list any invalid mediaSize.  Though this is rare,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   376
        // it happens in HP 4050 German driver.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   377
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   378
        idList = new ArrayList<>();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   379
        for (int i=0; i < media.length; i++) {
438
2ae294e4518c 6613529: Avoid duplicate object creation within JDK packages
dav
parents: 2
diff changeset
   380
            idList.add(Integer.valueOf(media[i]));
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   381
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   382
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   383
        ArrayList<String> dmPaperNameList = new ArrayList<String>();
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   384
        mediaSizes = getMediaSizes(idList, media, dmPaperNameList);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   385
        for (int i = 0; i < idList.size(); i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   386
90ce3da70b43 Initial load
duke
parents:
diff changeset
   387
            // match Win ID with our predefined ID using table
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   388
            mediaName = findWin32Media(idList.get(i).intValue());
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   389
            // Verify that this standard size is the same size as that
90ce3da70b43 Initial load
duke
parents:
diff changeset
   390
            // reported by the driver. This should be the case except when
90ce3da70b43 Initial load
duke
parents:
diff changeset
   391
            // the driver is mis-using a standard windows paper ID.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   392
            if (mediaName != null &&
90ce3da70b43 Initial load
duke
parents:
diff changeset
   393
                idList.size() == mediaSizes.length) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   394
                MediaSize win32Size = MediaSize.getMediaSizeForName(mediaName);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   395
                MediaSize driverSize = mediaSizes[i];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   396
                int error = 2540; // == 1/10"
90ce3da70b43 Initial load
duke
parents:
diff changeset
   397
                if (Math.abs(win32Size.getX(1)-driverSize.getX(1)) > error ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
   398
                    Math.abs(win32Size.getY(1)-driverSize.getY(1)) > error)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   399
                {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   400
                   mediaName = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   401
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   402
            }
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   403
            boolean dmPaperIDMatched = (mediaName != null);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   404
90ce3da70b43 Initial load
duke
parents:
diff changeset
   405
            // No match found, then we get the MediaSizeName out of the MediaSize
90ce3da70b43 Initial load
duke
parents:
diff changeset
   406
            // This requires 1-1 correspondence, lengths must be checked.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   407
            if ((mediaName == null) && (idList.size() == mediaSizes.length)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   408
                mediaName = mediaSizes[i].getMediaSizeName();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   409
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   410
90ce3da70b43 Initial load
duke
parents:
diff changeset
   411
            // Add mediaName to the msnList
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   412
            added = false;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   413
            if (mediaName != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   414
                added = addToUniqueList(msnList, mediaName);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   415
            }
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   416
            if ((!dmPaperIDMatched || !added) && (idList.size() == dmPaperNameList.size())) {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   417
                /* The following block allows to add such media names to the list, whose sizes
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   418
                 * matched with media sizes predefined in JDK, while whose paper IDs did not,
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   419
                 * or whose sizes and paper IDs both did not match with any predefined in JDK.
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   420
                 */
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   421
                Win32MediaSize wms = Win32MediaSize.findMediaName(dmPaperNameList.get(i));
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   422
                if ((wms == null) && (idList.size() == mediaSizes.length)) {
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   423
                    wms = new Win32MediaSize(dmPaperNameList.get(i), idList.get(i));
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   424
                    mediaSizes[i] = new MediaSize(mediaSizes[i].getX(MediaSize.MM),
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   425
                        mediaSizes[i].getY(MediaSize.MM), MediaSize.MM, wms);
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   426
                }
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   427
                if ((wms != null) && (wms != mediaName)) {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   428
                    if (!added) {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   429
                        added = addToUniqueList(msnList, mediaName = wms);
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   430
                    } else {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   431
                        trailingWmsList.add(wms);
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   432
                    }
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   433
                }
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   434
            }
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   435
        }
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   436
        for (Win32MediaSize wms : trailingWmsList) {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   437
            added = addToUniqueList(msnList, wms);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   438
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   439
90ce3da70b43 Initial load
duke
parents:
diff changeset
   440
        // init mediaSizeNames
90ce3da70b43 Initial load
duke
parents:
diff changeset
   441
        mediaSizeNames = new MediaSizeName[msnList.size()];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   442
        msnList.toArray(mediaSizeNames);
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   443
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   444
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   445
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   446
    /*
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   447
     * Gets a list of MediaPrintableAreas using a call to native function.
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   448
     *  msn is MediaSizeName used to get a specific printable area.  If null,
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   449
     *  it will get all the supported MediPrintableAreas.
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   450
     */
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   451
    private synchronized MediaPrintableArea[] getMediaPrintables(MediaSizeName msn)
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   452
    {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   453
        if (msn == null)  {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   454
            if (mpaListInitialized == true) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   455
                return mediaPrintables;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   456
            }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   457
        } else {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   458
            // get from cached mapping of MPAs
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   459
            if (mpaMap != null && (mpaMap.get(msn) != null)) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   460
                MediaPrintableArea[] mpaArr = new MediaPrintableArea[1];
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   461
                mpaArr[0] = mpaMap.get(msn);
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   462
                return mpaArr;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   463
            }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   464
        }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   465
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   466
        initMedia();
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   467
19012
c8e01130fe04 8020208: NullPointerException at sun.print.Win32PrintService.getMediaPrintables
jgodinez
parents: 18525
diff changeset
   468
        if ((mediaSizeNames == null) || (mediaSizeNames.length == 0)) {
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   469
            return null;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   470
        }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   471
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   472
        MediaSizeName[] loopNames;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   473
        if (msn != null) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   474
            loopNames = new MediaSizeName[1];
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   475
            loopNames[0] = msn;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   476
        } else {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   477
            loopNames = mediaSizeNames;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   478
        }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   479
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   480
        if (mpaMap == null) {
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   481
            mpaMap = new HashMap<>();
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   482
        }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   483
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   484
        for (int i=0; i < loopNames.length; i++) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   485
            MediaSizeName mediaName = loopNames[i];
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   486
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   487
            if (mpaMap.get(mediaName) != null) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   488
                continue;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   489
             }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   490
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   491
            if (mediaName != null) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   492
                int defPaper = findPaperID(mediaName);
8408
e3dac3bc81d1 7022228: JPRT failure: RuntimeException in SupportedMedia regression test
jgodinez
parents: 8365
diff changeset
   493
                float[] prnArea = (defPaper != 0) ? getMediaPrintableArea(printer, defPaper) : null;
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   494
                MediaPrintableArea printableArea = null;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   495
                if (prnArea != null) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   496
                    try {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   497
                        printableArea = new MediaPrintableArea(prnArea[0],
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   498
                                                               prnArea[1],
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   499
                                                               prnArea[2],
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   500
                                                               prnArea[3],
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   501
                                                 MediaPrintableArea.INCH);
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   502
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   503
                        mpaMap.put(mediaName, printableArea);
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   504
                    }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   505
                    catch (IllegalArgumentException e) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   506
                    }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   507
                } else {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   508
                    // if getting  MPA failed, we use MediaSize
22584
eed64ee05369 8032733: Fix cast lint warnings in client libraries
darcy
parents: 19781
diff changeset
   509
                    MediaSize ms = MediaSize.getMediaSizeForName(mediaName);
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   510
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   511
                    if (ms != null) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   512
                        try {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   513
                            printableArea = new MediaPrintableArea(0, 0,
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   514
                                                     ms.getX(MediaSize.INCH),
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   515
                                                     ms.getY(MediaSize.INCH),
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   516
                                                     MediaPrintableArea.INCH);
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   517
                            mpaMap.put(mediaName, printableArea);
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   518
                        } catch (IllegalArgumentException e) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   519
                        }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   520
                    }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   521
                }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   522
            } //mediaName != null
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   523
        }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   524
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   525
       if (mpaMap.size() == 0) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   526
           return null;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   527
       }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   528
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   529
       if (msn != null) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   530
           if (mpaMap.get(msn) == null) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   531
               return null;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   532
           }
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   533
           MediaPrintableArea[] mpaArr = new MediaPrintableArea[1];
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   534
           // by this time, we've already gotten the desired MPA
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   535
           mpaArr[0] = mpaMap.get(msn);
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   536
           return mpaArr;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   537
       } else {
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   538
           mediaPrintables = mpaMap.values().toArray(new MediaPrintableArea[0]);
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   539
           mpaListInitialized = true;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   540
           return mediaPrintables;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   541
       }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   542
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   543
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   544
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   545
    private synchronized MediaTray[] getMediaTrays() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   546
        if (gotTrays == true && mediaTrays != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   547
            return mediaTrays;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   548
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   549
        String prnPort = getPort();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   550
        int[] mediaTr = getAllMediaTrays(printer, prnPort);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   551
        String[] winMediaTrayNames = getAllMediaTrayNames(printer, prnPort);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   552
90ce3da70b43 Initial load
duke
parents:
diff changeset
   553
        if ((mediaTr == null) || (winMediaTrayNames == null)){
90ce3da70b43 Initial load
duke
parents:
diff changeset
   554
            return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   555
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   556
90ce3da70b43 Initial load
duke
parents:
diff changeset
   557
        /* first count how many valid bins there are so we can allocate
90ce3da70b43 Initial load
duke
parents:
diff changeset
   558
         * an array of the correct size
90ce3da70b43 Initial load
duke
parents:
diff changeset
   559
         */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   560
        int nTray = 0;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   561
        for (int i=0; i < mediaTr.length ; i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   562
            if (mediaTr[i] > 0) nTray++;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   563
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   564
90ce3da70b43 Initial load
duke
parents:
diff changeset
   565
        MediaTray[] arr = new MediaTray[nTray];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   566
        int dmBin;
7939
4b122be94252 6939417: ArrayIndexOutOfBoundsException in Win 7 on selected printers
jgodinez
parents: 5506
diff changeset
   567
4b122be94252 6939417: ArrayIndexOutOfBoundsException in Win 7 on selected printers
jgodinez
parents: 5506
diff changeset
   568
        /* Some drivers in Win 7 don't have the same length for DC_BINS and
4b122be94252 6939417: ArrayIndexOutOfBoundsException in Win 7 on selected printers
jgodinez
parents: 5506
diff changeset
   569
         * DC_BINNAMES so there is no guarantee that lengths of mediaTr and
4b122be94252 6939417: ArrayIndexOutOfBoundsException in Win 7 on selected printers
jgodinez
parents: 5506
diff changeset
   570
         * winMediaTrayNames are equal. To avoid getting ArrayIndexOutOfBounds,
4b122be94252 6939417: ArrayIndexOutOfBoundsException in Win 7 on selected printers
jgodinez
parents: 5506
diff changeset
   571
         * we need to make sure we get the minimum of the two.
4b122be94252 6939417: ArrayIndexOutOfBoundsException in Win 7 on selected printers
jgodinez
parents: 5506
diff changeset
   572
         */
4b122be94252 6939417: ArrayIndexOutOfBoundsException in Win 7 on selected printers
jgodinez
parents: 5506
diff changeset
   573
4b122be94252 6939417: ArrayIndexOutOfBoundsException in Win 7 on selected printers
jgodinez
parents: 5506
diff changeset
   574
        for (int i = 0, j=0; i < Math.min(mediaTr.length, winMediaTrayNames.length); i++) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   575
            dmBin = mediaTr[i];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   576
            if (dmBin > 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   577
                // check for unsupported DMBINs and create new Win32MediaTray
90ce3da70b43 Initial load
duke
parents:
diff changeset
   578
                if ((dmBin > dmPaperBinToPrintService.length)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   579
                    || (dmPaperBinToPrintService[dmBin-1] == null)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   580
                    arr[j++] = new Win32MediaTray(dmBin, winMediaTrayNames[i]);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   581
                } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   582
                    arr[j++] = dmPaperBinToPrintService[dmBin-1];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   583
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   584
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   585
            // no else - For invalid ids, just ignore it because assigning a "default"
90ce3da70b43 Initial load
duke
parents:
diff changeset
   586
            // value may result in duplicate trays.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   587
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   588
        mediaTrays = arr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   589
        gotTrays = true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   590
        return mediaTrays;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   591
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   592
90ce3da70b43 Initial load
duke
parents:
diff changeset
   593
    private boolean isSameSize(float w1, float h1, float w2, float h2) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   594
        float diffX = w1 - w2;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   595
        float diffY = h1 - h2;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   596
        // Get diff of reverse dimensions
90ce3da70b43 Initial load
duke
parents:
diff changeset
   597
        // EPSON Stylus COLOR 860 reverses envelope's width & height
90ce3da70b43 Initial load
duke
parents:
diff changeset
   598
        float diffXrev = w1 - h2;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   599
        float diffYrev = h1 - w2;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   600
90ce3da70b43 Initial load
duke
parents:
diff changeset
   601
        if (((Math.abs(diffX)<=1) && (Math.abs(diffY)<=1)) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
   602
            ((Math.abs(diffXrev)<=1) && (Math.abs(diffYrev)<=1))){
90ce3da70b43 Initial load
duke
parents:
diff changeset
   603
          return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   604
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   605
          return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   606
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   607
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   608
90ce3da70b43 Initial load
duke
parents:
diff changeset
   609
    public MediaSizeName findMatchingMediaSizeNameMM (float w, float h){
90ce3da70b43 Initial load
duke
parents:
diff changeset
   610
        if (predefMedia != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   611
            for (int k=0; k<predefMedia.length;k++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   612
                if (predefMedia[k] == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   613
                    continue;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   614
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   615
90ce3da70b43 Initial load
duke
parents:
diff changeset
   616
                if (isSameSize(predefMedia[k].getX(MediaSize.MM),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   617
                               predefMedia[k].getY(MediaSize.MM),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   618
                               w, h)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   619
                  return predefMedia[k].getMediaSizeName();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   620
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   621
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   622
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   623
        return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   624
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   625
90ce3da70b43 Initial load
duke
parents:
diff changeset
   626
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   627
    private MediaSize[] getMediaSizes(ArrayList<Integer> idList, int[] media,
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   628
                                      ArrayList<String> dmPaperNameList) {
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   629
        if (dmPaperNameList == null) {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   630
            dmPaperNameList = new ArrayList<String>();
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   631
        }
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   632
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   633
        String prnPort = getPort();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   634
        int[] mediaSz = getAllMediaSizes(printer, prnPort);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   635
        String[] winMediaNames = getAllMediaNames(printer, prnPort);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   636
        MediaSizeName msn = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   637
        MediaSize ms = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   638
        float wid, ht;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   639
90ce3da70b43 Initial load
duke
parents:
diff changeset
   640
        if ((mediaSz == null) || (winMediaNames == null)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   641
            return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   642
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   643
90ce3da70b43 Initial load
duke
parents:
diff changeset
   644
        int nMedia = mediaSz.length/2;
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   645
        ArrayList<MediaSize> msList = new ArrayList<>();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   646
90ce3da70b43 Initial load
duke
parents:
diff changeset
   647
        for (int i = 0; i < nMedia; i++, ms=null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   648
            wid = mediaSz[i*2]/10f;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   649
            ht = mediaSz[i*2+1]/10f;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   650
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   651
            // Make sure to validate wid & ht.
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   652
            // HP LJ 4050 (german) causes IAE in Sonderformat paper, wid & ht
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   653
            // returned is not constant.
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   654
            if ((wid <= 0) || (ht <= 0)) {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   655
                //Remove corresponding ID from list
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   656
                if (nMedia == media.length) {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   657
                    Integer remObj = Integer.valueOf(media[i]);
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   658
                    idList.remove(idList.indexOf(remObj));
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   659
                }
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   660
                continue;
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   661
            }
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   662
            // Find matching media using dimensions.
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   663
            // This call matches only with our own predefined sizes.
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   664
            msn = findMatchingMediaSizeNameMM(wid, ht);
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   665
            if (msn != null) {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   666
                ms = MediaSize.getMediaSizeForName(msn);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   667
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   668
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   669
            if (ms != null) {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   670
                msList.add(ms);
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   671
                dmPaperNameList.add(winMediaNames[i]);
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   672
            } else {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   673
                Win32MediaSize wms = Win32MediaSize.findMediaName(winMediaNames[i]);
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   674
                if (wms == null) {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   675
                    wms = new Win32MediaSize(winMediaNames[i], media[i]);
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   676
                }
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   677
                try {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   678
                    ms = new MediaSize(wid, ht, MediaSize.MM, wms);
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   679
                    msList.add(ms);
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   680
                    dmPaperNameList.add(winMediaNames[i]);
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   681
                } catch(IllegalArgumentException e) {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   682
                    if (nMedia == media.length) {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   683
                        Integer remObj = Integer.valueOf(media[i]);
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   684
                        idList.remove(idList.indexOf(remObj));
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   685
                    }
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
   686
                }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   687
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   688
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   689
90ce3da70b43 Initial load
duke
parents:
diff changeset
   690
        MediaSize[] arr2 = new MediaSize[msList.size()];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   691
        msList.toArray(arr2);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   692
90ce3da70b43 Initial load
duke
parents:
diff changeset
   693
        return arr2;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   694
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   695
90ce3da70b43 Initial load
duke
parents:
diff changeset
   696
    private PrinterIsAcceptingJobs getPrinterIsAcceptingJobs() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   697
        if (getJobStatus(printer, 2) != 1) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   698
            return PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   699
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   700
        else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   701
            return PrinterIsAcceptingJobs.ACCEPTING_JOBS;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   702
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   703
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   704
90ce3da70b43 Initial load
duke
parents:
diff changeset
   705
    private PrinterState getPrinterState() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   706
        if (isInvalid) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   707
            return PrinterState.STOPPED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   708
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   709
            return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   710
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   711
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   712
90ce3da70b43 Initial load
duke
parents:
diff changeset
   713
    private PrinterStateReasons getPrinterStateReasons() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   714
        if (isInvalid) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   715
            PrinterStateReasons psr = new PrinterStateReasons();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   716
            psr.put(PrinterStateReason.SHUTDOWN, Severity.ERROR);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   717
            return psr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   718
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   719
            return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   720
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   721
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   722
90ce3da70b43 Initial load
duke
parents:
diff changeset
   723
    private QueuedJobCount getQueuedJobCount() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   724
90ce3da70b43 Initial load
duke
parents:
diff changeset
   725
        int count = getJobStatus(printer, 1);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   726
        if (count != -1) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   727
            return new QueuedJobCount(count);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   728
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   729
        else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   730
            return new QueuedJobCount(0);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   731
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   732
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   733
90ce3da70b43 Initial load
duke
parents:
diff changeset
   734
    private boolean isSupportedCopies(Copies copies) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   735
        synchronized (this) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   736
            if (gotCopies == false) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   737
                nCopies = getCopiesSupported(printer, getPort());
90ce3da70b43 Initial load
duke
parents:
diff changeset
   738
                gotCopies = true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   739
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   740
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   741
        int numCopies = copies.getValue();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   742
        return (numCopies > 0 && numCopies <= nCopies);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   743
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   744
90ce3da70b43 Initial load
duke
parents:
diff changeset
   745
    private boolean isSupportedMedia(MediaSizeName msn) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   746
90ce3da70b43 Initial load
duke
parents:
diff changeset
   747
        initMedia();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   748
90ce3da70b43 Initial load
duke
parents:
diff changeset
   749
        if (mediaSizeNames != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   750
            for (int i=0; i<mediaSizeNames.length; i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   751
                if (msn.equals(mediaSizeNames[i])) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   752
                    return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   753
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   754
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   755
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   756
        return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   757
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   758
90ce3da70b43 Initial load
duke
parents:
diff changeset
   759
    private boolean isSupportedMediaPrintableArea(MediaPrintableArea mpa) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   760
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
   761
        getMediaPrintables(null);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   762
90ce3da70b43 Initial load
duke
parents:
diff changeset
   763
        if (mediaPrintables != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   764
            for (int i=0; i<mediaPrintables.length; i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   765
                if (mpa.equals(mediaPrintables[i])) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   766
                    return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   767
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   768
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   769
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   770
        return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   771
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   772
90ce3da70b43 Initial load
duke
parents:
diff changeset
   773
    private boolean isSupportedMediaTray(MediaTray msn) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   774
        MediaTray[] trays = getMediaTrays();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   775
90ce3da70b43 Initial load
duke
parents:
diff changeset
   776
        if (trays != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   777
            for (int i=0; i<trays.length; i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   778
                if (msn.equals(trays[i])) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   779
                    return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   780
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   781
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   782
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   783
        return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   784
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   785
90ce3da70b43 Initial load
duke
parents:
diff changeset
   786
    private int getPrinterCapabilities() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   787
        if (prnCaps == 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   788
            prnCaps = getCapabilities(printer, getPort());
90ce3da70b43 Initial load
duke
parents:
diff changeset
   789
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   790
        return prnCaps;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   791
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   792
90ce3da70b43 Initial load
duke
parents:
diff changeset
   793
    private String getPort() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   794
        if (port == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   795
            port = getPrinterPort(printer);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   796
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   797
        return port;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   798
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   799
90ce3da70b43 Initial load
duke
parents:
diff changeset
   800
   /*
90ce3da70b43 Initial load
duke
parents:
diff changeset
   801
    * NOTE: defaults indices must match those in WPrinterJob.cpp
90ce3da70b43 Initial load
duke
parents:
diff changeset
   802
    */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   803
    private int[] getDefaultPrinterSettings() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   804
        if (defaultSettings == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   805
            defaultSettings = getDefaultSettings(printer, getPort());
90ce3da70b43 Initial load
duke
parents:
diff changeset
   806
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   807
        return defaultSettings;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   808
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   809
90ce3da70b43 Initial load
duke
parents:
diff changeset
   810
    private PrinterResolution[] getPrintResolutions() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   811
        if (printRes == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   812
            int[] prnRes = getAllResolutions(printer, getPort());
90ce3da70b43 Initial load
duke
parents:
diff changeset
   813
            if (prnRes == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   814
                printRes = new PrinterResolution[0];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   815
            } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   816
                int nRes = prnRes.length/2;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   817
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   818
                ArrayList<PrinterResolution> arrList = new ArrayList<>();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   819
                PrinterResolution pr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   820
90ce3da70b43 Initial load
duke
parents:
diff changeset
   821
                for (int i=0; i<nRes; i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   822
                  try {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   823
                        pr = new PrinterResolution(prnRes[i*2],
90ce3da70b43 Initial load
duke
parents:
diff changeset
   824
                                       prnRes[i*2+1], PrinterResolution.DPI);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   825
                        arrList.add(pr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   826
                    } catch (IllegalArgumentException e) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   827
                    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   828
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   829
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   830
                printRes = arrList.toArray(new PrinterResolution[arrList.size()]);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   831
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   832
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   833
        return printRes;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   834
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   835
90ce3da70b43 Initial load
duke
parents:
diff changeset
   836
    private boolean isSupportedResolution(PrinterResolution res) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   837
        PrinterResolution[] supportedRes = getPrintResolutions();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   838
        if (supportedRes != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   839
            for (int i=0; i<supportedRes.length; i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   840
                if (res.equals(supportedRes[i])) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   841
                    return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   842
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   843
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   844
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   845
        return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   846
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   847
90ce3da70b43 Initial load
duke
parents:
diff changeset
   848
    public DocPrintJob createPrintJob() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   849
      SecurityManager security = System.getSecurityManager();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   850
      if (security != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   851
        security.checkPrintJobAccess();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   852
      }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   853
        return new Win32PrintJob(this);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   854
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   855
90ce3da70b43 Initial load
duke
parents:
diff changeset
   856
    private PrintServiceAttributeSet getDynamicAttributes() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   857
        PrintServiceAttributeSet attrs = new HashPrintServiceAttributeSet();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   858
        attrs.add(getPrinterIsAcceptingJobs());
90ce3da70b43 Initial load
duke
parents:
diff changeset
   859
        attrs.add(getQueuedJobCount());
90ce3da70b43 Initial load
duke
parents:
diff changeset
   860
        return attrs;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   861
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   862
90ce3da70b43 Initial load
duke
parents:
diff changeset
   863
    public PrintServiceAttributeSet getUpdatedAttributes() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   864
        PrintServiceAttributeSet currSet = getDynamicAttributes();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   865
        if (lastSet == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   866
            lastSet = currSet;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   867
            return AttributeSetUtilities.unmodifiableView(currSet);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   868
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   869
            PrintServiceAttributeSet updates =
90ce3da70b43 Initial load
duke
parents:
diff changeset
   870
                new HashPrintServiceAttributeSet();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   871
            Attribute []attrs =  currSet.toArray();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   872
            for (int i=0; i<attrs.length; i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   873
                Attribute attr = attrs[i];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   874
                if (!lastSet.containsValue(attr)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   875
                    updates.add(attr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   876
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   877
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   878
            lastSet = currSet;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   879
            return AttributeSetUtilities.unmodifiableView(updates);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   880
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   881
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   882
90ce3da70b43 Initial load
duke
parents:
diff changeset
   883
    public void wakeNotifier() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   884
        synchronized (this) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   885
            if (notifier != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   886
                notifier.wake();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   887
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   888
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   889
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   890
90ce3da70b43 Initial load
duke
parents:
diff changeset
   891
    public void addPrintServiceAttributeListener(PrintServiceAttributeListener
90ce3da70b43 Initial load
duke
parents:
diff changeset
   892
                                                 listener) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   893
        synchronized (this) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   894
            if (listener == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   895
                return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   896
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   897
            if (notifier == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   898
                notifier = new ServiceNotifier(this);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   899
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   900
            notifier.addListener(listener);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   901
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   902
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   903
90ce3da70b43 Initial load
duke
parents:
diff changeset
   904
    public void removePrintServiceAttributeListener(
90ce3da70b43 Initial load
duke
parents:
diff changeset
   905
                                      PrintServiceAttributeListener listener) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   906
        synchronized (this) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   907
            if (listener == null || notifier == null ) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   908
                return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   909
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   910
            notifier.removeListener(listener);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   911
            if (notifier.isEmpty()) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   912
                notifier.stopNotifier();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   913
                notifier = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   914
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   915
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   916
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   917
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
   918
    @SuppressWarnings("unchecked")
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   919
    public <T extends PrintServiceAttribute> T
90ce3da70b43 Initial load
duke
parents:
diff changeset
   920
        getAttribute(Class<T> category)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   921
    {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   922
        if (category == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   923
            throw new NullPointerException("category");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   924
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   925
        if (!(PrintServiceAttribute.class.isAssignableFrom(category))) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   926
            throw new IllegalArgumentException("Not a PrintServiceAttribute");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   927
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   928
        if (category == ColorSupported.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   929
            int caps = getPrinterCapabilities();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   930
            if ((caps & DEVCAP_COLOR) != 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   931
                return (T)ColorSupported.SUPPORTED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   932
            } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   933
                return (T)ColorSupported.NOT_SUPPORTED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   934
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   935
        } else if (category == PrinterName.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   936
            return (T)getPrinterName();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   937
        } else if (category == PrinterState.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   938
            return (T)getPrinterState();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   939
        } else if (category == PrinterStateReasons.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   940
            return (T)getPrinterStateReasons();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   941
        } else if (category == QueuedJobCount.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   942
            return (T)getQueuedJobCount();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   943
        } else if (category == PrinterIsAcceptingJobs.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   944
            return (T)getPrinterIsAcceptingJobs();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   945
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   946
            return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   947
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   948
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   949
90ce3da70b43 Initial load
duke
parents:
diff changeset
   950
    public PrintServiceAttributeSet getAttributes() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   951
90ce3da70b43 Initial load
duke
parents:
diff changeset
   952
        PrintServiceAttributeSet attrs = new  HashPrintServiceAttributeSet();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   953
        attrs.add(getPrinterName());
90ce3da70b43 Initial load
duke
parents:
diff changeset
   954
        attrs.add(getPrinterIsAcceptingJobs());
90ce3da70b43 Initial load
duke
parents:
diff changeset
   955
        PrinterState prnState = getPrinterState();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   956
        if (prnState != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   957
            attrs.add(prnState);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   958
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   959
        PrinterStateReasons prnStateReasons = getPrinterStateReasons();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   960
        if (prnStateReasons != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   961
            attrs.add(prnStateReasons);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   962
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   963
        attrs.add(getQueuedJobCount());
90ce3da70b43 Initial load
duke
parents:
diff changeset
   964
        int caps = getPrinterCapabilities();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   965
        if ((caps & DEVCAP_COLOR) != 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   966
            attrs.add(ColorSupported.SUPPORTED);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   967
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   968
            attrs.add(ColorSupported.NOT_SUPPORTED);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   969
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   970
90ce3da70b43 Initial load
duke
parents:
diff changeset
   971
        return AttributeSetUtilities.unmodifiableView(attrs);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   972
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   973
90ce3da70b43 Initial load
duke
parents:
diff changeset
   974
    public DocFlavor[] getSupportedDocFlavors() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   975
        int len = supportedFlavors.length;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   976
        DocFlavor[] supportedDocFlavors;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   977
        int caps = getPrinterCapabilities();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   978
        // doc flavors supported
90ce3da70b43 Initial load
duke
parents:
diff changeset
   979
        // if PostScript is supported
90ce3da70b43 Initial load
duke
parents:
diff changeset
   980
        if ((caps & DEVCAP_POSTSCRIPT) != 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   981
            supportedDocFlavors = new DocFlavor[len+3];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   982
            System.arraycopy(supportedFlavors, 0, supportedDocFlavors, 0, len);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   983
            supportedDocFlavors[len] = DocFlavor.BYTE_ARRAY.POSTSCRIPT;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   984
            supportedDocFlavors[len+1] = DocFlavor.INPUT_STREAM.POSTSCRIPT;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   985
            supportedDocFlavors[len+2] = DocFlavor.URL.POSTSCRIPT;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   986
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   987
            supportedDocFlavors = new DocFlavor[len];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   988
            System.arraycopy(supportedFlavors, 0, supportedDocFlavors, 0, len);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   989
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   990
        return supportedDocFlavors;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   991
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   992
90ce3da70b43 Initial load
duke
parents:
diff changeset
   993
    public boolean isDocFlavorSupported(DocFlavor flavor) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   994
        /* To avoid a native query which may be time-consuming
90ce3da70b43 Initial load
duke
parents:
diff changeset
   995
         * do not invoke native unless postscript support is being queried.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   996
         * Instead just check the ones we 'always' support
90ce3da70b43 Initial load
duke
parents:
diff changeset
   997
         */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   998
        DocFlavor[] supportedDocFlavors;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   999
        if (isPostScriptFlavor(flavor)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1000
            supportedDocFlavors = getSupportedDocFlavors();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1001
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1002
            supportedDocFlavors = supportedFlavors;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1003
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1004
        for (int f=0; f<supportedDocFlavors.length; f++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1005
            if (flavor.equals(supportedDocFlavors[f])) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1006
                return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1007
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1008
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1009
        return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1010
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1011
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1012
    public Class<?>[] getSupportedAttributeCategories() {
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
  1013
        ArrayList<Class<?>> categList = new ArrayList<>(otherAttrCats.length+3);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1014
        for (int i=0; i < otherAttrCats.length; i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1015
            categList.add(otherAttrCats[i]);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1016
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1017
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1018
        int caps = getPrinterCapabilities();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1019
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1020
        if ((caps & DEVCAP_DUPLEX) != 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1021
            categList.add(Sides.class);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1022
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1023
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1024
        if ((caps & DEVCAP_QUALITY) != 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1025
            int[] defaults = getDefaultPrinterSettings();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1026
            // Added check: if supported, we should be able to get the default.
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1027
            if ((defaults[3] >= DMRES_HIGH) && (defaults[3] < 0)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1028
                categList.add(PrintQuality.class);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1029
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1030
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1031
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1032
        PrinterResolution[] supportedRes = getPrintResolutions();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1033
        if ((supportedRes!=null) && (supportedRes.length>0)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1034
            categList.add(PrinterResolution.class);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1035
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1036
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
  1037
        return categList.toArray(new Class<?>[categList.size()]);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1038
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1039
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1040
    public boolean
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1041
        isAttributeCategorySupported(Class<? extends Attribute> category)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1042
    {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1043
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1044
        if (category == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1045
            throw new NullPointerException("null category");
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1046
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1047
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1048
        if (!(Attribute.class.isAssignableFrom(category))) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1049
            throw new IllegalArgumentException(category +
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1050
                                               " is not an Attribute");
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1051
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1052
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
  1053
        Class<?>[] classList = getSupportedAttributeCategories();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1054
        for (int i = 0; i < classList.length; i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1055
            if (category.equals(classList[i])) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1056
                return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1057
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1058
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1059
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1060
        return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1061
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1062
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1063
    public Object
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1064
        getDefaultAttributeValue(Class<? extends Attribute> category)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1065
    {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1066
        if (category == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1067
            throw new NullPointerException("null category");
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1068
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1069
        if (!Attribute.class.isAssignableFrom(category)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1070
            throw new IllegalArgumentException(category +
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1071
                                               " is not an Attribute");
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1072
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1073
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1074
        if (!isAttributeCategorySupported(category)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1075
            return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1076
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1077
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1078
        int[] defaults = getDefaultPrinterSettings();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1079
        // indices must match those in WPrinterJob.cpp
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1080
        int defPaper = defaults[0];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1081
        int defYRes = defaults[2];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1082
        int defQuality = defaults[3];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1083
        int defCopies = defaults[4];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1084
        int defOrient = defaults[5];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1085
        int defSides = defaults[6];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1086
        int defCollate = defaults[7];
18116
f26d5963f5cb 8016485: Windows native print dialog does not reflect default printer settings
prr
parents: 9035
diff changeset
  1087
        int defColor = defaults[8];
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1088
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1089
        if (category == Copies.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1090
            if (defCopies > 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1091
                return new Copies(defCopies);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1092
            } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1093
                return new Copies(1);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1094
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1095
        } else if (category == Chromaticity.class) {
18116
f26d5963f5cb 8016485: Windows native print dialog does not reflect default printer settings
prr
parents: 9035
diff changeset
  1096
            if (defColor == DMCOLOR_COLOR) {
f26d5963f5cb 8016485: Windows native print dialog does not reflect default printer settings
prr
parents: 9035
diff changeset
  1097
                return Chromaticity.COLOR;
f26d5963f5cb 8016485: Windows native print dialog does not reflect default printer settings
prr
parents: 9035
diff changeset
  1098
            } else {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1099
                return Chromaticity.MONOCHROME;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1100
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1101
        } else if (category == JobName.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1102
            return new JobName("Java Printing", null);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1103
        } else if (category == OrientationRequested.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1104
            if (defOrient == DMORIENT_LANDSCAPE) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1105
                return OrientationRequested.LANDSCAPE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1106
            } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1107
                return OrientationRequested.PORTRAIT;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1108
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1109
        } else if (category == PageRanges.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1110
            return new PageRanges(1, Integer.MAX_VALUE);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1111
        } else if (category == Media.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1112
            MediaSizeName msn = findWin32Media(defPaper);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1113
            if (msn != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1114
                if (!isSupportedMedia(msn) && mediaSizeNames != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1115
                    msn = mediaSizeNames[0];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1116
                    defPaper = findPaperID(msn);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1117
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1118
                return msn;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1119
             } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1120
                 initMedia();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1121
                 if ((mediaSizeNames != null) && (mediaSizeNames.length > 0)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1122
                     // if 'mediaSizeNames' is not null, idList and mediaSizes
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1123
                     // cannot be null but to be safe, add a check
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1124
                     if ((idList != null) && (mediaSizes != null) &&
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1125
                         (idList.size() == mediaSizes.length)) {
438
2ae294e4518c 6613529: Avoid duplicate object creation within JDK packages
dav
parents: 2
diff changeset
  1126
                         Integer defIdObj = Integer.valueOf(defPaper);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1127
                         int index = idList.indexOf(defIdObj);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1128
                         if (index>=0 && index<mediaSizes.length) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1129
                             return mediaSizes[index].getMediaSizeName();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1130
                         }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1131
                     }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1132
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1133
                     return mediaSizeNames[0];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1134
                 }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1135
             }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1136
        } else if (category == MediaPrintableArea.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1137
            /* Verify defPaper */
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1138
            MediaSizeName msn = findWin32Media(defPaper);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1139
            if (msn != null &&
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1140
                !isSupportedMedia(msn) && mediaSizeNames != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1141
                defPaper = findPaperID(mediaSizeNames[0]);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1142
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1143
            float[] prnArea = getMediaPrintableArea(printer, defPaper);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1144
            if (prnArea != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1145
                MediaPrintableArea printableArea = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1146
                try {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1147
                    printableArea = new MediaPrintableArea(prnArea[0],
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1148
                                                           prnArea[1],
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1149
                                                           prnArea[2],
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1150
                                                           prnArea[3],
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1151
                                                           MediaPrintableArea.INCH);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1152
                } catch (IllegalArgumentException e) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1153
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1154
                return printableArea;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1155
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1156
            return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1157
        } else if (category == SunAlternateMedia.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1158
            return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1159
        } else if (category == Destination.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1160
            try {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1161
                return new Destination((new File("out.prn")).toURI());
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1162
            } catch (SecurityException se) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1163
                try {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1164
                    return new Destination(new URI("file:out.prn"));
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1165
                } catch (URISyntaxException e) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1166
                    return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1167
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1168
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1169
        } else if (category == Sides.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1170
            switch(defSides) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1171
            case DMDUP_VERTICAL :
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1172
                return Sides.TWO_SIDED_LONG_EDGE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1173
            case DMDUP_HORIZONTAL :
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1174
                return Sides.TWO_SIDED_SHORT_EDGE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1175
            default :
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1176
                return Sides.ONE_SIDED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1177
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1178
        } else if (category == PrinterResolution.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1179
            int yRes = defYRes;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1180
            int xRes = defQuality;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1181
            if ((xRes < 0) || (yRes < 0)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1182
                int res = (yRes > xRes) ? yRes : xRes;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1183
                if (res > 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1184
                 return new PrinterResolution(res, res, PrinterResolution.DPI);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1185
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1186
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1187
            else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1188
               return new PrinterResolution(xRes, yRes, PrinterResolution.DPI);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1189
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1190
        } else if (category == ColorSupported.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1191
            int caps = getPrinterCapabilities();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1192
            if ((caps & DEVCAP_COLOR) != 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1193
                return ColorSupported.SUPPORTED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1194
            } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1195
                return ColorSupported.NOT_SUPPORTED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1196
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1197
        } else if (category == PrintQuality.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1198
            if ((defQuality < 0) && (defQuality >= DMRES_HIGH)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1199
                switch (defQuality) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1200
                case DMRES_HIGH:
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1201
                    return PrintQuality.HIGH;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1202
                case DMRES_MEDIUM:
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1203
                    return PrintQuality.NORMAL;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1204
                default:
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1205
                    return PrintQuality.DRAFT;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1206
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1207
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1208
        } else if (category == RequestingUserName.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1209
            String userName = "";
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1210
            try {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1211
              userName = System.getProperty("user.name", "");
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1212
            } catch (SecurityException se) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1213
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1214
            return new RequestingUserName(userName, null);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1215
        } else if (category == SheetCollate.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1216
            if (defCollate == DMCOLLATE_TRUE) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1217
                return SheetCollate.COLLATED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1218
            } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1219
                return SheetCollate.UNCOLLATED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1220
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1221
        } else if (category == Fidelity.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1222
            return Fidelity.FIDELITY_FALSE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1223
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1224
        return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1225
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1226
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1227
    private boolean isPostScriptFlavor(DocFlavor flavor) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1228
        if (flavor.equals(DocFlavor.BYTE_ARRAY.POSTSCRIPT) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1229
            flavor.equals(DocFlavor.INPUT_STREAM.POSTSCRIPT) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1230
            flavor.equals(DocFlavor.URL.POSTSCRIPT)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1231
            return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1232
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1233
        else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1234
            return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1235
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1236
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1237
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
  1238
    private boolean isPSDocAttr(Class<?> category) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1239
        if (category == OrientationRequested.class || category == Copies.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1240
                return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1241
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1242
        else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1243
            return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1244
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1245
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1246
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1247
    private boolean isAutoSense(DocFlavor flavor) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1248
        if (flavor.equals(DocFlavor.BYTE_ARRAY.AUTOSENSE) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1249
            flavor.equals(DocFlavor.INPUT_STREAM.AUTOSENSE) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1250
            flavor.equals(DocFlavor.URL.AUTOSENSE)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1251
            return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1252
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1253
        else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1254
            return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1255
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1256
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1257
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1258
    public Object
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1259
        getSupportedAttributeValues(Class<? extends Attribute> category,
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1260
                                    DocFlavor flavor,
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1261
                                    AttributeSet attributes)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1262
    {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1263
        if (category == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1264
            throw new NullPointerException("null category");
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1265
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1266
        if (!Attribute.class.isAssignableFrom(category)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1267
            throw new IllegalArgumentException(category +
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1268
                                             " does not implement Attribute");
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1269
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1270
        if (flavor != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1271
            if (!isDocFlavorSupported(flavor)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1272
                throw new IllegalArgumentException(flavor +
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1273
                                                  " is an unsupported flavor");
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1274
                // if postscript & category is already specified within the
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1275
                //  PostScript data we return null
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1276
            } else if (isAutoSense(flavor) ||(isPostScriptFlavor(flavor) &&
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1277
                       (isPSDocAttr(category)))){
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1278
                return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1279
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1280
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1281
        if (!isAttributeCategorySupported(category)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1282
            return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1283
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1284
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1285
        if (category == JobName.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1286
            return new JobName("Java Printing", null);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1287
        } else if (category == RequestingUserName.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1288
          String userName = "";
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1289
          try {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1290
            userName = System.getProperty("user.name", "");
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1291
          } catch (SecurityException se) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1292
          }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1293
            return new RequestingUserName(userName, null);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1294
        } else if (category == ColorSupported.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1295
            int caps = getPrinterCapabilities();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1296
            if ((caps & DEVCAP_COLOR) != 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1297
                return ColorSupported.SUPPORTED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1298
            } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1299
                return ColorSupported.NOT_SUPPORTED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1300
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1301
        } else if (category == Chromaticity.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1302
            if (flavor == null ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1303
                flavor.equals(DocFlavor.SERVICE_FORMATTED.PAGEABLE) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1304
                flavor.equals(DocFlavor.SERVICE_FORMATTED.PRINTABLE) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1305
                flavor.equals(DocFlavor.BYTE_ARRAY.GIF) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1306
                flavor.equals(DocFlavor.INPUT_STREAM.GIF) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1307
                flavor.equals(DocFlavor.URL.GIF) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1308
                flavor.equals(DocFlavor.BYTE_ARRAY.JPEG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1309
                flavor.equals(DocFlavor.INPUT_STREAM.JPEG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1310
                flavor.equals(DocFlavor.URL.JPEG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1311
                flavor.equals(DocFlavor.BYTE_ARRAY.PNG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1312
                flavor.equals(DocFlavor.INPUT_STREAM.PNG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1313
                flavor.equals(DocFlavor.URL.PNG)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1314
                int caps = getPrinterCapabilities();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1315
                if ((caps & DEVCAP_COLOR) == 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1316
                    Chromaticity []arr = new Chromaticity[1];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1317
                    arr[0] = Chromaticity.MONOCHROME;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1318
                    return (arr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1319
                } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1320
                    Chromaticity []arr = new Chromaticity[2];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1321
                    arr[0] = Chromaticity.MONOCHROME;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1322
                    arr[1] = Chromaticity.COLOR;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1323
                    return (arr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1324
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1325
            } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1326
                return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1327
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1328
        } else if (category == Destination.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1329
            try {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1330
                return new Destination((new File("out.prn")).toURI());
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1331
            } catch (SecurityException se) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1332
                try {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1333
                    return new Destination(new URI("file:out.prn"));
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1334
                } catch (URISyntaxException e) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1335
                    return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1336
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1337
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1338
        } else if (category == OrientationRequested.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1339
            if (flavor == null ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1340
                flavor.equals(DocFlavor.SERVICE_FORMATTED.PAGEABLE) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1341
                flavor.equals(DocFlavor.SERVICE_FORMATTED.PRINTABLE) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1342
                flavor.equals(DocFlavor.INPUT_STREAM.GIF) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1343
                flavor.equals(DocFlavor.INPUT_STREAM.JPEG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1344
                flavor.equals(DocFlavor.INPUT_STREAM.PNG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1345
                flavor.equals(DocFlavor.BYTE_ARRAY.GIF) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1346
                flavor.equals(DocFlavor.BYTE_ARRAY.JPEG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1347
                flavor.equals(DocFlavor.BYTE_ARRAY.PNG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1348
                flavor.equals(DocFlavor.URL.GIF) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1349
                flavor.equals(DocFlavor.URL.JPEG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1350
                flavor.equals(DocFlavor.URL.PNG)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1351
                OrientationRequested []arr = new OrientationRequested[3];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1352
                arr[0] = OrientationRequested.PORTRAIT;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1353
                arr[1] = OrientationRequested.LANDSCAPE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1354
                arr[2] = OrientationRequested.REVERSE_LANDSCAPE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1355
                return arr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1356
            } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1357
                return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1358
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1359
        } else if ((category == Copies.class) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1360
                   (category == CopiesSupported.class)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1361
            synchronized (this) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1362
                if (gotCopies == false) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1363
                    nCopies = getCopiesSupported(printer, getPort());
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1364
                    gotCopies = true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1365
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1366
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1367
            return new CopiesSupported(1, nCopies);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1368
        } else if (category == Media.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1369
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1370
            initMedia();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1371
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1372
            int len = (mediaSizeNames == null) ? 0 : mediaSizeNames.length;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1373
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1374
            MediaTray[] trays = getMediaTrays();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1375
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1376
            len += (trays == null) ? 0 : trays.length;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1377
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1378
            Media []arr = new Media[len];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1379
            if (mediaSizeNames != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1380
                System.arraycopy(mediaSizeNames, 0, arr,
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1381
                                 0, mediaSizeNames.length);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1382
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1383
            if (trays != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1384
                System.arraycopy(trays, 0, arr,
8365
803a1fd60835 6850806: NPE exception throws in PrintServce.getSupportedAttributeValues
jgodinez
parents: 8363
diff changeset
  1385
                                 len - trays.length, trays.length);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1386
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1387
            return arr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1388
        } else if (category == MediaPrintableArea.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1389
            // if getting printable area for a specific media size
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
  1390
            Media mediaName = null;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1391
            if ((attributes != null) &&
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1392
                ((mediaName =
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1393
                  (Media)attributes.get(Media.class)) != null)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1394
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
  1395
                if (!(mediaName instanceof MediaSizeName)) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
  1396
                    // if an instance of MediaTray, fall thru returning
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
  1397
                    // all MediaPrintableAreas
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
  1398
                    mediaName = null;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1399
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1400
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1401
8363
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
  1402
            MediaPrintableArea[] mpas =
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
  1403
                                  getMediaPrintables((MediaSizeName)mediaName);
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
  1404
            if (mpas != null) {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
  1405
                MediaPrintableArea[] arr = new MediaPrintableArea[mpas.length];
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
  1406
                System.arraycopy(mpas, 0, arr, 0, mpas.length);
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
  1407
                return arr;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
  1408
            } else {
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
  1409
                return null;
63664c9ccde0 6722351: sun.print.Win32PrintService.initMedia() is slow
jgodinez
parents: 7939
diff changeset
  1410
            }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1411
        } else if (category == SunAlternateMedia.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1412
            return new SunAlternateMedia(
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1413
                              (Media)getDefaultAttributeValue(Media.class));
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1414
        } else if (category == PageRanges.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1415
            if (flavor == null ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1416
                flavor.equals(DocFlavor.SERVICE_FORMATTED.PAGEABLE) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1417
                flavor.equals(DocFlavor.SERVICE_FORMATTED.PRINTABLE)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1418
                PageRanges []arr = new PageRanges[1];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1419
                arr[0] = new PageRanges(1, Integer.MAX_VALUE);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1420
                return arr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1421
            } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1422
                return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1423
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1424
        } else if (category == PrinterResolution.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1425
            PrinterResolution[] supportedRes = getPrintResolutions();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1426
            if (supportedRes == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1427
                return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1428
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1429
            PrinterResolution []arr =
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1430
                new PrinterResolution[supportedRes.length];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1431
            System.arraycopy(supportedRes, 0, arr, 0, supportedRes.length);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1432
            return arr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1433
        } else if (category == Sides.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1434
            if (flavor == null ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1435
                flavor.equals(DocFlavor.SERVICE_FORMATTED.PAGEABLE) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1436
                flavor.equals(DocFlavor.SERVICE_FORMATTED.PRINTABLE)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1437
                Sides []arr = new Sides[3];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1438
                arr[0] = Sides.ONE_SIDED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1439
                arr[1] = Sides.TWO_SIDED_LONG_EDGE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1440
                arr[2] = Sides.TWO_SIDED_SHORT_EDGE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1441
                return arr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1442
            } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1443
                return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1444
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1445
        } else if (category == PrintQuality.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1446
            PrintQuality []arr = new PrintQuality[3];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1447
            arr[0] = PrintQuality.DRAFT;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1448
            arr[1] = PrintQuality.HIGH;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1449
            arr[2] = PrintQuality.NORMAL;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1450
            return arr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1451
        } else if (category == SheetCollate.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1452
            if (flavor == null ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1453
                (flavor.equals(DocFlavor.SERVICE_FORMATTED.PAGEABLE) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1454
                 flavor.equals(DocFlavor.SERVICE_FORMATTED.PRINTABLE))) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1455
                SheetCollate []arr = new SheetCollate[2];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1456
                arr[0] = SheetCollate.COLLATED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1457
                arr[1] = SheetCollate.UNCOLLATED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1458
                return arr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1459
            } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1460
                return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1461
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1462
        } else if (category == Fidelity.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1463
            Fidelity []arr = new Fidelity[2];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1464
            arr[0] = Fidelity.FIDELITY_FALSE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1465
            arr[1] = Fidelity.FIDELITY_TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1466
            return arr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1467
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1468
            return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1469
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1470
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1471
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1472
    public boolean isAttributeValueSupported(Attribute attr,
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1473
                                             DocFlavor flavor,
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1474
                                             AttributeSet attributes) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1475
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1476
        if (attr == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1477
            throw new NullPointerException("null attribute");
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1478
        }
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
  1479
        Class<? extends Attribute> category = attr.getCategory();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1480
        if (flavor != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1481
            if (!isDocFlavorSupported(flavor)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1482
                throw new IllegalArgumentException(flavor +
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1483
                                                   " is an unsupported flavor");
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1484
                // if postscript & category is already specified within the PostScript data
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1485
                // we return false
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1486
            } else if (isAutoSense(flavor) || (isPostScriptFlavor(flavor) &&
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1487
                       (isPSDocAttr(category)))) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1488
                return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1489
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1490
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1491
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1492
        if (!isAttributeCategorySupported(category)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1493
            return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1494
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1495
        else if (category == Chromaticity.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1496
            if ((flavor == null) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1497
                flavor.equals(DocFlavor.SERVICE_FORMATTED.PAGEABLE) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1498
                flavor.equals(DocFlavor.SERVICE_FORMATTED.PRINTABLE) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1499
                flavor.equals(DocFlavor.BYTE_ARRAY.GIF) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1500
                flavor.equals(DocFlavor.INPUT_STREAM.GIF) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1501
                flavor.equals(DocFlavor.URL.GIF) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1502
                flavor.equals(DocFlavor.BYTE_ARRAY.JPEG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1503
                flavor.equals(DocFlavor.INPUT_STREAM.JPEG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1504
                flavor.equals(DocFlavor.URL.JPEG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1505
                flavor.equals(DocFlavor.BYTE_ARRAY.PNG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1506
                flavor.equals(DocFlavor.INPUT_STREAM.PNG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1507
                flavor.equals(DocFlavor.URL.PNG)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1508
                int caps = getPrinterCapabilities();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1509
                if ((caps & DEVCAP_COLOR) != 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1510
                    return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1511
                } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1512
                    return attr == Chromaticity.MONOCHROME;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1513
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1514
            } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1515
                return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1516
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1517
        } else if (category == Copies.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1518
            return isSupportedCopies((Copies)attr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1519
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1520
        } else if (category == Destination.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1521
            URI uri = ((Destination)attr).getURI();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1522
            if ("file".equals(uri.getScheme()) &&
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1523
                !(uri.getSchemeSpecificPart().equals(""))) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1524
                return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1525
            } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1526
            return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1527
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1528
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1529
        } else if (category == Media.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1530
            if (attr instanceof MediaSizeName) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1531
                return isSupportedMedia((MediaSizeName)attr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1532
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1533
            if (attr instanceof MediaTray) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1534
                return isSupportedMediaTray((MediaTray)attr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1535
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1536
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1537
        } else if (category == MediaPrintableArea.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1538
            return isSupportedMediaPrintableArea((MediaPrintableArea)attr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1539
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1540
        } else if (category == SunAlternateMedia.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1541
            Media media = ((SunAlternateMedia)attr).getMedia();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1542
            return isAttributeValueSupported(media, flavor, attributes);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1543
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1544
        } else if (category == PageRanges.class ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1545
                   category == SheetCollate.class ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1546
                   category == Sides.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1547
            if (flavor != null &&
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1548
                !(flavor.equals(DocFlavor.SERVICE_FORMATTED.PAGEABLE) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1549
                flavor.equals(DocFlavor.SERVICE_FORMATTED.PRINTABLE))) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1550
                return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1551
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1552
        } else if (category == PrinterResolution.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1553
            if (attr instanceof PrinterResolution) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1554
                return isSupportedResolution((PrinterResolution)attr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1555
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1556
        } else if (category == OrientationRequested.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1557
            if (attr == OrientationRequested.REVERSE_PORTRAIT ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1558
                (flavor != null) &&
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1559
                !(flavor.equals(DocFlavor.SERVICE_FORMATTED.PAGEABLE) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1560
                flavor.equals(DocFlavor.SERVICE_FORMATTED.PRINTABLE) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1561
                flavor.equals(DocFlavor.INPUT_STREAM.GIF) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1562
                flavor.equals(DocFlavor.INPUT_STREAM.JPEG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1563
                flavor.equals(DocFlavor.INPUT_STREAM.PNG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1564
                flavor.equals(DocFlavor.BYTE_ARRAY.GIF) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1565
                flavor.equals(DocFlavor.BYTE_ARRAY.JPEG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1566
                flavor.equals(DocFlavor.BYTE_ARRAY.PNG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1567
                flavor.equals(DocFlavor.URL.GIF) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1568
                flavor.equals(DocFlavor.URL.JPEG) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1569
                flavor.equals(DocFlavor.URL.PNG))) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1570
                return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1571
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1572
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1573
        } else if (category == ColorSupported.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1574
            int caps = getPrinterCapabilities();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1575
            boolean isColorSup = ((caps & DEVCAP_COLOR) != 0);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1576
            if  ((!isColorSup && (attr == ColorSupported.SUPPORTED)) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1577
                (isColorSup && (attr == ColorSupported.NOT_SUPPORTED))) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1578
                return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1579
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1580
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1581
        return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1582
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1583
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1584
    public AttributeSet getUnsupportedAttributes(DocFlavor flavor,
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1585
                                                 AttributeSet attributes) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1586
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1587
        if (flavor != null && !isDocFlavorSupported(flavor)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1588
            throw new IllegalArgumentException("flavor " + flavor +
23882
7dbf42ed83ef 8009637: Some error messages are missing a space
igerasim
parents: 23648
diff changeset
  1589
                                               " is not supported");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1590
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1591
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1592
        if (attributes == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1593
            return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1594
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1595
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1596
        Attribute attr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1597
        AttributeSet unsupp = new HashAttributeSet();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1598
        Attribute []attrs = attributes.toArray();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1599
        for (int i=0; i<attrs.length; i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1600
            try {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1601
                attr = attrs[i];
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1602
                if (!isAttributeCategorySupported(attr.getCategory())) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1603
                    unsupp.add(attr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1604
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1605
                else if (!isAttributeValueSupported(attr, flavor, attributes)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1606
                    unsupp.add(attr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1607
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1608
            } catch (ClassCastException e) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1609
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1610
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1611
        if (unsupp.isEmpty()) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1612
            return null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1613
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1614
            return unsupp;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1615
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1616
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1617
19781
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1618
    private Win32DocumentPropertiesUI docPropertiesUI = null;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1619
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1620
    private static class Win32DocumentPropertiesUI
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1621
        extends DocumentPropertiesUI {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1622
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1623
        Win32PrintService service;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1624
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1625
        private Win32DocumentPropertiesUI(Win32PrintService s) {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1626
            service = s;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1627
        }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1628
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1629
        public PrintRequestAttributeSet
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1630
            showDocumentProperties(PrinterJob job,
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1631
                                   Window owner,
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1632
                                   PrintService service,
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1633
                                   PrintRequestAttributeSet aset) {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1634
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1635
            if (!(job instanceof WPrinterJob)) {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1636
                return null;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1637
            }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1638
            WPrinterJob wJob = (WPrinterJob)job;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1639
            return wJob.showDocumentProperties(owner, service, aset);
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1640
        }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1641
    }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1642
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1643
    private synchronized DocumentPropertiesUI getDocumentPropertiesUI() {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1644
        return new Win32DocumentPropertiesUI(this);
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1645
    }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1646
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1647
    private static class Win32ServiceUIFactory extends ServiceUIFactory {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1648
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1649
        Win32PrintService service;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1650
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1651
        Win32ServiceUIFactory(Win32PrintService s) {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1652
            service = s;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1653
        }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1654
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1655
        public Object getUI(int role, String ui) {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1656
            if (role <= ServiceUIFactory.MAIN_UIROLE) {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1657
                return null;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1658
            }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1659
            if (role == DocumentPropertiesUI.DOCUMENTPROPERTIES_ROLE &&
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1660
                DocumentPropertiesUI.DOCPROPERTIESCLASSNAME.equals(ui))
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1661
            {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1662
                return service.getDocumentPropertiesUI();
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1663
            }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1664
            throw new IllegalArgumentException("Unsupported role");
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1665
        }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1666
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1667
        public String[] getUIClassNamesForRole(int role) {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1668
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1669
            if (role <= ServiceUIFactory.MAIN_UIROLE) {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1670
                return null;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1671
            }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1672
            if (role == DocumentPropertiesUI.DOCUMENTPROPERTIES_ROLE) {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1673
                String[] names = new String[0];
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1674
                names[0] = DocumentPropertiesUI.DOCPROPERTIESCLASSNAME;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1675
                return names;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1676
            }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1677
            throw new IllegalArgumentException("Unsupported role");
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1678
        }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1679
    }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1680
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1681
    private Win32ServiceUIFactory uiFactory = null;
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1682
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1683
    public synchronized ServiceUIFactory getServiceUIFactory() {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1684
        if (uiFactory == null) {
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1685
            uiFactory = new Win32ServiceUIFactory(this);
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1686
        }
91b06f016821 4673406: RFE: Java Printing: Provide a way to display win32 printer driver's dialog
prr
parents: 19012
diff changeset
  1687
        return uiFactory;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1688
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1689
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1690
    public String toString() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1691
        return "Win32 Printer : " + getName();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1692
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1693
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1694
    public boolean equals(Object obj) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1695
        return  (obj == this ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1696
                 (obj instanceof Win32PrintService &&
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1697
                  ((Win32PrintService)obj).getName().equals(getName())));
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1698
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1699
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1700
   public int hashCode() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1701
        return this.getClass().hashCode()+getName().hashCode();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1702
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1703
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
  1704
    public boolean usesClass(Class<?> c) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1705
        return (c == sun.awt.windows.WPrinterJob.class);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1706
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1707
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1708
    private native int[] getAllMediaIDs(String printerName, String port);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1709
    private native int[] getAllMediaSizes(String printerName, String port);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1710
    private native int[] getAllMediaTrays(String printerName, String port);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1711
    private native float[] getMediaPrintableArea(String printerName,
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1712
                                                 int paperSize);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1713
    private native String[] getAllMediaNames(String printerName, String port);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1714
    private native String[] getAllMediaTrayNames(String printerName, String port);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1715
    private native int getCopiesSupported(String printerName, String port);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1716
    private native int[] getAllResolutions(String printerName, String port);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1717
    private native int getCapabilities(String printerName, String port);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1718
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1719
    private native int[] getDefaultSettings(String printerName, String port);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1720
    private native int getJobStatus(String printerName, int type);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1721
    private native String getPrinterPort(String printerName);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1722
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1723
23648
a95041026433 8037139: Fix serial lint warnings in sun.print
darcy
parents: 22584
diff changeset
  1724
@SuppressWarnings("serial") // JDK implementation class
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1725
class Win32MediaSize extends MediaSizeName {
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
  1726
    private static ArrayList<String> winStringTable = new ArrayList<>();
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
  1727
    private static ArrayList<Win32MediaSize> winEnumTable = new ArrayList<>();
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1728
    private static MediaSize[] predefMedia;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1729
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1730
    private int dmPaperID; // driver ID for this paper.
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1731
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1732
    private Win32MediaSize(int x) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1733
        super(x);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1734
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1735
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1736
32865
f9cb6e427f9e 8136783: Run blessed-modifier-order script on java.desktop
prr
parents: 25859
diff changeset
  1737
    private static synchronized int nextValue(String name) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1738
      winStringTable.add(name);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1739
      return (winStringTable.size()-1);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1740
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1741
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1742
    public static synchronized Win32MediaSize findMediaName(String name) {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1743
        int nameIndex = winStringTable.indexOf(name);
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1744
        if (nameIndex != -1) {
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
  1745
            return winEnumTable.get(nameIndex);
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1746
        }
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1747
        return null;
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1748
    }
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1749
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1750
    public static MediaSize[] getPredefMedia() {
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1751
        return predefMedia;
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1752
    }
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1753
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1754
    public Win32MediaSize(String name, int dmPaper) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1755
        super(nextValue(name));
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1756
        dmPaperID = dmPaper;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1757
        winEnumTable.add(this);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1758
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1759
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1760
    private MediaSizeName[] getSuperEnumTable() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1761
      return (MediaSizeName[])super.getEnumValueTable();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1762
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1763
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1764
    static {
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1765
         /* initialize predefMedia */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1766
        {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1767
            Win32MediaSize winMedia = new Win32MediaSize(-1);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1768
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1769
            // cannot call getSuperEnumTable directly because of static context
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1770
            MediaSizeName[] enumMedia = winMedia.getSuperEnumTable();
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1771
            if (enumMedia != null) {
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1772
                predefMedia = new MediaSize[enumMedia.length];
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1773
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1774
                for (int i=0; i<enumMedia.length; i++) {
18522
d4b867568c74 8007642: Media Names on Java Print Do Not Match the Printer’s and Confuse Users
alitvinov
parents: 9035
diff changeset
  1775
                    predefMedia[i] = MediaSize.getMediaSizeForName(enumMedia[i]);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1776
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1777
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1778
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1779
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1780
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1781
    int getDMPaper() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1782
        return dmPaperID;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1783
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1784
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1785
    protected String[] getStringTable() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1786
      String[] nameTable = new String[winStringTable.size()];
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
  1787
      return winStringTable.toArray(nameTable);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1788
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1789
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1790
    protected EnumSyntax[] getEnumValueTable() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1791
      MediaSizeName[] enumTable = new MediaSizeName[winEnumTable.size()];
25140
80e863984492 8042870: Fix raw and unchecked warnings in sun.print
darcy
parents: 23882
diff changeset
  1792
      return winEnumTable.toArray(enumTable);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1793
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1794
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1795
}