private void getAttributeValues(DocFlavor flavor) throws PrintException { if (reqAttrSet.get(Fidelity.class) == Fidelity.FIDELITY_TRUE) { fidelity = true; } else { fidelity = false; } Class category; Attribute[] attrs = reqAttrSet.toArray(); for (int i = 0; i < attrs.length; i++) { Attribute attr = attrs[i]; category = attr.getCategory(); if (fidelity == true) { if (!service.isAttributeCategorySupported(category)) { notifyEvent(PrintJobEvent.JOB_FAILED); throw new PrintJobAttributeException("unsupported category: " + category, category, null); } else if (!service.isAttributeValueSupported(attr, flavor, null)) { notifyEvent(PrintJobEvent.JOB_FAILED); throw new PrintJobAttributeException("unsupported attribute: " + attr, null, attr); } } if (category == Destination.class) { URI uri = ((Destination) attr).getURI(); if (!"file".equals(uri.getScheme())) { notifyEvent(PrintJobEvent.JOB_FAILED); throw new PrintException("Not a file: URI"); } else { try { mDestination = (new File(uri)).getPath(); } catch (Exception e) { throw new PrintException(e); } // check write access SecurityManager security = System.getSecurityManager(); if (security != null) { try { security.checkWrite(mDestination); } catch (SecurityException se) { notifyEvent(PrintJobEvent.JOB_FAILED); throw new PrintException(se); } } } } else if (category == JobName.class) { jobName = ((JobName) attr).getValue(); } else if (category == Copies.class) { copies = ((Copies) attr).getValue(); } else if (category == Media.class) { if (attr instanceof MediaSizeName) { mediaName = (MediaSizeName) attr; // If requested MediaSizeName is not supported, // get the corresponding media size - this will // be used to create a new PageFormat. if (!service.isAttributeValueSupported(attr, null, null)) { mediaSize = MediaSize.getMediaSizeForName(mediaName); } } } else if (category == OrientationRequested.class) { orient = (OrientationRequested) attr; } } }
/* There's some inefficiency here as the job set is created even though * it may never be requested. */ private synchronized void initializeAttributeSets(Doc doc, PrintRequestAttributeSet reqSet) { reqAttrSet = new HashPrintRequestAttributeSet(); jobAttrSet = new HashPrintJobAttributeSet(); Attribute[] attrs; if (reqSet != null) { reqAttrSet.addAll(reqSet); attrs = reqSet.toArray(); for (int i = 0; i < attrs.length; i++) { if (attrs[i] instanceof PrintJobAttribute) { jobAttrSet.add(attrs[i]); } } } DocAttributeSet docSet = doc.getAttributes(); if (docSet != null) { attrs = docSet.toArray(); for (int i = 0; i < attrs.length; i++) { if (attrs[i] instanceof PrintRequestAttribute) { reqAttrSet.add(attrs[i]); } if (attrs[i] instanceof PrintJobAttribute) { jobAttrSet.add(attrs[i]); } } } /* add the user name to the job */ String userName = ""; try { userName = System.getProperty("user.name"); } catch (SecurityException se) { } if (userName == null || userName.equals("")) { RequestingUserName ruName = (RequestingUserName) reqSet.get(RequestingUserName.class); if (ruName != null) { jobAttrSet.add(new JobOriginatingUserName(ruName.getValue(), ruName.getLocale())); } else { jobAttrSet.add(new JobOriginatingUserName("", null)); } } else { jobAttrSet.add(new JobOriginatingUserName(userName, null)); } /* if no job name supplied use doc name (if supplied), if none and * its a URL use that, else finally anything .. */ if (jobAttrSet.get(JobName.class) == null) { JobName jobName; if (docSet != null && docSet.get(DocumentName.class) != null) { DocumentName docName = (DocumentName) docSet.get(DocumentName.class); jobName = new JobName(docName.getValue(), docName.getLocale()); jobAttrSet.add(jobName); } else { String str = "JPS Job:" + doc; try { Object printData = doc.getPrintData(); if (printData instanceof URL) { str = ((URL) (doc.getPrintData())).toString(); } } catch (IOException e) { } jobName = new JobName(str, null); jobAttrSet.add(jobName); } } jobAttrSet = AttributeSetUtilities.unmodifiableView(jobAttrSet); }