use of org.jabref.gui.filelist.FileListTableModel in project jabref by JabRef.
the class FindFullTextAction method update.
@Override
public void update() {
List<Optional<URL>> remove = new ArrayList<>();
for (Entry<Optional<URL>, BibEntry> download : downloads.entrySet()) {
BibEntry entry = download.getValue();
Optional<URL> result = download.getKey();
if (result.isPresent()) {
List<String> dirs = basePanel.getBibDatabaseContext().getFileDirectories(Globals.prefs.getFileDirectoryPreferences());
if (dirs.isEmpty()) {
JOptionPane.showMessageDialog(basePanel.frame(), Localization.lang("Main file directory not set!") + " " + Localization.lang("Preferences") + " -> " + Localization.lang("File"), Localization.lang("Directory not found"), JOptionPane.ERROR_MESSAGE);
return;
}
DownloadExternalFile def = new DownloadExternalFile(basePanel.frame(), basePanel.getBibDatabaseContext(), entry);
try {
def.download(result.get(), file -> {
FileListTableModel fileLinkModel = new FileListTableModel();
entry.getField(FieldName.FILE).ifPresent(fileLinkModel::setContent);
fileLinkModel.addEntry(0, file);
String newValue = fileLinkModel.getStringRepresentation();
UndoableFieldChange edit = new UndoableFieldChange(entry, FieldName.FILE, entry.getField(FieldName.FILE).orElse(null), newValue);
entry.setField(FieldName.FILE, newValue);
basePanel.getUndoManager().addEdit(edit);
basePanel.markBaseChanged();
});
} catch (IOException e) {
LOGGER.warn("Problem downloading file", e);
}
basePanel.output(Localization.lang("Finished downloading full text document for entry %0.", entry.getCiteKeyOptional().orElse(Localization.lang("undefined"))));
} else {
String title = Localization.lang("Full text document download failed");
String message = Localization.lang("Full text document download failed for entry %0.", entry.getCiteKeyOptional().orElse(Localization.lang("undefined")));
basePanel.output(message);
JOptionPane.showMessageDialog(basePanel.frame(), message, title, JOptionPane.ERROR_MESSAGE);
}
remove.add(result);
}
for (Optional<URL> result : remove) {
downloads.remove(result);
}
}
use of org.jabref.gui.filelist.FileListTableModel in project jabref by JabRef.
the class EntryFromFileCreator method addFileInfo.
private void addFileInfo(BibEntry entry, File file) {
Optional<ExternalFileType> fileType = ExternalFileTypes.getInstance().getExternalFileTypeByExt(externalFileType.getFieldName());
List<Path> possibleFilePaths = JabRefGUI.getMainFrame().getCurrentBasePanel().getBibDatabaseContext().getFileDirectoriesAsPaths(Globals.prefs.getFileDirectoryPreferences());
Path shortenedFileName = FileUtil.shortenFileName(file.toPath(), possibleFilePaths);
FileListEntry fileListEntry = new FileListEntry("", shortenedFileName.toString(), fileType);
FileListTableModel model = new FileListTableModel();
model.addEntry(0, fileListEntry);
entry.setField(FieldName.FILE, model.getStringRepresentation());
}
use of org.jabref.gui.filelist.FileListTableModel in project jabref by JabRef.
the class MainTableSelectionListener method showIconRightClickMenu.
/**
* Process popup trigger events occurring on an icon cell in the table. Show a menu where the user can choose which
* external resource to open for the entry. If no relevant external resources exist, let the normal popup trigger
* handler do its thing instead.
*
* @param e The mouse event defining this popup trigger.
* @param row The row where the event occurred.
* @param column the MainTableColumn associated with this table cell.
*/
private void showIconRightClickMenu(MouseEvent e, int row, MainTableColumn column) {
BibEntry entry = tableRows.get(row);
JPopupMenu menu = new JPopupMenu();
boolean showDefaultPopup = true;
// field that can specify a list of links:
if (!column.getBibtexFields().isEmpty()) {
for (String field : column.getBibtexFields()) {
if (FieldName.FILE.equals(field)) {
// We use a FileListTableModel to parse the field content:
FileListTableModel fileList = new FileListTableModel();
entry.getField(field).ifPresent(fileList::setContent);
for (int i = 0; i < fileList.getRowCount(); i++) {
FileListEntry flEntry = fileList.getEntry(i);
if (column.isFileFilter() && (!flEntry.getType().get().getName().equalsIgnoreCase(column.getColumnName()))) {
continue;
}
String description = flEntry.getDescription();
if ((description == null) || (description.trim().isEmpty())) {
description = flEntry.getLink();
}
menu.add(new ExternalFileMenuItem(panel.frame(), entry, description, flEntry.getLink(), flEntry.getType().get().getIcon(), panel.getBibDatabaseContext(), flEntry.getType()));
showDefaultPopup = false;
}
} else {
if (SpecialField.isSpecialField(column.getColumnName())) {
// full pop should be shown as left click already shows short popup
showDefaultPopup = true;
} else {
Optional<String> content = entry.getField(field);
if (content.isPresent()) {
Icon icon;
JLabel iconLabel = GUIGlobals.getTableIcon(field);
if (iconLabel == null) {
icon = IconTheme.JabRefIcon.FILE.getIcon();
} else {
icon = iconLabel.getIcon();
}
menu.add(new ExternalFileMenuItem(panel.frame(), entry, content.get(), content.get(), icon, panel.getBibDatabaseContext(), field));
if (field.equals(FieldName.DOI)) {
menu.add(new CopyDoiUrlAction(content.get()));
}
showDefaultPopup = false;
}
}
}
}
if (showDefaultPopup) {
processPopupTrigger(e, row);
} else {
menu.show(table, e.getX(), e.getY());
}
}
}
use of org.jabref.gui.filelist.FileListTableModel in project jabref by JabRef.
the class PdfImporter method doXMPImport.
private void doXMPImport(String fileName, List<BibEntry> res) {
List<BibEntry> localRes = new ArrayList<>();
PdfXmpImporter importer = new PdfXmpImporter(Globals.prefs.getXMPPreferences());
Path filePath = Paths.get(fileName);
ParserResult result = importer.importDatabase(filePath, Globals.prefs.getDefaultEncoding());
if (result.hasWarnings()) {
frame.showMessage(result.getErrorMessage());
}
localRes.addAll(result.getDatabase().getEntries());
BibEntry entry;
if (localRes.isEmpty()) {
// import failed -> generate default entry
LOGGER.info("Import failed");
createNewBlankEntry(fileName).ifPresent(res::add);
return;
}
// only one entry is imported
entry = localRes.get(0);
// insert entry to database and link file
panel.getDatabase().insertEntry(entry);
panel.markBaseChanged();
FileListTableModel tm = new FileListTableModel();
Path toLink = Paths.get(fileName);
// Get a list of file directories:
List<Path> dirsS = panel.getBibDatabaseContext().getFileDirectoriesAsPaths(Globals.prefs.getFileDirectoryPreferences());
tm.addEntry(0, new FileListEntry(toLink.getFileName().toString(), FileUtil.shortenFileName(toLink, dirsS).toString(), ExternalFileTypes.getInstance().getExternalFileTypeByName("PDF")));
entry.setField(FieldName.FILE, tm.getStringRepresentation());
res.add(entry);
}
use of org.jabref.gui.filelist.FileListTableModel in project jabref by JabRef.
the class MainTableSelectionListener method mouseClicked.
@Override
public void mouseClicked(MouseEvent e) {
// First find the column on which the user has clicked.
final int row = table.rowAtPoint(e.getPoint());
// A double click on an entry should open the entry's editor.
if (e.getClickCount() == 2) {
BibEntry toShow = tableRows.get(row);
editSignalled(toShow);
return;
}
final int col = table.columnAtPoint(e.getPoint());
// get the MainTableColumn which is currently visible at col
int modelIndex = table.getColumnModel().getColumn(col).getModelIndex();
MainTableColumn modelColumn = table.getMainTableColumn(modelIndex);
// action will be taken when the button is released:
if (OS.WINDOWS && (modelColumn.isIconColumn()) && (e.getButton() != MouseEvent.BUTTON1)) {
return;
}
// Check if the clicked colum is a specialfield column
if (modelColumn.isIconColumn() && (SpecialField.isSpecialField(modelColumn.getColumnName()))) {
// handle specialfield
handleSpecialFieldLeftClick(e, modelColumn.getColumnName());
} else if (modelColumn.isIconColumn()) {
// left click on icon field
Object value = table.getValueAt(row, col);
if (value == null) {
// No icon here, so we do nothing.
return;
}
final BibEntry entry = tableRows.get(row);
final List<String> fieldNames = modelColumn.getBibtexFields();
// Open it now. We do this in a thread, so the program won't freeze during the wait.
JabRefExecutorService.INSTANCE.execute(() -> {
panel.output(Localization.lang("External viewer called") + '.');
// (is relevant for combinations such as "url/doi")
for (String fieldName : fieldNames) {
// Check if field is present, if not skip this field
if (entry.hasField(fieldName)) {
String link = entry.getField(fieldName).get();
// field that can specify a list of links:
if (fieldName.equals(FieldName.FILE)) {
// We use a FileListTableModel to parse the field content:
FileListTableModel fileList = new FileListTableModel();
fileList.setContent(link);
FileListEntry flEntry = null;
// If there are one or more links of the correct type, open the first one:
if (modelColumn.isFileFilter()) {
for (int i = 0; i < fileList.getRowCount(); i++) {
if (fileList.getEntry(i).getType().toString().equals(modelColumn.getColumnName())) {
flEntry = fileList.getEntry(i);
break;
}
}
} else if (fileList.getRowCount() > 0) {
//If there are no file types specified open the first file
flEntry = fileList.getEntry(0);
}
if (flEntry != null) {
ExternalFileMenuItem item = new ExternalFileMenuItem(panel.frame(), entry, "", flEntry.getLink(), flEntry.getType().map(ExternalFileType::getIcon).orElse(null), panel.getBibDatabaseContext(), flEntry.getType());
item.doClick();
}
} else {
try {
JabRefDesktop.openExternalViewer(panel.getBibDatabaseContext(), link, fieldName);
} catch (IOException ex) {
panel.output(Localization.lang("Unable to open link."));
LOGGER.info("Unable to open link", ex);
}
}
// only open the first link
break;
}
}
});
} else if (modelColumn.getBibtexFields().contains(FieldName.CROSSREF)) {
// Clicking on crossref column
tableRows.get(row).getField(FieldName.CROSSREF).ifPresent(crossref -> panel.getDatabase().getEntryByKey(crossref).ifPresent(entry -> panel.highlightEntry(entry)));
}
panel.frame().updateEnabledState();
}
Aggregations