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