Example #1
0
  public synchronized PrintService getDefaultPrintService() {
    SecurityManager security = System.getSecurityManager();
    if (security != null) {
      security.checkPrintJobAccess();
    }

    // clear defaultPrintService
    defaultPrintService = null;

    // Windows does not have notification for a change in default
    // so we always get the latest.
    defaultPrinter = getDefaultPrinterName();
    if (defaultPrinter == null) {
      return null;
    }

    if (printServices != null) {
      for (int j = 0; j < printServices.length; j++) {
        if (defaultPrinter.equals(printServices[j].getName())) {
          defaultPrintService = printServices[j];
          break;
        }
      }
    }

    if (defaultPrintService == null) {
      defaultPrintService = new Win32PrintService(defaultPrinter);
    }
    return defaultPrintService;
  }
  public PrintService[] getPrintServices(DocFlavor flavor, AttributeSet attributes) {

    SecurityManager security = System.getSecurityManager();
    if (security != null) {
      security.checkPrintJobAccess();
    }
    PrintRequestAttributeSet requestSet = null;
    PrintServiceAttributeSet serviceSet = null;

    if (attributes != null && !attributes.isEmpty()) {

      requestSet = new HashPrintRequestAttributeSet();
      serviceSet = new HashPrintServiceAttributeSet();

      Attribute[] attrs = attributes.toArray();
      for (int i = 0; i < attrs.length; i++) {
        if (attrs[i] instanceof PrintRequestAttribute) {
          requestSet.add(attrs[i]);
        } else if (attrs[i] instanceof PrintServiceAttribute) {
          serviceSet.add(attrs[i]);
        }
      }
    }

    /*
     * Special case: If client is asking for a particular printer
     * (by name) then we can save time by getting just that service
     * to check against the rest of the specified attributes.
     */
    PrintService[] services = null;
    if (serviceSet != null && serviceSet.get(PrinterName.class) != null) {
      PrinterName name = (PrinterName) serviceSet.get(PrinterName.class);
      PrintService service = getPrintServiceByName(name.getValue());
      if (service == null || !matchingService(service, serviceSet)) {
        services = new PrintService[0];
      } else {
        services = new PrintService[1];
        services[0] = service;
      }
    } else {
      services = getPrintServices();
    }

    if (services.length == 0) {
      return services;
    } else {
      ArrayList matchingServices = new ArrayList();
      for (int i = 0; i < services.length; i++) {
        try {
          if (services[i].getUnsupportedAttributes(flavor, requestSet) == null) {
            matchingServices.add(services[i]);
          }
        } catch (IllegalArgumentException e) {
        }
      }
      services = new PrintService[matchingServices.size()];
      return (PrintService[]) matchingServices.toArray(services);
    }
  }
 /*
  * return empty array as don't support multi docs
  */
 public MultiDocPrintService[] getMultiDocPrintServices(
     DocFlavor[] flavors, AttributeSet attributes) {
   SecurityManager security = System.getSecurityManager();
   if (security != null) {
     security.checkPrintJobAccess();
   }
   return new MultiDocPrintService[0];
 }
  private static ArrayList getMultiDocServices(DocFlavor[] flavors, AttributeSet attributes) {

    ArrayList listOfServices = new ArrayList();
    Iterator psIterator = getAllLookupServices().iterator();
    while (psIterator.hasNext()) {
      try {
        PrintServiceLookup lus = (PrintServiceLookup) psIterator.next();
        MultiDocPrintService[] services = lus.getMultiDocPrintServices(flavors, attributes);
        if (services == null) {
          continue;
        }
        for (int i = 0; i < services.length; i++) {
          listOfServices.add(services[i]);
        }
      } catch (Exception e) {
      }
    }
    /* add any directly registered services */
    ArrayList registeredServices = null;
    try {
      SecurityManager security = System.getSecurityManager();
      if (security != null) {
        security.checkPrintJobAccess();
      }
      registeredServices = getRegisteredServices();
    } catch (Exception e) {
    }
    if (registeredServices != null) {
      PrintService[] services =
          (PrintService[]) registeredServices.toArray(new PrintService[registeredServices.size()]);
      for (int i = 0; i < services.length; i++) {
        if (services[i] instanceof MultiDocPrintService && !listOfServices.contains(services[i])) {
          if (flavors == null || flavors.length == 0) {
            listOfServices.add(services[i]);
          } else {
            boolean supported = true;
            for (int f = 0; f < flavors.length; f++) {
              if (services[i].isDocFlavorSupported(flavors[f])) {

                if (services[i].getUnsupportedAttributes(flavors[f], attributes) != null) {
                  supported = false;
                  break;
                }
              } else {
                supported = false;
                break;
              }
            }
            if (supported) {
              listOfServices.add(services[i]);
            }
          }
        }
      }
    }
    return listOfServices;
  }
