< prev index next >

src/java.desktop/share/classes/javax/print/StreamPrintServiceFactory.java

Print this page

        

*** 24,166 **** */ package javax.print; import java.io.OutputStream; - import java.util.ArrayList; import java.util.Iterator; ! import javax.print.DocFlavor; import sun.awt.AppContext; - import java.util.ServiceLoader; - import java.util.ServiceConfigurationError; /** * A {@code StreamPrintServiceFactory} is the factory for ! * {@link StreamPrintService} instances, ! * which can print to an output stream in a particular ! * document format described as a mime type. ! * A typical output document format may be Postscript(TM). * <p> ! * This class is implemented by a service and located by the ! * implementation using the {@link java.util.ServiceLoader} facility. * <p> * Applications locate instances of this class by calling the * {@link #lookupStreamPrintServiceFactories(DocFlavor, String)} method. * <p> ! * Applications can use a {@code StreamPrintService} obtained from a ! * factory in place of a {@code PrintService} which represents a ! * physical printer device. */ - public abstract class StreamPrintServiceFactory { static class Services { private ArrayList<StreamPrintServiceFactory> listOfFactories = null; } private static Services getServices() { Services services = (Services)AppContext.getAppContext().get(Services.class); if (services == null) { services = new Services(); AppContext.getAppContext().put(Services.class, services); } return services; } private static ArrayList<StreamPrintServiceFactory> getListOfFactories() { return getServices().listOfFactories; } private static ArrayList<StreamPrintServiceFactory> initListOfFactories() { ArrayList<StreamPrintServiceFactory> listOfFactories = new ArrayList<>(); getServices().listOfFactories = listOfFactories; return listOfFactories; } /** ! * Locates factories for print services that can be used with ! * a print job to output a stream of data in the ! * format specified by {@code outputMimeType}. ! * <p> ! * The {@code outputMimeType} parameter describes the document type that ! * you want to create, whereas the {@code flavor} parameter describes the ! * format in which the input data will be provided by the application ! * to the {@code StreamPrintService}. ! * <p> ! * Although null is an acceptable value to use in the lookup of stream ! * printing services, it's typical to search for a particular ! * desired format, such as Postscript(TM). * ! * @param flavor of the input document type - null means match all ! * types. * @param outputMimeType representing the required output format, used to ! * identify suitable stream printer factories. A value of null means ! * match all formats. ! * @return matching factories for stream print service instance, ! * empty if no suitable factories could be located. */ public static StreamPrintServiceFactory[] lookupStreamPrintServiceFactories(DocFlavor flavor, String outputMimeType) { ArrayList<StreamPrintServiceFactory> list = getFactories(flavor, outputMimeType); return list.toArray(new StreamPrintServiceFactory[list.size()]); } ! /** Queries the factory for the document format that is emitted ! * by printers obtained from this factory. * ! * @return the output format described as a mime type. */ public abstract String getOutputFormat(); /** ! * Queries the factory for the document flavors that can be accepted ! * by printers obtained from this factory. ! * @return array of supported doc flavors. */ public abstract DocFlavor[] getSupportedDocFlavors(); /** ! * Returns a {@code StreamPrintService} that can print to ! * the specified output stream. ! * The output stream is created and managed by the application. ! * It is the application's responsibility to close the stream and ! * to ensure that this Printer is not reused. ! * The application should not close this stream until any print job ! * created from the printer is complete. Doing so earlier may generate ! * a {@code PrinterException} and an event indicating that the ! * job failed. ! * <p> ! * Whereas a {@code PrintService} connected to a physical printer ! * can be reused, ! * a {@code StreamPrintService} connected to a stream cannot. ! * The underlying {@code StreamPrintService} may be disposed by ! * the print system with ! * the {@link StreamPrintService#dispose() dispose} method ! * before returning from the ! * {@link DocPrintJob#print(Doc, javax.print.attribute.PrintRequestAttributeSet) print} ! * method of {@code DocPrintJob} so that the print system knows ! * this printer is no longer usable. ! * This is equivalent to a physical printer going offline - permanently. ! * Applications may supply a null print stream to create a queryable ! * service. It is not valid to create a PrintJob for such a stream. ! * Implementations which allocate resources on construction should examine ! * the stream and may wish to only allocate resources if the stream is ! * non-null. ! * ! * @param out destination stream for generated output. ! * @return a PrintService which will generate the format specified by the ! * DocFlavor supported by this Factory. */ public abstract StreamPrintService getPrintService(OutputStream out); ! private static ArrayList<StreamPrintServiceFactory> getAllFactories() { synchronized (StreamPrintServiceFactory.class) { ArrayList<StreamPrintServiceFactory> listOfFactories = getListOfFactories(); if (listOfFactories != null) { --- 24,185 ---- */ package javax.print; import java.io.OutputStream; import java.util.ArrayList; import java.util.Iterator; + import java.util.ServiceConfigurationError; + import java.util.ServiceLoader; ! import javax.print.attribute.PrintRequestAttributeSet; import sun.awt.AppContext; /** * A {@code StreamPrintServiceFactory} is the factory for ! * {@link StreamPrintService} instances, which can print to an output stream in ! * a particular document format described as a mime type. A typical output ! * document format may be Postscript(TM). * <p> ! * This class is implemented by a service and located by the implementation ! * using the {@link ServiceLoader} facility. * <p> * Applications locate instances of this class by calling the * {@link #lookupStreamPrintServiceFactories(DocFlavor, String)} method. * <p> ! * Applications can use a {@code StreamPrintService} obtained from a factory in ! * place of a {@code PrintService} which represents a physical printer device. */ public abstract class StreamPrintServiceFactory { + /** + * Contains a list of factories. + */ static class Services { + + /** + * The list of factories which will be stored per appcontext. + */ private ArrayList<StreamPrintServiceFactory> listOfFactories = null; } + /** + * Returns the services from the current appcontext. + * + * @return the services + */ private static Services getServices() { Services services = (Services)AppContext.getAppContext().get(Services.class); if (services == null) { services = new Services(); AppContext.getAppContext().put(Services.class, services); } return services; } + /** + * Returns the list of factories. + * + * @return the list of factories + */ private static ArrayList<StreamPrintServiceFactory> getListOfFactories() { return getServices().listOfFactories; } + /** + * Initialize the list of factories. + * + * @return the list of factories + */ private static ArrayList<StreamPrintServiceFactory> initListOfFactories() { ArrayList<StreamPrintServiceFactory> listOfFactories = new ArrayList<>(); getServices().listOfFactories = listOfFactories; return listOfFactories; } /** ! * Locates factories for print services that can be used with a print job to ! * output a stream of data in the format specified by ! * {@code outputMimeType}. ! * <p> ! * The {@code outputMimeType} parameter describes the document type that you ! * want to create, whereas the {@code flavor} parameter describes the format ! * in which the input data will be provided by the application to the ! * {@code StreamPrintService}. ! * <p> ! * Although {@code null} is an acceptable value to use in the lookup of ! * stream printing services, it's typical to search for a particular desired ! * format, such as Postscript(TM). * ! * @param flavor of the input document type - {@code null} means match all ! * types * @param outputMimeType representing the required output format, used to ! * identify suitable stream printer factories. A value of ! * {@code null} means match all formats. ! * @return matching factories for stream print service instance, empty if no ! * suitable factories could be located */ public static StreamPrintServiceFactory[] lookupStreamPrintServiceFactories(DocFlavor flavor, String outputMimeType) { ArrayList<StreamPrintServiceFactory> list = getFactories(flavor, outputMimeType); return list.toArray(new StreamPrintServiceFactory[list.size()]); } ! /** ! * Queries the factory for the document format that is emitted by printers ! * obtained from this factory. * ! * @return the output format described as a mime type */ public abstract String getOutputFormat(); /** ! * Queries the factory for the document flavors that can be accepted by ! * printers obtained from this factory. ! * ! * @return array of supported doc flavors */ public abstract DocFlavor[] getSupportedDocFlavors(); /** ! * Returns a {@code StreamPrintService} that can print to the specified ! * output stream. The output stream is created and managed by the ! * application. It is the application's responsibility to close the stream ! * and to ensure that this {@code Printer} is not reused. The application ! * should not close this stream until any print job created from the printer ! * is complete. Doing so earlier may generate a {@code PrinterException} and ! * an event indicating that the job failed. ! * <p> ! * Whereas a {@code PrintService} connected to a physical printer can be ! * reused, a {@code StreamPrintService} connected to a stream cannot. The ! * underlying {@code StreamPrintService} may be disposed by the print system ! * with the {@link StreamPrintService#dispose() dispose} method before ! * returning from the ! * {@link DocPrintJob#print(Doc, PrintRequestAttributeSet) print} method of ! * {@code DocPrintJob} so that the print system knows this printer is no ! * longer usable. This is equivalent to a physical printer going offline - ! * permanently. Applications may supply a {@code null} print stream to ! * create a queryable service. It is not valid to create a {@code PrintJob} ! * for such a stream. Implementations which allocate resources on ! * construction should examine the stream and may wish to only allocate ! * resources if the stream is {@code non-null}. ! * ! * @param out destination stream for generated output ! * @return a {@code PrintService} which will generate the format specified ! * by the {@code DocFlavor} supported by this factory */ public abstract StreamPrintService getPrintService(OutputStream out); ! /** ! * Returns all factories for print services. ! * ! * @return all factories ! */ private static ArrayList<StreamPrintServiceFactory> getAllFactories() { synchronized (StreamPrintServiceFactory.class) { ArrayList<StreamPrintServiceFactory> listOfFactories = getListOfFactories(); if (listOfFactories != null) {
*** 196,214 **** --- 215,257 ---- } return listOfFactories; } } + /** + * Checks if the array of {@code flavors} contains the {@code flavor} + * object. + * + * @param flavor the flavor + * @param flavors the array of flavors + * @return {@code true} if {@code flavors} contains the {@code flavor} + * object; {@code false} otherwise + */ private static boolean isMember(DocFlavor flavor, DocFlavor[] flavors) { for (int f=0; f<flavors.length; f++ ) { if (flavor.equals(flavors[f])) { return true; } } return false; } + /** + * Utility method for {@link #lookupStreamPrintServiceFactories}. + * <p> + * Locates factories for print services that can be used with a print job to + * output a stream of data in the format specified by + * {@code outputMimeType}. + * + * @param flavor of the input document type - {@code null} means match all + * types + * @param outType representing the required output format, used to identify + * suitable stream printer factories. A value of {@code null} means + * match all formats. + * @return matching factories for stream print service instance, empty if no + * suitable factories could be located + */ private static ArrayList<StreamPrintServiceFactory> getFactories(DocFlavor flavor, String outType) { if (flavor == null && outType == null) { return getAllFactories(); }
*** 225,231 **** } } return list; } - } --- 268,273 ----
< prev index next >