Home » openjdk-7 » javax » print » [javadoc | source]

    1   /*
    2    * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
    3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    4    *
    5    * This code is free software; you can redistribute it and/or modify it
    6    * under the terms of the GNU General Public License version 2 only, as
    7    * published by the Free Software Foundation.  Oracle designates this
    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 javax.print;
   27   
   28   import java.util.Locale;
   29   
   30   import javax.print.attribute.Attribute;
   31   import javax.print.attribute.AttributeSet;
   32   import javax.print.attribute.PrintServiceAttribute;
   33   import javax.print.attribute.PrintServiceAttributeSet;
   34   import javax.print.event.PrintServiceAttributeListener;
   35   
   36   
   37   /**
   38    * Interface PrintService is the factory for a DocPrintJob. A PrintService
   39    * describes the capabilities of a Printer and can be queried regarding
   40    * a printer's supported attributes.
   41    * <P>
   42    * Example:
   43    *   <PRE>
   44    *   DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
   45    *   PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
   46    *   aset.add(MediaSizeName.ISO_A4);
   47    *   PrintService[] pservices =
   48    *                 PrintServiceLookup.lookupPrintServices(flavor, aset);
   49    *   if (pservices.length > 0) {
   50    *       DocPrintJob pj = pservices[0].createPrintJob();
   51    *       try {
   52    *           FileInputStream fis = new FileInputStream("test.ps");
   53    *           Doc doc = new SimpleDoc(fis, flavor, null);
   54    *           pj.print(doc, aset);
   55    *        } catch (FileNotFoundException fe) {
   56    *        } catch (PrintException e) {
   57    *        }
   58    *   }
   59    *   </PRE>
   60    */
   61   public interface PrintService {
   62   
   63       /** Returns a String name for this print service which may be used
   64         * by applications to request a particular print service.
   65         * In a suitable context, such as a name service, this name must be
   66         * unique.
   67         * In some environments this unique name may be the same as the user
   68         * friendly printer name defined as the
   69         * {@link javax.print.attribute.standard.PrinterName PrinterName}
   70         * attribute.
   71         * @return name of the service.
   72         */
   73       public String getName();
   74   
   75       /**
   76        * Creates and returns a PrintJob capable of handling data from
   77        * any of the supported document flavors.
   78        * @return a DocPrintJob object
   79        */
   80       public DocPrintJob createPrintJob();
   81   
   82       /**
   83        * Registers a listener for events on this PrintService.
   84        * @param listener  a PrintServiceAttributeListener, which
   85        *        monitors the status of a print service
   86        * @see #removePrintServiceAttributeListener
   87        */
   88       public void addPrintServiceAttributeListener(
   89                                          PrintServiceAttributeListener listener);
   90   
   91       /**
   92        * Removes the print-service listener from this print service.
   93        * This means the listener is no longer interested in
   94        * <code>PrintService</code> events.
   95        * @param listener  a PrintServiceAttributeListener object
   96        * @see #addPrintServiceAttributeListener
   97        */
   98       public void removePrintServiceAttributeListener(
   99                                          PrintServiceAttributeListener listener);
  100   
  101       /**
  102        * Obtains this print service's set of printer description attributes
  103        * giving this Print Service's status. The returned attribute set object
  104        * is unmodifiable. The returned attribute set object is a "snapshot" of
  105        * this Print Service's attribute set at the time of the
  106        * <CODE>getAttributes()</CODE> method call: that is, the returned
  107        * attribute set's contents will <I>not</I> be updated if this print
  108        * service's attribute set's contents change in the future. To detect
  109        * changes in attribute values, call <CODE>getAttributes()</CODE> again
  110        * and compare the new attribute set to the previous attribute set;
  111        * alternatively, register a listener for print service events.
  112        *
  113        * @return  Unmodifiable snapshot of this Print Service's attribute set.
  114        *          May be empty, but not null.
  115        */
  116       public PrintServiceAttributeSet getAttributes();
  117   
  118       /**
  119        * Gets the value of the single specified service attribute.
  120        * This may be useful to clients which only need the value of one
  121        * attribute and want to minimise overhead.
  122        * @param category the category of a PrintServiceAttribute supported
  123        * by this service - may not be null.
  124        * @return the value of the supported attribute or null if the
  125        * attribute is not supported by this service.
  126        * @exception NullPointerException if the category is null.
  127        * @exception  IllegalArgumentException
  128        *     (unchecked exception) if <CODE>category</CODE> is not a
  129        *     <code>Class</code> that implements interface
  130        *{@link javax.print.attribute.PrintServiceAttribute PrintServiceAttribute}.
  131        */
  132       public <T extends PrintServiceAttribute>
  133           T getAttribute(Class<T> category);
  134   
  135       /**
  136        * Determines the print data formats a client can specify when setting
  137        * up a job for this <code>PrintService</code>. A print data format is
  138        * designated by a "doc
  139        * flavor" (class {@link javax.print.DocFlavor DocFlavor})
  140        * consisting of a MIME type plus a print data representation class.
  141        * <P>
  142        * Note that some doc flavors may not be supported in combination
  143        * with all attributes. Use <code>getUnsupportedAttributes(..)</code>
  144        * to validate specific combinations.
  145        *
  146        * @return  Array of supported doc flavors, should have at least
  147        *          one element.
  148        *
  149        */
  150       public DocFlavor[] getSupportedDocFlavors();
  151   
  152       /**
  153        * Determines if this print service supports a specific
  154        * <code>DocFlavor</code>.  This is a convenience method to determine
  155        * if the <code>DocFlavor</code> would be a member of the result of
  156        * <code>getSupportedDocFlavors()</code>.
  157        * <p>
  158        * Note that some doc flavors may not be supported in combination
  159        * with all attributes. Use <code>getUnsupportedAttributes(..)</code>
  160        * to validate specific combinations.
  161        *
  162        * @param flavor the <code>DocFlavor</code>to query for support.
  163        * @return  <code>true</code> if this print service supports the
  164        * specified <code>DocFlavor</code>; <code>false</code> otherwise.
  165        * @exception  NullPointerException
  166        *     (unchecked exception) Thrown if <CODE>flavor</CODE> is null.
  167        */
  168       public boolean isDocFlavorSupported(DocFlavor flavor);
  169   
  170   
  171       /**
  172        * Determines the printing attribute categories a client can specify
  173        * when setting up a job for this print service.
  174        * A printing attribute category is
  175        * designated by a <code>Class</code> that implements interface
  176        * {@link javax.print.attribute.Attribute Attribute}. This method returns
  177        * just the attribute <I>categories</I> that are supported; it does not
  178        * return the particular attribute <I>values</I> that are supported.
  179        * <P>
  180        * This method returns all the printing attribute
  181        * categories this print service supports for any possible job.
  182        * Some categories may not be supported in a particular context (ie
  183        * for a particular <code>DocFlavor</code>).
  184        * Use one of the methods that include a <code>DocFlavor</code> to
  185        * validate the request before submitting it, such as
  186        * <code>getSupportedAttributeValues(..)</code>.
  187        *
  188        * @return  Array of printing attribute categories that the client can
  189        *          specify as a doc-level or job-level attribute in a Print
  190        *          Request. Each element in the array is a {@link java.lang.Class
  191        *          Class} that implements interface {@link
  192        *          javax.print.attribute.Attribute Attribute}.
  193        *          The array is empty if no categories are supported.
  194        */
  195       public Class<?>[] getSupportedAttributeCategories();
  196   
  197       /**
  198        * Determines whether a client can specify the given printing
  199        * attribute category when setting up a job for this print service. A
  200        * printing attribute category is designated by a <code>Class</code>
  201        * that implements interface {@link javax.print.attribute.Attribute
  202        * Attribute}. This method tells whether the attribute <I>category</I> is
  203        * supported; it does not tell whether a particular attribute <I>value</I>
  204        * is supported.
  205        * <p>
  206        * Some categories may not be supported in a particular context (ie
  207        * for a particular <code>DocFlavor</code>).
  208        * Use one of the methods which include a <code>DocFlavor</code> to
  209        * validate the request before submitting it, such as
  210        * <code>getSupportedAttributeValues(..)</code>.
  211        * <P>
  212        * This is a convenience method to determine if the category
  213        * would be a member of the result of
  214        * <code>getSupportedAttributeCategories()</code>.
  215        *
  216        * @param  category    Printing attribute category to test. It must be a
  217        *                        <code>Class</code> that implements
  218        *                        interface
  219        *                {@link javax.print.attribute.Attribute Attribute}.
  220        *
  221        * @return  <code>true</code> if this print service supports
  222        *          specifying a doc-level or
  223        *          job-level attribute in <CODE>category</CODE> in a Print
  224        *          Request; <code>false</code> if it doesn't.
  225        *
  226        * @exception  NullPointerException
  227        *     (unchecked exception) Thrown if <CODE>category</CODE> is null.
  228        * @exception  IllegalArgumentException
  229        *     (unchecked exception) Thrown if <CODE>category</CODE> is not a
  230        *     <code>Class</code> that implements interface
  231        *     {@link javax.print.attribute.Attribute Attribute}.
  232        */
  233       public boolean
  234           isAttributeCategorySupported(Class<? extends Attribute> category);
  235   
  236       /**
  237        * Determines this print service's default printing attribute value in
  238        * the given category. A printing attribute value is an instance of
  239        * a class that implements interface
  240        * {@link javax.print.attribute.Attribute Attribute}. If a client sets
  241        * up a print job and does not specify any attribute value in the
  242        * given category, this Print Service will use the
  243        * default attribute value instead.
  244        * <p>
  245        * Some attributes may not be supported in a particular context (ie
  246        * for a particular <code>DocFlavor</code>).
  247        * Use one of the methods that include a <code>DocFlavor</code> to
  248        * validate the request before submitting it, such as
  249        * <code>getSupportedAttributeValues(..)</code>.
  250        * <P>
  251        * Not all attributes have a default value. For example the
  252        * service will not have a defaultvalue for <code>RequestingUser</code>
  253        * i.e. a null return for a supported category means there is no
  254        * service default value for that category. Use the
  255        * <code>isAttributeCategorySupported(Class)</code> method to
  256        * distinguish these cases.
  257        *
  258        * @param  category    Printing attribute category for which the default
  259        *                     attribute value is requested. It must be a {@link
  260        *                        java.lang.Class Class} that implements interface
  261        *                        {@link javax.print.attribute.Attribute
  262        *                        Attribute}.
  263        *
  264        * @return  Default attribute value for <CODE>category</CODE>, or null
  265        *       if this Print Service does not support specifying a doc-level or
  266        *          job-level attribute in <CODE>category</CODE> in a Print
  267        *          Request, or the service does not have a default value
  268        *          for this attribute.
  269        *
  270        * @exception  NullPointerException
  271        *     (unchecked exception) Thrown if <CODE>category</CODE> is null.
  272        * @exception  IllegalArgumentException
  273        *     (unchecked exception) Thrown if <CODE>category</CODE> is not a
  274        *     {@link java.lang.Class Class} that implements interface {@link
  275        *     javax.print.attribute.Attribute Attribute}.
  276        */
  277       public Object
  278           getDefaultAttributeValue(Class<? extends Attribute> category);
  279   
  280       /**
  281        * Determines the printing attribute values a client can specify in
  282        * the given category when setting up a job for this print service. A
  283        * printing
  284        * attribute value is an instance of a class that implements interface
  285        * {@link javax.print.attribute.Attribute Attribute}.
  286        * <P>
  287        * If <CODE>flavor</CODE> is null and <CODE>attributes</CODE> is null
  288        * or is an empty set, this method returns all the printing attribute
  289        * values this Print Service supports for any possible job. If
  290        * <CODE>flavor</CODE> is not null or <CODE>attributes</CODE> is not
  291        * an empty set, this method returns just the printing attribute values
  292        * that are compatible with the given doc flavor and/or set of attributes.
  293        * That is, a null return value may indicate that specifying this attribute
  294        * is incompatible with the specified DocFlavor.
  295        * Also if DocFlavor is not null it must be a flavor supported by this
  296        * PrintService, else IllegalArgumentException will be thrown.
  297        * <P>
  298        * If the <code>attributes</code> parameter contains an Attribute whose
  299        * category is the same as the <code>category</code> parameter, the service
  300        * must ignore this attribute in the AttributeSet.
  301        * <p>
  302        * <code>DocAttribute</code>s which are to be specified on the
  303        * <code>Doc</code> must be included in this set to accurately
  304        * represent the context.
  305        * <p>
  306        * This method returns an Object because different printing attribute
  307        * categories indicate the supported attribute values in different ways.
  308        * The documentation for each printing attribute in package {@link
  309        * javax.print.attribute.standard javax.print.attribute.standard}
  310        * describes how each attribute indicates its supported values. Possible
  311        * ways of indicating support include:
  312        * <UL>
  313        * <LI>
  314        * Return a single instance of the attribute category to indicate that any
  315        * value is legal -- used, for example, by an attribute whose value is an
  316        * arbitrary text string. (The value of the returned attribute object is
  317        * irrelevant.)
  318        * <LI>
  319        * Return an array of one or more instances of the attribute category,
  320        * containing the legal values -- used, for example, by an attribute with
  321        * a list of enumerated values. The type of the array is an array of the
  322        * specified attribute category type as returned by its
  323        * <code>getCategory(Class)</code>.
  324        * <LI>
  325        * Return a single object (of some class other than the attribute category)
  326        * that indicates bounds on the legal values -- used, for example, by an
  327        * integer-valued attribute that must lie within a certain range.
  328        * </UL>
  329        * <P>
  330        *
  331        * @param  category    Printing attribute category to test. It must be a
  332        *                        {@link java.lang.Class Class} that implements
  333        *                        interface {@link
  334        *                        javax.print.attribute.Attribute Attribute}.
  335        * @param  flavor      Doc flavor for a supposed job, or null.
  336        * @param  attributes  Set of printing attributes for a supposed job
  337        *                        (both job-level attributes and document-level
  338        *                        attributes), or null.
  339        *
  340        * @return  Object indicating supported values for <CODE>category</CODE>,
  341        *          or null if this Print Service does not support specifying a
  342        *          doc-level or job-level attribute in <CODE>category</CODE> in
  343        *          a Print Request.
  344        *
  345        * @exception  NullPointerException
  346        *     (unchecked exception) Thrown if <CODE>category</CODE> is null.
  347        * @exception  IllegalArgumentException
  348        *     (unchecked exception) Thrown if <CODE>category</CODE> is not a
  349        *     {@link java.lang.Class Class} that implements interface {@link
  350        *     javax.print.attribute.Attribute Attribute}, or
  351        *     <code>DocFlavor</code> is not supported by this service.
  352        */
  353       public Object
  354           getSupportedAttributeValues(Class<? extends Attribute> category,
  355                                       DocFlavor flavor,
  356                                       AttributeSet attributes);
  357   
  358       /**
  359        * Determines whether a client can specify the given printing
  360        * attribute
  361        * value when setting up a job for this Print Service. A printing
  362        * attribute value is an instance of a class that implements interface
  363        *  {@link javax.print.attribute.Attribute Attribute}.
  364        * <P>
  365        * If <CODE>flavor</CODE> is null and <CODE>attributes</CODE> is null or
  366        * is an empty set, this method tells whether this Print Service supports
  367        * the given printing attribute value for some possible combination of doc
  368        * flavor and set of attributes. If <CODE>flavor</CODE> is not null or
  369        * <CODE>attributes</CODE> is not an empty set, this method tells whether
  370        * this Print Service supports the given printing attribute value in
  371        * combination with the given doc flavor and/or set of attributes.
  372        * <p>
  373        * Also if DocFlavor is not null it must be a flavor supported by this
  374        * PrintService, else IllegalArgumentException will be thrown.
  375        * <p>
  376        * <code>DocAttribute</code>s which are to be specified on the
  377        * <code>Doc</code> must be included in this set to accurately
  378        * represent the context.
  379        * <p>
  380        * This is a convenience method to determine if the value
  381        * would be a member of the result of
  382        * <code>getSupportedAttributeValues(...)</code>.
  383        *
  384        * @param  attrval       Printing attribute value to test.
  385        * @param  flavor      Doc flavor for a supposed job, or null.
  386        * @param  attributes  Set of printing attributes for a supposed job
  387        *                        (both job-level attributes and document-level
  388        *                        attributes), or null.
  389        *
  390        * @return  True if this Print Service supports specifying
  391        *        <CODE>attrval</CODE> as a doc-level or job-level attribute in a
  392        *          Print Request, false if it doesn't.
  393        *
  394        * @exception  NullPointerException
  395        *     (unchecked exception)  if <CODE>attrval</CODE> is null.
  396        * @exception  IllegalArgumentException if flavor is not supported by
  397        *      this PrintService.
  398        */
  399       public boolean isAttributeValueSupported(Attribute attrval,
  400                                                DocFlavor flavor,
  401                                                AttributeSet attributes);
  402   
  403   
  404       /**
  405        * Identifies the attributes that are unsupported for a print request
  406        * in the context of a particular DocFlavor.
  407        * This method is useful for validating a potential print job and
  408        * identifying the specific attributes which cannot be supported.
  409        * It is important to supply only a supported DocFlavor or an
  410        * IllegalArgumentException will be thrown. If the
  411        * return value from this method is null, all attributes are supported.
  412        * <p>
  413        * <code>DocAttribute</code>s which are to be specified on the
  414        * <code>Doc</code> must be included in this set to accurately
  415        * represent the context.
  416        * <p>
  417        * If the return value is non-null, all attributes in the returned
  418        * set are unsupported with this DocFlavor. The returned set does not
  419        * distinguish attribute categories that are unsupported from
  420        * unsupported attribute values.
  421        * <p>
  422        * A supported print request can then be created by removing
  423        * all unsupported attributes from the original attribute set,
  424        * except in the case that the DocFlavor is unsupported.
  425        * <p>
  426        * If any attributes are unsupported only because they are in conflict
  427        * with other attributes then it is at the discretion of the service
  428        * to select the attribute(s) to be identified as the cause of the
  429        * conflict.
  430        * <p>
  431        * Use <code>isDocFlavorSupported()</code> to verify that a DocFlavor
  432        * is supported before calling this method.
  433        *
  434        * @param  flavor      Doc flavor to test, or null
  435        * @param  attributes  Set of printing attributes for a supposed job
  436        *                        (both job-level attributes and document-level
  437        *                        attributes), or null.
  438        *
  439        * @return  null if this Print Service supports the print request
  440        * specification, else the unsupported attributes.
  441        *
  442        * @exception IllegalArgumentException if<CODE>flavor</CODE> is
  443        *             not supported by this PrintService.
  444        */
  445       public AttributeSet getUnsupportedAttributes(DocFlavor flavor,
  446                                              AttributeSet attributes);
  447   
  448       /**
  449        * Returns a factory for UI components which allow users to interact
  450        * with the service in various roles.
  451        * Services which do not provide any UI should return null.
  452        * Print Services which do provide UI but want to be supported in
  453        * an environment with no UI support should ensure that the factory
  454        * is not initialised unless the application calls this method to
  455        * obtain the factory.
  456        * See <code>ServiceUIFactory</code> for more information.
  457        * @return null or a factory for UI components.
  458        */
  459       public ServiceUIFactory getServiceUIFactory();
  460   
  461       /**
  462        * Determines if two services are referring to the same underlying
  463        * service.  Objects encapsulating a print service may not exhibit
  464        * equality of reference even though they refer to the same underlying
  465        * service.
  466        * <p>
  467        * Clients should call this method to determine if two services are
  468        * referring to the same underlying service.
  469        * <p>
  470        * Services must implement this method and return true only if the
  471        * service objects being compared may be used interchangeably by the
  472        * client.
  473        * Services are free to return the same object reference to an underlying
  474        * service if that, but clients must not depend on equality of reference.
  475        * @param obj the reference object with which to compare.
  476        * @return true if this service is the same as the obj argument,
  477        * false otherwise.
  478        */
  479       public boolean equals(Object obj);
  480   
  481       /**
  482        * This method should be implemented consistently with
  483        * <code>equals(Object)</code>.
  484        * @return hash code of this object.
  485        */
  486       public int hashCode();
  487   
  488   }

Home » openjdk-7 » javax » print » [javadoc | source]