Package net.jini.print.service contains interfaces for a Jini Print Service instance's service proxy object.

### Single Doc Print Jobs

The above interaction diagram shows the interfaces involved in printing a job consisting of just one doc. ("Doc" is a short, easy-to-pronounce term that means "a piece of print data.") Interfaces declared in package net.jini.print.job are highlighted. The Jini Print Service instance supplies the Print Service, Print Request, and Print Job objects, and the client supplies the Doc object.

1. The client searches the Jini Lookup Service (JLUS) for a Jini Print Service instance, and the JLUS returns a Print Service object which implements the base interface PrintService. (See package net.jini.print.lookup.)

2. The client calls a method in interface PrintService telling the printer to create a Print Request to print a single Doc. The printer then returns a Print Request object which implements interface DocPrintRequest as well as the base interface PrintRequest.

3. The client calls methods in interfaces PrintRequest and DocPrintRequest to specify the doc object to be printed and a set of job-level printing attributes to use for the job. The client can also register event listeners to receive event notifications for the job. Finally, the client calls a method to submit the Print Request to be printed, and the printer returns a Print Job object which implements interface PrintJob. (See package net.jini.print.job.)

4. The printer calls methods in interface Doc to obtain the print data format, the document-level printing attributes, and the actual print data, then proceeds to print the job. (See package net.jini.print.data.)

5. The client calls methods in interface PrintJob to monitor the Print Job's progress and control the Print Job as the printer processes it. The client can also register event listeners to receive event notifications for the job. Alternatively, if the client doesn't need to monitor or control the job, the client can simply disregard the returned Print Job object. (See package net.jini.print.job.)

### Multiple Doc Print Jobs

The above interaction diagram shows the interfaces involved in printing a job consisting of more than one doc -- a "multidoc." It is much the same as the previous scenario, except a few different interfaces are involved.

1. The client searches the Jini Lookup Service (JLUS) for a Jini Print Service instance, and the JLUS returns a Print Service object which implements interface MultiDocPrintService as well as the base interface PrintService. (See package net.jini.print.lookup.)

2. The client calls a method in interface MultiDocPrintService telling the Print Service to create a Print Request to print a MultiDoc. The printer then returns a Print Request object which implements interface MultiDocPrintRequest as well as the base interface PrintRequest.

3. The client calls methods in interfaces PrintRequest and MultiDocPrintRequest to specify the multidoc object to be printed and a set of job-level printing attributes to use for the job. The client can also register event listeners to receive event notifications for the job. Finally, the client calls a method to submit the Print Request to be printed, and the printer returns a Print Job object which implements interface PrintJob. (See package net.jini.print.job.)

4. The multidoc provides a "linked list view" of the docs to be printed. The printer calls a method in interface MultiDoc on the current multidoc object to get the current doc to be printed. (See package net.jini.print.data.)

5. The printer calls methods in interface Doc on the current doc object to obtain the print data format, the document-level printing attributes, and the actual print data. (See package net.jini.print.data.)

6. The printer calls a method in interface MultiDoc on the current multidoc object to get the next multidoc object, and repeats from Step 4 until it has gotten all the docs. The printer then proceeds to print the job consisting of all the docs. (See package net.jini.print.data.)

7. The client calls methods in interface PrintJob to monitor the Print Job's progress and control the Print Job as the printer processes it. The client can also register event listeners to receive event notifications for the job. Alternatively, if the client doesn't need to monitor or control the job, the client can simply disregard the returned Print Job object. (See package net.jini.print.job.)

### Package net.jini.print.service's Role

Package net.jini.print.service's role in the Jini Print Service API is to:

- Declare the PrintService interface, which is the base interface all Jini Print Service instances' service proxy objects implement, whereby the client uses the print service to create a Print Request object to print a single doc -- a "doc print request." Interface PrintService also contains methods to monitor the Print Service's status and to discover the Print Service's capabilities.

- Declare the MultiDocPrintService interface whereby the client creates a Print Request object to print multiple docs -- a "multidoc print request."

- Declare the LocalizedPrintService interface whereby the client can obtain localized strings for print data formats, printing attribute categories, and printing attribute values.

The following UML class diagram shows the relationships among the interfaces and classes described above.

Package net.jini.print.service also includes these supporting classes:

- Remote event object for reporting events pertaining to a Print Service -- class PrintServiceEvent.

- Exception class thrown by methods in package net.jini.print.service -- class PrintServiceException.

All Jini Print Service instances must be capable of creating doc print requests. Thus, all Jini Print Service proxy objects mandatorily implement interface PrintService. However, creating multidoc print requests is an optional capability that not all Jini Print Service instances are required to provide. If a Jini Print Service instance can create multidoc print requests, its service proxy object implements interface MultiDocPrintService as well as PrintService.

A Jini Print Service instance advertises the kinds of Print Requests it supports by the interfaces its service proxy object implements. To get a Jini Print Service instance that can print your kind of job, make sure to search the JLUS for the proper service interface. To print a job with a single doc, search for a service that implements interface PrintService. To print a job with multiple docs, search for a service that implements interface MultiDocPrintService. See the print service lookup scheme in package net.jini.print.lookup for further information.

### Future Capabilities

The following Print Service capabilities will be added in future versions of the Jini Print Service API:

- Examine print job queue.
- Dynamic printer control (pause, resume, purge jobs, etc.).

Placement of this package under package net.jini.print is preliminary and not yet approved by the Jini Community.

DRAFT STANDARD VERSION 1.0 (23-MAY-2000)