1:
37:
38:
39: package ;
40:
41: import ;
42: import ;
43: import ;
44: import ;
45: import ;
46: import ;
47: import ;
48: import ;
49: import ;
50: import ;
51: import ;
52: import ;
53: import ;
54: import ;
55: import ;
56: import ;
57: import ;
58: import ;
59: import ;
60: import ;
61: import ;
62: import ;
63: import ;
64: import ;
65: import ;
66: import ;
67: import ;
68: import ;
69: import ;
70: import ;
71: import ;
72: import ;
73: import ;
74: import ;
75: import ;
76: import ;
77: import ;
78:
79: import ;
80: import ;
81: import ;
82: import ;
83: import ;
84:
85: import ;
86: import ;
87: import ;
88: import ;
89: import ;
90: import ;
91: import ;
92: import ;
93: import ;
94: import ;
95: import ;
96: import ;
97: import ;
98: import ;
99: import ;
100: import ;
101: import ;
102: import ;
103: import ;
104: import ;
105: import ;
106: import ;
107: import ;
108: import ;
109: import ;
110: import ;
111: import ;
112: import ;
113: import ;
114: import ;
115: import ;
116: import ;
117: import ;
118: import ;
119: import ;
120: import ;
121: import ;
122: import ;
123: import ;
124: import ;
125: import ;
126: import ;
127: import ;
128: import ;
129: import ;
130: import ;
131: import ;
132: import ;
133: import ;
134: import ;
135:
136:
146: public final class IppUtilities
147: {
148:
149: private static Object[] INTEGER_ATT_VALUE = new Object[1];
150: private static Class[] INTEGER_CLASS_ARRAY = new Class[] {int.class};
151: private static Object[] TEXT_ATT_VALUE = new Object[2];
152: private static Class[] TEXT_CLASS_ARRAY = new Class[] {String.class, Locale.class};
153:
154:
155: private static HashMap classesByName = new HashMap();
156:
157: private static HashMap instanceByClass = new HashMap();
158:
159:
162: static
163: {
164:
165: classesByName.put(JobState.ABORTED.getName(), JobState.class);
166: classesByName.put(Sides.DUPLEX.getName(), Sides.class);
167: classesByName.put(SheetCollate.COLLATED.getName(), SheetCollate.class);
168: classesByName.put(Severity.ERROR.getName(), Severity.class);
169: classesByName.put(JobSheets.NONE.getName(), JobSheets.class);
170: classesByName.put(Finishings.BIND.getName(), Finishings.class);
171: classesByName.put(Fidelity.FIDELITY_FALSE.getName(), Fidelity.class);
172: classesByName.put(Compression.GZIP.getName(), Compression.class);
173: classesByName.put(Chromaticity.COLOR.getName(), Chromaticity.class);
174: classesByName.put(PrintQuality.DRAFT.getName(), PrintQuality.class);
175: classesByName.put(PrinterState.IDLE.getName(), PrinterState.class);
176: classesByName.put(SidesDefault.ONE_SIDED.getName(), SidesDefault.class);
177: classesByName.put(ReferenceUriSchemesSupported.FILE.getName(),
178: ReferenceUriSchemesSupported.class);
179: classesByName.put(PrinterStateReason.DOOR_OPEN.getName(),
180: PrinterStateReason.class);
181: classesByName.put(PresentationDirection.TOLEFT_TOTOP.getName(),
182: PresentationDirection.class);
183: classesByName.put(PDLOverrideSupported.ATTEMPTED.getName(),
184: PDLOverrideSupported.class);
185: classesByName.put(OrientationRequested.PORTRAIT.getName(),
186: OrientationRequested.class);
187: classesByName.put(MultipleDocumentHandling.SINGLE_DOCUMENT.getName(),
188: MultipleDocumentHandling.class);
189: classesByName.put(JobStateReason.JOB_QUEUED.getName(),
190: JobStateReason.class);
191: classesByName.put(UriAuthenticationSupported.NONE.getName(),
192: UriAuthenticationSupported.class);
193: classesByName.put(OperationsSupported.GET_JOBS.getName(),
194: OperationsSupported.class);
195: classesByName.put(UriSecuritySupported.NONE.getName(),
196: UriSecuritySupported.class);
197: classesByName.put(FinishingsSupported.NONE.getName(),
198: FinishingsSupported.class);
199: classesByName.put(FinishingsDefault.NONE.getName(),
200: FinishingsDefault.class);
201: classesByName.put(IppVersionsSupported.V_1_0.getName(),
202: IppVersionsSupported.class);
203: classesByName.put(MultipleDocumentHandlingSupported.SINGLE_DOCUMENT.getName(),
204: MultipleDocumentHandlingSupported.class);
205: classesByName.put(MultipleDocumentHandlingDefault.SINGLE_DOCUMENT.getName(),
206: MultipleDocumentHandlingDefault.class);
207: classesByName.put(CompressionSupported.NONE.getName(),
208: CompressionSupported.class);
209: classesByName.put(OrientationRequestedSupported.PORTRAIT.getName(),
210: OrientationRequestedSupported.class);
211: classesByName.put(OrientationRequestedDefault.PORTRAIT.getName(),
212: OrientationRequestedDefault.class);
213: classesByName.put(SidesSupported.ONE_SIDED.getName(),
214: SidesSupported.class);
215: classesByName.put(PrintQualityDefault.DRAFT.getName(),
216: PrintQualityDefault.class);
217: classesByName.put(PrintQualitySupported.DRAFT.getName(),
218: PrintQualitySupported.class);
219: classesByName.put(ReferenceUriSchemesSupported.FTP.getName(),
220: ReferenceUriSchemesSupported.class);
221:
222:
223: classesByName.put(ColorSupported.SUPPORTED.getName(), ColorSupported.class);
224: classesByName.put(PrinterIsAcceptingJobs.ACCEPTING_JOBS.getName(),
225: PrinterIsAcceptingJobs.class);
226: classesByName.put(MultipleDocumentJobsSupported.SUPPORTED.getName(),
227: MultipleDocumentJobsSupported.class);
228: classesByName.put(PageRangesSupported.SUPPORTED.getName(),
229: PageRangesSupported.class);
230:
231:
232: classesByName.put("media-default", MediaDefault.class);
233: classesByName.put("media-supported", MediaSupported.class);
234: classesByName.put("media", MediaSizeName.class);
235: classesByName.put("printer-location", PrinterLocation.class);
236: classesByName.put("printer-info", PrinterInfo.class);
237: classesByName.put("printer-make-and-model", PrinterMakeAndModel.class);
238: classesByName.put("printer-state-message", PrinterStateMessage.class);
239: classesByName.put("job-state-message", JobStateMessage.class);
240: classesByName.put("job-sheets-default", JobSheetsDefault.class);
241: classesByName.put("job-sheets-supported", JobSheetsSupported.class);
242: classesByName.put("job-name", JobName.class);
243: classesByName.put("printer-name", PrinterName.class);
244: classesByName.put("status-message", StatusMessage.class);
245: classesByName.put("detailed-status-message", DetailedStatusMessage.class);
246: classesByName.put("document-access-error", DocumentAccessError.class);
247: classesByName.put("output-device-assigned", OutputDeviceAssigned.class);
248: classesByName.put("job-hold-until-default", JobHoldUntilDefault.class);
249: classesByName.put("job-originating-user-name",
250: JobOriginatingUserName.class);
251: classesByName.put("job-hold-until-supported",
252: JobHoldUntilSupported.class);
253: classesByName.put("job-message-from-operator",
254: JobMessageFromOperator.class);
255: classesByName.put("printer-message-from-operator",
256: PrinterMessageFromOperator.class);
257: classesByName.put("job-detailed-status-messages",
258: JobDetailedStatusMessages.class);
259: classesByName.put("job-document-access-errors",
260: JobDocumentAccessErrors.class);
261:
262:
263: classesByName.put("copies-default", CopiesDefault.class);
264: classesByName.put("job-id", JobId.class);
265: classesByName.put("job-priority-supported", JobPrioritySupported.class);
266: classesByName.put("job-priority-default", JobPriorityDefault.class);
267: classesByName.put("number-up-supported", NumberUpSupported.class);
268: classesByName.put("number-up-default", NumberUpDefault.class);
269: classesByName.put("queued-job-count", QueuedJobCount.class);
270: classesByName.put("printer-up-time", PrinterUpTime.class);
271: classesByName.put("pages-per-minute", PagesPerMinute.class);
272: classesByName.put("pages-per-minute-color", PagesPerMinuteColor.class);
273: classesByName.put("job-k-octets-processed", JobKOctetsProcessed.class);
274: classesByName.put("number-of-intervening-jobs",
275: NumberOfInterveningJobs.class);
276: classesByName.put("job-impressions-completed",
277: JobImpressionsCompleted.class);
278: classesByName.put("job-media-sheets-completed",
279: JobMediaSheetsCompleted.class);
280: classesByName.put("multiple-operation-time-out",
281: MultipleOperationTimeOut.class);
282:
283:
284:
285: instanceByClass.put(JobPriority.class, new JobPrioritySupported(1));
286: instanceByClass.put(JobHoldUntil.class, new JobHoldUntilSupported("", null));
287: instanceByClass.put(JobSheets.class, new JobSheetsSupported("", null));
288: instanceByClass.put(MultipleDocumentHandling.class, MultipleDocumentHandlingSupported.SINGLE_DOCUMENT);
289: instanceByClass.put(Copies.class, new CopiesSupported(1));
290: instanceByClass.put(Finishings.class, FinishingsSupported.BIND);
291: instanceByClass.put(PageRanges.class, PageRangesSupported.SUPPORTED);
292: instanceByClass.put(Sides.class, SidesSupported.DUPLEX);
293: instanceByClass.put(NumberUp.class, new NumberUpSupported(1));
294: instanceByClass.put(OrientationRequested.class, OrientationRequestedSupported.LANDSCAPE);
295: instanceByClass.put(Media.class, new MediaSupported("", null));
296: instanceByClass.put(PrinterResolution.class, new PrinterResolutionSupported(1,1,1));
297: instanceByClass.put(PrintQuality.class, PrintQualitySupported.DRAFT);
298:
299:
300: instanceByClass.put(Compression.class, CompressionSupported.COMPRESS);
301: }
302:
303: private IppUtilities()
304: {
305:
306: }
307:
308:
315: public static Class getClass(String name)
316: {
317: return (Class) classesByName.get(name);
318: }
319:
320:
327: public static String getSupportedAttrName(Class clazz)
328: {
329: return ((SupportedValuesAttribute) instanceByClass.get(clazz)).getName();
330: }
331:
332:
339: public static Class getSupportedCategory(Class clazz)
340: {
341: return ((SupportedValuesAttribute) instanceByClass.get(clazz)).getCategory();
342: }
343:
344:
349: public static int convertToInt(byte[] b)
350: {
351: return (((b[0] & 0xff) << 24) | ((b[1] & 0xff) << 16)
352: | ((b[2] & 0xff) << 8) | (b[3] & 0xff));
353: }
354:
355:
363: public static int convertToInt(byte b1, byte b2, byte b3, byte b4)
364: {
365: return (((b1 & 0xff) << 24) | ((b2 & 0xff) << 16)
366: | ((b3 & 0xff) << 8) | (b4 & 0xff));
367: }
368:
369:
375: public static short convertToShort(byte b1, byte b2)
376: {
377: return (short) ((b1 << 8) | (b2 & 0xff));
378: }
379:
380:
388: public static Attribute getEnumAttribute(String name, Object value)
389: {
390: Class attrClass = getClass(name);
391:
392:
393: if (attrClass == null)
394: return null;
395:
396: try
397: {
398: Field[] fields = attrClass.getDeclaredFields();
399: for (int i = 0; i < fields.length; i++)
400: {
401: Field field = fields[i];
402: if (field.getType().equals(attrClass))
403: {
404: EnumSyntax attr = (EnumSyntax) field.get(null);
405: if (value instanceof Integer
406: && attr.getValue() == ((Integer) value).intValue())
407: return (Attribute) attr;
408: else if (value instanceof String
409: && attr.toString().equals(value))
410: return (Attribute) attr;
411: }
412: }
413: }
414: catch (SecurityException e)
415: {
416:
417: }
418: catch (IllegalArgumentException e)
419: {
420:
421: }
422: catch (IllegalAccessException e)
423: {
424:
425: }
426:
427: return null;
428: }
429:
430:
431:
432:
440: public static Attribute getIntegerAttribute(String name, int value)
441: {
442: Class attrClass = getClass(name);
443:
444:
445: if (attrClass == null)
446: return null;
447:
448: try
449: {
450: INTEGER_ATT_VALUE[0] = new Integer(value);
451: Constructor c = attrClass.getDeclaredConstructor(INTEGER_CLASS_ARRAY);
452: return (Attribute) c.newInstance(INTEGER_ATT_VALUE);
453: }
454: catch (SecurityException e)
455: {
456:
457: }
458: catch (NoSuchMethodException e)
459: {
460:
461: }
462: catch (IllegalAccessException e)
463: {
464:
465: }
466: catch (InstantiationException e)
467: {
468:
469: }
470: catch (InvocationTargetException e)
471: {
472:
473: }
474:
475: return null;
476: }
477:
478:
487: public static Attribute getTextAttribute(String name, byte tag, byte[] value)
488: {
489:
490: if (tag == IppValueTag.NAME_WITHOUT_LANGUAGE
491: || tag == IppValueTag.TEXT_WITHOUT_LANGUAGE)
492: {
493: TEXT_ATT_VALUE[0] = new String(value);
494: TEXT_ATT_VALUE[1] = Locale.getDefault();
495: }
496: else
497: {
498: short langLength = convertToShort(value[0], value[1]);
499: byte[] tmp = new byte[langLength];
500: byte[] tmp2 = new byte[value.length - 4 - langLength];
501: System.arraycopy(value, 2, tmp, 0, langLength);
502:
503:
504: String language = new String(tmp);
505: String text = new String(tmp2);
506: Locale locale = null;
507:
508: if (language.length() > 2)
509: locale = new Locale(language.substring(0, 2), language.substring(3));
510: else
511: locale = new Locale(language);
512:
513: TEXT_ATT_VALUE[0] = text;
514: TEXT_ATT_VALUE[1] = locale;
515: }
516:
517: Class attrClass = getClass(name);
518:
519:
520: if (attrClass == null)
521: return null;
522:
523: try
524: {
525: Constructor c = attrClass.getDeclaredConstructor(TEXT_CLASS_ARRAY);
526: return (Attribute) c.newInstance(TEXT_ATT_VALUE);
527: }
528: catch (SecurityException e)
529: {
530:
531: }
532: catch (NoSuchMethodException e)
533: {
534:
535: }
536: catch (IllegalAccessException e)
537: {
538:
539: }
540: catch (InstantiationException e)
541: {
542:
543: }
544: catch (InvocationTargetException e)
545: {
546:
547: }
548:
549: return null;
550: }
551: }