From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- .../classpath/javax/print/PrintServiceLookup.java | 303 +++++++++++++++++++++ 1 file changed, 303 insertions(+) create mode 100644 libjava/classpath/javax/print/PrintServiceLookup.java (limited to 'libjava/classpath/javax/print/PrintServiceLookup.java') diff --git a/libjava/classpath/javax/print/PrintServiceLookup.java b/libjava/classpath/javax/print/PrintServiceLookup.java new file mode 100644 index 000000000..1ea1f9547 --- /dev/null +++ b/libjava/classpath/javax/print/PrintServiceLookup.java @@ -0,0 +1,303 @@ +/* PrintServiceLookup.java -- + Copyright (C) 2004, 2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.print; + +import gnu.classpath.ServiceFactory; +import gnu.javax.print.CupsPrintServiceLookup; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; + +import javax.print.attribute.AttributeSet; + + +/** + * PrintServiceLookup implementations provide a way to lookup + * print services based on different constraints. + *

+ * Implementations are located and loaded automatically through the SPI JAR + * file specification. Therefore implementation classes must provide a default + * constructor for instantiation. Furthermore, applications are able to + * register further instances directly at runtime. + *

+ * If an SecurityManager is installed implementors should call + * checkPrintJobAccess() to disable access for untrusted code. + * This check is to be made in every lookup service implementation for + * flexibility. Print services registered by applications through + * registerService(PrintService) are suppressed in the + * lookup results if a security manager is installed and disallows access. + *

+ * + * @author Michael Koch (konqueror@gmx.de) + * @author Wolfgang Baer (WBaer@gmx.de) + */ +public abstract class PrintServiceLookup +{ + + private static final CupsPrintServiceLookup systemProvider; + private static final HashSet printServices; + private static final HashSet printServiceLookups; + + static + { + systemProvider = new CupsPrintServiceLookup(); + + printServices = new HashSet(); + printServiceLookups = new HashSet(); + + // check for service providers + Iterator it = ServiceFactory.lookupProviders(PrintServiceLookup.class); + + while (it.hasNext()) + printServiceLookups.add(it.next()); + } + + /** + * Constructs a PrintServiceLookup object. + */ + public PrintServiceLookup() + { + // nothing to do here + } + + /** + * Explicitly registers the provided print service lookup implementation. + *

+ * The registration will silently fail (returning false) if + * the lookup service is already registered or the registration somehow + * else fails. + *

+ * + * @param sp the print service lookup implementation to register. + * @return true if registered, false otherwise. + */ + public static boolean registerServiceProvider(PrintServiceLookup sp) + { + return printServiceLookups.add(sp); + } + + /** + * Explicitly registers the provided print service instance. + *

+ * The registration will silently fail (returning false) if + * the print service instance is already registered or the registration + * somehow else fails. + *

+ * @param service the single print service to register. + * @return true if registered, false otherwise. + */ + public static boolean registerService(PrintService service) + { + if (service instanceof StreamPrintService) + return false; + + // security + try + { + SecurityManager sm = System.getSecurityManager(); + if (sm != null) + sm.checkPrintJobAccess(); + + return printServices.add(service); + } + catch (SecurityException se) + { + return false; + } + } + + /** + * Searches print services capable of printing in the given document flavor + * which supports the specified printing attributes. + * + * @param flavor the document flavor to support. If null this + * constraint is ignored during lookup. + * @param attributes the printing attributes to support. If + * null this constraint is ignored during lookup. + * @return The resulting available print services, or an array of length 0 + * if none is found. + */ + public static final PrintService[] lookupPrintServices(DocFlavor flavor, + AttributeSet attributes) + { + ArrayList result = new ArrayList(); + + PrintService[] services = + systemProvider.getPrintServices(flavor, attributes); + result.addAll(Arrays.asList(services)); + + for (Iterator it = printServiceLookups.iterator(); it.hasNext(); ) + { + PrintServiceLookup lookup = (PrintServiceLookup) it.next(); + services = lookup.getPrintServices(flavor, attributes); + result.addAll(Arrays.asList(services)); + } + + for (Iterator it = printServices.iterator(); it.hasNext(); ) + { + PrintService service = (PrintService) it.next(); + if (systemProvider.checkPrintService(flavor, attributes, service)) + result.add(service); + } + + return (PrintService[]) result.toArray(new PrintService[result.size()]); + } + + /** + * Searches print services capable of multi document printing in all of the + * given document flavors and supporting the specified printing attributes. + * + * @param flavors the document flavors to support. If null this + * constraint is ignored during lookup. + * @param attributes the printing attributes to support. If + * null this constraint is ignored during lookup. + * @return The resulting available multi document print services, or an + * array of length 0 if none is found. + */ + public static final MultiDocPrintService[] lookupMultiDocPrintServices( + DocFlavor[] flavors, AttributeSet attributes) + { + ArrayList result = new ArrayList(); + + MultiDocPrintService[] services = + systemProvider.getMultiDocPrintServices(flavors, attributes); + result.addAll(Arrays.asList(services)); + + for (Iterator it = printServiceLookups.iterator(); it.hasNext(); ) + { + PrintServiceLookup lookup = (PrintServiceLookup) it.next(); + services = lookup.getMultiDocPrintServices(flavors, attributes); + result.addAll(Arrays.asList(services)); + } + + for (Iterator it = printServices.iterator(); it.hasNext(); ) + { + PrintService service = (PrintService) it.next(); + if (systemProvider.checkMultiDocPrintService(flavors, attributes, service)) + result.add(service); + } + + return (MultiDocPrintService[]) result.toArray( + new MultiDocPrintService[result.size()]); + } + + + /** + * Searches the default print service in the current environment. + *

+ * If multiple lookup services are registered and each has a default + * print service the result is not specified. Usually the default + * print service of the native platform lookup service is returned. + *

+ * The GNU classpath implementation will return the CUPS default + * printing service as the default print service, if available. + *

+ * The default print service may be overriden by users through + * the property javax.print.defaultPrinter. A service + * specified must be found to be returned as the default. + *

+ * + * @return The default print service, or null if none found. + */ + public static final PrintService lookupDefaultPrintService() + { + // TODO Find out what the property controls and use it + // String defaultPrinter = System.getProperty("javax.print.defaultPrinter"); + + // first test for platform specified default services + PrintService service = systemProvider.getDefaultPrintService(); + + if (service != null) + return service; + + // none available by systemDefaultProvider + // search in other registered ones and take first + for (Iterator it = printServiceLookups.iterator(); it.hasNext(); ) + { + service = ((PrintServiceLookup) it.next()).getDefaultPrintService(); + if (service != null) + return service; + } + + return null; + } + + /** + * Not to be called directly by applications. + * + * @return The default lookup service of the implementing lookup service or + * null if there is no default one. + */ + public abstract PrintService getDefaultPrintService(); + + /** + * Not to be called directly by applications. + * + * @param flavors the document flavors which have to be supported. + * @param attributes the attributes which have to be supported. + * + * @return The multidoc print services of the implementing lookup service + * for the given parameters, or an array of length 0 if none is available. + */ + public abstract MultiDocPrintService[] + getMultiDocPrintServices(DocFlavor[] flavors, AttributeSet attributes); + + /** + * Not to be called directly by applications. + * + * @return All known print services of the implementing lookup service + * regardless of supported features, or an array of length 0 if none is + * available. + */ + public abstract PrintService[] getPrintServices(); + + /** + * Not to be called directly by applications. + * + * @param flavor the document flavor which has to be supported. + * @param attributes the attributes which have to be supported. + * + * @return The print services of the implementing lookup service + * for the given parameters, or an array of length 0 if none is available. + */ + public abstract PrintService[] + getPrintServices(DocFlavor flavor, AttributeSet attributes); +} -- cgit v1.2.3