This class extends PrintService and represents a print service that prints data in different formats to a client-provided output stream. This is principally intended for services where the output format is a document type suitable for viewing or archiving. The output format must be declared as a mime type. This is equivalent to an output document flavor where the representation class is always "java.io.OutputStream" An instance of the StreamPrintService class is obtained from a StreamPrintServiceFactory instance.

Note that a StreamPrintService is different from a PrintService, which supports a Destination attribute. A StreamPrintService always requires an output stream, whereas a PrintService optionally accepts a Destination. A StreamPrintService has no default destination for its formatted output. Additionally a StreamPrintService is expected to generate output in a format useful in other contexts. StreamPrintService's are not expected to support the Destination attribute.

Registers a listener for events on this PrintService.
Parameters
listenera PrintServiceAttributeListener, which monitors the status of a print service
Creates and returns a PrintJob capable of handling data from any of the supported document flavors.
Return
a DocPrintJob object
Disposes this StreamPrintService. If a stream service cannot be re-used, it must be disposed to indicate this. Typically the client will call this method. Services which write data which cannot meaningfully be appended to may also dispose the stream. This does not close the stream. It just marks it as not for further use by this service.
Determines if two services are referring to the same underlying service. Objects encapsulating a print service may not exhibit equality of reference even though they refer to the same underlying service.

Clients should call this method to determine if two services are referring to the same underlying service.

Services must implement this method and return true only if the service objects being compared may be used interchangeably by the client. Services are free to return the same object reference to an underlying service if that, but clients must not depend on equality of reference.

Parameters
objthe reference object with which to compare.
Return
true if this service is the same as the obj argument, false otherwise.
Gets the value of the single specified service attribute. This may be useful to clients which only need the value of one attribute and want to minimise overhead.
Parameters
categorythe category of a PrintServiceAttribute supported by this service - may not be null.
Return
the value of the supported attribute or null if the attribute is not supported by this service.
Throws
NullPointerExceptionif the category is null.
IllegalArgumentException (unchecked exception) if category is not a Class that implements interface {@link javax.print.attribute.PrintServiceAttribute PrintServiceAttribute}.
Obtains this print service's set of printer description attributes giving this Print Service's status. The returned attribute set object is unmodifiable. The returned attribute set object is a "snapshot" of this Print Service's attribute set at the time of the getAttributes() method call: that is, the returned attribute set's contents will not be updated if this print service's attribute set's contents change in the future. To detect changes in attribute values, call getAttributes() again and compare the new attribute set to the previous attribute set; alternatively, register a listener for print service events.
Return
Unmodifiable snapshot of this Print Service's attribute set. May be empty, but not null.
Returns the runtime class of an object. That Class object is the object that is locked by static synchronized methods of the represented class.
Return
The java.lang.Class object that represents the runtime class of the object. The result is of type {@code Class} where X is the erasure of the static type of the expression on which getClass is called.
Determines this print service's default printing attribute value in the given category. A printing attribute value is an instance of a class that implements interface Attribute . If a client sets up a print job and does not specify any attribute value in the given category, this Print Service will use the default attribute value instead.

Some attributes may not be supported in a particular context (ie for a particular DocFlavor). Use one of the methods that include a DocFlavor to validate the request before submitting it, such as getSupportedAttributeValues(..).

Not all attributes have a default value. For example the service will not have a defaultvalue for RequestingUser i.e. a null return for a supported category means there is no service default value for that category. Use the isAttributeCategorySupported(Class) method to distinguish these cases.

Parameters
categoryPrinting attribute category for which the default attribute value is requested. It must be a {@link java.lang.Class Class} that implements interface {@link javax.print.attribute.Attribute Attribute}.
Return
Default attribute value for category, or null if this Print Service does not support specifying a doc-level or job-level attribute in category in a Print Request, or the service does not have a default value for this attribute.
Throws
NullPointerException (unchecked exception) Thrown if category is null.
IllegalArgumentException (unchecked exception) Thrown if category is not a {@link java.lang.Class Class} that implements interface {@link javax.print.attribute.Attribute Attribute}.
Returns a String name for this print service which may be used by applications to request a particular print service. In a suitable context, such as a name service, this name must be unique. In some environments this unique name may be the same as the user friendly printer name defined as the PrinterName attribute.
Return
name of the service.
Returns the document format emitted by this print service. Must be in mimetype format, compatible with the mime type components of DocFlavors @see DocFlavor.
Return
mime type identifying the output format.
Gets the output stream.
Return
the stream to which this service will send formatted print data.
Returns a factory for UI components which allow users to interact with the service in various roles. Services which do not provide any UI should return null. Print Services which do provide UI but want to be supported in an environment with no UI support should ensure that the factory is not initialised unless the application calls this method to obtain the factory. See ServiceUIFactory for more information.
Return
null or a factory for UI components.
Determines the printing attribute categories a client can specify when setting up a job for this print service. A printing attribute category is designated by a Class that implements interface Attribute . This method returns just the attribute categories that are supported; it does not return the particular attribute values that are supported.

