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.PageRanges;
|
||||
import javax.print.attribute.Size2DSyntax;
|
||||
import javax.print.StreamPrintService;
|
||||
|
||||
import sun.awt.Win32FontManager;
|
||||
|
||||
@ -440,7 +439,7 @@ public class WPrinterJob extends RasterPrinterJob implements DisposerTarget {
|
||||
throw new HeadlessException();
|
||||
}
|
||||
|
||||
if (getPrintService() instanceof StreamPrintService) {
|
||||
if (!(getPrintService() instanceof Win32PrintService)) {
|
||||
return super.pageDialog(page);
|
||||
}
|
||||
|
||||
@ -586,7 +585,7 @@ public class WPrinterJob extends RasterPrinterJob implements DisposerTarget {
|
||||
attributes = new HashPrintRequestAttributeSet();
|
||||
}
|
||||
|
||||
if (getPrintService() instanceof StreamPrintService) {
|
||||
if (!(getPrintService() instanceof Win32PrintService)) {
|
||||
return super.printDialog(attributes);
|
||||
}
|
||||
|
||||
@ -611,7 +610,7 @@ public class WPrinterJob extends RasterPrinterJob implements DisposerTarget {
|
||||
public void setPrintService(PrintService service)
|
||||
throws PrinterException {
|
||||
super.setPrintService(service);
|
||||
if (service instanceof StreamPrintService) {
|
||||
if (!(service instanceof Win32PrintService)) {
|
||||
return;
|
||||
}
|
||||
driverDoesMultipleCopies = false;
|
||||
@ -648,7 +647,7 @@ public class WPrinterJob extends RasterPrinterJob implements DisposerTarget {
|
||||
}
|
||||
|
||||
myService = PrintServiceLookup.lookupDefaultPrintService();
|
||||
if (myService != null) {
|
||||
if (myService instanceof Win32PrintService) {
|
||||
try {
|
||||
setNativePrintServiceIfNeeded(myService.getName());
|
||||
} 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