public synchronized boolean setCiteKeyForEntry(String id, String key) { if (!_entries.containsKey(id)) return false; // Entry doesn't exist! BibtexEntry entry = getEntryById(id); String oldKey = entry.getCiteKey(); if (key != null) entry.setField(BibtexFields.KEY_FIELD, key); else entry.clearField(BibtexFields.KEY_FIELD); return checkForDuplicateKeyAndAdd(oldKey, entry.getCiteKey(), false); }
public synchronized BibtexEntry[] getEntriesByKey(String key) { ArrayList<BibtexEntry> entries = new ArrayList<BibtexEntry>(); for (BibtexEntry entry : _entries.values()) { if (key.equals(entry.getCiteKey())) entries.add(entry); } return entries.toArray(new BibtexEntry[entries.size()]); }
/** Returns the entry with the given bibtex key. */ public synchronized BibtexEntry getEntryByKey(String key) { BibtexEntry back = null; int keyHash = key.hashCode(); // key hash for better performance Set<String> keySet = _entries.keySet(); for (String entrieID : keySet) { BibtexEntry entry = getEntryById(entrieID); if ((entry != null) && (entry.getCiteKey() != null)) { String citeKey = entry.getCiteKey(); if (citeKey != null) { if (keyHash == citeKey.hashCode()) { back = entry; } } } } return back; }
/** * Removes the entry with the given string. * * <p>Returns null if not found. */ public synchronized BibtexEntry removeEntry(String id) { BibtexEntry oldValue = _entries.remove(id); if (oldValue == null) return null; removeKeyFromSet(oldValue.getCiteKey()); oldValue.removePropertyChangeListener(listener); fireDatabaseChanged( new DatabaseChangeEvent(this, DatabaseChangeEvent.ChangeType.REMOVED_ENTRY, oldValue)); return oldValue; }
/** * Inserts the entry, given that its ID is not already in use. use Util.createId(...) to make up a * unique ID for an entry. */ public synchronized boolean insertEntry(BibtexEntry entry) throws KeyCollisionException { String id = entry.getId(); if (getEntryById(id) != null) { throw new KeyCollisionException("ID is already in use, please choose another"); } entry.addPropertyChangeListener(listener); _entries.put(id, entry); fireDatabaseChanged( new DatabaseChangeEvent(this, DatabaseChangeEvent.ChangeType.ADDED_ENTRY, entry)); return checkForDuplicateKeyAndAdd(null, entry.getCiteKey(), false); }
public void run() { if (!goOn) return; for (int i = 0; i < entries.length; i++) { BibtexEntry entry = entries[i]; // Make a list of all PDFs linked from this entry: List<File> files = new ArrayList<File>(); // First check the (legacy) "pdf" field: String pdf = entry.getField("pdf"); String dir = panel.metaData().getFileDirectory("pdf"); File f = Util.expandFilename(pdf, new String[] {dir, "."}); if (f != null) files.add(f); // Then check the "file" field: dir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD); String field = entry.getField(GUIGlobals.FILE_FIELD); if (field != null) { FileListTableModel tm = new FileListTableModel(); tm.setContent(field); for (int j = 0; j < tm.getRowCount(); j++) { FileListEntry flEntry = tm.getEntry(j); if ((flEntry.getType() != null) && (flEntry.getType().getName().toLowerCase().equals("pdf"))) { f = Util.expandFilename(flEntry.getLink(), new String[] {dir, "."}); if (f != null) files.add(f); } } } optDiag.progressArea.append(entry.getCiteKey() + "\n"); if (files.size() == 0) { skipped++; optDiag.progressArea.append(" " + Globals.lang("Skipped - No PDF linked") + ".\n"); } else for (File file : files) { if (!file.exists()) { skipped++; optDiag.progressArea.append( " " + Globals.lang("Skipped - PDF does not exist") + ":\n"); optDiag.progressArea.append(" " + file.getPath() + "\n"); } else { try { XMPUtil.writeXMP(file, entry, database); optDiag.progressArea.append(" " + Globals.lang("Ok") + ".\n"); entriesChanged++; } catch (Exception e) { optDiag.progressArea.append( " " + Globals.lang("Error while writing") + " '" + file.getPath() + "':\n"); optDiag.progressArea.append(" " + e.getLocalizedMessage() + "\n"); errors++; } } } if (optDiag.canceled) { optDiag.progressArea.append("\n" + Globals.lang("Operation canceled.\n")); break; } } optDiag.progressArea.append( "\n" + Globals.lang( "Finished writing XMP for %0 file (%1 skipped, %2 errors).", String.valueOf(entriesChanged), String.valueOf(skipped), String.valueOf(errors))); optDiag.done(); }
public void update() { // pdfURL = new URL("http://geog-www.sbs.ohio-state.edu/faculty/bmark/abbott_etal_ppp03.pdf"); if (result.url != null) { // System.out.println("PDF URL: "+result.url); String bibtexKey = entry.getCiteKey(); String fileDir = basePanel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD); if (fileDir == null) { // TODO: error message if file dir not defined // JOptionPane.showMessageDialog(frame, Globals.lang); return; } DownloadExternalFile def = new DownloadExternalFile(basePanel.frame(), basePanel.metaData(), bibtexKey); try { def.download( result.url, new DownloadExternalFile.DownloadCallback() { public void downloadComplete(FileListEntry file) { System.out.println("finished"); FileListTableModel tm = new FileListTableModel(); String oldValue = entry.getField(GUIGlobals.FILE_FIELD); tm.setContent(oldValue); tm.addEntry(tm.getRowCount(), file); String newValue = tm.getStringRepresentation(); UndoableFieldChange edit = new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD, oldValue, newValue); entry.setField(GUIGlobals.FILE_FIELD, newValue); basePanel.undoManager.addEdit(edit); basePanel.markBaseChanged(); } }); } catch (IOException e) { e.printStackTrace(); } basePanel.output(Globals.lang("Finished downloading full text document")); } else { String message = null; switch (result.status) { case FindFullText.UNKNOWN_DOMAIN: message = Globals.lang( "Unable to find full text article. No search algorithm " + "defined for the '%0' web site.", result.host); break; case FindFullText.WRONG_MIME_TYPE: message = Globals.lang( "Found pdf link, but received the wrong MIME type. " + "This could indicate that you don't have access to the fulltext article."); break; case FindFullText.LINK_NOT_FOUND: message = Globals.lang("Unable to find full text document in the linked web page."); break; case FindFullText.IO_EXCEPTION: message = Globals.lang("Connection error when trying to find full text document."); break; case FindFullText.NO_URLS_DEFINED: message = Globals.lang("This entry provides no URL or DOI links."); break; } basePanel.output(Globals.lang("Full text article download failed")); JOptionPane.showMessageDialog( basePanel.frame(), message, Globals.lang("Full text article download failed"), JOptionPane.ERROR_MESSAGE); } }