6870661: Setting a custom PrintService on a PrinterJob leads to a PrinterException
Reviewed-by: prr, jgodinez
This commit is contained in:
parent
00c37e4e9e
commit
2c516bc7b4
@ -96,7 +96,6 @@ import javax.print.attribute.standard.PrinterName;
|
|||||||
import javax.print.attribute.standard.JobMediaSheetsSupported;
|
import javax.print.attribute.standard.JobMediaSheetsSupported;
|
||||||
import javax.print.attribute.standard.PageRanges;
|
import javax.print.attribute.standard.PageRanges;
|
||||||
import javax.print.attribute.Size2DSyntax;
|
import javax.print.attribute.Size2DSyntax;
|
||||||
import javax.print.StreamPrintService;
|
|
||||||
|
|
||||||
import sun.awt.Win32FontManager;
|
import sun.awt.Win32FontManager;
|
||||||
|
|
||||||
@ -440,7 +439,7 @@ public class WPrinterJob extends RasterPrinterJob implements DisposerTarget {
|
|||||||
throw new HeadlessException();
|
throw new HeadlessException();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getPrintService() instanceof StreamPrintService) {
|
if (!(getPrintService() instanceof Win32PrintService)) {
|
||||||
return super.pageDialog(page);
|
return super.pageDialog(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -586,7 +585,7 @@ public class WPrinterJob extends RasterPrinterJob implements DisposerTarget {
|
|||||||
attributes = new HashPrintRequestAttributeSet();
|
attributes = new HashPrintRequestAttributeSet();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getPrintService() instanceof StreamPrintService) {
|
if (!(getPrintService() instanceof Win32PrintService)) {
|
||||||
return super.printDialog(attributes);
|
return super.printDialog(attributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -611,7 +610,7 @@ public class WPrinterJob extends RasterPrinterJob implements DisposerTarget {
|
|||||||
public void setPrintService(PrintService service)
|
public void setPrintService(PrintService service)
|
||||||
throws PrinterException {
|
throws PrinterException {
|
||||||
super.setPrintService(service);
|
super.setPrintService(service);
|
||||||
if (service instanceof StreamPrintService) {
|
if (!(service instanceof Win32PrintService)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
driverDoesMultipleCopies = false;
|
driverDoesMultipleCopies = false;
|
||||||
@ -648,7 +647,7 @@ public class WPrinterJob extends RasterPrinterJob implements DisposerTarget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
myService = PrintServiceLookup.lookupDefaultPrintService();
|
myService = PrintServiceLookup.lookupDefaultPrintService();
|
||||||
if (myService != null) {
|
if (myService instanceof Win32PrintService) {
|
||||||
try {
|
try {
|
||||||
setNativePrintServiceIfNeeded(myService.getName());
|
setNativePrintServiceIfNeeded(myService.getName());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.print.PrinterJob;
|
||||||
|
import javax.print.PrintServiceLookup;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @bug 6870661
|
||||||
|
* @summary Verify that no native dialog is opened for a custom PrintService
|
||||||
|
* @run main/manual PrintDialog
|
||||||
|
* @author reinhapa
|
||||||
|
*/
|
||||||
|
public class PrintDialog {
|
||||||
|
|
||||||
|
private static final String instructions =
|
||||||
|
"This test shows a non native print dialog having a 'test' print service\n" +
|
||||||
|
"selected. No other options are selectable on the General tab. The other\n" +
|
||||||
|
"tabs are as follows:\n" +
|
||||||
|
"Page Setup: Media & Margins enabled, Orientation disabled\n" +
|
||||||
|
"Appearance: All parts disabled\n\n" +
|
||||||
|
"Test passes if the dialog is shown as described above.";
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
// instruction dialog
|
||||||
|
Frame instruction = new Frame("Verify that no native print dialog is showed");
|
||||||
|
instruction.add(new TextArea(instructions));
|
||||||
|
instruction.pack();
|
||||||
|
instruction.show();
|
||||||
|
// test begin
|
||||||
|
PrintServiceStub service = new PrintServiceStub("test");
|
||||||
|
PrintServiceLookup.registerService(service);
|
||||||
|
PrinterJob job = PrinterJob.getPrinterJob();
|
||||||
|
job.setPrintService(service);
|
||||||
|
job.printDialog();
|
||||||
|
System.out.println("test passed");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,160 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation. Oracle designates this
|
||||||
|
* particular file as subject to the "Classpath" exception as provided
|
||||||
|
* by Oracle in the LICENSE file that accompanied this code.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.print.DocFlavor;
|
||||||
|
import javax.print.DocPrintJob;
|
||||||
|
import javax.print.PrintService;
|
||||||
|
import javax.print.ServiceUIFactory;
|
||||||
|
import javax.print.attribute.Attribute;
|
||||||
|
import javax.print.attribute.AttributeSet;
|
||||||
|
import javax.print.attribute.HashPrintServiceAttributeSet;
|
||||||
|
import javax.print.attribute.PrintServiceAttribute;
|
||||||
|
import javax.print.attribute.PrintServiceAttributeSet;
|
||||||
|
import javax.print.attribute.standard.Media;
|
||||||
|
import javax.print.attribute.standard.MediaSizeName;
|
||||||
|
import javax.print.attribute.standard.PrinterInfo;
|
||||||
|
import javax.print.attribute.standard.PrinterIsAcceptingJobs;
|
||||||
|
import javax.print.attribute.standard.PrinterMakeAndModel;
|
||||||
|
import javax.print.attribute.standard.PrinterName;
|
||||||
|
import javax.print.attribute.standard.PrinterState;
|
||||||
|
import javax.print.event.PrintServiceAttributeListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stub implementation of a custom {@link PrintService}.
|
||||||
|
*
|
||||||
|
* @author reinhapa
|
||||||
|
*/
|
||||||
|
public class PrintServiceStub implements PrintService {
|
||||||
|
private final String _name;
|
||||||
|
private final Set<DocFlavor> _flavors;
|
||||||
|
private final Map<Class<?>, Object> _attributes;
|
||||||
|
|
||||||
|
public PrintServiceStub(String name) {
|
||||||
|
_name = name;
|
||||||
|
_flavors = new HashSet<DocFlavor>();
|
||||||
|
_flavors.add(DocFlavor.SERVICE_FORMATTED.PAGEABLE);
|
||||||
|
_flavors.add(DocFlavor.SERVICE_FORMATTED.PRINTABLE);
|
||||||
|
_attributes = new HashMap<>();
|
||||||
|
_attributes.put(PrinterName.class, new PrinterName(name, null));
|
||||||
|
_attributes.put(PrinterState.class, PrinterState.IDLE);
|
||||||
|
_attributes.put(PrinterInfo.class, new PrinterInfo("Custom location",
|
||||||
|
null));
|
||||||
|
_attributes.put(PrinterIsAcceptingJobs.class,
|
||||||
|
PrinterIsAcceptingJobs.ACCEPTING_JOBS);
|
||||||
|
_attributes.put(PrinterMakeAndModel.class, new PrinterMakeAndModel(
|
||||||
|
"Custom printer", null));
|
||||||
|
_attributes.put(Media.class, new Media[] { MediaSizeName.ISO_A4 });
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return _name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDocFlavorSupported(DocFlavor flavor) {
|
||||||
|
return _flavors.contains(flavor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getSupportedAttributeValues(
|
||||||
|
Class<? extends Attribute> category, DocFlavor flavor,
|
||||||
|
AttributeSet attributes) {
|
||||||
|
return _attributes.get(category);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isAttributeCategorySupported(
|
||||||
|
Class<? extends Attribute> category) {
|
||||||
|
return _attributes.containsKey(category);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T extends PrintServiceAttribute> T getAttribute(Class<T> category) {
|
||||||
|
return category.cast(_attributes.get(category));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PrintServiceAttributeSet getAttributes() {
|
||||||
|
return new HashPrintServiceAttributeSet(_attributes.values().toArray(
|
||||||
|
new PrintServiceAttribute[_attributes.size()]));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DocFlavor[] getSupportedDocFlavors() {
|
||||||
|
return _flavors.toArray(new DocFlavor[_flavors.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// not implemented methods
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DocPrintJob createPrintJob() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addPrintServiceAttributeListener(
|
||||||
|
PrintServiceAttributeListener listener) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removePrintServiceAttributeListener(
|
||||||
|
PrintServiceAttributeListener listener) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?>[] getSupportedAttributeCategories() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getDefaultAttributeValue(Class<? extends Attribute> category) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isAttributeValueSupported(Attribute attrval,
|
||||||
|
DocFlavor flavor, AttributeSet attributes) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AttributeSet getUnsupportedAttributes(DocFlavor flavor,
|
||||||
|
AttributeSet attributes) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ServiceUIFactory getServiceUIFactory() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation. Oracle designates this
|
||||||
|
* particular file as subject to the "Classpath" exception as provided
|
||||||
|
* by Oracle in the LICENSE file that accompanied this code.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.awt.print.PrinterException;
|
||||||
|
import java.awt.print.PrinterJob;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @bug 6870661
|
||||||
|
* @summary tests setPrintService() with a custom implementation
|
||||||
|
* @author reinhapa
|
||||||
|
*/
|
||||||
|
public class SetPrintServiceTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
PrintServiceStub service = new PrintServiceStub("CustomPrintService");
|
||||||
|
PrinterJob printerJob = PrinterJob.getPrinterJob();
|
||||||
|
try {
|
||||||
|
printerJob.setPrintService(service);
|
||||||
|
System.out.println("Test Passed");
|
||||||
|
} catch (PrinterException e) {
|
||||||
|
throw new RuntimeException("Test FAILED", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user