This method returns all the printing attribute categories this print service supports for any possible job. Some categories may not be supported in a particular context (ie for a particular DocFlavor). Use one of the methods that include a DocFlavor to validate the request before submitting it, such as getSupportedAttributeValues(..).

Return
Array of printing attribute categories that the client can specify as a doc-level or job-level attribute in a Print Request. Each element in the array is a {@link java.lang.Class Class} that implements interface {@link javax.print.attribute.Attribute Attribute}. The array is empty if no categories are supported.
Determines the printing attribute values a client can specify in the given category when setting up a job for this print service. A printing attribute value is an instance of a class that implements interface Attribute .

If flavor is null and attributes is null or is an empty set, this method returns all the printing attribute values this Print Service supports for any possible job. If flavor is not null or attributes is not an empty set, this method returns just the printing attribute values that are compatible with the given doc flavor and/or set of attributes. That is, a null return value may indicate that specifying this attribute is incompatible with the specified DocFlavor. Also if DocFlavor is not null it must be a flavor supported by this PrintService, else IllegalArgumentException will be thrown.

If the attributes parameter contains an Attribute whose category is the same as the category parameter, the service must ignore this attribute in the AttributeSet.

DocAttributes which are to be specified on the Doc must be included in this set to accurately represent the context.

This method returns an Object because different printing attribute categories indicate the supported attribute values in different ways. The documentation for each printing attribute in package javax.print.attribute.standard describes how each attribute indicates its supported values. Possible ways of indicating support include:

  • Return a single instance of the attribute category to indicate that any value is legal -- used, for example, by an attribute whose value is an arbitrary text string. (The value of the returned attribute object is irrelevant.)
  • Return an array of one or more instances of the attribute category, containing the legal values -- used, for example, by an attribute with a list of enumerated values. The type of the array is an array of the specified attribute category type as returned by its getCategory(Class).
  • Return a single object (of some class other than the attribute category) that indicates bounds on the legal values -- used, for example, by an integer-valued attribute that must lie within a certain range.

Parameters
categoryPrinting attribute category to test. It must be a {@link java.lang.Class Class} that implements interface {@link javax.print.attribute.Attribute Attribute}.
flavorDoc flavor for a supposed job, or null.
attributesSet of printing attributes for a supposed job (both job-level attributes and document-level attributes), or null.
Return
Object indicating supported values for category, or null if this Print Service does not support specifying a doc-level or job-level attribute in category in a Print Request.
Throws
NullPointerException (unchecked exception) Thrown if category is null.
IllegalArgumentException (unchecked exception) Thrown if category is not a {@link java.lang.Class Class} that implements interface {@link javax.print.attribute.Attribute Attribute}, or DocFlavor is not supported by this service.
Determines the print data formats a client can specify when setting up a job for this PrintService. A print data format is designated by a "doc flavor" (class DocFlavor ) consisting of a MIME type plus a print data representation class.

Note that some doc flavors may not be supported in combination with all attributes. Use getUnsupportedAttributes(..) to validate specific combinations.

Return
Array of supported doc flavors, should have at least one element.
Identifies the attributes that are unsupported for a print request in the context of a particular DocFlavor. This method is useful for validating a potential print job and identifying the specific attributes which cannot be supported. It is important to supply only a supported DocFlavor or an IllegalArgumentException will be thrown. If the return value from this method is null, all attributes are supported.

DocAttributes which are to be specified on the Doc must be included in this set to accurately represent the context.

If the return value is non-null, all attributes in the returned set are unsupported with this DocFlavor. The returned set does not distinguish attribute categories that are unsupported from unsupported attribute values.

A supported print request can then be created by removing all unsupported attributes from the original attribute set, except in the case that the DocFlavor is unsupported.

If any attributes are unsupported only because they are in conflict with other attributes then it is at the discretion of the service to select the attribute(s) to be identified as the cause of the conflict.

Use isDocFlavorSupported() to verify that a DocFlavor is supported before calling this method.

Parameters
flavorDoc flavor to test, or null
attributesSet of printing attributes for a supposed job (both job-level attributes and document-level attributes), or null.
Return
null if this Print Service supports the print request specification, else the unsupported attributes.
Throws
IllegalArgumentExceptionifflavor is not supported by this PrintService.
This method should be implemented consistently with equals(Object).
Return
hash code of this object.
Determines whether a client can specify the given printing attribute category when setting up a job for this print service. A printing attribute category is designated by a Class that implements interface Attribute . This method tells whether the attribute category is supported; it does not tell whether a particular attribute value is supported.

