diff -r 4ef018d37f45 -r 84bc8a58537f jdk/test/javax/print/attribute/ServiceDialogTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/print/attribute/ServiceDialogTest.java Fri Jan 15 09:06:57 2010 -0800 @@ -0,0 +1,307 @@ +/* + * Copyright 2004-2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + + +/** + * @test + * @bug 4910388 4871089 4998624 + * @summary Confirm that + * 1. After choosing Reverse Landscape in the system default print + * Print Service (2nd in the list), it + * will reset to portrait in "Test Printer" + * 2. Print To File button is not cleared when switching between the + * 2nd service (system default printer) and Test Printer. + * 3. Make sure "Postscript" printer is the default and make sure the + * "print to file" button is disabled. File Dialog should not be + * shown after pressing print button. + * + * @run main/manual ServiceDialogTest + */ +import java.awt.*; +import javax.print.*; +import javax.print.attribute.standard.*; +import javax.print.attribute.*; +import javax.print.event.*; +import java.io.*; +import java.util.Locale; + +public class ServiceDialogTest { + /** + * Constructor + */ + public ServiceDialogTest() { + super(); + } + /** + * Starts the application. + */ + public static void main(java.lang.String[] args) { + ServiceDialogTest pd = new ServiceDialogTest(); + PrintService services[] = new PrintService[3]; + services[1] = PrintServiceLookup.lookupDefaultPrintService(); + + FileOutputStream fos = null; + File f = null; + String mType = "application/postscript"; + DocFlavor flavor = DocFlavor.INPUT_STREAM.JPEG; + try { + f = new File("streamexample.ps"); + fos = new FileOutputStream(f); + StreamPrintServiceFactory[] factories = StreamPrintServiceFactory.lookupStreamPrintServiceFactories(flavor, mType); + if (factories.length > 0) { + services[0] = factories[0].getPrintService(fos); + } else { + throw new RuntimeException("No StreamPrintService available which would support "+flavor"); + } + + services[2] = new TestPrintService("Test Printer"); + + //System.out.println("is "+flavor+" supported? "+services[0].isDocFlavorSupported(flavor)); + //System.out.println("is Orientation supported? "+services[0].isAttributeCategorySupported(OrientationRequested.class)); + //System.out.println("is REVERSE PORTRAIT supported ? "+services[0].isAttributeValueSupported(OrientationRequested.REVERSE_PORTRAIT, flavor, null)); + + HashPrintRequestAttributeSet prSet = new HashPrintRequestAttributeSet(); + prSet.add(new Destination(new File("./dest.prn").toURI())); + PrintService selService = ServiceUI.printDialog(null, 200, 200, services, services[0], flavor, prSet); + Attribute attr[] = prSet.toArray(); + for (int x = 0; x < attr.length; x ++) { + System.out.println(attr[x]); + } + + //DocPrintJob pj = service.createPrintJob(); + //PrintDocument prDoc = new PrintDocument(); + //pj.print(prDoc, null); + + } catch (Exception e) { + e.printStackTrace(); + } + } +} + + +class TestPrintService implements PrintService +{ + + private static DocFlavor textByteFlavor = null; + private static final DocFlavor supportedDocFlavors[] = (new DocFlavor[] { + javax.print.DocFlavor.INPUT_STREAM.JPEG + }); + + private static final Class serviceAttrCats[] = (new Class[] { + javax.print.attribute.standard.PrinterName.class + }); + + private static final Class otherAttrCats[] = (new Class [] { + javax.print.attribute.standard.Copies.class, + javax.print.attribute.standard.OrientationRequested.class, + javax.print.attribute.standard.Destination.class, + }); + + private String printer = null; + + public TestPrintService() { + } + + public TestPrintService(String printerName) { + if (printerName == null) { + throw new IllegalArgumentException("null printer name"); + } else { + printer = printerName; + } + } + + public String getName() + { + return printer; + } + + + public DocPrintJob createPrintJob() + { + return null; + } + + public PrintServiceAttributeSet getUpdatedAttributes() + { + return null; + } + + + public void addPrintServiceAttributeListener(PrintServiceAttributeListener printserviceattributelistener) + { + } + + public void removePrintServiceAttributeListener(PrintServiceAttributeListener printserviceattributelistener) + { + } + + public PrintServiceAttribute getAttribute(Class category) + { + return null; + } + + public PrintServiceAttributeSet getAttributes() + { + HashPrintServiceAttributeSet aSet = new HashPrintServiceAttributeSet(); + return aSet; + } + + public DocFlavor[] getSupportedDocFlavors() + { + int i = supportedDocFlavors.length; + DocFlavor adocflavor[] = new DocFlavor[i]; + System.arraycopy(supportedDocFlavors, 0, adocflavor, 0, i); + return adocflavor; + } + + public boolean isDocFlavorSupported(DocFlavor docflavor) + { + for (int i = 0; i < supportedDocFlavors.length; i++) { + if (docflavor.equals(supportedDocFlavors[i])) { + return true; + } + } + return false; + } + + public Class[] getSupportedAttributeCategories() + { + int i = otherAttrCats.length; + Class aclass[] = new Class[i]; + System.arraycopy(otherAttrCats, 0, aclass, 0, otherAttrCats.length); + return aclass; + } + + public boolean isAttributeCategorySupported(Class category) + { + if (category == null) { + throw new NullPointerException("null category"); + } + + for (int i = 0; i < otherAttrCats.length; i++) { + if (category == otherAttrCats[i]) { + return true; + } + } + return false; + } + + public boolean isAttributeValueSupported(Attribute attrval, DocFlavor flavor, AttributeSet attributes) { + + if (attrval == OrientationRequested.PORTRAIT) + return true; + else if (attrval == OrientationRequested.LANDSCAPE) + return true; + else + return false; + } + + public Object getDefaultAttributeValue(Class category) + { + if (category == null) { + throw new NullPointerException("null category"); + } + if (category == javax.print.attribute.standard.Copies.class) + return new Copies(1); + + if (category == javax.print.attribute.standard.OrientationRequested.class) + return OrientationRequested.PORTRAIT; + + return null; + } + + public Object getSupportedAttributeValues(Class category, DocFlavor docflavor, AttributeSet attributeset) + { + if (category == null) { + throw new NullPointerException("null category"); + } + + if (docflavor != null) { + if (!isDocFlavorSupported(docflavor)) { + throw new IllegalArgumentException(docflavor + " is an unsupported flavor"); + } + } + if (!isAttributeCategorySupported(category)) { + return null; + } + if (category == javax.print.attribute.standard.Copies.class ) { + return new CopiesSupported(1, 5); + } + if (category == javax.print.attribute.standard.OrientationRequested.class ) { + OrientationRequested req[] = { OrientationRequested.PORTRAIT, OrientationRequested.LANDSCAPE }; + return req; + } + + return null; + } + + public AttributeSet getUnsupportedAttributes(DocFlavor docflavor, AttributeSet attributeset) { + + if (docflavor != null && !isDocFlavorSupported(docflavor)) { + throw new IllegalArgumentException("flavor " + docflavor + "is not supported"); + } + if (attributeset == null) { + return null; + } + + HashAttributeSet hashattributeset = new HashAttributeSet(); + Attribute attributearray[] = attributeset.toArray(); + for (int i = 0; i < attributearray.length; i++) { + try { + Attribute attribute = attributearray[i]; + if (!isAttributeCategorySupported(attribute.getCategory())) { + hashattributeset.add(attribute); + } else { + if (!isAttributeValueSupported(attribute, docflavor, attributeset)) { + hashattributeset.add(attribute); + } + } + } + catch (ClassCastException classcastexception) { + + } + } + + if (hashattributeset.isEmpty()) { + return null; + } + return hashattributeset; + } + + public ServiceUIFactory getServiceUIFactory() { + return null; + } + + public String toString() { + return "Printer : " + getName(); + } + + public boolean equals(Object obj) { + return obj == this || (obj instanceof TestPrintService) && ((TestPrintService)obj).getName().equals(getName()); + } + + public int hashCode() { + return getClass().hashCode() + getName().hashCode(); + } + +}