1 19 20 package org.netbeans.modules.pdf; 21 22 import java.io.*; 23 24 import org.openide.DialogDescriptor; 25 import org.openide.DialogDisplayer; 26 import org.openide.cookies.OpenCookie; 27 import org.openide.util.HelpCtx; 28 import org.openide.util.NbBundle; 29 30 36 class PDFOpenSupport implements OpenCookie { 37 38 private static final String [] APP_DIRS = new String [] { 39 "/usr/bin", "/usr/local/bin" }; private static final String [] VIEWER_NAMES = new String [] { 41 "evince", "xpdf", "kghostview", "ggv", "acroread" }; private static final String [] NO_PATH_VIEWERS = new String [] { 43 "acroread", "open" }; static final String FALLBACK_VIEWER_NAME = "acroread"; 46 private File f; 47 48 52 public PDFOpenSupport(File f) { 53 this.f = f; 54 } 55 56 public void open() { 57 Settings sett = Settings.getDefault(); 58 59 File viewer = sett.getPDFViewer(); 60 boolean viewerUnset = (viewer == null); 61 62 if (viewerUnset) { 63 viewer = tryPredefinedViewers(f); 64 if (viewer != null) { 65 sett.setPDFViewer(viewer); 66 return; 67 } 68 } 69 70 if (viewerUnset) { 71 viewer = new File(FALLBACK_VIEWER_NAME); 72 } 73 74 boolean viewerFailed = false; 75 do { 76 try { 77 Process p = Runtime.getRuntime().exec( 78 new String [] {viewer.getPath(), 79 f.getAbsolutePath() 80 }); 81 if (viewerUnset || viewerFailed) { 82 sett.setPDFViewer(viewer); 83 } 84 break; 85 } catch (IOException ioe) { 87 viewerFailed = true; 88 89 String excmessage = ioe.getLocalizedMessage(); 91 103 ReconfigureReaderPanel configPanel 104 = new ReconfigureReaderPanel(viewer, excmessage); 105 String title = NbBundle.getMessage( 106 PDFOpenSupport.class, 107 "TITLE_pick_a_viewer"); DialogDescriptor d = new DialogDescriptor(configPanel, title); 109 if (DialogDisplayer.getDefault().notify(d) 110 == DialogDescriptor.OK_OPTION) { 111 sett.setPDFViewer(viewer = configPanel.getSelectedFile()); 112 } else { 113 break; 114 } 115 } 116 } while (true); 117 } 118 119 121 private static File tryPredefinedViewers(File fileToOpen) { 122 for (int i = 0; i < APP_DIRS.length; i++) { 123 124 File dir = new File(APP_DIRS[i]); 125 if (!dir.exists() || !dir.isDirectory()) { 126 continue; 127 } 128 129 for (int j = 0; j < VIEWER_NAMES.length; j++) { 130 String viewerPath = APP_DIRS[i] + File.separatorChar 131 + VIEWER_NAMES[j]; 132 File viewer = new File(viewerPath); 133 if (!viewer.exists()) { 134 continue; 135 } 136 137 try { 138 Process p = Runtime.getRuntime().exec( 139 new String [] {viewerPath, 140 fileToOpen.getAbsolutePath()}); 141 return viewer; 142 } catch (IOException ex) { 143 } 145 } 146 } 147 148 for (int i = 0; i < NO_PATH_VIEWERS.length; i++) { 149 try { 150 Process p = Runtime.getRuntime().exec( 151 new String [] {NO_PATH_VIEWERS[i], 152 fileToOpen.getAbsolutePath()}); 153 return new File(NO_PATH_VIEWERS[i]); 154 } catch (IOException ex) { 155 } 157 } 158 159 return null; 160 } 161 162 163 } 164 | Popular Tags |