public boolean openLink() { frame.output(Localization.lang("External viewer called") + "."); try { ExternalFileType type = fileType; if (this.fileType == null) { if (this.fieldName == null) { // We don't already know the file type, so we try to deduce it from the extension: File file = new File(link); // We try to check the extension for the file: String name = file.getName(); int pos = name.indexOf('.'); String extension = (pos >= 0) && (pos < (name.length() - 1)) ? name.substring(pos + 1).trim().toLowerCase() : null; // Now we know the extension, check if it is one we know about: type = ExternalFileTypes.getInstance().getExternalFileTypeByExt(extension); fileType = type; } else { JabRefDesktop.openExternalViewer( frame.getCurrentBasePanel().getBibDatabaseContext().getMetaData(), link, fieldName); return true; } } if (type instanceof UnknownExternalFileType) { return JabRefDesktop.openExternalFileUnknown( frame, entry, metaData, link, (UnknownExternalFileType) type); } else { return JabRefDesktop.openExternalFileAnyFormat(metaData, link, type); } } catch (IOException e1) { // See if we should show an error message concerning the application to open the // link with. We check if the file type is set, and if the file type has a non-empty // application link. If that link is referred by the error message, we can assume // that the problem is in the open-with-application setting: if ((fileType != null) && (fileType.getOpenWith() != null) && !fileType.getOpenWith().isEmpty() && e1.getMessage().contains(fileType.getOpenWith())) { JOptionPane.showMessageDialog( frame, Localization.lang( "Unable to open link. " + "The application '%0' associated with the file type '%1' could not be called.", fileType.getOpenWith(), fileType.getName()), Localization.lang("Could not open link"), JOptionPane.ERROR_MESSAGE); return false; } LOGGER.warn("Unable to open link", e1); } return false; }
private void setValues(ExternalFileType entry) { name.setText(entry.getName()); extension.setText(entry.getExtension()); mimeType.setText(entry.getMimeType()); application.setText(entry.getOpenWith()); icon.setIcon(entry.getIcon()); if (application.getText().isEmpty()) { useDefault.setSelected(true); } else { other.setSelected(true); } selectedIcon = null; }