RFR: 8314070: javax.print: Support IPP output-bin attribute extension [v13]

Prasanta Sadhukhan psadhukhan at openjdk.org
Mon May 27 07:50:08 UTC 2024


On Thu, 23 May 2024 05:03:35 GMT, Alexander Scherbatiy <alexsch at openjdk.org> wrote:

>> 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.
>
> Alexander Scherbatiy has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Move jtreg tags below the imports in the tests

Previous comments about `output-bin-default` in IPPPrintServive.getDefaultAttributeValues and `tray-N` in supported output-bins are still pending..

test/jdk/javax/print/attribute/OutputBinAttributePrintDialogTest.java line 187:

> 185:             return new OutputBin[0];
> 186:         }
> 187: 

I guess before getting supported Attribute Values, we need to ensure category is supported by calling `service.isAttributeCategorySupported(OutputBin.class)`
in my opinion

test/jdk/javax/print/attribute/OutputBinAttributeTest.java line 165:

> 163:         if (service == null) {
> 164:             return supportedOutputBins;
> 165:         }

same here for check of `isAttributeCategorySupported()`

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

PR Review: https://git.openjdk.org/jdk/pull/16166#pullrequestreview-2080211256
PR Review Comment: https://git.openjdk.org/jdk/pull/16166#discussion_r1615612239
PR Review Comment: https://git.openjdk.org/jdk/pull/16166#discussion_r1615613694


More information about the client-libs-dev mailing list