Some categories may not be supported in a particular context (ie for a particular DocFlavor). Use one of the methods which include a DocFlavor to validate the request before submitting it, such as getSupportedAttributeValues(..).

This is a convenience method to determine if the category would be a member of the result of getSupportedAttributeCategories().

Parameters
categoryPrinting attribute category to test. It must be a Class that implements interface {@link javax.print.attribute.Attribute Attribute}.
Return
true if this print service supports specifying a doc-level or job-level attribute in category in a Print Request; false if it doesn't.
Throws
NullPointerException (unchecked exception) Thrown if category is null.
IllegalArgumentException (unchecked exception) Thrown if category is not a Class that implements interface {@link javax.print.attribute.Attribute Attribute}.
Determines whether a client can specify the given printing attribute value when setting up a job for this Print Service. A printing attribute value is an instance of a class that implements interface Attribute .

If flavor is null and attributes is null or is an empty set, this method tells whether this Print Service supports the given printing attribute value for some possible combination of doc flavor and set of attributes. If flavor is not null or attributes is not an empty set, this method tells whether this Print Service supports the given printing attribute value in combination with the given doc flavor and/or set of attributes.

Also if DocFlavor is not null it must be a flavor supported by this PrintService, else IllegalArgumentException will be thrown.

DocAttributes which are to be specified on the Doc must be included in this set to accurately represent the context.

This is a convenience method to determine if the value would be a member of the result of getSupportedAttributeValues(...).

Parameters
attrvalPrinting attribute value to test.
flavorDoc flavor for a supposed job, or null.
attributesSet of printing attributes for a supposed job (both job-level attributes and document-level attributes), or null.
Return
True if this Print Service supports specifying attrval as a doc-level or job-level attribute in a Print Request, false if it doesn't.
Throws
NullPointerException (unchecked exception) if attrval is null.
IllegalArgumentExceptionif flavor is not supported by this PrintService.
Returns a boolean indicating whether or not this StreamPrintService has been disposed. If this object has been disposed, will return true. Used by services and client applications to recognize streams to which no further data should be written.
Return
if this StreamPrintService has been disposed
Determines if this print service supports a specific DocFlavor. This is a convenience method to determine if the DocFlavor would be a member of the result of getSupportedDocFlavors().

Note that some doc flavors may not be supported in combination with all attributes. Use getUnsupportedAttributes(..) to validate specific combinations.

Parameters
flavorthe DocFlavorto query for support.
Return
true if this print service supports the specified DocFlavor; false otherwise.
Throws
NullPointerException (unchecked exception) Thrown if flavor is null.
Wakes up a single thread that is waiting on this object's monitor. If any threads are waiting on this object, one of them is chosen to be awakened. The choice is arbitrary and occurs at the discretion of the implementation. A thread waits on an object's monitor by calling one of the wait methods.

The awakened thread will not be able to proceed until the current thread relinquishes the lock on this object. The awakened thread will compete in the usual manner with any other threads that might be actively competing to synchronize on this object; for example, the awakened thread enjoys no reliable privilege or disadvantage in being the next thread to lock this object.

This method should only be called by a thread that is the owner of this object's monitor. A thread becomes the owner of the object's monitor in one of three ways:

  • By executing a synchronized instance method of that object.
  • By executing the body of a synchronized statement that synchronizes on the object.
  • For objects of type Class, by executing a synchronized static method of that class.

Only one thread at a time can own an object's monitor.

Throws
IllegalMonitorStateExceptionif the current thread is not the owner of this object's monitor.
Wakes up all threads that are waiting on this object's monitor. A thread waits on an object's monitor by calling one of the wait methods.

The awakened threads will not be able to proceed until the current thread relinquishes the lock on this object. The awakened threads will compete in the usual manner with any other threads that might be actively competing to synchronize on this object; for example, the awakened threads enjoy no reliable privilege or disadvantage in being the next thread to lock this object.

This method should only be called by a thread that is the owner of this object's monitor. See the notify method for a description of the ways in which a thread can become the owner of a monitor.

Throws
IllegalMonitorStateExceptionif the current thread is not the owner of this object's monitor.
Removes the print-service listener from this print service. This means the listener is no longer interested in PrintService events.
Parameters
listenera PrintServiceAttributeListener object
Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.

The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

 getClass().getName() + '@' + Integer.toHexString(hashCode())
 
Return
a string representation of the object.
Causes current thread to wait until another thread invokes the method or the method for this object. In other words, this method behaves exactly as if it simply performs the call wait(0).

The current thread must own this object's monitor. The thread releases ownership of this monitor and waits until another thread notifies threads waiting on this object's monitor to wake up either through a call to the notify method or the notifyAll method. The thread then waits until it can re-obtain ownership of the monitor and resumes execution.

