|
What this is
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.pdf;
import java.io.*;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.cookies.OpenCookie;
import org.openide.util.HelpCtx;
import org.openide.util.NbBundle;
/**
* Permits a PDF file to be opened in an external viewer.
*
* @author Jesse Glick
* @author Marian Petras
*/
class PDFOpenSupport implements OpenCookie {
private static final String[] APP_DIRS = new String[] {
"/usr/bin", "/usr/local/bin" }; //NOI18N
private static final String[] VIEWER_NAMES = new String[] {
"xpdf", "kghostview", "ggv", "acroread" }; //NOI18N
static final String FALLBACK_VIEWER_NAME = "acroread"; //NOI18N
private File f;
/**
* @exception java.lang.IllegalArgumentException
* if the specified file does not exist or is not a plain file
*/
public PDFOpenSupport(File f) {
if (!f.isFile()) {
String msg = NbBundle.getMessage(PDFOpenSupport.class,
"EXC_no_such_pdf", //NOI18N
f.getPath());
throw new IllegalArgumentException(msg);
}
this.f = f;
}
public void open() {
Settings sett = Settings.getDefault();
boolean tryAgain = true;
while (tryAgain) {
File viewer = sett.getPDFViewer();
final boolean viewerUnset = (viewer == null);
if (viewerUnset) {
viewer = findViewer();
}
try {
Process p = Runtime.getRuntime().exec(
new String[] {viewer.getPath(),
f.getAbsolutePath()
});
if (viewerUnset) {
sett.setPDFViewer(viewer);
}
tryAgain = false;
// [PENDING] redirect p's output
} catch (IOException ioe) {
// Try to reconfigure.
String excmessage = ioe.getLocalizedMessage();
/* [PENDING] does not work (no properties show in sheet, though node has them):
Node n;
try {
n = new BeanNode (sett);
} catch (IntrospectionException ie) {
TopManager.getDefault ().notifyException (ie);
return;
}
PropertySheet sheet = new PropertySheet ();
sheet.setNodes (new Node[] { n });
//TopManager.getDefault ().getNodeOperation ().explore (n);
*/
ReconfigureReaderPanel configPanel
= new ReconfigureReaderPanel(viewer, excmessage);
String title = NbBundle.getMessage(
PDFOpenSupport.class,
"TITLE_pick_a_viewer"); //NOI18N
DialogDescriptor d = new DialogDescriptor(configPanel, title);
if (DialogDisplayer.getDefault().notify(d)
== DialogDescriptor.OK_OPTION) {
sett.setPDFViewer(configPanel.getSelectedFile());
tryAgain = true;
} else {
tryAgain = false;
}
}
}
}
/**
*/
private static File findViewer() {
File viewer;
for (int i = 0; i < APP_DIRS.length; i++) {
//PENDING/PERFORMANCE: should continue if APP_DIRS[i] does not exist
for (int j = 0; j < VIEWER_NAMES.length; j++) {
String viewerPath;
viewerPath = APP_DIRS[i] + File.separatorChar + VIEWER_NAMES[j];
viewer = new File(viewerPath);
if (viewer.exists()) {
return viewer;
}
}
}
return new File(FALLBACK_VIEWER_NAME);
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.