8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package sun.print; 27 28 import java.awt.Window; 29 import java.awt.print.PrinterJob; 30 import java.io.File; 31 import java.net.URI; 32 import java.net.URISyntaxException; 33 import java.util.ArrayList; 34 import java.util.HashMap; 35 import javax.print.DocFlavor; 36 import javax.print.DocPrintJob; 37 import javax.print.PrintService; 38 import javax.print.ServiceUIFactory; 39 import javax.print.attribute.Attribute; 40 import javax.print.attribute.AttributeSet; 41 import javax.print.attribute.AttributeSetUtilities; 42 import javax.print.attribute.EnumSyntax; 43 import javax.print.attribute.HashAttributeSet; 44 import javax.print.attribute.PrintRequestAttributeSet; 45 import javax.print.attribute.PrintServiceAttribute; 46 import javax.print.attribute.PrintServiceAttributeSet; 47 import javax.print.attribute.HashPrintServiceAttributeSet; 48 import javax.print.attribute.standard.PrinterName; 49 import javax.print.attribute.standard.PrinterIsAcceptingJobs; 50 import javax.print.attribute.standard.QueuedJobCount; 51 import javax.print.attribute.standard.JobName; 52 import javax.print.attribute.standard.RequestingUserName; 53 import javax.print.attribute.standard.Chromaticity; 54 import javax.print.attribute.standard.Copies; 55 import javax.print.attribute.standard.CopiesSupported; 56 import javax.print.attribute.standard.Destination; 57 import javax.print.attribute.standard.Fidelity; 58 import javax.print.attribute.standard.Media; 59 import javax.print.attribute.standard.MediaSizeName; 60 import javax.print.attribute.standard.MediaSize; 61 import javax.print.attribute.standard.MediaTray; 62 import javax.print.attribute.standard.MediaPrintableArea; 63 import javax.print.attribute.standard.OrientationRequested; 64 import javax.print.attribute.standard.PageRanges; 65 import javax.print.attribute.standard.PrinterState; 66 import javax.print.attribute.standard.PrinterStateReason; 67 import javax.print.attribute.standard.PrinterStateReasons; 68 import javax.print.attribute.standard.Severity; 69 import javax.print.attribute.standard.Sides; 70 import javax.print.attribute.standard.ColorSupported; 71 import javax.print.attribute.standard.PrintQuality; 72 import javax.print.attribute.standard.PrinterResolution; 73 import javax.print.attribute.standard.SheetCollate; 74 import javax.print.event.PrintServiceAttributeListener; 75 import sun.awt.windows.WPrinterJob; 76 1025 1026 int caps = getPrinterCapabilities(); 1027 1028 if ((caps & DEVCAP_DUPLEX) != 0) { 1029 categList.add(Sides.class); 1030 } 1031 1032 if ((caps & DEVCAP_QUALITY) != 0) { 1033 int[] defaults = getDefaultPrinterSettings(); 1034 // Added check: if supported, we should be able to get the default. 1035 if ((defaults[3] >= DMRES_HIGH) && (defaults[3] < 0)) { 1036 categList.add(PrintQuality.class); 1037 } 1038 } 1039 1040 PrinterResolution[] supportedRes = getPrintResolutions(); 1041 if ((supportedRes!=null) && (supportedRes.length>0)) { 1042 categList.add(PrinterResolution.class); 1043 } 1044 1045 return categList.toArray(new Class<?>[categList.size()]); 1046 } 1047 1048 public boolean 1049 isAttributeCategorySupported(Class<? extends Attribute> category) 1050 { 1051 1052 if (category == null) { 1053 throw new NullPointerException("null category"); 1054 } 1055 1056 if (!(Attribute.class.isAssignableFrom(category))) { 1057 throw new IllegalArgumentException(category + 1058 " is not an Attribute"); 1059 } 1060 1061 Class<?>[] classList = getSupportedAttributeCategories(); 1062 for (int i = 0; i < classList.length; i++) { 1063 if (category.equals(classList[i])) { 1064 return true; 1567 !(flavor.equals(DocFlavor.SERVICE_FORMATTED.PAGEABLE) || 1568 flavor.equals(DocFlavor.SERVICE_FORMATTED.PRINTABLE) || 1569 flavor.equals(DocFlavor.INPUT_STREAM.GIF) || 1570 flavor.equals(DocFlavor.INPUT_STREAM.JPEG) || 1571 flavor.equals(DocFlavor.INPUT_STREAM.PNG) || 1572 flavor.equals(DocFlavor.BYTE_ARRAY.GIF) || 1573 flavor.equals(DocFlavor.BYTE_ARRAY.JPEG) || 1574 flavor.equals(DocFlavor.BYTE_ARRAY.PNG) || 1575 flavor.equals(DocFlavor.URL.GIF) || 1576 flavor.equals(DocFlavor.URL.JPEG) || 1577 flavor.equals(DocFlavor.URL.PNG))) { 1578 return false; 1579 } 1580 1581 } else if (category == ColorSupported.class) { 1582 int caps = getPrinterCapabilities(); 1583 boolean isColorSup = ((caps & DEVCAP_COLOR) != 0); 1584 if ((!isColorSup && (attr == ColorSupported.SUPPORTED)) || 1585 (isColorSup && (attr == ColorSupported.NOT_SUPPORTED))) { 1586 return false; 1587 } 1588 } 1589 return true; 1590 } 1591 1592 public AttributeSet getUnsupportedAttributes(DocFlavor flavor, 1593 AttributeSet attributes) { 1594 1595 if (flavor != null && !isDocFlavorSupported(flavor)) { 1596 throw new IllegalArgumentException("flavor " + flavor + 1597 " is not supported"); 1598 } 1599 1600 if (attributes == null) { 1601 return null; 1602 } 1603 1604 Attribute attr; 1605 AttributeSet unsupp = new HashAttributeSet(); 1606 Attribute []attrs = attributes.toArray(); | 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package sun.print; 27 28 import java.awt.GraphicsEnvironment; 29 import java.awt.Toolkit; 30 import java.awt.Window; 31 import java.awt.print.PrinterJob; 32 import java.io.File; 33 import java.net.URI; 34 import java.net.URISyntaxException; 35 import java.util.ArrayList; 36 import java.util.HashMap; 37 import javax.print.DocFlavor; 38 import javax.print.DocPrintJob; 39 import javax.print.PrintService; 40 import javax.print.ServiceUIFactory; 41 import javax.print.attribute.Attribute; 42 import javax.print.attribute.AttributeSet; 43 import javax.print.attribute.AttributeSetUtilities; 44 import javax.print.attribute.EnumSyntax; 45 import javax.print.attribute.HashAttributeSet; 46 import javax.print.attribute.PrintRequestAttributeSet; 47 import javax.print.attribute.PrintServiceAttribute; 48 import javax.print.attribute.PrintServiceAttributeSet; 49 import javax.print.attribute.HashPrintServiceAttributeSet; 50 import javax.print.attribute.standard.PrinterName; 51 import javax.print.attribute.standard.PrinterIsAcceptingJobs; 52 import javax.print.attribute.standard.QueuedJobCount; 53 import javax.print.attribute.standard.JobName; 54 import javax.print.attribute.standard.RequestingUserName; 55 import javax.print.attribute.standard.Chromaticity; 56 import javax.print.attribute.standard.Copies; 57 import javax.print.attribute.standard.CopiesSupported; 58 import javax.print.attribute.standard.Destination; 59 import javax.print.attribute.standard.DialogOwner; 60 import javax.print.attribute.standard.DialogTypeSelection; 61 import javax.print.attribute.standard.Fidelity; 62 import javax.print.attribute.standard.Media; 63 import javax.print.attribute.standard.MediaSizeName; 64 import javax.print.attribute.standard.MediaSize; 65 import javax.print.attribute.standard.MediaTray; 66 import javax.print.attribute.standard.MediaPrintableArea; 67 import javax.print.attribute.standard.OrientationRequested; 68 import javax.print.attribute.standard.PageRanges; 69 import javax.print.attribute.standard.PrinterState; 70 import javax.print.attribute.standard.PrinterStateReason; 71 import javax.print.attribute.standard.PrinterStateReasons; 72 import javax.print.attribute.standard.Severity; 73 import javax.print.attribute.standard.Sides; 74 import javax.print.attribute.standard.ColorSupported; 75 import javax.print.attribute.standard.PrintQuality; 76 import javax.print.attribute.standard.PrinterResolution; 77 import javax.print.attribute.standard.SheetCollate; 78 import javax.print.event.PrintServiceAttributeListener; 79 import sun.awt.windows.WPrinterJob; 80 1029 1030 int caps = getPrinterCapabilities(); 1031 1032 if ((caps & DEVCAP_DUPLEX) != 0) { 1033 categList.add(Sides.class); 1034 } 1035 1036 if ((caps & DEVCAP_QUALITY) != 0) { 1037 int[] defaults = getDefaultPrinterSettings(); 1038 // Added check: if supported, we should be able to get the default. 1039 if ((defaults[3] >= DMRES_HIGH) && (defaults[3] < 0)) { 1040 categList.add(PrintQuality.class); 1041 } 1042 } 1043 1044 PrinterResolution[] supportedRes = getPrintResolutions(); 1045 if ((supportedRes!=null) && (supportedRes.length>0)) { 1046 categList.add(PrinterResolution.class); 1047 } 1048 1049 if (GraphicsEnvironment.isHeadless() == false) { 1050 categList.add(DialogOwner.class); 1051 categList.add(DialogTypeSelection.class); 1052 } 1053 return categList.toArray(new Class<?>[categList.size()]); 1054 } 1055 1056 public boolean 1057 isAttributeCategorySupported(Class<? extends Attribute> category) 1058 { 1059 1060 if (category == null) { 1061 throw new NullPointerException("null category"); 1062 } 1063 1064 if (!(Attribute.class.isAssignableFrom(category))) { 1065 throw new IllegalArgumentException(category + 1066 " is not an Attribute"); 1067 } 1068 1069 Class<?>[] classList = getSupportedAttributeCategories(); 1070 for (int i = 0; i < classList.length; i++) { 1071 if (category.equals(classList[i])) { 1072 return true; 1575 !(flavor.equals(DocFlavor.SERVICE_FORMATTED.PAGEABLE) || 1576 flavor.equals(DocFlavor.SERVICE_FORMATTED.PRINTABLE) || 1577 flavor.equals(DocFlavor.INPUT_STREAM.GIF) || 1578 flavor.equals(DocFlavor.INPUT_STREAM.JPEG) || 1579 flavor.equals(DocFlavor.INPUT_STREAM.PNG) || 1580 flavor.equals(DocFlavor.BYTE_ARRAY.GIF) || 1581 flavor.equals(DocFlavor.BYTE_ARRAY.JPEG) || 1582 flavor.equals(DocFlavor.BYTE_ARRAY.PNG) || 1583 flavor.equals(DocFlavor.URL.GIF) || 1584 flavor.equals(DocFlavor.URL.JPEG) || 1585 flavor.equals(DocFlavor.URL.PNG))) { 1586 return false; 1587 } 1588 1589 } else if (category == ColorSupported.class) { 1590 int caps = getPrinterCapabilities(); 1591 boolean isColorSup = ((caps & DEVCAP_COLOR) != 0); 1592 if ((!isColorSup && (attr == ColorSupported.SUPPORTED)) || 1593 (isColorSup && (attr == ColorSupported.NOT_SUPPORTED))) { 1594 return false; 1595 } 1596 } else if (category == DialogTypeSelection.class) { 1597 return true; // isHeadless was checked by category support 1598 } else if (category == DialogOwner.class) { 1599 DialogOwner owner = (DialogOwner)attr; 1600 DialogTypeSelection dts = (attributes == null) ? null : 1601 (DialogTypeSelection)attributes.get(DialogTypeSelection.class); 1602 if (dts == DialogTypeSelection.NATIVE) { 1603 return owner.getID() != 0; 1604 } else { 1605 if (owner.getID() != 0) { 1606 return false; 1607 } else if (owner.getOwner() != null) { 1608 return true; 1609 } else { 1610 return Toolkit.getDefaultToolkit().isAlwaysOnTopSupported(); 1611 } 1612 } 1613 } 1614 return true; 1615 } 1616 1617 public AttributeSet getUnsupportedAttributes(DocFlavor flavor, 1618 AttributeSet attributes) { 1619 1620 if (flavor != null && !isDocFlavorSupported(flavor)) { 1621 throw new IllegalArgumentException("flavor " + flavor + 1622 " is not supported"); 1623 } 1624 1625 if (attributes == null) { 1626 return null; 1627 } 1628 1629 Attribute attr; 1630 AttributeSet unsupp = new HashAttributeSet(); 1631 Attribute []attrs = attributes.toArray(); |