diff --git a/CHANGELOG.md b/CHANGELOG.md index 3aa8a4f5889..b0462181792 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,7 +55,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We moved the option to run JabRef in memory stick mode into the preferences dialog toolbar. [#9866](https://github.com/JabRef/jabref/pull/9866) - In case the library contains empty entries, they are not written to disk. [#8645](https://github.com/JabRef/jabref/issues/8645) - The formatter `remove_unicode_ligatures` is now called `replace_unicode_ligatures`. [#9890](https://github.com/JabRef/jabref/pull/9890) - +- We enabled casing when adding custom field for entry type. [#9840](https://github.com/JabRef/jabref/issues/9840) ### Fixed @@ -318,6 +318,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We replaced the [OttoBib](https://en.wikipedia.org/wiki/OttoBib) fetcher by a fetcher by [OpenLibrary](https://openlibrary.org/dev/docs/api/books). [#8652](https://github.com/JabRef/jabref/issues/8652) - We first fetch ISBN data from OpenLibrary, if nothing found, ebook.de is tried. - We now only show a warning when exiting for tasks that will not be recovered automatically upon relaunch of JabRef. [#8468](https://github.com/JabRef/jabref/issues/8468) +- We enabled casing when adding field for entry type. [#9840](https://github.com/JabRef/jabref/issues/9840) ### Fixed diff --git a/src/main/java/org/jabref/gui/fieldeditors/FieldNameLabel.java b/src/main/java/org/jabref/gui/fieldeditors/FieldNameLabel.java index 33c9018a829..f7c9c6446f8 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/FieldNameLabel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/FieldNameLabel.java @@ -11,12 +11,13 @@ import org.jabref.model.entry.field.InternalField; import org.jabref.model.entry.field.SpecialField; import org.jabref.model.entry.field.StandardField; +import org.jabref.model.entry.field.UnknownField; import org.jabref.model.strings.StringUtil; public class FieldNameLabel extends Label { public FieldNameLabel(Field field) { - super(field.getDisplayName()); + super(field.getDisplayNameForField()); setPadding(new Insets(4, 0, 0, 0)); setAlignment(Pos.CENTER); diff --git a/src/main/java/org/jabref/gui/maintable/columns/FieldColumn.java b/src/main/java/org/jabref/gui/maintable/columns/FieldColumn.java index e1b8b1c1ff9..0aece965d13 100644 --- a/src/main/java/org/jabref/gui/maintable/columns/FieldColumn.java +++ b/src/main/java/org/jabref/gui/maintable/columns/FieldColumn.java @@ -53,6 +53,7 @@ public String getDisplayName() { return fields.getDisplayName(); } + private ObservableValue getFieldValue(BibEntryTableViewModel entry) { if (fields.isEmpty()) { return null; diff --git a/src/main/java/org/jabref/gui/preferences/customentrytypes/CustomEntryTypesTabViewModel.java b/src/main/java/org/jabref/gui/preferences/customentrytypes/CustomEntryTypesTabViewModel.java index 7edf2b74dff..7559d9c50f7 100644 --- a/src/main/java/org/jabref/gui/preferences/customentrytypes/CustomEntryTypesTabViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/customentrytypes/CustomEntryTypesTabViewModel.java @@ -76,7 +76,7 @@ public CustomEntryTypesTabViewModel(BibDatabaseMode mode, ValidationMessage.error(Localization.lang("Entry type cannot be empty. Please enter a name."))); fieldValidator = new FunctionBasedValidator<>( newFieldToAdd, - input -> input != null && StringUtil.isNotBlank(input.getDisplayName()), + input -> input != null && StringUtil.isNotBlank(input.getDisplayNameForField()), ValidationMessage.error(Localization.lang("Field cannot be empty. Please enter a name."))); } @@ -146,7 +146,7 @@ public void addNewField() { Field field = newFieldToAdd.getValue(); ObservableList entryFields = this.selectedEntryType.getValue().fields(); boolean fieldExists = entryFields.stream().anyMatch(fieldViewModel -> - fieldViewModel.nameProperty().getValue().equals(field.getDisplayName())); + fieldViewModel.nameProperty().getValue().equals(field.getDisplayNameForField())); if (!fieldExists) { this.selectedEntryType.getValue().addField(new FieldViewModel( @@ -157,7 +157,7 @@ public void addNewField() { } else { dialogService.showWarningDialogAndWait( Localization.lang("Duplicate fields"), - Localization.lang("Warning: You added field \"%0\" twice. Only one will be kept.", field.getDisplayName())); + Localization.lang("Warning: You added field \"%0\" twice. Only one will be kept.", field.getDisplayNameForField())); } newFieldToAddProperty().setValue(null); } diff --git a/src/main/java/org/jabref/gui/preferences/customentrytypes/FieldViewModel.java b/src/main/java/org/jabref/gui/preferences/customentrytypes/FieldViewModel.java index 0cfae0c826d..d73973d775d 100644 --- a/src/main/java/org/jabref/gui/preferences/customentrytypes/FieldViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/customentrytypes/FieldViewModel.java @@ -28,7 +28,7 @@ public FieldViewModel(Field field, FieldPriority priorityProperty, boolean multiline) { this.field = field; - this.fieldName.setValue(field.getDisplayName()); + this.fieldName.setValue(field.getDisplayNameForField()); this.required.setValue(required == Mandatory.REQUIRED); this.priorityProperty.setValue(priorityProperty); this.multiline.setValue(multiline); diff --git a/src/main/java/org/jabref/gui/util/FieldsUtil.java b/src/main/java/org/jabref/gui/util/FieldsUtil.java index 398c3e120d7..2efdb8ece82 100644 --- a/src/main/java/org/jabref/gui/util/FieldsUtil.java +++ b/src/main/java/org/jabref/gui/util/FieldsUtil.java @@ -18,7 +18,7 @@ public class FieldsUtil { @Override public String toString(Field object) { if (object != null) { - return object.getDisplayName(); + return object.getDisplayNameForField(); } else { return ""; } diff --git a/src/main/java/org/jabref/model/entry/field/Field.java b/src/main/java/org/jabref/model/entry/field/Field.java index abd9b270781..27ffdf33ab1 100644 --- a/src/main/java/org/jabref/model/entry/field/Field.java +++ b/src/main/java/org/jabref/model/entry/field/Field.java @@ -20,6 +20,10 @@ default String getDisplayName() { return StringUtil.capitalizeFirst(getName()); } + default String getDisplayNameForField() { + return getName(); + } + String getName(); boolean isStandardField(); diff --git a/src/main/java/org/jabref/model/entry/field/OrFields.java b/src/main/java/org/jabref/model/entry/field/OrFields.java index baf848d4392..60164076c24 100644 --- a/src/main/java/org/jabref/model/entry/field/OrFields.java +++ b/src/main/java/org/jabref/model/entry/field/OrFields.java @@ -27,6 +27,13 @@ public String getDisplayName() { return joiner.toString(); } + public String getDisplayNameForField() { + StringJoiner joiner = new StringJoiner("/"); + for (Field field : this) { + joiner.add(field.getDisplayNameForField()); + } + return joiner.toString(); + } public Field getPrimary() { return this.iterator().next(); } diff --git a/src/test/java/org/jabref/gui/libraryproperties/contentselectors/ContentSelectorViewModelTest.java b/src/test/java/org/jabref/gui/libraryproperties/contentselectors/ContentSelectorViewModelTest.java index 4b8e5155d4e..1d38018a831 100644 --- a/src/test/java/org/jabref/gui/libraryproperties/contentselectors/ContentSelectorViewModelTest.java +++ b/src/test/java/org/jabref/gui/libraryproperties/contentselectors/ContentSelectorViewModelTest.java @@ -90,6 +90,17 @@ void addsNewField() { assertTrue(fieldsContainTestValue); } + @Test + void addsNewFieldWithCaseInsensitiveName() { + UnknownField testField = new UnknownField("tEst"); + addFieldForUnknownField(testField); + + ListProperty fields = viewModel.getFieldNamesBackingList(); + boolean fieldsContainTestValue = fields.stream().anyMatch(field -> "tEst".equals(field.getDisplayNameForField())); + + assertTrue(fieldsContainTestValue); + } + @Test void removesField() { UnknownField testField = new UnknownField("Test"); @@ -153,6 +164,13 @@ private void addField(Field field) { viewModel.showInputFieldNameDialog(); } + private void addFieldForUnknownField(Field field) { + when(dialogService.showInputDialogAndWait( + Localization.lang("Add new field name"), Localization.lang("Field name:"))) + .thenReturn(Optional.of(field.getDisplayNameForField())); + + viewModel.showInputFieldNameDialog(); + } private void removeField(Field field) { when(dialogService.showConfirmationDialogAndWait( Localization.lang("Remove field name"),