vhardy 02/05/02 02:24:16
Modified: sources/org/apache/batik/apps/svgbrowser
JSVGViewerFrame.java
resources/org/apache/batik/apps/svgbrowser/resources
GUI.properties
Added: sources/org/apache/batik/apps/svgbrowser
WindowsAltFileSystemView.java
Log:
Implemented work around bug on Windows platform which caused an annoying dialog to
be displayed when opening the JFileChooser and a SecurityManager was active
Revision Changes Path
1.76 +32 -2
xml-batik/sources/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java
Index: JSVGViewerFrame.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -r1.75 -r1.76
--- JSVGViewerFrame.java 30 Apr 2002 08:45:14 -0000 1.75
+++ JSVGViewerFrame.java 2 May 2002 09:24:16 -0000 1.76
@@ -165,7 +165,7 @@
* This class represents a SVG viewer swing frame.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a>
- * @version $Id: JSVGViewerFrame.java,v 1.75 2002/04/30 08:45:14 vhardy Exp $
+ * @version $Id: JSVGViewerFrame.java,v 1.76 2002/05/02 09:24:16 vhardy Exp $
*/
public class JSVGViewerFrame
extends JFrame
@@ -228,6 +228,25 @@
new Cursor(Cursor.DEFAULT_CURSOR);
/**
+ * Name for the os-name property
+ */
+ public final static String PROPERTY_OS_NAME
+ = Resources.getString("JSVGViewerFrame.property.os.name");
+
+ /**
+ * Name for the os.name default
+ */
+ public final static String PROPERTY_OS_NAME_DEFAULT
+ = Resources.getString("JSVGViewerFrame.property.os.name.default");
+
+ /**
+ * Name for the os.name property prefix we are looking
+ * for in OpenAction to work around JFileChooser bug
+ */
+ public final static String PROPERTY_OS_WINDOWS_PREFIX
+ = Resources.getString("JSVGViewerFrame.property.os.windows.prefix");
+
+ /**
* The resource bundle
*/
protected static ResourceBundle bundle;
@@ -702,7 +721,18 @@
public OpenAction() {
}
public void actionPerformed(ActionEvent e) {
- JFileChooser fileChooser = new JFileChooser(makeAbsolute(currentPath));
+ JFileChooser fileChooser = null;
+
+ // Apply work around Windows problem when security is enabled
+ String os = System.getProperty(PROPERTY_OS_NAME,
PROPERTY_OS_NAME_DEFAULT);
+ SecurityManager sm = System.getSecurityManager();
+ if ( sm != null && os.indexOf(PROPERTY_OS_WINDOWS_PREFIX) != -1 ){
+ fileChooser = new JFileChooser(makeAbsolute(currentPath),
+ new WindowsAltFileSystemView());
+ } else {
+ fileChooser = new JFileChooser(makeAbsolute(currentPath));
+ }
+
fileChooser.setFileHidingEnabled(false);
fileChooser.setFileSelectionMode
(JFileChooser.FILES_ONLY);
1.1
xml-batik/sources/org/apache/batik/apps/svgbrowser/WindowsAltFileSystemView.java
Index: WindowsAltFileSystemView.java
===================================================================
/*****************************************************************************
* Copyright (C) The Apache Software Foundation. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Apache Software License *
* version 1.1, a copy of which has been included with this distribution in *
* the LICENSE file. *
*****************************************************************************/
package org.apache.batik.apps.svgbrowser;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Vector;
import javax.swing.filechooser.FileSystemView;
/**
* Work around FileSystemView implementation bug on the Windows
* platform. See:
*
* <a href="http://forums.java.sun.com/thread.jsp?forum=38&thread=71491">
* Using JFileChooser in WebStart-deployed application</a>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a>
* @version $Id: WindowsAltFileSystemView.java,v 1.1 2002/05/02 09:24:16 vhardy Exp
$
*/
// This class is necessary due to an annoying bug on Windows NT where
// instantiating a JFileChooser with the default FileSystemView will
// cause a "drive A: not ready" error every time. I grabbed the
// Windows FileSystemView impl from the 1.3 SDK and modified it so
// as to not use java.io.File.listRoots() to get fileSystem roots.
// java.io.File.listRoots() does a SecurityManager.checkRead() which
// causes the OS to try to access drive A: even when there is no disk,
// causing an annoying "abort, retry, ignore" popup message every time
// we instantiate a JFileChooser!
//
// Instead of calling listRoots() we use a straightforward alternate
// method of getting file system roots.
class WindowsAltFileSystemView extends FileSystemView {
public static final String EXCEPTION_CONTAINING_DIR_NULL
= "AltFileSystemView.exception.containing.dir.null";
public static final String EXCEPTION_DIRECTORY_ALREADY_EXISTS
= "AltFileSystemView.exception.directory.already.exists";
public static final String NEW_FOLDER_NAME =
" AltFileSystemView.new.folder.name";
public static final String FLOPPY_DRIVE =
"AltFileSystemView.floppy.drive";
private static final Object[] noArgs = {};
private static final Class[] noArgTypes = {};
private static Method listRootsMethod = null;
private static boolean listRootsMethodChecked = false;
/**
* Returns true if the given file is a root.
*/
public boolean isRoot(File f) {
if(!f.isAbsolute()) {
return false;
}
String parentPath = f.getParent();
if(parentPath == null) {
return true;
} else {
File parent = new File(parentPath);
return parent.equals(f);
}
}
/**
* creates a new folder with a default folder name.
*/
public File createNewFolder(File containingDir) throws
IOException {
if(containingDir == null) {
throw new
IOException(Resources.getString(EXCEPTION_CONTAINING_DIR_NULL));
}
File newFolder = null;
// Using NT's default folder name
newFolder = createFileObject(containingDir,
Resources.getString(NEW_FOLDER_NAME));
int i = 2;
while (newFolder.exists() && (i < 100)) {
newFolder = createFileObject
(containingDir, Resources.getString(NEW_FOLDER_NAME) + " (" + i +
")");
i++;
}
if(newFolder.exists()) {
throw new IOException
(Resources.formatMessage(EXCEPTION_DIRECTORY_ALREADY_EXISTS,
new
Object[]{newFolder.getAbsolutePath()}));
} else {
newFolder.mkdirs();
}
return newFolder;
}
/**
* Returns whether a file is hidden or not. On Windows
* there is currently no way to get this information from
* io.File, therefore always return false.
*/
public boolean isHiddenFile(File f) {
return false;
}
/**
* Returns all root partitians on this system. On Windows, this
* will be the A: through Z: drives.
*/
public File[] getRoots() {
Vector rootsVector = new Vector();
// Create the A: drive whether it is mounted or not
FileSystemRoot floppy = new FileSystemRoot(Resources.getString(FLOPPY_DRIVE)
+ "\\");
rootsVector.addElement(floppy);
// Run through all possible mount points and check
// for their existance.
for (char c = 'C'; c <= 'Z'; c++) {
char device[] = {c, ':', '\\'};
String deviceName = new String(device);
File deviceFile = new FileSystemRoot(deviceName);
if (deviceFile != null && deviceFile.exists()) {
rootsVector.addElement(deviceFile);
}
}
File[] roots = new File[rootsVector.size()];
rootsVector.copyInto(roots);
return roots;
}
class FileSystemRoot extends File {
public FileSystemRoot(File f) {
super(f, "");
}
public FileSystemRoot(String s) {
super(s);
}
public boolean isDirectory() {
return true;
}
}
}
1.46 +20 -1
xml-batik/resources/org/apache/batik/apps/svgbrowser/resources/GUI.properties
Index: GUI.properties
===================================================================
RCS file:
/home/cvs/xml-batik/resources/org/apache/batik/apps/svgbrowser/resources/GUI.properties,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -r1.45 -r1.46
--- GUI.properties 30 Apr 2002 08:45:14 -0000 1.45
+++ GUI.properties 2 May 2002 09:24:16 -0000 1.46
@@ -9,7 +9,7 @@
# The viewer's GUI resources.
#
# Author: [EMAIL PROTECTED]
-# $Id: GUI.properties,v 1.45 2002/04/30 08:45:14 vhardy Exp $
+# $Id: GUI.properties,v 1.46 2002/05/02 09:24:16 vhardy Exp $
#
ViewSource.width = 750
@@ -377,6 +377,12 @@
ToolStop.action = StopAction
ToolStop.tooltip = Stop the Processing of the SVG Document.
+#
+# JSVGViewerFrame constants
+#
+JSVGViewerFrame.property.os.name=os.name
+JSVGViewerFrame.property.os.name.default=Solaris
+JSVGViewerFrame.property.os.windows.prefix=Windows
#
# PreferenceDialog parameters
@@ -488,6 +494,19 @@
The user preference indicated that secure script execution should be enforced. \
However, the Squiggle policy file could not be found, which causes this \
exception.
+
+#
+# AltFileSystemView
+#
+AltFileSystemView.exception.containing.dir.null = \
+Containing directory is null
+
+AltFileSystemView.exception.directory.already.exists = \
+Directory already exists: {0}
+
+AltFileSystemView.new.folder.name = New Folder
+
+AltFileSystemView.floppy.drive = A:
#
# JPEGOptionPanel
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]