package org.docear.plugin.bibtex.actions; import java.util.regex.Pattern; import net.sf.jabref.BasePanel; import net.sf.jabref.BibtexEntry; import net.sf.jabref.GUIGlobals; import net.sf.jabref.imports.ParserResult; import net.sf.jabref.imports.PostOpenAction; public class DocearTransformZoteroPathsAction implements PostOpenAction { @Override public boolean isActionNecessary(ParserResult pr) { // e.g.: ":C:\" instead of JabRef-Style: ":C\:\\" Pattern zotero = Pattern.compile(":[a-zA-Z]:\\\\"); Pattern jabref = Pattern.compile(":[A-Za-z]\\\\:\\\\\\\\"); for (BibtexEntry entry : pr.getDatabase().getEntries()) { String fileField = entry.getField(GUIGlobals.FILE_FIELD); if (fileField != null && fileField.trim().length() > 0) { if (zotero.matcher(fileField).find()) { return true; } else if (jabref.matcher(fileField).find()) { return false; } } } return false; } @Override public void performAction(BasePanel panel, ParserResult pr) { for (BibtexEntry entry : pr.getDatabase().getEntries()) { String fileField = entry.getField(GUIGlobals.FILE_FIELD); if (fileField != null && fileField.trim().length() > 0) { fileField = fileField.replaceAll("\\\\", "\\\\\\\\"); fileField = fileField.replaceAll(":([a-zA-Z]):", ":$1\\\\:"); entry.setField(GUIGlobals.FILE_FIELD, fileField); } } } }