As in the one argument version, interrupts and spurious wakeups are possible, and this method should always be used in a loop:

     synchronized (obj) {
         while (<condition does not hold>)
             obj.wait();
         ... // Perform action appropriate to condition
     }
 
This method should only be called by a thread that is the owner of this object's monitor. See the notify method for a description of the ways in which a thread can become the owner of a monitor.
Throws
IllegalMonitorStateExceptionif the current thread is not the owner of the object's monitor.
InterruptedExceptionif another thread interrupted the current thread before or while the current thread was waiting for a notification. The interrupted status of the current thread is cleared when this exception is thrown.
Causes current thread to wait until either another thread invokes the method or the method for this object, or a specified amount of time has elapsed.

The current thread must own this object's monitor.

This method causes the current thread (call it T) to place itself in the wait set for this object and then to relinquish any and all synchronization claims on this object. Thread T becomes disabled for thread scheduling purposes and lies dormant until one of four things happens:

  • Some other thread invokes the notify method for this object and thread T happens to be arbitrarily chosen as the thread to be awakened.
  • Some other thread invokes the notifyAll method for this object.
  • Some other thread interrupts thread T.
  • The specified amount of real time has elapsed, more or less. If timeout is zero, however, then real time is not taken into consideration and the thread simply waits until notified.
The thread T is then removed from the wait set for this object and re-enabled for thread scheduling. It then competes in the usual manner with other threads for the right to synchronize on the object; once it has gained control of the object, all its synchronization claims on the object are restored to the status quo ante - that is, to the situation as of the time that the wait method was invoked. Thread T then returns from the invocation of the wait method. Thus, on return from the wait method, the synchronization state of the object and of thread T is exactly as it was when the wait method was invoked.

A thread can also wake up without being notified, interrupted, or timing out, a so-called spurious wakeup. While this will rarely occur in practice, applications must guard against it by testing for the condition that should have caused the thread to be awakened, and continuing to wait if the condition is not satisfied. In other words, waits should always occur in loops, like this one:

     synchronized (obj) {
         while (<condition does not hold>)
             obj.wait(timeout);
         ... // Perform action appropriate to condition
     }
 
(For more information on this topic, see Section 3.2.3 in Doug Lea's "Concurrent Programming in Java (Second Edition)" (Addison-Wesley, 2000), or Item 50 in Joshua Bloch's "Effective Java Programming Language Guide" (Addison-Wesley, 2001).

If the current thread is interrupted by another thread while it is waiting, then an InterruptedException is thrown. This exception is not thrown until the lock status of this object has been restored as described above.

Note that the wait method, as it places the current thread into the wait set for this object, unlocks only this object; any other objects on which the current thread may be synchronized remain locked while the thread waits.

This method should only be called by a thread that is the owner of this object's monitor. See the notify method for a description of the ways in which a thread can become the owner of a monitor.

Parameters
timeoutthe maximum time to wait in milliseconds.
Throws
IllegalArgumentExceptionif the value of timeout is negative.
IllegalMonitorStateExceptionif the current thread is not the owner of the object's monitor.
InterruptedExceptionif another thread interrupted the current thread before or while the current thread was waiting for a notification. The interrupted status of the current thread is cleared when this exception is thrown.
Causes current thread to wait until another thread invokes the method or the method for this object, or some other thread interrupts the current thread, or a certain amount of real time has elapsed.

This method is similar to the wait method of one argument, but it allows finer control over the amount of time to wait for a notification before giving up. The amount of real time, measured in nanoseconds, is given by:

 1000000*timeout+nanos

In all other respects, this method does the same thing as the method of one argument. In particular, wait(0, 0) means the same thing as wait(0).

The current thread must own this object's monitor. The thread releases ownership of this monitor and waits until either of the following two conditions has occurred:

  • Another thread notifies threads waiting on this object's monitor to wake up either through a call to the notify method or the notifyAll method.
  • The timeout period, specified by timeout milliseconds plus nanos nanoseconds arguments, has elapsed.

The thread then waits until it can re-obtain ownership of the monitor and resumes execution.

As in the one argument version, interrupts and spurious wakeups are possible, and this method should always be used in a loop:

     synchronized (obj) {
         while (<condition does not hold>)
             obj.wait(timeout, nanos);
         ... // Perform action appropriate to condition
     }
 
This method should only be called by a thread that is the owner of this object's monitor. See the notify method for a description of the ways in which a thread can become the owner of a monitor.
Parameters
timeoutthe maximum time to wait in milliseconds.
nanosadditional time, in nanoseconds range 0-999999.
Throws
IllegalArgumentExceptionif the value of timeout is negative or the value of nanos is not in the range 0-999999.
IllegalMonitorStateExceptionif the current thread is not the owner of this object's monitor.
InterruptedExceptionif another thread interrupted the current thread before or while the current thread was waiting for a notification. The interrupted status of the current thread is cleared when this exception is thrown.