< prev index next >
src/java.desktop/windows/classes/sun/print/PrintServiceLookupProvider.java
Print this page
*** 25,34 ****
--- 25,35 ----
package sun.print;
import java.security.AccessController;
import java.util.ArrayList;
+ import java.util.Arrays;
import javax.print.DocFlavor;
import javax.print.MultiDocPrintService;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.Attribute;
*** 45,100 ****
private String defaultPrinter;
private PrintService defaultPrintService;
private String[] printers; /* excludes the default printer */
private PrintService[] printServices; /* includes the default printer */
! private static boolean pollServices = true;
! private static final int DEFAULT_MINREFRESH = 240; // 4 minutes
! private static int minRefreshTime = DEFAULT_MINREFRESH;
static {
/* The system property "sun.java2d.print.polling"
* can be used to force the printing code to poll or not poll
* for PrintServices.
*/
String pollStr = java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction("sun.java2d.print.polling"));
!
! if (pollStr != null) {
! if (pollStr.equalsIgnoreCase("false")) {
! pollServices = false;
! }
! }
/* The system property "sun.java2d.print.minRefreshTime"
* can be used to specify minimum refresh time (in seconds)
* for polling PrintServices. The default is 240.
*/
String refreshTimeStr = java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction(
"sun.java2d.print.minRefreshTime"));
!
! if (refreshTimeStr != null) {
! try {
! minRefreshTime = Integer.parseInt(refreshTimeStr);
! } catch (NumberFormatException e) {
! // ignore
! }
! if (minRefreshTime < DEFAULT_MINREFRESH) {
! minRefreshTime = DEFAULT_MINREFRESH;
! }
! }
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Void>() {
public Void run() {
System.loadLibrary("awt");
return null;
}
});
}
/* The singleton win32 print lookup service.
* Code that is aware of this field and wants to use it must first
* see if its null, and if so instantiate it by calling a method such as
* javax.print.PrintServiceLookup.defaultPrintService() so that the
* same instance is stored there.
--- 46,101 ----
private String defaultPrinter;
private PrintService defaultPrintService;
private String[] printers; /* excludes the default printer */
private PrintService[] printServices; /* includes the default printer */
!
! private static final int DEFAULT_REFRESH_TIME = 240; // 4 minutes
! private static final int MINIMUM_REFRESH_TIME = 120; // 2 minutes
! private static final boolean pollServices;
! private static final int refreshTime;
static {
/* The system property "sun.java2d.print.polling"
* can be used to force the printing code to poll or not poll
* for PrintServices.
*/
String pollStr = java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction("sun.java2d.print.polling"));
! pollServices = !("false".equalsIgnoreCase(pollStr));
/* The system property "sun.java2d.print.minRefreshTime"
* can be used to specify minimum refresh time (in seconds)
* for polling PrintServices. The default is 240.
*/
String refreshTimeStr = java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction(
"sun.java2d.print.minRefreshTime"));
! refreshTime = (refreshTimeStr != null)
! ? getRefreshTime(refreshTimeStr)
! : DEFAULT_REFRESH_TIME;
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Void>() {
public Void run() {
System.loadLibrary("awt");
return null;
}
});
}
+ private static int getRefreshTime(final String refreshTimeStr) {
+ try {
+ int minRefreshTime = Integer.parseInt(refreshTimeStr);
+ return (minRefreshTime < MINIMUM_REFRESH_TIME)
+ ? MINIMUM_REFRESH_TIME
+ : minRefreshTime;
+ } catch (NumberFormatException e) {
+ return DEFAULT_REFRESH_TIME;
+ }
+ }
+
/* The singleton win32 print lookup service.
* Code that is aware of this field and wants to use it must first
* see if its null, and if so instantiate it by calling a method such as
* javax.print.PrintServiceLookup.defaultPrintService() so that the
* same instance is stored there.
*** 402,459 ****
private String[] prevRemotePrinters;
RemotePrinterChangeListener() {
}
- private boolean doCompare(String[] str1, String[] str2) {
- if (str1 == null && str2 == null) {
- return false;
- } else if (str1 == null || str2 == null) {
- return true;
- }
-
- if (str1.length != str2.length) {
- return true;
- } else {
- for (int i = 0; i < str1.length; i++) {
- for (int j = 0; j < str2.length; j++) {
- // skip if both are nulls
- if (str1[i] == null && str2[j] == null) {
- continue;
- }
-
- // return true if there is a 'difference' but
- // no need to access the individual string
- if (str1[i] == null || str2[j] == null) {
- return true;
- }
-
- // do comparison only if they are non-nulls
- if (!str1[i].equals(str2[j])) {
- return true;
- }
- }
- }
- }
-
- return false;
- }
-
@Override
public void run() {
// Init the list of remote printers
prevRemotePrinters = getRemotePrintersNames();
while (true) {
try {
! Thread.sleep(minRefreshTime * 1000);
} catch (InterruptedException e) {
break;
}
String[] currentRemotePrinters = getRemotePrintersNames();
! if (doCompare(prevRemotePrinters, currentRemotePrinters)) {
// The list of remote printers got updated,
// so update the cached list printers which
// includes both local and network printers
refreshServices();
--- 403,426 ----
private String[] prevRemotePrinters;
RemotePrinterChangeListener() {
}
@Override
public void run() {
// Init the list of remote printers
prevRemotePrinters = getRemotePrintersNames();
while (true) {
try {
! Thread.sleep(refreshTime * 1000);
} catch (InterruptedException e) {
break;
}
String[] currentRemotePrinters = getRemotePrintersNames();
! if (!Arrays.equals(prevRemotePrinters, currentRemotePrinters)) {
// The list of remote printers got updated,
// so update the cached list printers which
// includes both local and network printers
refreshServices();
< prev index next >