The fix adds new public `OutputBin` print attribute class which allow to set a 
printer output bin in a `PrinterJob` class. The corresponding internal 
`CustomOutputBin` class is added as well.

- Constants used in `OutputBin` class are based on [Internet Printing Protocol 
(IPP): “output-bin” attribute 
extension](https://ftp.pwg.org/pub/pwg/candidates/cs-ippoutputbin10-20010207-5100.2.pdf)
 document.
- `CUPSPrinter.getOutputBins(String printer)` method uses PPD  
`ppdFindOption(..., "OutputBin")` function to get supported output bins for the 
given printer on native level.
- The fix propagates the `OutputBin` attribute from the printer job attributes 
to `NSPrintInfo` print settings with `OutputBin` key on macOS.

The fix was tested on `Kyocera ECOSYS M8130cidn` printer where 
`ppdFindOption(..., "OutputBin")` call returns 4 output bins (text, choice): 
- Printer settings, None
- Inner tray, INNERTRAY
- Separator tray, SEPARATORTRAY
- Finisher (face-down), Main

if `Printer settings`, `Inner tray`, or `Finisher (face-down)` CustomOutputBins 
is set to `PrinterJob.print(...)` attributes a test page is printed to the Main 
tray of the  `Kyocera ECOSYS M8130cidn` printer. If `Separator tray` is used a 
page is printed to the Separator tray. This is consistent with the printer 
behavior when a native print dialog is used from a native Preview app to print 
a document on macOS.

-------------

Commit messages:
 - 8318023: Implement IPP output-bin attribute extension on macOS

Changes: https://git.openjdk.org/jdk/pull/16166/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=16166&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8318023
  Stats: 719 lines in 9 files changed: 719 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/16166.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/16166/head:pull/16166

PR: https://git.openjdk.org/jdk/pull/16166

Reply via email to