[OpenJDK 2D-Dev] [9] RFR JDK-6575247: Banner checkbox in PrinterJob print dialog doesn't work
Prasanta Sadhukhan
prasanta.sadhukhan at oracle.com
Mon Aug 1 09:06:46 UTC 2016
On 7/28/2016 9:19 PM, Phil Race wrote:
> right .. when we talked off-line yesterday I said that if IPP is
> reporting
> a default we should honour it. The default of standard/on is only for
> the case we do not use IPP or it reports nothing.
>
> if (noJobSheet) {
> 885 pFlags |= NOSHEET;
> 886 ncomps+=1;
> 887 } else {
> 888 ncomps+=1;
> 889 }
>
> ....
> 905 if ((pFlags & NOSHEET) != 0) {
> 906 execCmd[n++] = "-o nobanner";
> 907 } else if (getPrintService().
> 908 isAttributeCategorySupported(JobSheets.class)) {
> 909 execCmd[n++] = "-o job-sheets=standard";
> 910 }
>
> So shouldn't the else at line 887 have the same condition
> as at line 907 ?
Yes. Have modified the webrev to add the check
http://cr.openjdk.java.net/~psadhukhan/6575247/webrev.04/
>
> 2750 JobSheets js = (JobSheets)asCurrent.get(jsCategory);
> 2751 if (js == null) {
> 2752 js =
> (JobSheets)psCurrent.getDefaultAttributeValue(jsCategory);
> 2753 if (js == null) {
> 2754 js = JobSheets.STANDARD;
> 2755 }
>
> Please make sure this isn't causing a surprise on OSX or Windows ..
> ie that we report correctly a value there so that "null" doesn't
> end up causing us to print a banner page where we did not before.
>
Tested on osx and windows too where it behaves as it is now ie no banner
page is printed by default.
Regards
Prasanta
> -phil.
>
> On 7/28/2016 2:51 AM, Prasanta Sadhukhan wrote:
>> The banner checkbox is not enabled initially as it calls
>> getDefaultAttributeValue() and it seems printer is reporting the
>> default job-sheet value as "none" so the below check is not satisfied.
>> cbJobSheets.setSelected(js != JobSheets.NONE);
>>
>> When IPPPrintService#readIPPResponse() is called, it invokes /new
>> AttributeClass(attribStr, valTagByte, outArray);
>> /and stored the value corresponding to each attribute.
>>
>> I saw that IPP response has
>> *job-sheets-default => job-sheets-default *and*
>> **job-sheets-supported => job-sheets-supported*
>>
>> When AttributeClass constructor is called with ("job-sheets-default",
>> 66, value) the value is
>> [ 0] = (byte) 4 [ 1] = (byte) 110 [ 2] = (byte) 111 [ 3] =
>> (byte) 110 [ 4] = (byte) 101 [ 5] = (byte) 4 [ 6] = (byte)
>> 110 [ 7] = (byte) 111 [ 8] = (byte) 110 [ 9] = (byte) 101
>> [10] = (byte) 2
>> which basically translates to '',n,o,n,e,'',n,o,n,e,''
>>
>> so when ServiceDialog calls
>> IPPPrintService#getDefaultAttributeValue(JobSheets)
>> ----------------
>> if (attribClass != null &&
>> attribClass.getStringValue().equals("none")) {
>> return JobSheets.NONE;
>> } else {
>> return JobSheets.STANDARD;
>> }
>> --------------
>> we have attribClass.getStringValue() as "none" so default job sheet
>> value is coming out to be NONE.
>> Since it is coming out from IPP response, I think we should not
>> change default value of JobSheets to STANDARD. Do you think otherwise?
>>
>> In the modified webrev, I have made the jobsheet default value
>> STANDARD, only when IPP does not report any default value.
>>
>> http://cr.openjdk.java.net/~psadhukhan/6575247/webrev.03/
>>
>> Tested in ubuntu & solaris11.
>>
>> Regards
>> Prasanta
>> On 7/27/2016 7:20 PM, Philip Race wrote:
>>> 883 } else {
>>> 884 Class<?>[] supportedCats = getPrintService().
>>> 885 getSupportedAttributeCategories();
>>> 886 for (int i=0;i<supportedCats.length;i++) {
>>> 887 if (JobSheets.class == supportedCats[i]) {
>>> 888 pFlags |= JOBSHEET;
>>> 889 ncomps+=1;
>>> 890 break;
>>> 891 }
>>> 892 }
>>>
>>> What is wrong with
>>>
>>> getPrintService().isAttributeCategorySupported(JobSheets.class) ?
>>>
>>> https://docs.oracle.com/javase/8/docs/api/javax/print/PrintService.html#isAttributeCategorySupported-java.lang.Class-
>>>
>>>
>>> I am also very confused about why you added JOBSHEET
>>> which seems to duplicate the functionality of NOSHEET.
>>>
>>> Also it seems to me like it was intentional that the banner page be
>>> printed by default .. which is why the variable was called
>>> "*no*JobSheet ..
>>> so as to over-ride that behaviour.
>>>
>>> It is kind of what you'd want if you walk over to the shared printer in
>>> your office to have a banner page which declares it as yours ...
>>>
>>> So the checkbox should probably be enabled in that case.
>>>
>>> Also you should verify that we report the default value for JobSheets
>>> as being STANDARD, not NONE.
>>>
>>>
>>> -phil.
>>>
>>> On 7/27/16, 3:02 AM, Prasanta Sadhukhan wrote:
>>>> Modified webrev to take care of a problem in webrev.01 whereby
>>>> banner page was getting printed by default.
>>>> Now, banner page will get printed only if the checkbox is checked
>>>> in printer dialog.
>>>>
>>>> http://cr.openjdk.java.net/~psadhukhan/6575247/webrev.02/
>>>>
>>>> Regards
>>>> Prasanta
>>>> On 7/22/2016 4:26 PM, Prasanta Sadhukhan wrote:
>>>>> Hi Phil,
>>>>>
>>>>> I have modified the code to check if job-sheets is supported and
>>>>> then only proceed to print the banner page.
>>>>> Also, rectified the jobTitle and banner confusion by adding
>>>>> jobsheet check.
>>>>> Also added the same code in UnixPrintJob even though I found its
>>>>> printExecCmd() does not get executed in linux and solaris
>>>>> PSPrinterJob's printExecCmd() is executed instead. In mac, neither
>>>>> UnixPrinterJob#printExecCmd() nor PSPrinterJob#printExecCmd() gets
>>>>> executed.
>>>>>
>>>>> Tested on ubuntu and solaris 11 with the fix and banner page is
>>>>> printed with the fix. In mac, cover page gets printed without any
>>>>> change.
>>>>>
>>>>> http://cr.openjdk.java.net/~psadhukhan/6575247/webrev.01/
>>>>>
>>>>> Regards
>>>>> Prasanta
>>>>> On 7/20/2016 8:56 PM, Philip Race wrote:
>>>>>> In my evaluation of that bug (which was 9 yrs ago so I do not have
>>>>>> any memory of it :-)), I note that we first need to check
>>>>>> that job-sheets is supported .. you are not doing that ..
>>>>>> what happens if we pass an unsupported option ?
>>>>>> "-o foobar" ?? This needs testing on Linux, OS X, and Solaris 11.
>>>>>>
>>>>>> Also -J (job-title) is something you can see in the queue when
>>>>>> you do lpq. I don't know why it is tied to banner here but
>>>>>> removing it seems wrong. Perhaps this should be renamed from
>>>>>> "banner" and "BANNER" to jobTitle ?? Please examine this.
>>>>>>
>>>>>> In fact you seem to be conflicting with the -o nobanner.
>>>>>>
>>>>>> So in general we have some lack of clarity around job title and
>>>>>> banner page
>>>>>> (aka job sheet).
>>>>>>
>>>>>> Also we have PSPrinterJob and UnixPrinterJob with similar code.
>>>>>> Please examine it to make sure no similar case is going missed.
>>>>>>
>>>>>> -phil.
>>>>>>
>>>>>> On 7/18/16, 4:27 AM, Prasanta Sadhukhan wrote:
>>>>>>> Hi All,
>>>>>>>
>>>>>>> Please review a fix for an issue where it is seen that Banner
>>>>>>> page in linux does not get printed despite user selecting the
>>>>>>> Banner page checkbox in Printer dialog.
>>>>>>>
>>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-6575247
>>>>>>> webrev: http://cr.openjdk.java.net/~psadhukhan/6575247/webrev.00/
>>>>>>>
>>>>>>> It seems if we pass "-J <bannername>" option to lpr command, it
>>>>>>> has no effect.
>>>>>>> To print Banner page, we need to pass
>>>>>>> "-o job-sheets=<either of "classified", "confidential",
>>>>>>> "secret", "standard", "topsecret", or "unclassified">"
>>>>>>>
>>>>>>> Since we support only standard banner or none via a checkbox,
>>>>>>> the proposed fix passes option "-o job-sheets=standard" to lpr
>>>>>>> command to print the banner page.
>>>>>>>
>>>>>>> Regards
>>>>>>> PRasanta
>>>>>
>>>>
>>
>
More information about the 2d-dev
mailing list