--- a/jdk/src/solaris/classes/sun/print/IPPPrintService.java Tue Aug 05 09:37:03 2008 -0700
+++ b/jdk/src/solaris/classes/sun/print/IPPPrintService.java Thu Aug 07 11:19:06 2008 -0700
@@ -57,6 +57,7 @@
import java.nio.charset.Charset;
import java.util.Iterator;
+import java.util.HashSet;
public class IPPPrintService implements PrintService, SunPrinterJobService {
@@ -822,7 +823,7 @@
boolean psSupported = false;
String[] docFlavors = attribClass.getArrayOfStringValues();
DocFlavor[] flavors;
- ArrayList docList = new ArrayList();
+ HashSet docList = new HashSet();
int j;
String hostEnc = DocFlavor.hostEncoding.
toLowerCase(Locale.ENGLISH);
@@ -839,18 +840,6 @@
docList.addAll(Arrays.asList(flavors));
- if (isCupsPrinter) {
- /*
- Always add Pageable and Printable for CUPS
- since it uses Filters to convert from Postscript
- to device printer language.
- */
- docList.add(
- DocFlavor.SERVICE_FORMATTED.PAGEABLE);
- docList.add(
- DocFlavor.SERVICE_FORMATTED.PRINTABLE);
- }
-
if (mimeType.equals("text/plain") &&
addHostEncoding) {
docList.add(Arrays.asList(textPlainHost));
@@ -880,16 +869,19 @@
}
// check if we need to add image DocFlavors
+ // and Pageable/Printable flavors
if (psSupported || isCupsPrinter) {
- if (!jpgImagesAdded) {
- docList.addAll(Arrays.asList(imageJPG));
- }
- if (!pngImagesAdded) {
- docList.addAll(Arrays.asList(imagePNG));
- }
- if (!gifImagesAdded) {
- docList.addAll(Arrays.asList(imageGIF));
- }
+ /*
+ Always add Pageable and Printable for CUPS
+ since it uses Filters to convert from Postscript
+ to device printer language.
+ */
+ docList.add(DocFlavor.SERVICE_FORMATTED.PAGEABLE);
+ docList.add(DocFlavor.SERVICE_FORMATTED.PRINTABLE);
+
+ docList.addAll(Arrays.asList(imageJPG));
+ docList.addAll(Arrays.asList(imagePNG));
+ docList.addAll(Arrays.asList(imageGIF));
}
supportedDocFlavors = new DocFlavor[docList.size()];
docList.toArray(supportedDocFlavors);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/print/CheckDupFlavor.java Thu Aug 07 11:19:06 2008 -0700
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2004-2008 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 4996318 6731937
+ * @summary There should be no duplicates returned by getSupportedDocFlavors.
+ * @run main CheckDupFlavor
+ */
+import javax.print.*;
+import javax.print.attribute.*;
+import javax.print.attribute.standard.*;
+import java.util.ArrayList;
+
+
+public class CheckDupFlavor {
+ public static void main(String[] args){
+ PrintService pservice =
+ PrintServiceLookup.lookupDefaultPrintService();
+
+ if (pservice == null) {
+ System.out.println("No default PrintService found. Test ABORTED.");
+ return;
+ }
+
+ System.out.println("Default service = "+pservice);
+
+ DocFlavor[] flavors = pservice.getSupportedDocFlavors();
+ if (flavors==null) {
+ System.out.println("No flavors supported. Test PASSED.");
+ return;
+ }
+
+
+ ArrayList flavorList = new ArrayList();
+ for (int i=0; i<flavors.length; i++) {
+ if (flavors[i] == null) {
+ throw new RuntimeException("Null flavor. Test FAILED.");
+ } else if (flavorList.contains(flavors[i])) {
+ throw new RuntimeException("\n\tDuplicate flavor found : "+flavors[i]+" : Test FAILED.");
+ } else {
+ flavorList.add(flavors[i]);
+ }
+ }
+ System.out.println("No duplicate found. Test PASSED.");
+ }
+}