Example #5
0
 /* Want the PrintService which is default print service to have
  * equality of reference with the equivalent in list of print services
  * This isn't required by the API and there's a risk doing this will
  * lead people to assume its guaranteed.
  */
 public synchronized PrintService[] getPrintServices() {
   SecurityManager security = System.getSecurityManager();
   if (security != null) {
     security.checkPrintJobAccess();
   }
   if (printServices == null) {
     refreshServices();
   }
   return printServices;
 }
  private static ArrayList getServices(DocFlavor flavor, AttributeSet attributes) {

    ArrayList listOfServices = new ArrayList();
    Iterator psIterator = getAllLookupServices().iterator();
    while (psIterator.hasNext()) {
      try {
        PrintServiceLookup lus = (PrintServiceLookup) psIterator.next();
        PrintService[] services = null;
        if (flavor == null && attributes == null) {
          try {
            services = lus.getPrintServices();
          } catch (Throwable tr) {
          }
        } else {
          services = lus.getPrintServices(flavor, attributes);
        }
        if (services == null) {
          continue;
        }
        for (int i = 0; i < services.length; i++) {
          listOfServices.add(services[i]);
        }
      } catch (Exception e) {
      }
    }
    /* add any directly registered services */
    ArrayList registeredServices = null;
    try {
      SecurityManager security = System.getSecurityManager();
      if (security != null) {
        security.checkPrintJobAccess();
      }
      registeredServices = getRegisteredServices();
    } catch (SecurityException se) {
    }
    if (registeredServices != null) {
      PrintService[] services =
          (PrintService[]) registeredServices.toArray(new PrintService[registeredServices.size()]);
      for (int i = 0; i < services.length; i++) {
        if (!listOfServices.contains(services[i])) {
          if (flavor == null && attributes == null) {
            listOfServices.add(services[i]);
          } else if (((flavor != null && services[i].isDocFlavorSupported(flavor))
                  || flavor == null)
              && null == services[i].getUnsupportedAttributes(flavor, attributes)) {
            listOfServices.add(services[i]);
          }
        }
      }
    }
    return listOfServices;
  }
 public PrintService getDefaultPrintService() {
   SecurityManager security = System.getSecurityManager();
   if (security != null) {
     security.checkPrintJobAccess();
   }
   if (defaultPrintService == null) {
     defaultPrinter = getDefaultPrinterName();
     if (defaultPrinter != null) {
       defaultPrintService = new Win32PrintService(defaultPrinter);
     }
   }
   return defaultPrintService;
 }
 /* Want the PrintService which is default print service to have
  * equality of reference with the equivalent in list of print services
  * This isn't required by the API and there's a risk doing this will
  * lead people to assume its guaranteed.
  */
 public PrintService[] getPrintServices() {
   SecurityManager security = System.getSecurityManager();
   if (security != null) {
     security.checkPrintJobAccess();
   }
   if (printServices == null) {
     PrintService defService = getDefaultPrintService();
     printers = getAllPrinterNames();
     if (printers == null) {
       return new PrintService[0];
     }
     printServices = new PrintService[printers.length];
     for (int p = 0; p < printers.length; p++) {
       if (defService != null && printers[p].equals(defService.getName())) {
         printServices[p] = defService;
       } else {
         printServices[p] = new Win32PrintService(printers[p]);
       }
     }
   }
   return printServices;
 }
 @Override
 public void checkPrintJobAccess() {
   if (finalSecurityManager != null) finalSecurityManager.checkPrintJobAccess();
 }