diff --git a/CHANGELOG.md b/CHANGELOG.md index fede47dc032..a34fa012d89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ to [sourceforge feature requests](https://sourceforge.net/p/jabref/features/) by - Improved layout for OSX: Toolbar buttons and search field - Migrated JabRef help to markdown at https://github.com/JabRef/help.jabref.org - BibTeX and BibLaTeX mode is now file based and can be switched at runtime. The information is stored in the .bib file, and if it is not there detected by the entry types. +- Moved all quality-related database actions inside a new quality menu ### Fixed - Make BibTex parser more robust against missing newlines @@ -44,7 +45,7 @@ to [sourceforge feature requests](https://sourceforge.net/p/jabref/features/) by - Removed save session functionality as it just saved the last opened tabs which is done by default - Removed CLI option -l to load a session - Removed JabRef offline help files which are replaced by the new online documentation at https://github.com/JabRef/help.jabref.org - +- Removed PDF preview functionality diff --git a/src/main/java/net/sf/jabref/JabRef.java b/src/main/java/net/sf/jabref/JabRef.java index f835cfea166..6fd08488424 100644 --- a/src/main/java/net/sf/jabref/JabRef.java +++ b/src/main/java/net/sf/jabref/JabRef.java @@ -85,7 +85,7 @@ public void start(String[] args) { Globals.prefs.setLanguageDependentDefaultValues(); // Update which fields should be treated as numeric, based on preferences: - BibtexFields.setNumericFieldsFromPrefs(); + InternalBibtexFields.setNumericFieldsFromPrefs(); /* Build list of Import and Export formats */ Globals.importFormatReader.resetImportFormats(); diff --git a/src/main/java/net/sf/jabref/JabRefPreferences.java b/src/main/java/net/sf/jabref/JabRefPreferences.java index 68018319708..422cb5a6a49 100644 --- a/src/main/java/net/sf/jabref/JabRefPreferences.java +++ b/src/main/java/net/sf/jabref/JabRefPreferences.java @@ -710,7 +710,7 @@ private JabRefPreferences() { // default time stamp follows ISO-8601. Reason: https://xkcd.com/1179/ defaults.put(TIME_STAMP_FORMAT, "yyyy-MM-dd"); - defaults.put(TIME_STAMP_FIELD, BibtexFields.TIMESTAMP); + defaults.put(TIME_STAMP_FIELD, InternalBibtexFields.TIMESTAMP); defaults.put(UPDATE_TIMESTAMP, Boolean.FALSE); defaults.put(GENERATE_KEYS_BEFORE_SAVING, Boolean.FALSE); diff --git a/src/main/java/net/sf/jabref/bibtex/BibEntryWriter.java b/src/main/java/net/sf/jabref/bibtex/BibEntryWriter.java index d7d9fb4c493..7304085a7b6 100644 --- a/src/main/java/net/sf/jabref/bibtex/BibEntryWriter.java +++ b/src/main/java/net/sf/jabref/bibtex/BibEntryWriter.java @@ -1,6 +1,6 @@ package net.sf.jabref.bibtex; -import net.sf.jabref.gui.BibtexFields; +import net.sf.jabref.gui.InternalBibtexFields; import net.sf.jabref.Globals; import net.sf.jabref.exporter.LatexFieldFormatter; import net.sf.jabref.logic.util.strings.StringUtil; @@ -89,8 +89,8 @@ private void writeRequiredFieldsFirstRemainingFieldsSecond(BibEntry entry, Write // Then write remaining fields in alphabetic order. TreeSet remainingFields = new TreeSet<>(); for (String key : entry.getFieldNames()) { - boolean writeIt = write ? BibtexFields.isWriteableField(key) : - BibtexFields.isDisplayableField(key); + boolean writeIt = write ? InternalBibtexFields.isWriteableField(key) : + InternalBibtexFields.isDisplayableField(key); if (!written.contains(key) && writeIt) { remainingFields.add(key); } diff --git a/src/main/java/net/sf/jabref/bibtex/comparator/EntryComparator.java b/src/main/java/net/sf/jabref/bibtex/comparator/EntryComparator.java index d943bcfea3c..0e5e6e8b1f0 100644 --- a/src/main/java/net/sf/jabref/bibtex/comparator/EntryComparator.java +++ b/src/main/java/net/sf/jabref/bibtex/comparator/EntryComparator.java @@ -15,7 +15,7 @@ */ package net.sf.jabref.bibtex.comparator; -import net.sf.jabref.gui.BibtexFields; +import net.sf.jabref.gui.InternalBibtexFields; import net.sf.jabref.model.entry.AuthorList; import net.sf.jabref.model.entry.BibEntry; @@ -43,7 +43,7 @@ public EntryComparator(boolean binary, boolean desc, String field, Comparator v = new ArrayList<>(BibtexFields.getAllFieldNames()); + List v = new ArrayList<>(InternalBibtexFields.getAllFieldNames()); v.add(BibEntry.KEY_FIELD); Collections.sort(v); String[] allPlusKey = v.toArray(new String[v.size()]); diff --git a/src/main/java/net/sf/jabref/gui/EntryCustomizationDialog.java b/src/main/java/net/sf/jabref/gui/EntryCustomizationDialog.java index 45b5c4140f0..3f4c7c30893 100644 --- a/src/main/java/net/sf/jabref/gui/EntryCustomizationDialog.java +++ b/src/main/java/net/sf/jabref/gui/EntryCustomizationDialog.java @@ -51,7 +51,7 @@ public class EntryCustomizationDialog extends JDialog implements ListSelectionLi protected JButton delete; protected JButton importTypes; protected JButton exportTypes; - private final List preset = BibtexFields.getAllFieldNames(); + private final List preset = InternalBibtexFields.getAllFieldNames(); private String lastSelected; private final Map> reqLists = new HashMap<>(); private final Map> optLists = new HashMap<>(); diff --git a/src/main/java/net/sf/jabref/gui/EntryMarker.java b/src/main/java/net/sf/jabref/gui/EntryMarker.java index f392722a256..e24d465373c 100644 --- a/src/main/java/net/sf/jabref/gui/EntryMarker.java +++ b/src/main/java/net/sf/jabref/gui/EntryMarker.java @@ -41,8 +41,8 @@ public class EntryMarker { public static void markEntry(BibEntry be, int markIncrement, boolean increment, NamedCompound ce) { int prevMarkLevel; String newValue = null; - if (be.hasField(BibtexFields.MARKED)) { - String s = be.getField(BibtexFields.MARKED); + if (be.hasField(InternalBibtexFields.MARKED)) { + String s = be.getField(InternalBibtexFields.MARKED); int index = s.indexOf(Globals.prefs.WRAPPED_USERNAME); if (index >= 0) { // Already marked 1 for this user. @@ -64,16 +64,16 @@ public static void markEntry(BibEntry be, int markIncrement, boolean increment, newValue = Globals.prefs.WRAPPED_USERNAME.substring(0, Globals.prefs.WRAPPED_USERNAME.length() - 1) + ":" + markIncrement + "]"; } - ce.addEdit(new UndoableFieldChange(be, BibtexFields.MARKED, be.getField(BibtexFields.MARKED), newValue)); - be.setField(BibtexFields.MARKED, newValue); + ce.addEdit(new UndoableFieldChange(be, InternalBibtexFields.MARKED, be.getField(InternalBibtexFields.MARKED), newValue)); + be.setField(InternalBibtexFields.MARKED, newValue); } /** * SIDE EFFECT: Unselects given entry */ public static void unmarkEntry(BibEntry be, boolean onlyMaxLevel, BibDatabase database, NamedCompound ce) { - if (be.hasField(BibtexFields.MARKED)) { - String s = be.getField(BibtexFields.MARKED); + if (be.hasField(InternalBibtexFields.MARKED)) { + String s = be.getField(InternalBibtexFields.MARKED); if ("0".equals(s)) { if (!onlyMaxLevel) { unmarkOldStyle(be, database, ce); @@ -125,11 +125,11 @@ public static void unmarkEntry(BibEntry be, boolean onlyMaxLevel, BibDatabase da sb.append(s.substring(piv)); } String newVal = sb.length() > 0 ? sb.toString() : null;*/ - ce.addEdit(new UndoableFieldChange(be, BibtexFields.MARKED, be.getField(BibtexFields.MARKED), newValue)); + ce.addEdit(new UndoableFieldChange(be, InternalBibtexFields.MARKED, be.getField(InternalBibtexFields.MARKED), newValue)); if (newValue == null) { - be.clearField(BibtexFields.MARKED); + be.clearField(InternalBibtexFields.MARKED); } else { - be.setField(BibtexFields.MARKED, newValue); + be.setField(InternalBibtexFields.MARKED, newValue); } } } @@ -148,7 +148,7 @@ public static void unmarkEntry(BibEntry be, boolean onlyMaxLevel, BibDatabase da private static void unmarkOldStyle(BibEntry be, BibDatabase database, NamedCompound ce) { TreeSet owners = new TreeSet<>(); for (BibEntry entry : database.getEntries()) { - entry.getFieldOptional(BibtexFields.OWNER).ifPresent(owner -> owners.add(owner)); + entry.getFieldOptional(InternalBibtexFields.OWNER).ifPresent(owner -> owners.add(owner)); } owners.remove(Globals.prefs.get(JabRefPreferences.DEFAULT_OWNER)); StringBuilder sb = new StringBuilder(); @@ -159,19 +159,19 @@ private static void unmarkOldStyle(BibEntry be, BibDatabase database, NamedCompo } String newVal = sb.toString(); if (newVal.isEmpty()) { - ce.addEdit(new UndoableFieldChange(be, BibtexFields.MARKED, be.getField(BibtexFields.MARKED), null)); - be.clearField(BibtexFields.MARKED); + ce.addEdit(new UndoableFieldChange(be, InternalBibtexFields.MARKED, be.getField(InternalBibtexFields.MARKED), null)); + be.clearField(InternalBibtexFields.MARKED); } else { - ce.addEdit(new UndoableFieldChange(be, BibtexFields.MARKED, be.getField(BibtexFields.MARKED), newVal)); - be.setField(BibtexFields.MARKED, newVal); + ce.addEdit(new UndoableFieldChange(be, InternalBibtexFields.MARKED, be.getField(InternalBibtexFields.MARKED), newVal)); + be.setField(InternalBibtexFields.MARKED, newVal); } } public static int isMarked(BibEntry be) { - if (!be.hasField(BibtexFields.MARKED)) { + if (!be.hasField(InternalBibtexFields.MARKED)) { return 0; } - String s = be.getField(BibtexFields.MARKED); + String s = be.getField(InternalBibtexFields.MARKED); if ("0".equals(s)) { return 1; } diff --git a/src/main/java/net/sf/jabref/gui/FieldWeightDialog.java b/src/main/java/net/sf/jabref/gui/FieldWeightDialog.java index 4168524c35f..9a89fa0382e 100644 --- a/src/main/java/net/sf/jabref/gui/FieldWeightDialog.java +++ b/src/main/java/net/sf/jabref/gui/FieldWeightDialog.java @@ -65,9 +65,9 @@ private JPanel buildMainPanel() { TreeSet fields = new TreeSet<>(); // We use this map to remember which slider represents which field name: sliders.clear(); - for (int i = 0, len = BibtexFields.numberOfPublicFields(); i < len; i++) + for (int i = 0, len = InternalBibtexFields.numberOfPublicFields(); i < len; i++) { - fields.add(BibtexFields.getFieldName(i)); + fields.add(InternalBibtexFields.getFieldName(i)); } fields.remove("bibtexkey"); // bibtex key doesn't need weight. // Here is the place to add other fields: @@ -76,7 +76,7 @@ private JPanel buildMainPanel() { for (String field : fields) { builder.append(field); - int weight = (int) ((100 * BibtexFields.getFieldWeight(field)) / GUIGlobals.MAX_FIELD_WEIGHT); + int weight = (int) ((100 * InternalBibtexFields.getFieldWeight(field)) / GUIGlobals.MAX_FIELD_WEIGHT); //System.out.println(weight); JSlider slider = new JSlider(0, 100, weight);//,); sliders.put(slider, new SliderInfo(field, weight)); @@ -120,7 +120,7 @@ private void storeSettings() { // Only list the value if it has changed: if (sInfo.originalValue != slider.getValue()) { double weight = (GUIGlobals.MAX_FIELD_WEIGHT * slider.getValue()) / 100d; - BibtexFields.setFieldWeight(sInfo.fieldName, weight); + InternalBibtexFields.setFieldWeight(sInfo.fieldName, weight); } } frame.removeCachedEntryEditors(); diff --git a/src/main/java/net/sf/jabref/gui/ImportInspectionDialog.java b/src/main/java/net/sf/jabref/gui/ImportInspectionDialog.java index 6e6e194fa2f..66552c27752 100644 --- a/src/main/java/net/sf/jabref/gui/ImportInspectionDialog.java +++ b/src/main/java/net/sf/jabref/gui/ImportInspectionDialog.java @@ -798,7 +798,7 @@ private void setWidths() { } for (int i = 0; i < fields.length; i++) { - int width = BibtexFields.getFieldLength(fields[i]); + int width = InternalBibtexFields.getFieldLength(fields[i]); glTable.getColumnModel().getColumn(i + PAD).setPreferredWidth(width); } } diff --git a/src/main/java/net/sf/jabref/gui/BibtexFields.java b/src/main/java/net/sf/jabref/gui/InternalBibtexFields.java similarity index 91% rename from src/main/java/net/sf/jabref/gui/BibtexFields.java rename to src/main/java/net/sf/jabref/gui/InternalBibtexFields.java index af1fec6435a..be292f35e1f 100644 --- a/src/main/java/net/sf/jabref/gui/BibtexFields.java +++ b/src/main/java/net/sf/jabref/gui/InternalBibtexFields.java @@ -44,7 +44,7 @@ import net.sf.jabref.model.entry.IEEETranEntryTypes; import net.sf.jabref.specialfields.SpecialFieldsUtils; -public class BibtexFields { +public class InternalBibtexFields { // some internal fields public static final String SEARCH = "__search"; @@ -68,7 +68,7 @@ public class BibtexFields { {"author", "title", "year", BibEntry.KEY_FIELD}; // singleton instance - private static final BibtexFields RUNTIME = new BibtexFields(); + private static final InternalBibtexFields RUNTIME = new InternalBibtexFields(); // contains all bibtex-field objects (BibtexSingleField) private final Map fieldSet; @@ -77,7 +77,7 @@ public class BibtexFields { private final String[] PUBLIC_FIELDS; - private BibtexFields() { + private InternalBibtexFields() { fieldSet = new HashMap<>(); BibtexSingleField dummy; @@ -214,33 +214,33 @@ private BibtexFields() { dummy.setDisplayable(false); add(dummy); - dummy = new BibtexSingleField(BibtexFields.OWNER, false, GUIGlobals.SMALL_W); + dummy = new BibtexSingleField(InternalBibtexFields.OWNER, false, GUIGlobals.SMALL_W); dummy.setExtras(EXTRA_SET_OWNER); dummy.setPrivate(); add(dummy); - dummy = new BibtexSingleField(BibtexFields.TIMESTAMP, false, GUIGlobals.SMALL_W); + dummy = new BibtexSingleField(InternalBibtexFields.TIMESTAMP, false, GUIGlobals.SMALL_W); dummy.setExtras(EXTRA_DATEPICKER); dummy.setPrivate(); add(dummy); - dummy = new BibtexSingleField(BibtexFields.ENTRYTYPE, false, 75); + dummy = new BibtexSingleField(InternalBibtexFields.ENTRYTYPE, false, 75); dummy.setPrivate(); add(dummy); - dummy = new BibtexSingleField(BibtexFields.SEARCH, false); + dummy = new BibtexSingleField(InternalBibtexFields.SEARCH, false); dummy.setPrivate(); dummy.setWriteable(false); dummy.setDisplayable(false); add(dummy); - dummy = new BibtexSingleField(BibtexFields.GROUPSEARCH, false); + dummy = new BibtexSingleField(InternalBibtexFields.GROUPSEARCH, false); dummy.setPrivate(); dummy.setWriteable(false); dummy.setDisplayable(false); add(dummy); - dummy = new BibtexSingleField(BibtexFields.MARKED, false); + dummy = new BibtexSingleField(InternalBibtexFields.MARKED, false); dummy.setPrivate(); dummy.setWriteable(true); // This field must be written to file! dummy.setDisplayable(false); @@ -287,8 +287,8 @@ public static void setNumericFieldsFromPrefs() { Set nF = new HashSet<>(); nF.addAll(numFields); // Look through all registered fields, and activate numeric sorting if necessary: - for (String fieldName : BibtexFields.RUNTIME.fieldSet.keySet()) { - BibtexSingleField field = BibtexFields.RUNTIME.fieldSet.get(fieldName); + for (String fieldName : InternalBibtexFields.RUNTIME.fieldSet.keySet()) { + BibtexSingleField field = InternalBibtexFields.RUNTIME.fieldSet.get(fieldName); if (!field.isNumeric() && nF.contains(fieldName)) { field.setNumeric(nF.contains(fieldName)); } @@ -298,7 +298,7 @@ public static void setNumericFieldsFromPrefs() { for (String fieldName : nF) { BibtexSingleField field = new BibtexSingleField(fieldName, false); field.setNumeric(true); - BibtexFields.RUNTIME.fieldSet.put(fieldName, field); + InternalBibtexFields.RUNTIME.fieldSet.put(fieldName, field); } } @@ -317,14 +317,14 @@ private void add(BibtexSingleField field) { // -------------------------------------------------------------------------- private static BibtexSingleField getField(String name) { if (name != null) { - return BibtexFields.RUNTIME.fieldSet.get(name.toLowerCase()); + return InternalBibtexFields.RUNTIME.fieldSet.get(name.toLowerCase()); } return null; } public static String getFieldExtras(String name) { - BibtexSingleField sField = BibtexFields.getField(name); + BibtexSingleField sField = InternalBibtexFields.getField(name); if (sField != null) { return sField.getExtras(); } @@ -332,7 +332,7 @@ public static String getFieldExtras(String name) { } public static int getEditorType(String name) { - BibtexSingleField sField = BibtexFields.getField(name); + BibtexSingleField sField = InternalBibtexFields.getField(name); if (sField != null) { return sField.getEditorType(); } @@ -340,7 +340,7 @@ public static int getEditorType(String name) { } public static double getFieldWeight(String name) { - BibtexSingleField sField = BibtexFields.getField(name); + BibtexSingleField sField = InternalBibtexFields.getField(name); if (sField != null) { return sField.getWeight(); } @@ -348,14 +348,14 @@ public static double getFieldWeight(String name) { } public static void setFieldWeight(String fieldName, double weight) { - BibtexSingleField sField = BibtexFields.getField(fieldName); + BibtexSingleField sField = InternalBibtexFields.getField(fieldName); if (sField != null) { sField.setWeight(weight); } } public static int getFieldLength(String name) { - BibtexSingleField sField = BibtexFields.getField(name); + BibtexSingleField sField = InternalBibtexFields.getField(name); if (sField != null) { return sField.getLength(); } @@ -363,12 +363,12 @@ public static int getFieldLength(String name) { } public static boolean isWriteableField(String field) { - BibtexSingleField sField = BibtexFields.getField(field); + BibtexSingleField sField = InternalBibtexFields.getField(field); return (sField == null) || sField.isWriteable(); } public static boolean isDisplayableField(String field) { - BibtexSingleField sField = BibtexFields.getField(field); + BibtexSingleField sField = InternalBibtexFields.getField(field); return (sField == null) || sField.isDisplayable(); } @@ -379,12 +379,12 @@ public static boolean isDisplayableField(String field) { * @return a boolean value */ public static boolean isStandardField(String field) { - BibtexSingleField sField = BibtexFields.getField(field); + BibtexSingleField sField = InternalBibtexFields.getField(field); return (sField != null) && sField.isStandard(); } public static boolean isNumeric(String field) { - BibtexSingleField sField = BibtexFields.getField(field); + BibtexSingleField sField = InternalBibtexFields.getField(field); return (sField != null) && sField.isNumeric(); } @@ -392,7 +392,7 @@ public static boolean isNumeric(String field) { * returns a List with all fieldnames */ public static List getAllFieldNames() { - return Arrays.asList(BibtexFields.RUNTIME.PUBLIC_FIELDS); + return Arrays.asList(InternalBibtexFields.RUNTIME.PUBLIC_FIELDS); } /** @@ -400,7 +400,7 @@ public static List getAllFieldNames() { */ public static List getAllPrivateFieldNames() { List pFields = new ArrayList<>(); - for (BibtexSingleField sField : BibtexFields.RUNTIME.fieldSet.values()) { + for (BibtexSingleField sField : InternalBibtexFields.RUNTIME.fieldSet.values()) { if (sField.isPrivate()) { pFields.add(sField.getFieldName()); } @@ -413,14 +413,14 @@ public static List getAllPrivateFieldNames() { * returns the fieldname of the entry at index t */ public static String getFieldName(int t) { - return BibtexFields.RUNTIME.PUBLIC_FIELDS[t]; + return InternalBibtexFields.RUNTIME.PUBLIC_FIELDS[t]; } /** * returns the number of available fields */ public static int numberOfPublicFields() { - return BibtexFields.RUNTIME.PUBLIC_FIELDS.length; + return InternalBibtexFields.RUNTIME.PUBLIC_FIELDS.length; } diff --git a/src/main/java/net/sf/jabref/gui/JabRefFrame.java b/src/main/java/net/sf/jabref/gui/JabRefFrame.java index 15ef3441b99..e75b2a56c17 100644 --- a/src/main/java/net/sf/jabref/gui/JabRefFrame.java +++ b/src/main/java/net/sf/jabref/gui/JabRefFrame.java @@ -1731,7 +1731,7 @@ private void addImportedEntries(final BasePanel panel, final List entr @Override public void run() { ImportInspectionDialog diag = new ImportInspectionDialog(JabRefFrame.this, - panel, BibtexFields.DEFAULT_INSPECTION_FIELDS, Localization.lang("Import"), + panel, InternalBibtexFields.DEFAULT_INSPECTION_FIELDS, Localization.lang("Import"), openInNew); diag.addEntries(entries); diag.entryListComplete(); diff --git a/src/main/java/net/sf/jabref/gui/RightClickMenu.java b/src/main/java/net/sf/jabref/gui/RightClickMenu.java index b6350645a5e..db91bc9ef2f 100644 --- a/src/main/java/net/sf/jabref/gui/RightClickMenu.java +++ b/src/main/java/net/sf/jabref/gui/RightClickMenu.java @@ -98,7 +98,7 @@ public RightClickMenu(BasePanel panel, MetaData metaData) { add(new GeneralAction(Actions.UNMARK_ENTRIES, Localization.lang("Unmark entries"), IconTheme.JabRefIcon.UNMARK_ENTRIES.getSmallIcon())); addSeparator(); } else if (be != null) { - String marked = be.getField(BibtexFields.MARKED); + String marked = be.getField(InternalBibtexFields.MARKED); // We have to check for "" too as the marked field may be empty if ((marked == null) || marked.isEmpty()) { add(new GeneralAction(Actions.MARK_ENTRIES, Localization.lang("Mark entry"), IconTheme.JabRefIcon.MARK_ENTRIES.getSmallIcon())); diff --git a/src/main/java/net/sf/jabref/gui/entryeditor/EntryEditor.java b/src/main/java/net/sf/jabref/gui/entryeditor/EntryEditor.java index 416b58b3271..2d8f7910e2f 100644 --- a/src/main/java/net/sf/jabref/gui/entryeditor/EntryEditor.java +++ b/src/main/java/net/sf/jabref/gui/entryeditor/EntryEditor.java @@ -403,7 +403,7 @@ public void rebuildPanels() { } /** - * getExtra checks the field name against BibtexFields.getFieldExtras(name). + * getExtra checks the field name against InternalBibtexFields.getFieldExtras(name). * If the name has an entry, the proper component to be shown is created and * returned. Otherwise, null is returned. In addition, e.g. listeners can be * added to the field editor, even if no component is returned. @@ -414,18 +414,18 @@ public void rebuildPanels() { public Optional getExtra(final FieldEditor editor) { final String fieldName = editor.getFieldName(); - final String fieldExtras = BibtexFields.getFieldExtras(fieldName); + final String fieldExtras = InternalBibtexFields.getFieldExtras(fieldName); // timestamp or a other field with datepicker command if (Globals.prefs.get(JabRefPreferences.TIME_STAMP_FIELD).equals(fieldName) - || BibtexFields.EXTRA_DATEPICKER.equals(fieldExtras)) { + || InternalBibtexFields.EXTRA_DATEPICKER.equals(fieldExtras)) { // double click AND datefield => insert the current date (today) return FieldExtraComponents.getDateTimeExtraComponent(editor, - BibtexFields.EXTRA_DATEPICKER.equals(fieldExtras)); - } else if (BibtexFields.EXTRA_EXTERNAL.equals(fieldExtras)) { + InternalBibtexFields.EXTRA_DATEPICKER.equals(fieldExtras)); + } else if (InternalBibtexFields.EXTRA_EXTERNAL.equals(fieldExtras)) { // Add external viewer listener for "pdf" and "url" fields. return FieldExtraComponents.getExternalExtraComponent(editor, this); - } else if (BibtexFields.EXTRA_JOURNAL_NAMES.equals(fieldExtras)) { + } else if (InternalBibtexFields.EXTRA_JOURNAL_NAMES.equals(fieldExtras)) { // Add controls for switching between abbreviated and full journal names. // If this field also has a FieldContentSelector, we need to combine these. return FieldExtraComponents.getJournalExtraComponent(frame, panel, editor, entry, contentSelectors, @@ -433,19 +433,19 @@ public Optional getExtra(final FieldEditor editor) { } else if (panel.getBibDatabaseContext().getMetaData().getData(Globals.SELECTOR_META_PREFIX + fieldName) != null) { return FieldExtraComponents.getSelectorExtraComponent(frame, panel, editor, contentSelectors, storeFieldAction); - } else if (BibtexFields.EXTRA_BROWSE.equals(fieldExtras)) { + } else if (InternalBibtexFields.EXTRA_BROWSE.equals(fieldExtras)) { return FieldExtraComponents.getBrowseExtraComponent(frame, editor, this); - } else if (BibtexFields.EXTRA_BROWSE_DOC.equals(fieldExtras) - || BibtexFields.EXTRA_BROWSE_DOC_ZIP.equals(fieldExtras)) { + } else if (InternalBibtexFields.EXTRA_BROWSE_DOC.equals(fieldExtras) + || InternalBibtexFields.EXTRA_BROWSE_DOC_ZIP.equals(fieldExtras)) { return FieldExtraComponents.getBrowseDocExtraComponent(frame, panel, editor, this, - BibtexFields.EXTRA_BROWSE_DOC_ZIP.equals(fieldExtras)); - } else if (BibtexFields.EXTRA_URL.equals(fieldExtras)) { + InternalBibtexFields.EXTRA_BROWSE_DOC_ZIP.equals(fieldExtras)); + } else if (InternalBibtexFields.EXTRA_URL.equals(fieldExtras)) { return FieldExtraComponents.getURLExtraComponent(editor, storeFieldAction); - } else if (BibtexFields.EXTRA_SET_OWNER.equals(fieldExtras)) { + } else if (InternalBibtexFields.EXTRA_SET_OWNER.equals(fieldExtras)) { return FieldExtraComponents.getSetOwnerExtraComponent(editor, storeFieldAction); - } else if (BibtexFields.EXTRA_YES_NO.equals(fieldExtras)) { + } else if (InternalBibtexFields.EXTRA_YES_NO.equals(fieldExtras)) { return FieldExtraComponents.getYesNoExtraComponent(editor, this); - } else if (BibtexFields.EXTRA_MONTH.equals(fieldExtras)) { + } else if (InternalBibtexFields.EXTRA_MONTH.equals(fieldExtras)) { return FieldExtraComponents.getMonthExtraComponent(editor, this, this.frame.getCurrentBasePanel().getBibDatabaseContext().getMode()); } return Optional.empty(); @@ -742,7 +742,7 @@ private boolean storeSource() { } for (String field : entry.getFieldNames()) { - if (BibtexFields.isDisplayableField(field) && !newEntry.hasField(field)) { + if (InternalBibtexFields.isDisplayableField(field) && !newEntry.hasField(field)) { compound.addEdit(new UndoableFieldChange(entry, field, entry.getField(field), null)); entry.clearField(field); anyChanged = true; diff --git a/src/main/java/net/sf/jabref/gui/entryeditor/EntryEditorTab.java b/src/main/java/net/sf/jabref/gui/entryeditor/EntryEditorTab.java index ae5f348c59d..44788f1db2f 100644 --- a/src/main/java/net/sf/jabref/gui/entryeditor/EntryEditorTab.java +++ b/src/main/java/net/sf/jabref/gui/entryeditor/EntryEditorTab.java @@ -135,11 +135,11 @@ private void setupPanel(JabRefFrame frame, BasePanel bPanel, boolean addKeyField // BibTex edit fields are defined here for (int i = 0; i < fields.length; i++) { // Create the text area: - int editorType = BibtexFields.getEditorType(fields[i]); + int editorType = InternalBibtexFields.getEditorType(fields[i]); FieldEditor fieldEditor; int defaultHeight; - int wHeight = (int) (50.0 * BibtexFields.getFieldWeight(fields[i])); + int wHeight = (int) (50.0 * InternalBibtexFields.getFieldWeight(fields[i])); if (editorType == GUIGlobals.FILE_LIST_EDITOR) { fieldEditor = new FileListEditor(frame, bPanel.getBibDatabaseContext().getMetaData(), fields[i], null, parent); fileListEditor = (FileListEditor) fieldEditor; diff --git a/src/main/java/net/sf/jabref/gui/preftabs/FileSortTab.java b/src/main/java/net/sf/jabref/gui/preftabs/FileSortTab.java index c770ec242da..75ec951ad7e 100644 --- a/src/main/java/net/sf/jabref/gui/preftabs/FileSortTab.java +++ b/src/main/java/net/sf/jabref/gui/preftabs/FileSortTab.java @@ -31,7 +31,7 @@ import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.layout.FormLayout; -import net.sf.jabref.gui.BibtexFields; +import net.sf.jabref.gui.InternalBibtexFields; import net.sf.jabref.JabRefPreferences; import net.sf.jabref.logic.l10n.Localization; import net.sf.jabref.model.entry.BibEntry; @@ -94,7 +94,7 @@ public void actionPerformed(ActionEvent e) { exportInTableOrder.addActionListener(listener); exportInSpecifiedOrder.addActionListener(listener); - ArrayList fieldNames = new ArrayList<>(BibtexFields.getAllFieldNames()); + ArrayList fieldNames = new ArrayList<>(InternalBibtexFields.getAllFieldNames()); fieldNames.add(BibEntry.KEY_FIELD); Collections.sort(fieldNames); String[] allPlusKey = fieldNames.toArray(new String[fieldNames.size()]); diff --git a/src/main/java/net/sf/jabref/gui/preftabs/TablePrefsTab.java b/src/main/java/net/sf/jabref/gui/preftabs/TablePrefsTab.java index 3a4e384ffc3..570f14d82b3 100644 --- a/src/main/java/net/sf/jabref/gui/preftabs/TablePrefsTab.java +++ b/src/main/java/net/sf/jabref/gui/preftabs/TablePrefsTab.java @@ -35,7 +35,7 @@ import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.layout.FormLayout; -import net.sf.jabref.gui.BibtexFields; +import net.sf.jabref.gui.InternalBibtexFields; import net.sf.jabref.JabRefPreferences; import net.sf.jabref.logic.l10n.Localization; import net.sf.jabref.model.entry.BibEntry; @@ -84,7 +84,7 @@ public TablePrefsTab(JabRefPreferences prefs) { * * http://sourceforge.net/tracker/index.php?func=detail&aid=1540646&group_id=92314&atid=600306 */ - List fieldNames = new ArrayList<>(BibtexFields.getAllFieldNames()); + List fieldNames = new ArrayList<>(InternalBibtexFields.getAllFieldNames()); fieldNames.add(BibEntry.KEY_FIELD); Collections.sort(fieldNames); String[] allPlusKey = fieldNames.toArray(new String[fieldNames.size()]); @@ -319,7 +319,7 @@ public void storeSettings() { || ((newVal == null) && (oldVal != null)) || ((newVal != null) && !newVal.equals(oldVal))) { prefs.put(JabRefPreferences.NUMERIC_FIELDS, newVal); - BibtexFields.setNumericFieldsFromPrefs(); + InternalBibtexFields.setNumericFieldsFromPrefs(); } } diff --git a/src/main/java/net/sf/jabref/gui/search/SearchResultsDialog.java b/src/main/java/net/sf/jabref/gui/search/SearchResultsDialog.java index f52e8b62101..59119ddc417 100644 --- a/src/main/java/net/sf/jabref/gui/search/SearchResultsDialog.java +++ b/src/main/java/net/sf/jabref/gui/search/SearchResultsDialog.java @@ -45,7 +45,7 @@ import org.apache.commons.logging.LogFactory; import net.sf.jabref.gui.BasePanel; -import net.sf.jabref.gui.BibtexFields; +import net.sf.jabref.gui.InternalBibtexFields; import net.sf.jabref.gui.FileListEntry; import net.sf.jabref.gui.FileListTableModel; import net.sf.jabref.gui.GUIGlobals; @@ -265,7 +265,7 @@ private void setWidths() { } for (int i = 0; i < fields.length; i++) { - int width = BibtexFields.getFieldLength(fields[i]); + int width = InternalBibtexFields.getFieldLength(fields[i]); cm.getColumn(i + PAD).setPreferredWidth(width); } } diff --git a/src/main/java/net/sf/jabref/importer/ImportMenuItem.java b/src/main/java/net/sf/jabref/importer/ImportMenuItem.java index b7048842d8d..e6dad2d8082 100644 --- a/src/main/java/net/sf/jabref/importer/ImportMenuItem.java +++ b/src/main/java/net/sf/jabref/importer/ImportMenuItem.java @@ -188,7 +188,7 @@ public void update() { } else { final BasePanel panel = (BasePanel) frame.getTabbedPane().getSelectedComponent(); - ImportInspectionDialog diag = new ImportInspectionDialog(frame, panel, BibtexFields.DEFAULT_INSPECTION_FIELDS, Localization.lang("Import"), openInNew); + ImportInspectionDialog diag = new ImportInspectionDialog(frame, panel, InternalBibtexFields.DEFAULT_INSPECTION_FIELDS, Localization.lang("Import"), openInNew); diag.addEntries(bibtexResult.getDatabase().getEntries()); diag.entryListComplete(); PositionWindow.placeDialog(diag, frame); diff --git a/src/main/java/net/sf/jabref/importer/fetcher/DiVAtoBibTeXFetcher.java b/src/main/java/net/sf/jabref/importer/fetcher/DiVAtoBibTeXFetcher.java index 43615c3efe4..f3c7c9e0bdc 100644 --- a/src/main/java/net/sf/jabref/importer/fetcher/DiVAtoBibTeXFetcher.java +++ b/src/main/java/net/sf/jabref/importer/fetcher/DiVAtoBibTeXFetcher.java @@ -108,7 +108,7 @@ public boolean processQuery(String query, ImportInspector inspector, OutputPrint entry.getFieldOptional("institution") .ifPresent(institution -> entry.setField("institution", htmlConverter.formatUnicode(institution))); // Do not use the provided key - // entry.clearField(BibtexFields.KEY_FIELD); + // entry.clearField(InternalBibtexFields.KEY_FIELD); inspector.addEntry(entry); return true; diff --git a/src/main/java/net/sf/jabref/importer/fetcher/GeneralFetcher.java b/src/main/java/net/sf/jabref/importer/fetcher/GeneralFetcher.java index a03c92c9430..437fae32bd9 100644 --- a/src/main/java/net/sf/jabref/importer/fetcher/GeneralFetcher.java +++ b/src/main/java/net/sf/jabref/importer/fetcher/GeneralFetcher.java @@ -241,7 +241,7 @@ public void run() { dialog.setVisible(true); if (dialog.isOkPressed()) { final ImportInspectionDialog d2 = new ImportInspectionDialog(frame, frame.getCurrentBasePanel(), - BibtexFields.DEFAULT_INSPECTION_FIELDS, activeFetcher.getTitle(), false); + InternalBibtexFields.DEFAULT_INSPECTION_FIELDS, activeFetcher.getTitle(), false); d2.addCallBack(activeFetcher); PositionWindow.placeDialog(d2, frame); d2.setVisible(true); @@ -265,7 +265,7 @@ public void run() { // The other category downloads the entries first, then asks the user which ones to keep: else { final ImportInspectionDialog dialog = new ImportInspectionDialog(frame, frame.getCurrentBasePanel(), - BibtexFields.DEFAULT_INSPECTION_FIELDS, activeFetcher.getTitle(), false); + InternalBibtexFields.DEFAULT_INSPECTION_FIELDS, activeFetcher.getTitle(), false); dialog.addCallBack(activeFetcher); PositionWindow.placeDialog(dialog, frame); dialog.setVisible(true); diff --git a/src/main/java/net/sf/jabref/model/entry/BibEntry.java b/src/main/java/net/sf/jabref/model/entry/BibEntry.java index ef458cc6dc6..6f34859af30 100644 --- a/src/main/java/net/sf/jabref/model/entry/BibEntry.java +++ b/src/main/java/net/sf/jabref/model/entry/BibEntry.java @@ -46,13 +46,11 @@ public class BibEntry { public static final String TYPE_HEADER = "entrytype"; public static final String KEY_FIELD = "bibtexkey"; - private static final String ID_FIELD = "id"; - private static final String DEFAULT_TYPE = "misc"; + public static final String ID_FIELD = "id"; + public static final String DEFAULT_TYPE = "misc"; private String id; - private String type; - private Map fields = new HashMap<>(); private final VetoableChangeSupport changeSupport = new VetoableChangeSupport(this); @@ -69,7 +67,6 @@ public class BibEntry { */ private boolean changed; - public BibEntry() { this(IdGenerator.next()); } diff --git a/src/main/java/net/sf/jabref/model/entry/UnknownEntryType.java b/src/main/java/net/sf/jabref/model/entry/UnknownEntryType.java deleted file mode 100644 index f22636663f3..00000000000 --- a/src/main/java/net/sf/jabref/model/entry/UnknownEntryType.java +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 2003-2015 JabRef contributors. - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ -package net.sf.jabref.model.entry; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * This class is used to represent an unknown entry type, e.g. encountered - * during bibtex parsing. The only known information is the type name. - * This is useful if the bibtex file contains type definitions that are used - * in the file - because the entries will be parsed before the type definitions - * are found. In the meantime, the entries will be assigned an - * UnknownEntryType giving the name. - */ -public class UnknownEntryType implements EntryType { - private final String name; - private final List requiredFields; - private final List optionalFields; - - public UnknownEntryType(String name) { - this.name = name; - - requiredFields = new ArrayList<>(); - optionalFields = new ArrayList<>(); - } - - @Override - public String getName() { - return name; - } - - @Override - public List getOptionalFields() { - return Collections.unmodifiableList(optionalFields); - } - - @Override - public List getRequiredFields() { - return Collections.unmodifiableList(requiredFields); - } - - @Override - public List getPrimaryOptionalFields() { - return getOptionalFields(); - } - - @Override - public List getSecondaryOptionalFields() { - return Collections.unmodifiableList(new ArrayList<>(0)); - } - - @Override - public int compareTo(EntryType o) { - return getName().compareTo(o.getName()); - } - - @Override - public boolean equals(Object o) { - if (o instanceof UnknownEntryType) { - return (this.compareTo(((UnknownEntryType) o)) == 0); - } else { - return false; - } - } - - @Override - public int hashCode() { - return super.hashCode(); - } - -} diff --git a/src/main/java/net/sf/jabref/sql/SQLUtil.java b/src/main/java/net/sf/jabref/sql/SQLUtil.java index 87f295b1cc9..0eb91f7d569 100644 --- a/src/main/java/net/sf/jabref/sql/SQLUtil.java +++ b/src/main/java/net/sf/jabref/sql/SQLUtil.java @@ -26,7 +26,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import net.sf.jabref.gui.BibtexFields; +import net.sf.jabref.gui.InternalBibtexFields; /** * @author pattonlk @@ -58,8 +58,8 @@ private static void refreshFields() { } else { SQLUtil.allFields.clear(); } - SQLUtil.uniqueListInsert(SQLUtil.allFields, BibtexFields.getAllFieldNames()); - SQLUtil.uniqueListInsert(SQLUtil.allFields, BibtexFields.getAllPrivateFieldNames()); + SQLUtil.uniqueListInsert(SQLUtil.allFields, InternalBibtexFields.getAllFieldNames()); + SQLUtil.uniqueListInsert(SQLUtil.allFields, InternalBibtexFields.getAllPrivateFieldNames()); } /** diff --git a/src/main/java/net/sf/jabref/util/Util.java b/src/main/java/net/sf/jabref/util/Util.java index 59210531bdb..8b6a922c1fb 100644 --- a/src/main/java/net/sf/jabref/util/Util.java +++ b/src/main/java/net/sf/jabref/util/Util.java @@ -269,7 +269,7 @@ public static void setAutomaticFields(Collection bibs, boolean overwri // Iterate through all entries for (BibEntry curEntry : bibs) { - boolean setOwner = globalSetOwner && (overwriteOwner || (!curEntry.hasField(BibtexFields.OWNER))); + boolean setOwner = globalSetOwner && (overwriteOwner || (!curEntry.hasField(InternalBibtexFields.OWNER))); boolean setTimeStamp = globalSetTimeStamp && (overwriteTimestamp || (!curEntry.hasField(timeStampField))); net.sf.jabref.util.Util.setAutomaticFields(curEntry, setOwner, defaultOwner, setTimeStamp, timeStampField, timestamp); if (markEntries) { @@ -291,7 +291,7 @@ public static void setAutomaticFields(BibEntry entry, boolean overwriteOwner, bo String timestamp = net.sf.jabref.util.Util.dateFormatter.getCurrentDate(); String timeStampField = Globals.prefs.get(JabRefPreferences.TIME_STAMP_FIELD); boolean setOwner = Globals.prefs.getBoolean(JabRefPreferences.USE_OWNER) - && (overwriteOwner || (!entry.hasField(BibtexFields.OWNER))); + && (overwriteOwner || (!entry.hasField(InternalBibtexFields.OWNER))); boolean setTimeStamp = Globals.prefs.getBoolean(JabRefPreferences.USE_TIME_STAMP) && (overwriteTimestamp || (!entry.hasField(timeStampField))); @@ -306,7 +306,7 @@ private static void setAutomaticFields(BibEntry entry, boolean setOwner, String // if (entry.getField(Globals.OWNER) == null // || ((String) entry.getField(Globals.OWNER)).isEmpty()) { // Set owner field to default value - entry.setField(BibtexFields.OWNER, owner); + entry.setField(InternalBibtexFields.OWNER, owner); // } } @@ -323,10 +323,10 @@ private static void setAutomaticFields(BibEntry entry, boolean setOwner, String * @return The file filter. */ public static OpenFileFilter getFileFilterForField(String fieldName) { - String s = BibtexFields.getFieldExtras(fieldName); + String s = InternalBibtexFields.getFieldExtras(fieldName); final String ext = "." + fieldName.toLowerCase(); OpenFileFilter off; - if (BibtexFields.EXTRA_BROWSE_DOC_ZIP.equals(s)) { + if (InternalBibtexFields.EXTRA_BROWSE_DOC_ZIP.equals(s)) { off = new OpenFileFilter(new String[]{ext, ext + ".gz", ext + ".bz2"}); } else { off = new OpenFileFilter(new String[]{ext}); @@ -527,8 +527,8 @@ public static boolean warnAssignmentSideEffects(AbstractGroup[] groups, BibEntry if ("keywords".equals(field)) { continue; // this is not undesired } - for (int i = 0, len = BibtexFields.numberOfPublicFields(); i < len; ++i) { - if (field.equals(BibtexFields.getFieldName(i))) { + for (int i = 0, len = InternalBibtexFields.numberOfPublicFields(); i < len; ++i) { + if (field.equals(InternalBibtexFields.getFieldName(i))) { affectedFields.add(field); break; } diff --git a/src/main/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java b/src/main/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java index 559b4c3d352..b5db2d39358 100644 --- a/src/main/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java +++ b/src/main/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java @@ -58,11 +58,11 @@ import net.sf.jabref.bibtex.EntryTypes; import net.sf.jabref.exporter.LatexFieldFormatter; import net.sf.jabref.gui.*; +import net.sf.jabref.gui.actions.PasteAction; import net.sf.jabref.gui.keyboard.KeyBinding; import net.sf.jabref.importer.fileformat.FreeCiteImporter; import net.sf.jabref.logic.l10n.Localization; import net.sf.jabref.model.entry.BibEntry; -import net.sf.jabref.model.entry.EntryType; import net.sf.jabref.util.Util; import net.sf.jabref.wizard.text.TagToMarkedTextStore; @@ -77,7 +77,6 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.StringWriter; -import java.util.ArrayList; import java.util.List; public class TextInputDialog extends JDialog implements ActionListener { @@ -494,19 +493,15 @@ private void updateSourceView() { } private String[] getAllFields() { - ArrayList f = new ArrayList<>(); - EntryType type = EntryTypes.getType(entry.getType(), frame.getCurrentBasePanel().getBibDatabaseContext().getMode()); - List req = type.getRequiredFieldsFlat(); - List opt = type.getOptionalFields(); - List allFields = BibtexFields.getAllFieldNames(); - f.addAll(req); - f.addAll(opt); - for (String allField : allFields) { - if (!f.contains(allField)) { - f.add(allField); + List texFields = EntryTypes.getType(entry.getType(), frame.getCurrentBasePanel().getBibDatabaseContext().getMode()).getAllFields(); + List internalFields = InternalBibtexFields.getAllFieldNames(); + + for (String field : internalFields) { + if (!texFields.contains(field)) { + texFields.add(field); } } - return f.toArray(new String[f.size()]); + return texFields.toArray(new String[texFields.size()]); } class PasteAction extends BasicAction { diff --git a/src/test/java/net/sf/jabref/logic/util/DOITest.java b/src/test/java/net/sf/jabref/logic/util/DOITest.java index cf8dbb790e5..d3d09597950 100644 --- a/src/test/java/net/sf/jabref/logic/util/DOITest.java +++ b/src/test/java/net/sf/jabref/logic/util/DOITest.java @@ -3,6 +3,8 @@ import org.junit.Assert; import org.junit.Test; +import java.net.URISyntaxException; + public class DOITest { @Test public void acceptPlainDoi() { @@ -28,6 +30,11 @@ public void rejectInvalidDirectoryIndicator() { new DOI("12.1006/jmbi.1998.2354 end"); } + @Test(expected = IllegalArgumentException.class) + public void rejectInvalidDoiUri() { + new DOI("https://thisisnouri"); + } + @Test(expected=IllegalArgumentException.class) public void rejectMissingDivider() { // missing divider diff --git a/src/test/java/net/sf/jabref/model/entry/BibEntryTest.java b/src/test/java/net/sf/jabref/model/entry/BibEntryTest.java new file mode 100644 index 00000000000..54c5ba4e23a --- /dev/null +++ b/src/test/java/net/sf/jabref/model/entry/BibEntryTest.java @@ -0,0 +1,31 @@ +package net.sf.jabref.model.entry; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class BibEntryTest { + private BibEntry entry; + + @Before + public void setUp() throws Exception { + entry = new BibEntry(); + } + + @After + public void tearDown() throws Exception { + entry = null; + } + + @Test(expected = IllegalArgumentException.class) + public void notOverrideReservedFields() throws Exception { + entry.setField(BibEntry.ID_FIELD, "somevalue"); + } + + @Test(expected = IllegalArgumentException.class) + public void notClearReservedFields() throws Exception { + entry.clearField(BibEntry.ID_FIELD); + } +} \ No newline at end of file