From ea2f6987d7302ea110dae8fe8abdf2a5e4d5d1b3 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 12 Mar 2024 14:04:11 +0100 Subject: [PATCH 01/12] Clean up defintions of entry types Also reorderer to required/optionalImport/optionalDetail --- .../model/entry/BibEntryTypeBuilder.java | 59 ++-- .../types/BiblatexEntryTypeDefinitions.java | 280 ++++++++---------- .../BiblatexSoftwareEntryTypeDefinitions.java | 18 +- .../types/IEEETranEntryTypeDefinitions.java | 2 +- .../model/entry/BibEntryTypeBuilderTest.java | 28 ++ .../BiblatexAPAEntryTypeDefinitionsTest.java | 13 + .../BiblatexEntryTypeDefinitionsTest.java | 13 + ...latexSoftwareEntryTypeDefinitionsTest.java | 12 + .../types/BibtexEntryTypeDefinitionsTest.java | 12 + .../IEEETranEntryTypeDefinitionsTest.java | 12 + ...reReviewStudyEntryTypeDefinitionsTest.java | 12 + 11 files changed, 276 insertions(+), 185 deletions(-) create mode 100644 src/test/java/org/jabref/model/entry/BibEntryTypeBuilderTest.java create mode 100644 src/test/java/org/jabref/model/entry/types/BiblatexAPAEntryTypeDefinitionsTest.java create mode 100644 src/test/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitionsTest.java create mode 100644 src/test/java/org/jabref/model/entry/types/BiblatexSoftwareEntryTypeDefinitionsTest.java create mode 100644 src/test/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitionsTest.java create mode 100644 src/test/java/org/jabref/model/entry/types/IEEETranEntryTypeDefinitionsTest.java create mode 100644 src/test/java/org/jabref/model/entry/types/SystematicLiteratureReviewStudyEntryTypeDefinitionsTest.java diff --git a/src/main/java/org/jabref/model/entry/BibEntryTypeBuilder.java b/src/main/java/org/jabref/model/entry/BibEntryTypeBuilder.java index 91656a6c50d..b1ef5643348 100644 --- a/src/main/java/org/jabref/model/entry/BibEntryTypeBuilder.java +++ b/src/main/java/org/jabref/model/entry/BibEntryTypeBuilder.java @@ -1,7 +1,10 @@ package org.jabref.model.entry; import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; import java.util.LinkedHashSet; +import java.util.List; import java.util.SequencedCollection; import java.util.SequencedSet; import java.util.Set; @@ -20,8 +23,11 @@ public class BibEntryTypeBuilder { private EntryType type = StandardEntryType.Misc; - private SequencedSet fields = new LinkedHashSet<>(); + private SequencedSet requiredFields = new LinkedHashSet<>(); + private SequencedSet optionalFields = new LinkedHashSet<>(); + + private Set seenFields = new HashSet<>(); public BibEntryTypeBuilder withType(EntryType type) { this.type = type; @@ -29,8 +35,13 @@ public BibEntryTypeBuilder withType(EntryType type) { } public BibEntryTypeBuilder withImportantFields(SequencedSet newFields) { - this.fields = Streams.concat(fields.stream(), newFields.stream().map(field -> new BibField(field, FieldPriority.IMPORTANT))) - .collect(Collectors.toCollection(LinkedHashSet::new)); + List containedFields = containedInSeenFields(newFields); + if (!containedFields.isEmpty()) { + throw new IllegalArgumentException("Fields " + containedFields + " already added"); + } + this.seenFields.addAll(newFields); + this.optionalFields = Streams.concat(optionalFields.stream(), newFields.stream().map(field -> new BibField(field, FieldPriority.IMPORTANT))) + .collect(Collectors.toCollection(LinkedHashSet::new)); return this; } @@ -39,8 +50,13 @@ public BibEntryTypeBuilder withImportantFields(Field... newFields) { } public BibEntryTypeBuilder withDetailFields(SequencedCollection newFields) { - this.fields = Streams.concat(fields.stream(), newFields.stream().map(field -> new BibField(field, FieldPriority.DETAIL))) - .collect(Collectors.toCollection(LinkedHashSet::new)); + List containedFields = containedInSeenFields(newFields); + if (!containedFields.isEmpty()) { + throw new IllegalArgumentException("Fields " + containedFields + " already added"); + } + this.seenFields.addAll(newFields); + this.optionalFields = Streams.concat(optionalFields.stream(), newFields.stream().map(field -> new BibField(field, FieldPriority.DETAIL))) + .collect(Collectors.toCollection(LinkedHashSet::new)); return this; } @@ -49,33 +65,38 @@ public BibEntryTypeBuilder withDetailFields(Field... fields) { } public BibEntryTypeBuilder withRequiredFields(SequencedSet requiredFields) { - this.requiredFields = requiredFields; + return addRequiredFields(requiredFields); + } + + public BibEntryTypeBuilder addRequiredFields(SequencedSet requiredFields) { + Set fieldsToAdd = requiredFields.stream().map(OrFields::getFields).flatMap(Set::stream).collect(Collectors.toSet()); + List containedFields = containedInSeenFields(fieldsToAdd); + if (!containedFields.isEmpty()) { + throw new IllegalArgumentException("Fields " + containedFields + " already added"); + } + this.seenFields.addAll(fieldsToAdd); + this.requiredFields.addAll(requiredFields); return this; } public BibEntryTypeBuilder addRequiredFields(OrFields... requiredFields) { - this.requiredFields.addAll(Arrays.asList(requiredFields)); - return this; + return addRequiredFields(Arrays.asList(requiredFields).stream().collect(Collectors.toCollection(LinkedHashSet::new))); } public BibEntryTypeBuilder addRequiredFields(Field... requiredFields) { - this.requiredFields.addAll(Arrays.stream(requiredFields).map(OrFields::new).toList()); - return this; + return addRequiredFields(Arrays.stream(requiredFields).map(OrFields::new).collect(Collectors.toCollection(LinkedHashSet::new))); } public BibEntryTypeBuilder withRequiredFields(Field... requiredFields) { - this.requiredFields = Arrays.stream(requiredFields).map(OrFields::new).collect(Collectors.toCollection(LinkedHashSet::new)); - return this; + return addRequiredFields(requiredFields); } public BibEntryTypeBuilder withRequiredFields(OrFields first, Field... requiredFields) { - this.requiredFields = Stream.concat(Stream.of(first), Arrays.stream(requiredFields).map(OrFields::new)).collect(Collectors.toCollection(LinkedHashSet::new)); - return this; + return addRequiredFields(Stream.concat(Stream.of(first), Arrays.stream(requiredFields).map(OrFields::new)).collect(Collectors.toCollection(LinkedHashSet::new))); } public BibEntryTypeBuilder withRequiredFields(SequencedSet first, Field... requiredFields) { - this.requiredFields = Stream.concat(first.stream(), Arrays.stream(requiredFields).map(OrFields::new)).collect(Collectors.toCollection(LinkedHashSet::new)); - return this; + return addRequiredFields(Stream.concat(first.stream(), Arrays.stream(requiredFields).map(OrFields::new)).collect(Collectors.toCollection(LinkedHashSet::new))); } public BibEntryType build() { @@ -84,7 +105,11 @@ public BibEntryType build() { .map(OrFields::getFields) .flatMap(Set::stream) .map(field -> new BibField(field, FieldPriority.IMPORTANT)); - SequencedSet allFields = Stream.concat(fields.stream(), requiredAsImportant).collect(Collectors.toCollection(LinkedHashSet::new)); + SequencedSet allFields = Stream.concat(optionalFields.stream(), requiredAsImportant).collect(Collectors.toCollection(LinkedHashSet::new)); return new BibEntryType(type, allFields, requiredFields); } + + private List containedInSeenFields(Collection fields) { + return fields.stream().filter(seenFields::contains).toList(); + } } diff --git a/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java b/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java index 87db17e110d..1e37146d1de 100644 --- a/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java +++ b/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java @@ -22,69 +22,63 @@ public class BiblatexEntryTypeDefinitions { StandardField.EID, StandardField.ISSUE, StandardField.PAGES, StandardField.NOTE, StandardField.ISSN, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) .withDetailFields( - StandardField.TRANSLATOR, StandardField.ANNOTATOR, StandardField.COMMENTATOR, StandardField.SUBTITLE, - StandardField.TITLEADDON, StandardField.EDITOR, StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, + StandardField.TRANSLATOR, StandardField.ANNOTATOR, StandardField.COMMENTATOR, + StandardField.TITLEADDON, StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, StandardField.JOURNALSUBTITLE, StandardField.ISSUETITLE, StandardField.ISSUESUBTITLE, StandardField.LANGUAGE, - StandardField.ORIGLANGUAGE, StandardField.SERIES, StandardField.VOLUME, StandardField.NUMBER, StandardField.EID, - StandardField.ISSUE, StandardField.PAGES, StandardField.VERSION, StandardField.NOTE, - StandardField.ISSN, StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, - StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) + StandardField.ORIGLANGUAGE, StandardField.VERSION, + StandardField.ADDENDUM, StandardField.PUBSTATE) .withRequiredFields( StandardField.AUTHOR, StandardField.TITLE, StandardField.JOURNALTITLE, StandardField.DATE) .build(); private static final BibEntryType BOOK = new BibEntryTypeBuilder() .withType(StandardEntryType.Book) + .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.DATE) .withImportantFields(StandardField.EDITOR, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.MAINTITLE, StandardField.MAINSUBTITLE, StandardField.MAINTITLEADDON, StandardField.VOLUME, StandardField.EDITION, StandardField.PUBLISHER, StandardField.ISBN, StandardField.CHAPTER, StandardField.PAGES, StandardField.PAGETOTAL, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.DATE) - .withDetailFields(StandardField.EDITOR, StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, + .withDetailFields(StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, StandardField.TRANSLATOR, StandardField.ANNOTATOR, StandardField.COMMENTATOR, StandardField.INTRODUCTION, - StandardField.FOREWORD, StandardField.AFTERWORD, StandardField.SUBTITLE, StandardField.TITLEADDON, - StandardField.MAINTITLE, StandardField.MAINSUBTITLE, StandardField.MAINTITLEADDON, StandardField.LANGUAGE, - StandardField.ORIGLANGUAGE, StandardField.VOLUME, StandardField.PART, StandardField.EDITION, StandardField.VOLUMES, - StandardField.SERIES, StandardField.NUMBER, StandardField.NOTE, StandardField.PUBLISHER, StandardField.LOCATION, - StandardField.ISBN, StandardField.CHAPTER, StandardField.PAGES, StandardField.PAGETOTAL, StandardField.ADDENDUM, - StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, - StandardField.URL, StandardField.URLDATE) + StandardField.FOREWORD, StandardField.AFTERWORD, + StandardField.LANGUAGE, + StandardField.ORIGLANGUAGE, StandardField.PART, StandardField.VOLUMES, + StandardField.SERIES, StandardField.NUMBER, StandardField.NOTE, StandardField.LOCATION, + StandardField.ADDENDUM, + StandardField.PUBSTATE) .build(); private static final BibEntryType MVBOOK = new BibEntryTypeBuilder() .withType(StandardEntryType.MvBook) + .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.DATE) .withImportantFields(StandardField.EDITOR, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.EDITION, StandardField.PUBLISHER, StandardField.ISBN, StandardField.PAGETOTAL, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.DATE) - .withDetailFields(StandardField.EDITOR, StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, + .withDetailFields(StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, StandardField.TRANSLATOR, StandardField.ANNOTATOR, StandardField.COMMENTATOR, StandardField.INTRODUCTION, - StandardField.FOREWORD, StandardField.AFTERWORD, StandardField.SUBTITLE, StandardField.TITLEADDON, - StandardField.LANGUAGE, StandardField.ORIGLANGUAGE, StandardField.EDITION, StandardField.VOLUMES, StandardField.SERIES, - StandardField.NUMBER, StandardField.NOTE, StandardField.PUBLISHER, StandardField.LOCATION, StandardField.ISBN, - StandardField.PAGETOTAL, StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, - StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) + StandardField.FOREWORD, StandardField.AFTERWORD, + StandardField.LANGUAGE, StandardField.ORIGLANGUAGE, StandardField.VOLUMES, StandardField.SERIES, + StandardField.NUMBER, StandardField.NOTE, StandardField.LOCATION, + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType INBOOK = new BibEntryTypeBuilder() .withType(StandardEntryType.InBook) + .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.BOOKTITLE, StandardField.DATE) .withImportantFields( StandardField.BOOKAUTHOR, StandardField.EDITOR, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.MAINTITLE, StandardField.MAINSUBTITLE, StandardField.MAINTITLEADDON, StandardField.BOOKSUBTITLE, StandardField.BOOKTITLEADDON, StandardField.VOLUME, StandardField.EDITION, StandardField.PUBLISHER, StandardField.ISBN, StandardField.CHAPTER, StandardField.PAGES, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.BOOKTITLE, StandardField.DATE) - .withDetailFields(StandardField.BOOKAUTHOR, StandardField.EDITOR, StandardField.EDITORA, StandardField.EDITORB, + .withDetailFields(StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, StandardField.TRANSLATOR, StandardField.ANNOTATOR, StandardField.COMMENTATOR, - StandardField.INTRODUCTION, StandardField.FOREWORD, StandardField.AFTERWORD, StandardField.SUBTITLE, - StandardField.TITLEADDON, StandardField.MAINTITLE, StandardField.MAINSUBTITLE, StandardField.MAINTITLEADDON, - StandardField.BOOKSUBTITLE, StandardField.BOOKTITLEADDON, StandardField.LANGUAGE, StandardField.ORIGLANGUAGE, - StandardField.VOLUME, StandardField.PART, StandardField.EDITION, StandardField.VOLUMES, StandardField.SERIES, - StandardField.NUMBER, StandardField.NOTE, StandardField.PUBLISHER, StandardField.LOCATION, StandardField.ISBN, - StandardField.CHAPTER, StandardField.PAGES, StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, - StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) + StandardField.INTRODUCTION, StandardField.FOREWORD, StandardField.AFTERWORD, + StandardField.LANGUAGE, StandardField.ORIGLANGUAGE, + StandardField.PART, StandardField.VOLUMES, StandardField.SERIES, + StandardField.NUMBER, StandardField.NOTE, StandardField.LOCATION, + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType BOOKINBOOK = new BibEntryTypeBuilder() @@ -103,229 +97,209 @@ public class BiblatexEntryTypeDefinitions { private static final BibEntryType BOOKLET = new BibEntryTypeBuilder() .withType(StandardEntryType.Booklet) + .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.DATE) .withImportantFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.HOWPUBLISHED, StandardField.CHAPTER, StandardField.PAGES, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.DATE) - .withDetailFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.LANGUAGE, StandardField.HOWPUBLISHED, - StandardField.TYPE, StandardField.NOTE, StandardField.LOCATION, StandardField.CHAPTER, StandardField.PAGES, - StandardField.PAGETOTAL, StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, - StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) + .withDetailFields(StandardField.LANGUAGE, + StandardField.TYPE, StandardField.NOTE, StandardField.LOCATION, + StandardField.PAGETOTAL, StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType COLLECTION = new BibEntryTypeBuilder() .withType(StandardEntryType.Collection) + .withRequiredFields(StandardField.EDITOR, StandardField.TITLE, StandardField.DATE) .withImportantFields( StandardField.TRANSLATOR, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.MAINTITLE, StandardField.MAINSUBTITLE, StandardField.MAINTITLEADDON, StandardField.VOLUME, StandardField.EDITION, StandardField.PUBLISHER, StandardField.ISBN, StandardField.CHAPTER, StandardField.PAGES, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.EDITOR, StandardField.TITLE, StandardField.DATE) - .withDetailFields(StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, StandardField.TRANSLATOR, + .withDetailFields(StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, StandardField.ANNOTATOR, StandardField.COMMENTATOR, StandardField.INTRODUCTION, StandardField.FOREWORD, - StandardField.AFTERWORD, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.MAINTITLE, - StandardField.MAINSUBTITLE, StandardField.MAINTITLEADDON, StandardField.LANGUAGE, StandardField.ORIGLANGUAGE, - StandardField.VOLUME, StandardField.PART, StandardField.EDITION, StandardField.VOLUMES, StandardField.SERIES, - StandardField.NUMBER, StandardField.NOTE, StandardField.PUBLISHER, StandardField.LOCATION, StandardField.ISBN, - StandardField.CHAPTER, StandardField.PAGES, StandardField.PAGETOTAL, StandardField.ADDENDUM, StandardField.PUBSTATE, - StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, - StandardField.URLDATE) + StandardField.AFTERWORD, + StandardField.LANGUAGE, StandardField.ORIGLANGUAGE, + StandardField.PART, StandardField.VOLUMES, StandardField.SERIES, + StandardField.NUMBER, StandardField.NOTE, StandardField.LOCATION, + StandardField.PAGETOTAL, StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType MVCOLLECTION = new BibEntryTypeBuilder() .withType(StandardEntryType.MvCollection) + .withRequiredFields(StandardField.EDITOR, StandardField.TITLE, StandardField.DATE) .withImportantFields(StandardField.TRANSLATOR, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.EDITION, StandardField.PUBLISHER, StandardField.ISBN, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.EDITOR, StandardField.TITLE, StandardField.DATE) - .withDetailFields(StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, StandardField.TRANSLATOR, + .withDetailFields(StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, StandardField.ANNOTATOR, StandardField.COMMENTATOR, StandardField.INTRODUCTION, StandardField.FOREWORD, - StandardField.AFTERWORD, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.LANGUAGE, - StandardField.ORIGLANGUAGE, StandardField.EDITION, StandardField.VOLUMES, StandardField.SERIES, StandardField.NUMBER, - StandardField.NOTE, StandardField.PUBLISHER, StandardField.LOCATION, StandardField.ISBN, StandardField.PAGETOTAL, - StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, - StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) + StandardField.AFTERWORD, StandardField.LANGUAGE, + StandardField.ORIGLANGUAGE, StandardField.VOLUMES, StandardField.SERIES, StandardField.NUMBER, + StandardField.NOTE, StandardField.LOCATION, StandardField.PAGETOTAL, + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType INCOLLECTION = new BibEntryTypeBuilder() .withType(StandardEntryType.InCollection) + .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.BOOKTITLE, StandardField.DATE) .withImportantFields(StandardField.TRANSLATOR, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.MAINTITLE, StandardField.MAINSUBTITLE, StandardField.MAINTITLEADDON, StandardField.BOOKSUBTITLE, StandardField.BOOKTITLEADDON, StandardField.VOLUME, StandardField.EDITION, StandardField.PUBLISHER, StandardField.ISBN, StandardField.CHAPTER, StandardField.PAGES, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.BOOKTITLE, StandardField.DATE) .withDetailFields(StandardField.EDITOR, StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, - StandardField.TRANSLATOR, StandardField.ANNOTATOR, StandardField.COMMENTATOR, StandardField.INTRODUCTION, - StandardField.FOREWORD, StandardField.AFTERWORD, StandardField.SUBTITLE, StandardField.TITLEADDON, - StandardField.MAINTITLE, StandardField.MAINSUBTITLE, StandardField.MAINTITLEADDON, StandardField.BOOKSUBTITLE, - StandardField.BOOKTITLEADDON, StandardField.LANGUAGE, StandardField.ORIGLANGUAGE, StandardField.VOLUME, - StandardField.PART, StandardField.EDITION, StandardField.VOLUMES, StandardField.SERIES, StandardField.NUMBER, - StandardField.NOTE, StandardField.PUBLISHER, StandardField.LOCATION, StandardField.ISBN, StandardField.CHAPTER, - StandardField.PAGES, StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, - StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) + StandardField.ANNOTATOR, StandardField.COMMENTATOR, StandardField.INTRODUCTION, + StandardField.FOREWORD, StandardField.AFTERWORD, + StandardField.LANGUAGE, StandardField.ORIGLANGUAGE, + StandardField.PART, StandardField.VOLUMES, StandardField.SERIES, StandardField.NUMBER, + StandardField.NOTE, StandardField.LOCATION, + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType SUPPCOLLECTION = new BibEntryTypeBuilder() .withType(StandardEntryType.SuppCollection) + .withRequiredFields(INCOLLECTION.getRequiredFields()) .withImportantFields(INCOLLECTION.getPrimaryOptionalFields()) .withDetailFields(INCOLLECTION.getSecondaryOptionalFields()) - .withRequiredFields(INCOLLECTION.getRequiredFields()) .build(); private static final BibEntryType MANUAL = new BibEntryTypeBuilder() .withType(StandardEntryType.Manual) + .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.DATE) .withImportantFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.EDITION, StandardField.PUBLISHER, StandardField.ISBN, StandardField.CHAPTER, StandardField.PAGES, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.DATE) - .withDetailFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.LANGUAGE, StandardField.EDITION, + .withDetailFields(StandardField.LANGUAGE, StandardField.TYPE, StandardField.SERIES, StandardField.NUMBER, StandardField.VERSION, StandardField.NOTE, - StandardField.ORGANIZATION, StandardField.PUBLISHER, StandardField.LOCATION, StandardField.ISBN, StandardField.CHAPTER, - StandardField.PAGES, StandardField.PAGETOTAL, StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, - StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) + StandardField.ORGANIZATION, StandardField.LOCATION, + StandardField.PAGETOTAL, StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType MISC = new BibEntryTypeBuilder() .withType(StandardEntryType.Misc) + .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.DATE) .withImportantFields( StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.HOWPUBLISHED, StandardField.LOCATION, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.DATE) - .withDetailFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.LANGUAGE, StandardField.HOWPUBLISHED, - StandardField.TYPE, StandardField.VERSION, StandardField.NOTE, StandardField.ORGANIZATION, StandardField.LOCATION, - StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, - StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) + .withDetailFields(StandardField.LANGUAGE, + StandardField.TYPE, StandardField.VERSION, StandardField.NOTE, StandardField.ORGANIZATION, + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType ONLINE = new BibEntryTypeBuilder() .withType(StandardEntryType.Online) + .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.DATE, StandardField.URL) .withImportantFields( StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.NOTE, StandardField.ORGANIZATION, StandardField.URLDATE) - .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.DATE, StandardField.URL) - .withDetailFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.LANGUAGE, StandardField.VERSION, - StandardField.NOTE, StandardField.ORGANIZATION, StandardField.ADDENDUM, StandardField.PUBSTATE, - StandardField.URLDATE) + .withDetailFields(StandardField.LANGUAGE, StandardField.VERSION, + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType PATENT = new BibEntryTypeBuilder() .withType(IEEETranEntryType.Patent) + .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.NUMBER, StandardField.DATE) .withImportantFields(StandardField.HOLDER, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.NUMBER, StandardField.DATE) - .withDetailFields(StandardField.HOLDER, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.TYPE, + .withDetailFields(StandardField.TYPE, StandardField.VERSION, StandardField.LOCATION, StandardField.NOTE, StandardField.ADDENDUM, - StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, - StandardField.URL, StandardField.URLDATE) + StandardField.PUBSTATE) .build(); private static final BibEntryType PERIODICAL = new BibEntryTypeBuilder() .withType(IEEETranEntryType.Periodical) + .withRequiredFields(StandardField.EDITOR, StandardField.TITLE, StandardField.DATE) .withImportantFields( StandardField.SUBTITLE, StandardField.ISSUETITLE, StandardField.ISSUESUBTITLE, StandardField.ISSN, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.EDITOR, StandardField.TITLE, StandardField.DATE) - .withDetailFields(StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, StandardField.SUBTITLE, - StandardField.ISSUETITLE, StandardField.ISSUESUBTITLE, StandardField.LANGUAGE, StandardField.SERIES, + .withDetailFields(StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, + StandardField.LANGUAGE, StandardField.SERIES, StandardField.VOLUME, StandardField.NUMBER, StandardField.ISSUE, StandardField.NOTE, - StandardField.ISSN, StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, - StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType SUPPPERIODICAL = new BibEntryTypeBuilder() .withType(StandardEntryType.SuppPeriodical) + .withRequiredFields(ARTICLE.getRequiredFields()) .withImportantFields(ARTICLE.getPrimaryOptionalFields()) .withDetailFields(ARTICLE.getSecondaryOptionalFields()) - .withRequiredFields(ARTICLE.getRequiredFields()) .build(); private static final BibEntryType PROCEEDINGS = new BibEntryTypeBuilder() .withType(StandardEntryType.Proceedings) + .withRequiredFields(StandardField.TITLE, StandardField.DATE) .withImportantFields( StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.MAINTITLE, StandardField.MAINSUBTITLE, StandardField.MAINTITLEADDON, StandardField.EVENTTITLE, StandardField.VOLUME, StandardField.PUBLISHER, StandardField.ISBN, StandardField.CHAPTER, StandardField.PAGES, StandardField.PAGETOTAL, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.TITLE, StandardField.DATE) - .withDetailFields(StandardField.EDITOR, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.MAINTITLE, - StandardField.MAINSUBTITLE, StandardField.MAINTITLEADDON, StandardField.EVENTTITLE, StandardField.EVENTTITLEADDON, - StandardField.EVENTDATE, StandardField.VENUE, StandardField.LANGUAGE, StandardField.VOLUME, StandardField.PART, + .withDetailFields(StandardField.EDITOR, StandardField.EVENTTITLEADDON, + StandardField.EVENTDATE, StandardField.VENUE, StandardField.LANGUAGE, StandardField.PART, StandardField.VOLUMES, StandardField.SERIES, StandardField.NUMBER, StandardField.NOTE, StandardField.ORGANIZATION, - StandardField.PUBLISHER, StandardField.LOCATION, StandardField.ISBN, - StandardField.CHAPTER, StandardField.PAGES, StandardField.PAGETOTAL, StandardField.ADDENDUM, StandardField.PUBSTATE, - StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, - StandardField.URLDATE) + StandardField.LOCATION, + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType MVPROCEEDINGS = new BibEntryTypeBuilder() .withType(StandardEntryType.MvProceedings) + .withRequiredFields(StandardField.TITLE, StandardField.DATE) .withImportantFields( StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.MAINTITLE, StandardField.MAINSUBTITLE, StandardField.MAINTITLEADDON, StandardField.EVENTTITLE, StandardField.VOLUME, StandardField.PUBLISHER, StandardField.ISBN, StandardField.CHAPTER, StandardField.PAGES, StandardField.PAGETOTAL, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.TITLE, StandardField.DATE) - .withDetailFields(StandardField.EDITOR, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.EVENTTITLE, + .withDetailFields(StandardField.EDITOR, StandardField.EVENTTITLEADDON, StandardField.EVENTDATE, StandardField.VENUE, StandardField.LANGUAGE, StandardField.VOLUMES, StandardField.SERIES, StandardField.NUMBER, StandardField.NOTE, StandardField.ORGANIZATION, - StandardField.PUBLISHER, StandardField.LOCATION, StandardField.ISBN, StandardField.PAGETOTAL, - StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, - StandardField.EPRINTTYPE, StandardField.URL, - StandardField.URLDATE) + StandardField.LOCATION, + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType INPROCEEDINGS = new BibEntryTypeBuilder() .withType(StandardEntryType.InProceedings) + .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.BOOKTITLE, StandardField.DATE) .withImportantFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.MAINTITLE, StandardField.MAINSUBTITLE, StandardField.MAINTITLEADDON, StandardField.BOOKSUBTITLE, StandardField.BOOKTITLEADDON, StandardField.EVENTTITLE, StandardField.VOLUME, StandardField.PUBLISHER, StandardField.ISBN, StandardField.CHAPTER, StandardField.PAGES, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.BOOKTITLE, StandardField.DATE) - .withDetailFields(StandardField.EDITOR, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.MAINTITLE, - StandardField.MAINSUBTITLE, StandardField.MAINTITLEADDON, StandardField.BOOKSUBTITLE, StandardField.BOOKTITLEADDON, - StandardField.EVENTTITLE, StandardField.EVENTTITLEADDON, StandardField.EVENTDATE, StandardField.VENUE, - StandardField.LANGUAGE, StandardField.VOLUME, StandardField.PART, StandardField.VOLUMES, StandardField.SERIES, - StandardField.NUMBER, StandardField.NOTE, StandardField.ORGANIZATION, StandardField.PUBLISHER, StandardField.LOCATION, - StandardField.ISBN, StandardField.CHAPTER, StandardField.PAGES, StandardField.ADDENDUM, - StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, - StandardField.URL, StandardField.URLDATE) + .withDetailFields(StandardField.EDITOR, + StandardField.EVENTTITLEADDON, StandardField.EVENTDATE, StandardField.VENUE, + StandardField.LANGUAGE, StandardField.PART, StandardField.VOLUMES, StandardField.SERIES, + StandardField.NUMBER, StandardField.NOTE, StandardField.ORGANIZATION, StandardField.LOCATION, + StandardField.ADDENDUM, + StandardField.PUBSTATE) .build(); private static final BibEntryType REFERENCE = new BibEntryTypeBuilder() .withType(StandardEntryType.Reference) + .withRequiredFields(COLLECTION.getRequiredFields()) .withImportantFields(COLLECTION.getPrimaryOptionalFields()) .withDetailFields(COLLECTION.getSecondaryOptionalFields()) - .withRequiredFields(COLLECTION.getRequiredFields()) .build(); private static final BibEntryType MVREFERENCE = new BibEntryTypeBuilder() .withType(StandardEntryType.MvReference) + .withRequiredFields(MVCOLLECTION.getRequiredFields()) .withImportantFields(MVCOLLECTION.getPrimaryOptionalFields()) .withDetailFields(MVCOLLECTION.getSecondaryOptionalFields()) - .withRequiredFields(MVCOLLECTION.getRequiredFields()) .build(); private static final BibEntryType INREFERENCE = new BibEntryTypeBuilder() .withType(StandardEntryType.InReference) + .withRequiredFields(INCOLLECTION.getRequiredFields()) .withImportantFields(INCOLLECTION.getPrimaryOptionalFields()) .withDetailFields(INCOLLECTION.getSecondaryOptionalFields()) - .withRequiredFields(INCOLLECTION.getRequiredFields()) .build(); private static final BibEntryType REPORT = new BibEntryTypeBuilder() .withType(StandardEntryType.Report) + .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.TYPE, StandardField.INSTITUTION, StandardField.DATE) .withImportantFields( StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.NUMBER, StandardField.ISRN, StandardField.CHAPTER, StandardField.PAGES, StandardField.PAGETOTAL, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.TYPE, StandardField.INSTITUTION, StandardField.DATE) - .withDetailFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.LANGUAGE, StandardField.NUMBER, - StandardField.VERSION, StandardField.NOTE, StandardField.LOCATION, StandardField.ISRN, - StandardField.CHAPTER, StandardField.PAGES, StandardField.PAGETOTAL, StandardField.ADDENDUM, StandardField.PUBSTATE, - StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, - StandardField.URLDATE) + .withDetailFields(StandardField.LANGUAGE, + StandardField.VERSION, StandardField.NOTE, StandardField.LOCATION, + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType SET = new BibEntryTypeBuilder() @@ -335,107 +309,101 @@ public class BiblatexEntryTypeDefinitions { private static final BibEntryType THESIS = new BibEntryTypeBuilder() .withType(StandardEntryType.Thesis) + .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.TYPE, StandardField.INSTITUTION, StandardField.DATE) .withImportantFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.CHAPTER, StandardField.PAGES, StandardField.PAGETOTAL, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.TYPE, StandardField.INSTITUTION, StandardField.DATE) - .withDetailFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.LANGUAGE, StandardField.NOTE, - StandardField.LOCATION, StandardField.ISBN, StandardField.CHAPTER, StandardField.PAGES, - StandardField.PAGETOTAL, StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, - StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) + .withDetailFields(StandardField.LANGUAGE, StandardField.NOTE, + StandardField.LOCATION, StandardField.ISBN, + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType UNPUBLISHED = new BibEntryTypeBuilder() .withType(StandardEntryType.Unpublished) + .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.DATE) .withImportantFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.HOWPUBLISHED, StandardField.PUBSTATE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.DATE) - .withDetailFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.LANGUAGE, StandardField.HOWPUBLISHED, - StandardField.NOTE, StandardField.LOCATION, StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.EVENTTITLE, - StandardField.EVENTDATE, StandardField.VENUE, StandardField.URL, StandardField.URLDATE) + .withDetailFields(StandardField.LANGUAGE, + StandardField.NOTE, StandardField.LOCATION, StandardField.ADDENDUM, StandardField.EVENTTITLE, + StandardField.EVENTDATE, StandardField.VENUE) .build(); private static final BibEntryType CONFERENCE = new BibEntryTypeBuilder() .withType(StandardEntryType.Conference) + .withRequiredFields(INPROCEEDINGS.getRequiredFields()) .withImportantFields(INPROCEEDINGS.getPrimaryOptionalFields()) .withDetailFields(INPROCEEDINGS.getSecondaryOptionalFields()) - .withRequiredFields(INPROCEEDINGS.getRequiredFields()) .build(); private static final BibEntryType ELECTRONIC = new BibEntryTypeBuilder() .withType(IEEETranEntryType.Electronic) + .withRequiredFields(ONLINE.getRequiredFields()) .withImportantFields(ONLINE.getPrimaryOptionalFields()) .withDetailFields(ONLINE.getSecondaryOptionalFields()) - .withRequiredFields(ONLINE.getRequiredFields()) .build(); private static final BibEntryType MASTERSTHESIS = new BibEntryTypeBuilder() .withType(StandardEntryType.MastersThesis) + .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.INSTITUTION, StandardField.DATE) .withImportantFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.TYPE, StandardField.CHAPTER, StandardField.PAGES, StandardField.PAGETOTAL, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.INSTITUTION, StandardField.DATE) - .withDetailFields(StandardField.TYPE, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.LANGUAGE, StandardField.NOTE, - StandardField.LOCATION, StandardField.ISBN, StandardField.CHAPTER, StandardField.PAGES, - StandardField.PAGETOTAL, StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, - StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) + .withDetailFields(StandardField.LANGUAGE, StandardField.NOTE, + StandardField.LOCATION, StandardField.ISBN, + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType PHDTHESIS = new BibEntryTypeBuilder() .withType(StandardEntryType.PhdThesis) + .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.INSTITUTION, StandardField.DATE) .withImportantFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.TYPE, StandardField.CHAPTER, StandardField.PAGES, StandardField.PAGETOTAL, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.INSTITUTION, StandardField.DATE) - .withDetailFields(StandardField.TYPE, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.LANGUAGE, StandardField.NOTE, - StandardField.LOCATION, StandardField.ISBN, StandardField.CHAPTER, StandardField.PAGES, - StandardField.PAGETOTAL, StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, - StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) + .withDetailFields(StandardField.LANGUAGE, StandardField.NOTE, + StandardField.LOCATION, StandardField.ISBN, + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType TECHREPORT = new BibEntryTypeBuilder() .withType(StandardEntryType.TechReport) + .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.INSTITUTION, StandardField.DATE) .withImportantFields( StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.TYPE, StandardField.NUMBER, StandardField.ISRN, StandardField.CHAPTER, StandardField.PAGES, StandardField.PAGETOTAL, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.INSTITUTION, StandardField.DATE) - .withDetailFields(StandardField.TYPE, StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.LANGUAGE, - StandardField.NUMBER, StandardField.VERSION, StandardField.NOTE, StandardField.LOCATION, - StandardField.ISRN, StandardField.CHAPTER, StandardField.PAGES, StandardField.PAGETOTAL, StandardField.ADDENDUM, - StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, - StandardField.URL, StandardField.URLDATE) + .withDetailFields(StandardField.LANGUAGE, + StandardField.VERSION, StandardField.NOTE, StandardField.LOCATION, + StandardField.ADDENDUM, + StandardField.PUBSTATE) .build(); private static final BibEntryType WWW = new BibEntryTypeBuilder() .withType(StandardEntryType.WWW) + .withRequiredFields(ONLINE.getRequiredFields()) .withImportantFields(ONLINE.getPrimaryOptionalFields()) .withDetailFields(ONLINE.getSecondaryOptionalFields()) - .withRequiredFields(ONLINE.getRequiredFields()) .build(); private static final BibEntryType SOFTWARE = new BibEntryTypeBuilder() .withType(StandardEntryType.Software) + .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.DATE) .withImportantFields( StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.HOWPUBLISHED, StandardField.LOCATION, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.DATE) - .withDetailFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.LANGUAGE, StandardField.HOWPUBLISHED, - StandardField.TYPE, StandardField.VERSION, StandardField.NOTE, StandardField.ORGANIZATION, StandardField.LOCATION, - StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, - StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) + .withDetailFields(StandardField.LANGUAGE, + StandardField.TYPE, StandardField.VERSION, StandardField.NOTE, StandardField.ORGANIZATION, + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); private static final BibEntryType DATASET = new BibEntryTypeBuilder() .withType(StandardEntryType.Dataset) + .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.DATE) .withImportantFields( StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.HOWPUBLISHED, StandardField.LOCATION, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) - .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.DATE) - .withDetailFields(StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.LANGUAGE, StandardField.EDITION, StandardField.HOWPUBLISHED, - StandardField.TYPE, StandardField.VERSION, StandardField.NOTE, StandardField.ORGANIZATION, StandardField.LOCATION, - StandardField.ADDENDUM, StandardField.PUBSTATE, StandardField.DOI, StandardField.EPRINT, - StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) + .withDetailFields(StandardField.LANGUAGE, StandardField.EDITION, + StandardField.TYPE, StandardField.VERSION, StandardField.NOTE, StandardField.ORGANIZATION, + StandardField.ADDENDUM, StandardField.PUBSTATE) .build(); public static final List ALL = Arrays.asList(ARTICLE, BOOK, MVBOOK, INBOOK, BOOKINBOOK, SUPPBOOK, diff --git a/src/main/java/org/jabref/model/entry/types/BiblatexSoftwareEntryTypeDefinitions.java b/src/main/java/org/jabref/model/entry/types/BiblatexSoftwareEntryTypeDefinitions.java index 6a2e7f0851e..ff5e3e6599f 100644 --- a/src/main/java/org/jabref/model/entry/types/BiblatexSoftwareEntryTypeDefinitions.java +++ b/src/main/java/org/jabref/model/entry/types/BiblatexSoftwareEntryTypeDefinitions.java @@ -12,42 +12,38 @@ public class BiblatexSoftwareEntryTypeDefinitions { private static final BibEntryType SOFTWARE = new BibEntryTypeBuilder() .withType(StandardEntryType.Software) + .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.URL, StandardField.VERSION, StandardField.YEAR) .withImportantFields(StandardField.DATE, StandardField.DOI, StandardField.EPRINTTYPE, StandardField.EPRINTCLASS, StandardField.EPRINT, - StandardField.EDITOR, StandardField.FILE, BiblatexSoftwareField.HALID, BiblatexSoftwareField.HALVERSION, StandardField.INSTITUTION, BiblatexSoftwareField.INTRODUCEDIN, + StandardField.FILE, BiblatexSoftwareField.HALID, BiblatexSoftwareField.HALVERSION, StandardField.INSTITUTION, BiblatexSoftwareField.INTRODUCEDIN, BiblatexSoftwareField.LICENSE, StandardField.MONTH, StandardField.NOTE, StandardField.ORGANIZATION, StandardField.PUBLISHER, StandardField.RELATED, - BiblatexSoftwareField.RELATEDSTRING, BiblatexSoftwareField.REPOSITORY, BiblatexSoftwareField.SWHID, StandardField.URLDATE, StandardField.VERSION) - .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.URL, StandardField.VERSION, StandardField.YEAR) + BiblatexSoftwareField.RELATEDSTRING, BiblatexSoftwareField.REPOSITORY, BiblatexSoftwareField.SWHID, StandardField.URLDATE) .build(); private static final BibEntryType SOFTWAREVERSION = new BibEntryTypeBuilder() .withType(BiblatexSoftwareEntryType.SoftwareVersion) - .withImportantFields(StandardField.DATE, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, BiblatexSoftwareField.HALID, BiblatexSoftwareField.HALVERSION, - StandardField.INSTITUTION, BiblatexSoftwareField.INTRODUCEDIN, BiblatexSoftwareField.LICENSE, StandardField.MONTH, StandardField.NOTE, StandardField.ORGANIZATION, - StandardField.PUBLISHER, StandardField.RELATED, BiblatexSoftwareField.RELATEDTYPE, BiblatexSoftwareField.RELATEDSTRING, - BiblatexSoftwareField.REPOSITORY, BiblatexSoftwareField.SWHID, StandardField.SUBTITLE, StandardField.URLDATE) .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.URL, StandardField.YEAR, StandardField.VERSION) - .withDetailFields(StandardField.DATE, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, BiblatexSoftwareField.HALID, BiblatexSoftwareField.HALVERSION, + .withImportantFields(StandardField.DATE, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, BiblatexSoftwareField.HALID, BiblatexSoftwareField.HALVERSION, StandardField.INSTITUTION, BiblatexSoftwareField.INTRODUCEDIN, BiblatexSoftwareField.LICENSE, StandardField.MONTH, StandardField.NOTE, StandardField.ORGANIZATION, StandardField.PUBLISHER, StandardField.RELATED, BiblatexSoftwareField.RELATEDTYPE, BiblatexSoftwareField.RELATEDSTRING, BiblatexSoftwareField.REPOSITORY, BiblatexSoftwareField.SWHID, StandardField.SUBTITLE, StandardField.URLDATE) - .withRequiredFields(new OrFields(StandardField.AUTHOR, StandardField.EDITOR), StandardField.TITLE, StandardField.URL, StandardField.YEAR) .build(); + private static final BibEntryType SOFTWAREMODULE = new BibEntryTypeBuilder() .withType(BiblatexSoftwareEntryType.SoftwareModule) + .withRequiredFields(StandardField.AUTHOR, StandardField.SUBTITLE, StandardField.URL, StandardField.YEAR) .withImportantFields(StandardField.DATE, StandardField.DOI, StandardField.EPRINTTYPE, StandardField.EPRINTCLASS, StandardField.EPRINT, StandardField.EDITOR, StandardField.FILE, BiblatexSoftwareField.HALID, BiblatexSoftwareField.HALVERSION, StandardField.INSTITUTION, BiblatexSoftwareField.INTRODUCEDIN, BiblatexSoftwareField.LICENSE, StandardField.MONTH, StandardField.NOTE, StandardField.ORGANIZATION, StandardField.PUBLISHER, StandardField.RELATED, BiblatexSoftwareField.RELATEDSTRING, BiblatexSoftwareField.REPOSITORY, BiblatexSoftwareField.SWHID, StandardField.URLDATE, StandardField.VERSION) - .withRequiredFields(StandardField.AUTHOR, StandardField.SUBTITLE, StandardField.URL, StandardField.YEAR) .build(); private static final BibEntryType CODEFRAGMENT = new BibEntryTypeBuilder() .withType(BiblatexSoftwareEntryType.CodeFragment) + .withRequiredFields(StandardField.URL) .withImportantFields(StandardField.DATE, StandardField.DOI, StandardField.EPRINTTYPE, StandardField.EPRINTCLASS, StandardField.EPRINT, StandardField.EDITOR, StandardField.FILE, BiblatexSoftwareField.HALID, BiblatexSoftwareField.HALVERSION, StandardField.INSTITUTION, BiblatexSoftwareField.INTRODUCEDIN, BiblatexSoftwareField.LICENSE, StandardField.MONTH, StandardField.NOTE, StandardField.ORGANIZATION, StandardField.PUBLISHER, StandardField.RELATED, BiblatexSoftwareField.RELATEDSTRING, BiblatexSoftwareField.REPOSITORY, BiblatexSoftwareField.SWHID, StandardField.URLDATE, StandardField.VERSION) - .withRequiredFields(StandardField.URL) .build(); public static final List ALL = Arrays.asList(SOFTWAREVERSION, SOFTWARE, SOFTWAREMODULE, CODEFRAGMENT); diff --git a/src/main/java/org/jabref/model/entry/types/IEEETranEntryTypeDefinitions.java b/src/main/java/org/jabref/model/entry/types/IEEETranEntryTypeDefinitions.java index 600c9f67bdb..790dea24746 100644 --- a/src/main/java/org/jabref/model/entry/types/IEEETranEntryTypeDefinitions.java +++ b/src/main/java/org/jabref/model/entry/types/IEEETranEntryTypeDefinitions.java @@ -62,7 +62,7 @@ public class IEEETranEntryTypeDefinitions { .withType(IEEETranEntryType.Patent) .withRequiredFields(new OrFields(StandardField.YEAR, StandardField.YEARFILED), StandardField.NATIONALITY, StandardField.NUMBER) .withImportantFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.LANGUAGE, StandardField.ASSIGNEE, StandardField.ADDRESS, - StandardField.TYPE, StandardField.NUMBER, StandardField.DAY, StandardField.DAYFILED, StandardField.MONTH, + StandardField.TYPE, StandardField.DAY, StandardField.DAYFILED, StandardField.MONTH, StandardField.MONTHFILED, StandardField.NOTE, StandardField.URL) .build(); diff --git a/src/test/java/org/jabref/model/entry/BibEntryTypeBuilderTest.java b/src/test/java/org/jabref/model/entry/BibEntryTypeBuilderTest.java new file mode 100644 index 00000000000..b9d6b27ee4e --- /dev/null +++ b/src/test/java/org/jabref/model/entry/BibEntryTypeBuilderTest.java @@ -0,0 +1,28 @@ +package org.jabref.model.entry; + +import org.jabref.model.entry.field.StandardField; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertThrows; + +class BibEntryTypeBuilderTest { + + @Test + void fieldAlreadySeenSameCategory() { + assertThrows(IllegalArgumentException.class, () -> + new BibEntryTypeBuilder() + .withImportantFields(StandardField.AUTHOR) + .withImportantFields(StandardField.AUTHOR) + .build()); + } + + @Test + void fieldAlreadySeenDifferentCategories() { + assertThrows(IllegalArgumentException.class, () -> + new BibEntryTypeBuilder() + .withRequiredFields(StandardField.AUTHOR) + .withImportantFields(StandardField.AUTHOR) + .build()); + } +} diff --git a/src/test/java/org/jabref/model/entry/types/BiblatexAPAEntryTypeDefinitionsTest.java b/src/test/java/org/jabref/model/entry/types/BiblatexAPAEntryTypeDefinitionsTest.java new file mode 100644 index 00000000000..3ca45fbaa3f --- /dev/null +++ b/src/test/java/org/jabref/model/entry/types/BiblatexAPAEntryTypeDefinitionsTest.java @@ -0,0 +1,13 @@ +package org.jabref.model.entry.types; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class BiblatexAPAEntryTypeDefinitionsTest { + + @Test + void all() { + assertNotNull(BiblatexAPAEntryTypeDefinitions.ALL); + } +} diff --git a/src/test/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitionsTest.java b/src/test/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitionsTest.java new file mode 100644 index 00000000000..a2511daa940 --- /dev/null +++ b/src/test/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitionsTest.java @@ -0,0 +1,13 @@ +package org.jabref.model.entry.types; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class BiblatexEntryTypeDefinitionsTest { + + @Test + void all() { + assertNotNull(BiblatexEntryTypeDefinitions.ALL); + } +} diff --git a/src/test/java/org/jabref/model/entry/types/BiblatexSoftwareEntryTypeDefinitionsTest.java b/src/test/java/org/jabref/model/entry/types/BiblatexSoftwareEntryTypeDefinitionsTest.java new file mode 100644 index 00000000000..cb8f1789101 --- /dev/null +++ b/src/test/java/org/jabref/model/entry/types/BiblatexSoftwareEntryTypeDefinitionsTest.java @@ -0,0 +1,12 @@ +package org.jabref.model.entry.types; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class BiblatexSoftwareEntryTypeDefinitionsTest { + @Test + void all() { + assertNotNull(BiblatexSoftwareEntryTypeDefinitions.ALL); + } +} diff --git a/src/test/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitionsTest.java b/src/test/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitionsTest.java new file mode 100644 index 00000000000..1408a4760b7 --- /dev/null +++ b/src/test/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitionsTest.java @@ -0,0 +1,12 @@ +package org.jabref.model.entry.types; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class BibtexEntryTypeDefinitionsTest { + @Test + void all() { + assertNotNull(BibtexEntryTypeDefinitions.ALL); + } +} diff --git a/src/test/java/org/jabref/model/entry/types/IEEETranEntryTypeDefinitionsTest.java b/src/test/java/org/jabref/model/entry/types/IEEETranEntryTypeDefinitionsTest.java new file mode 100644 index 00000000000..2bb58af26b7 --- /dev/null +++ b/src/test/java/org/jabref/model/entry/types/IEEETranEntryTypeDefinitionsTest.java @@ -0,0 +1,12 @@ +package org.jabref.model.entry.types; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class IEEETranEntryTypeDefinitionsTest { + @Test + void all() { + assertNotNull(IEEETranEntryTypeDefinitions.ALL); + } +} diff --git a/src/test/java/org/jabref/model/entry/types/SystematicLiteratureReviewStudyEntryTypeDefinitionsTest.java b/src/test/java/org/jabref/model/entry/types/SystematicLiteratureReviewStudyEntryTypeDefinitionsTest.java new file mode 100644 index 00000000000..553b5125ad9 --- /dev/null +++ b/src/test/java/org/jabref/model/entry/types/SystematicLiteratureReviewStudyEntryTypeDefinitionsTest.java @@ -0,0 +1,12 @@ +package org.jabref.model.entry.types; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class SystematicLiteratureReviewStudyEntryTypeDefinitionsTest { + @Test + void all() { + assertNotNull(SystematicLiteratureReviewStudyEntryTypeDefinitions.ALL); + } +} From e9d30a1069d17865eb7228cd4c71001770908245 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 12 Mar 2024 14:22:41 +0100 Subject: [PATCH 02/12] More comments --- src/main/java/org/jabref/model/entry/field/OrFields.java | 6 ++++++ .../model/entry/types/BiblatexEntryTypeDefinitions.java | 5 +++-- .../model/entry/types/BibtexEntryTypeDefinitions.java | 3 +++ 3 files changed, 12 insertions(+), 2 deletions(-) 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 5a49202d718..b515a5aeb96 100644 --- a/src/main/java/org/jabref/model/entry/field/OrFields.java +++ b/src/main/java/org/jabref/model/entry/field/OrFields.java @@ -10,6 +10,12 @@ /** * Represents a choice between two (or more) fields or any combination of them. *

+ * The idea of OrFields originates from BibLaTeX, where the manual lists following + *
+ * Required fields: author, title, journaltitle, year/date + *
+ * The class OrFields is used to model "year/date" in this case. + *

* Example is that a BibEntry requires either an author or an editor, but both can be be present. */ public class OrFields implements Comparable { diff --git a/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java b/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java index 1e37146d1de..ce9a4bae2d7 100644 --- a/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java +++ b/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java @@ -10,8 +10,9 @@ /** * This class defines entry types for biblatex support. - * - * @see biblatex documentation + * It is based on the biblatex documentation + *

+ * The definitions for BibTeX are done at {@link BibtexEntryTypeDefinitions} */ public class BiblatexEntryTypeDefinitions { diff --git a/src/main/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitions.java b/src/main/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitions.java index d2109ebc8d4..885235958f8 100644 --- a/src/main/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitions.java +++ b/src/main/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitions.java @@ -10,6 +10,9 @@ /** * This class represents all supported BibTeX entry types. + * It is based on the information of BibTeXing, a manual + * by the original BibTeX author. Also enriched by new fields not existing back then (e.g., ISSN). + *

* The BibLaTeX entry types are defined at {@link BiblatexEntryTypeDefinitions}. */ public class BibtexEntryTypeDefinitions { From 33225ff9b987b13572619305993428acd33eb435 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 12 Mar 2024 14:22:49 +0100 Subject: [PATCH 03/12] Add "Publisher" --- .../jabref/model/entry/types/BiblatexEntryTypeDefinitions.java | 3 +++ .../jabref/model/entry/types/BibtexEntryTypeDefinitions.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java b/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java index ce9a4bae2d7..58f551e00f3 100644 --- a/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java +++ b/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java @@ -23,6 +23,9 @@ public class BiblatexEntryTypeDefinitions { StandardField.EID, StandardField.ISSUE, StandardField.PAGES, StandardField.NOTE, StandardField.ISSN, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) .withDetailFields( + // "Publisher" is missing in @article as default (see https://tex.stackexchange.com/a/16983/9075) + // We nevertheless support is as default, because it is a common field in article-like entries (and returned by the DOI fetcher) + StandardField.PUBLISHER, StandardField.TRANSLATOR, StandardField.ANNOTATOR, StandardField.COMMENTATOR, StandardField.TITLEADDON, StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, StandardField.JOURNALSUBTITLE, StandardField.ISSUETITLE, StandardField.ISSUESUBTITLE, StandardField.LANGUAGE, diff --git a/src/main/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitions.java b/src/main/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitions.java index 885235958f8..ef933d47777 100644 --- a/src/main/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitions.java +++ b/src/main/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitions.java @@ -26,6 +26,9 @@ public class BibtexEntryTypeDefinitions { .withType(StandardEntryType.Article) .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.JOURNAL, StandardField.YEAR) .withImportantFields(StandardField.VOLUME, StandardField.NUMBER, StandardField.PAGES, StandardField.MONTH, StandardField.ISSN, StandardField.NOTE) + // "Publisher" is missing in @article as default (see https://tex.stackexchange.com/a/16983/9075) + // We nevertheless support is as default, because it is a common field in article-like entries (and returned by the DOI fetcher) + .withDetailFields(StandardField.PUBLISHER) .build(); /** From 5bc868d6a0044541e2bf250ec96ce0e04f06964e Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 12 Mar 2024 15:13:01 +0100 Subject: [PATCH 04/12] Adapt naming important/detail also to methods --- ...2Tab.java => DetailOptionalFieldsTab.java} | 24 +++++------ .../jabref/gui/entryeditor/EntryEditor.java | 26 ++++++------ ...b.java => ImportantOptionalFieldsTab.java} | 24 +++++------ .../entryeditor/OptionalFieldsTabBase.java | 12 +++--- .../org/jabref/model/entry/BibEntryType.java | 8 ++-- .../model/entry/field/FieldPriority.java | 6 +-- .../types/BiblatexEntryTypeDefinitions.java | 40 +++++++++---------- .../model/entry/types/EntryTypeFactory.java | 2 +- 8 files changed, 70 insertions(+), 72 deletions(-) rename src/main/java/org/jabref/gui/entryeditor/{OptionalFields2Tab.java => DetailOptionalFieldsTab.java} (57%) rename src/main/java/org/jabref/gui/entryeditor/{OptionalFieldsTab.java => ImportantOptionalFieldsTab.java} (56%) diff --git a/src/main/java/org/jabref/gui/entryeditor/OptionalFields2Tab.java b/src/main/java/org/jabref/gui/entryeditor/DetailOptionalFieldsTab.java similarity index 57% rename from src/main/java/org/jabref/gui/entryeditor/OptionalFields2Tab.java rename to src/main/java/org/jabref/gui/entryeditor/DetailOptionalFieldsTab.java index c63c145cfba..e884d5b297d 100644 --- a/src/main/java/org/jabref/gui/entryeditor/OptionalFields2Tab.java +++ b/src/main/java/org/jabref/gui/entryeditor/DetailOptionalFieldsTab.java @@ -14,21 +14,21 @@ import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.preferences.PreferencesService; -public class OptionalFields2Tab extends OptionalFieldsTabBase { +public class DetailOptionalFieldsTab extends OptionalFieldsTabBase { public static final String NAME = "Optional fields 2"; - public OptionalFields2Tab(BibDatabaseContext databaseContext, - SuggestionProviders suggestionProviders, - UndoManager undoManager, - DialogService dialogService, - PreferencesService preferences, - StateManager stateManager, - ThemeManager themeManager, - IndexingTaskManager indexingTaskManager, - BibEntryTypesManager entryTypesManager, - TaskExecutor taskExecutor, - JournalAbbreviationRepository journalAbbreviationRepository) { + public DetailOptionalFieldsTab(BibDatabaseContext databaseContext, + SuggestionProviders suggestionProviders, + UndoManager undoManager, + DialogService dialogService, + PreferencesService preferences, + StateManager stateManager, + ThemeManager themeManager, + IndexingTaskManager indexingTaskManager, + BibEntryTypesManager entryTypesManager, + TaskExecutor taskExecutor, + JournalAbbreviationRepository journalAbbreviationRepository) { super( Localization.lang("Optional fields 2"), false, diff --git a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java index 436f62cd303..e31448fbb1e 100644 --- a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java +++ b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java @@ -249,45 +249,45 @@ private void navigateToNextEntry() { private List createTabs() { entryEditorTabs.add(new PreviewTab(databaseContext, dialogService, preferencesService, stateManager, themeManager, libraryTab.getIndexingTaskManager(), taskExecutor)); - // Required, optional, deprecated, and "other" fields + // Required, optional (important+detail), deprecated, and "other" fields entryEditorTabs.add(new RequiredFieldsTab(databaseContext, libraryTab.getSuggestionProviders(), undoManager, dialogService, preferencesService, stateManager, themeManager, libraryTab.getIndexingTaskManager(), bibEntryTypesManager, taskExecutor, journalAbbreviationRepository)); - entryEditorTabs.add(new OptionalFieldsTab(databaseContext, libraryTab.getSuggestionProviders(), undoManager, dialogService, preferencesService, stateManager, themeManager, libraryTab.getIndexingTaskManager(), bibEntryTypesManager, taskExecutor, journalAbbreviationRepository)); - entryEditorTabs.add(new OptionalFields2Tab(databaseContext, libraryTab.getSuggestionProviders(), undoManager, dialogService, preferencesService, stateManager, themeManager, libraryTab.getIndexingTaskManager(), bibEntryTypesManager, taskExecutor, journalAbbreviationRepository)); + entryEditorTabs.add(new ImportantOptionalFieldsTab(databaseContext, libraryTab.getSuggestionProviders(), undoManager, dialogService, preferencesService, stateManager, themeManager, libraryTab.getIndexingTaskManager(), bibEntryTypesManager, taskExecutor, journalAbbreviationRepository)); + entryEditorTabs.add(new DetailOptionalFieldsTab(databaseContext, libraryTab.getSuggestionProviders(), undoManager, dialogService, preferencesService, stateManager, themeManager, libraryTab.getIndexingTaskManager(), bibEntryTypesManager, taskExecutor, journalAbbreviationRepository)); entryEditorTabs.add(new DeprecatedFieldsTab(databaseContext, libraryTab.getSuggestionProviders(), undoManager, dialogService, preferencesService, stateManager, themeManager, libraryTab.getIndexingTaskManager(), bibEntryTypesManager, taskExecutor, journalAbbreviationRepository)); entryEditorTabs.add(new OtherFieldsTab(databaseContext, libraryTab.getSuggestionProviders(), undoManager, dialogService, preferencesService, stateManager, themeManager, libraryTab.getIndexingTaskManager(), bibEntryTypesManager, taskExecutor, journalAbbreviationRepository)); // Comment Tab: Tab for general and user-specific comments entryEditorTabs.add(new CommentsTab(preferencesService, databaseContext, libraryTab.getSuggestionProviders(), undoManager, dialogService, stateManager, themeManager, libraryTab.getIndexingTaskManager(), taskExecutor, journalAbbreviationRepository)); - // General fields from preferences - // First, remove all tabs that are already handled above or below; except for the source tab (which has different titles for BibTeX and BibLaTeX mode) + // The preferences allow to configure tabs to show (e.g.,"General", "Abstract") + // These should be shown. Already hard-coded ones should be removed. Map> entryEditorTabList = new HashMap<>(entryEditorPreferences.getEntryEditorTabs()); entryEditorTabList.remove(PreviewTab.NAME); entryEditorTabList.remove(RequiredFieldsTab.NAME); - entryEditorTabList.remove(OptionalFieldsTab.NAME); - entryEditorTabList.remove(OptionalFields2Tab.NAME); + entryEditorTabList.remove(ImportantOptionalFieldsTab.NAME); + entryEditorTabList.remove(DetailOptionalFieldsTab.NAME); entryEditorTabList.remove(DeprecatedFieldsTab.NAME); + entryEditorTabList.remove(OtherFieldsTab.NAME); entryEditorTabList.remove(CommentsTab.NAME); entryEditorTabList.remove(MathSciNetTab.NAME); entryEditorTabList.remove(FileAnnotationTab.NAME); + entryEditorTabList.remove(SciteTab.NAME); + // CitationRelationsTab entryEditorTabList.remove(RelatedArticlesTab.NAME); + // SourceTab -- not listed, because it has different names for BibTeX and biblatex mode entryEditorTabList.remove(LatexCitationsTab.NAME); entryEditorTabList.remove(FulltextSearchResultsTab.NAME); - entryEditorTabList.remove(SciteTab.NAME); - entryEditorTabList.remove("Comments"); - // Then show the remaining configured + for (Map.Entry> tab : entryEditorTabList.entrySet()) { entryEditorTabs.add(new UserDefinedFieldsTab(tab.getKey(), tab.getValue(), databaseContext, libraryTab.getSuggestionProviders(), undoManager, dialogService, preferencesService, stateManager, themeManager, libraryTab.getIndexingTaskManager(), taskExecutor, journalAbbreviationRepository)); } - // "Special" tabs entryEditorTabs.add(new MathSciNetTab()); entryEditorTabs.add(new FileAnnotationTab(libraryTab.getAnnotationCache())); entryEditorTabs.add(new SciteTab(preferencesService, taskExecutor, dialogService)); entryEditorTabs.add(new CitationRelationsTab(entryEditorPreferences, dialogService, databaseContext, undoManager, stateManager, fileMonitor, preferencesService, libraryTab, taskExecutor)); entryEditorTabs.add(new RelatedArticlesTab(entryEditorPreferences, preferencesService, dialogService, taskExecutor)); - sourceTab = new SourceTab( databaseContext, undoManager, @@ -299,9 +299,7 @@ private List createTabs() { bibEntryTypesManager, keyBindingRepository); entryEditorTabs.add(sourceTab); - entryEditorTabs.add(new LatexCitationsTab(databaseContext, preferencesService, taskExecutor, dialogService)); - entryEditorTabs.add(new FulltextSearchResultsTab(stateManager, preferencesService, dialogService, taskExecutor)); return entryEditorTabs; diff --git a/src/main/java/org/jabref/gui/entryeditor/OptionalFieldsTab.java b/src/main/java/org/jabref/gui/entryeditor/ImportantOptionalFieldsTab.java similarity index 56% rename from src/main/java/org/jabref/gui/entryeditor/OptionalFieldsTab.java rename to src/main/java/org/jabref/gui/entryeditor/ImportantOptionalFieldsTab.java index ad522d2411f..5258477d3f4 100644 --- a/src/main/java/org/jabref/gui/entryeditor/OptionalFieldsTab.java +++ b/src/main/java/org/jabref/gui/entryeditor/ImportantOptionalFieldsTab.java @@ -14,21 +14,21 @@ import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.preferences.PreferencesService; -public class OptionalFieldsTab extends OptionalFieldsTabBase { +public class ImportantOptionalFieldsTab extends OptionalFieldsTabBase { public static final String NAME = "Optional fields"; - public OptionalFieldsTab(BibDatabaseContext databaseContext, - SuggestionProviders suggestionProviders, - UndoManager undoManager, - DialogService dialogService, - PreferencesService preferences, - StateManager stateManager, - ThemeManager themeManager, - IndexingTaskManager indexingTaskManager, - BibEntryTypesManager entryTypesManager, - TaskExecutor taskExecutor, - JournalAbbreviationRepository journalAbbreviationRepository) { + public ImportantOptionalFieldsTab(BibDatabaseContext databaseContext, + SuggestionProviders suggestionProviders, + UndoManager undoManager, + DialogService dialogService, + PreferencesService preferences, + StateManager stateManager, + ThemeManager themeManager, + IndexingTaskManager indexingTaskManager, + BibEntryTypesManager entryTypesManager, + TaskExecutor taskExecutor, + JournalAbbreviationRepository journalAbbreviationRepository) { super( Localization.lang("Optional fields"), true, diff --git a/src/main/java/org/jabref/gui/entryeditor/OptionalFieldsTabBase.java b/src/main/java/org/jabref/gui/entryeditor/OptionalFieldsTabBase.java index 5f61a0279ab..5a95c3ddb8b 100644 --- a/src/main/java/org/jabref/gui/entryeditor/OptionalFieldsTabBase.java +++ b/src/main/java/org/jabref/gui/entryeditor/OptionalFieldsTabBase.java @@ -27,10 +27,10 @@ public class OptionalFieldsTabBase extends FieldsEditorTab { private final BibEntryTypesManager entryTypesManager; - private final boolean isPrimaryOptionalFields; + private final boolean isImportantOptionalFields; public OptionalFieldsTabBase(String title, - boolean isPrimaryOptionalFields, + boolean isImportantOptionalFields, BibDatabaseContext databaseContext, SuggestionProviders suggestionProviders, UndoManager undoManager, @@ -54,7 +54,7 @@ public OptionalFieldsTabBase(String title, journalAbbreviationRepository, indexingTaskManager); this.entryTypesManager = entryTypesManager; - this.isPrimaryOptionalFields = isPrimaryOptionalFields; + this.isImportantOptionalFields = isImportantOptionalFields; setText(title); setTooltip(new Tooltip(Localization.lang("Show optional fields"))); setGraphic(IconTheme.JabRefIcons.OPTIONAL.getGraphicNode()); @@ -65,10 +65,10 @@ protected SequencedSet determineFieldsToShow(BibEntry entry) { BibDatabaseMode mode = databaseContext.getMode(); Optional entryType = entryTypesManager.enrich(entry.getType(), mode); if (entryType.isPresent()) { - if (isPrimaryOptionalFields) { - return entryType.get().getPrimaryOptionalFields(); + if (isImportantOptionalFields) { + return entryType.get().getImportantOptionalFields(); } else { - return entryType.get().getSecondaryOptionalNotDeprecatedFields(mode); + return entryType.get().getDetailOptionalNotDeprecatedFields(mode); } } else { // Entry type unknown -> treat all fields as required (thus no optional fields) diff --git a/src/main/java/org/jabref/model/entry/BibEntryType.java b/src/main/java/org/jabref/model/entry/BibEntryType.java index b804d8255e7..9f90f6bf67f 100644 --- a/src/main/java/org/jabref/model/entry/BibEntryType.java +++ b/src/main/java/org/jabref/model/entry/BibEntryType.java @@ -77,14 +77,14 @@ public Set getAllFields() { return fields.stream().map(BibField::field).collect(Collectors.toCollection(LinkedHashSet::new)); } - public SequencedSet getPrimaryOptionalFields() { + public SequencedSet getImportantOptionalFields() { return getOptionalFields().stream() .filter(field -> field.priority() == FieldPriority.IMPORTANT) .map(BibField::field) .collect(Collectors.toCollection(LinkedHashSet::new)); } - public SequencedSet getSecondaryOptionalFields() { + public SequencedSet getDetailOptionalFields() { return getOptionalFields().stream() .filter(field -> field.priority() == FieldPriority.DETAIL) .map(BibField::field) @@ -108,8 +108,8 @@ public Set getDeprecatedFields(BibDatabaseMode mode) { return deprecatedFields; } - public SequencedSet getSecondaryOptionalNotDeprecatedFields(BibDatabaseMode mode) { - SequencedSet optionalFieldsNotPrimaryOrDeprecated = new LinkedHashSet<>(getSecondaryOptionalFields()); + public SequencedSet getDetailOptionalNotDeprecatedFields(BibDatabaseMode mode) { + SequencedSet optionalFieldsNotPrimaryOrDeprecated = new LinkedHashSet<>(getDetailOptionalFields()); optionalFieldsNotPrimaryOrDeprecated.removeAll(getDeprecatedFields(mode)); return optionalFieldsNotPrimaryOrDeprecated; } diff --git a/src/main/java/org/jabref/model/entry/field/FieldPriority.java b/src/main/java/org/jabref/model/entry/field/FieldPriority.java index 199151eeaf0..7c44b53af28 100644 --- a/src/main/java/org/jabref/model/entry/field/FieldPriority.java +++ b/src/main/java/org/jabref/model/entry/field/FieldPriority.java @@ -3,10 +3,10 @@ import java.util.Locale; /** - * Determines whether the field is in the Optional1 or Optional2 tab + * Determines whether the field is in the {@link org.jabref.gui.entryeditor.ImportantOptionalFieldsTab} or {@link org.jabref.gui.entryeditor.DetailOptionalFieldsTab} tab * - * See {@link org.jabref.model.entry.BibEntryType#getPrimaryOptionalFields()} - * and {@link org.jabref.model.entry.BibEntryType#getSecondaryOptionalFields()}. + * See {@link org.jabref.model.entry.BibEntryType#getImportantOptionalFields()} + * and {@link org.jabref.model.entry.BibEntryType#getDetailOptionalFields()}. */ public enum FieldPriority { IMPORTANT, diff --git a/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java b/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java index 58f551e00f3..5ca2b8bae1f 100644 --- a/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java +++ b/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java @@ -87,15 +87,15 @@ public class BiblatexEntryTypeDefinitions { private static final BibEntryType BOOKINBOOK = new BibEntryTypeBuilder() .withType(StandardEntryType.BookInBook) - .withImportantFields(INBOOK.getPrimaryOptionalFields()) - .withDetailFields(INBOOK.getSecondaryOptionalFields()) + .withImportantFields(INBOOK.getImportantOptionalFields()) + .withDetailFields(INBOOK.getDetailOptionalFields()) .withRequiredFields(INBOOK.getRequiredFields()) .build(); private static final BibEntryType SUPPBOOK = new BibEntryTypeBuilder() .withType(StandardEntryType.SuppBook) - .withImportantFields(INBOOK.getPrimaryOptionalFields()) - .withDetailFields(INBOOK.getSecondaryOptionalFields()) + .withImportantFields(INBOOK.getImportantOptionalFields()) + .withDetailFields(INBOOK.getDetailOptionalFields()) .withRequiredFields(INBOOK.getRequiredFields()) .build(); @@ -161,8 +161,8 @@ public class BiblatexEntryTypeDefinitions { private static final BibEntryType SUPPCOLLECTION = new BibEntryTypeBuilder() .withType(StandardEntryType.SuppCollection) .withRequiredFields(INCOLLECTION.getRequiredFields()) - .withImportantFields(INCOLLECTION.getPrimaryOptionalFields()) - .withDetailFields(INCOLLECTION.getSecondaryOptionalFields()) + .withImportantFields(INCOLLECTION.getImportantOptionalFields()) + .withDetailFields(INCOLLECTION.getDetailOptionalFields()) .build(); private static final BibEntryType MANUAL = new BibEntryTypeBuilder() @@ -223,8 +223,8 @@ public class BiblatexEntryTypeDefinitions { private static final BibEntryType SUPPPERIODICAL = new BibEntryTypeBuilder() .withType(StandardEntryType.SuppPeriodical) .withRequiredFields(ARTICLE.getRequiredFields()) - .withImportantFields(ARTICLE.getPrimaryOptionalFields()) - .withDetailFields(ARTICLE.getSecondaryOptionalFields()) + .withImportantFields(ARTICLE.getImportantOptionalFields()) + .withDetailFields(ARTICLE.getDetailOptionalFields()) .build(); private static final BibEntryType PROCEEDINGS = new BibEntryTypeBuilder() @@ -276,22 +276,22 @@ public class BiblatexEntryTypeDefinitions { private static final BibEntryType REFERENCE = new BibEntryTypeBuilder() .withType(StandardEntryType.Reference) .withRequiredFields(COLLECTION.getRequiredFields()) - .withImportantFields(COLLECTION.getPrimaryOptionalFields()) - .withDetailFields(COLLECTION.getSecondaryOptionalFields()) + .withImportantFields(COLLECTION.getImportantOptionalFields()) + .withDetailFields(COLLECTION.getDetailOptionalFields()) .build(); private static final BibEntryType MVREFERENCE = new BibEntryTypeBuilder() .withType(StandardEntryType.MvReference) .withRequiredFields(MVCOLLECTION.getRequiredFields()) - .withImportantFields(MVCOLLECTION.getPrimaryOptionalFields()) - .withDetailFields(MVCOLLECTION.getSecondaryOptionalFields()) + .withImportantFields(MVCOLLECTION.getImportantOptionalFields()) + .withDetailFields(MVCOLLECTION.getDetailOptionalFields()) .build(); private static final BibEntryType INREFERENCE = new BibEntryTypeBuilder() .withType(StandardEntryType.InReference) .withRequiredFields(INCOLLECTION.getRequiredFields()) - .withImportantFields(INCOLLECTION.getPrimaryOptionalFields()) - .withDetailFields(INCOLLECTION.getSecondaryOptionalFields()) + .withImportantFields(INCOLLECTION.getImportantOptionalFields()) + .withDetailFields(INCOLLECTION.getDetailOptionalFields()) .build(); private static final BibEntryType REPORT = new BibEntryTypeBuilder() @@ -335,15 +335,15 @@ public class BiblatexEntryTypeDefinitions { private static final BibEntryType CONFERENCE = new BibEntryTypeBuilder() .withType(StandardEntryType.Conference) .withRequiredFields(INPROCEEDINGS.getRequiredFields()) - .withImportantFields(INPROCEEDINGS.getPrimaryOptionalFields()) - .withDetailFields(INPROCEEDINGS.getSecondaryOptionalFields()) + .withImportantFields(INPROCEEDINGS.getImportantOptionalFields()) + .withDetailFields(INPROCEEDINGS.getDetailOptionalFields()) .build(); private static final BibEntryType ELECTRONIC = new BibEntryTypeBuilder() .withType(IEEETranEntryType.Electronic) .withRequiredFields(ONLINE.getRequiredFields()) - .withImportantFields(ONLINE.getPrimaryOptionalFields()) - .withDetailFields(ONLINE.getSecondaryOptionalFields()) + .withImportantFields(ONLINE.getImportantOptionalFields()) + .withDetailFields(ONLINE.getDetailOptionalFields()) .build(); private static final BibEntryType MASTERSTHESIS = new BibEntryTypeBuilder() @@ -384,8 +384,8 @@ public class BiblatexEntryTypeDefinitions { private static final BibEntryType WWW = new BibEntryTypeBuilder() .withType(StandardEntryType.WWW) .withRequiredFields(ONLINE.getRequiredFields()) - .withImportantFields(ONLINE.getPrimaryOptionalFields()) - .withDetailFields(ONLINE.getSecondaryOptionalFields()) + .withImportantFields(ONLINE.getImportantOptionalFields()) + .withDetailFields(ONLINE.getDetailOptionalFields()) .build(); private static final BibEntryType SOFTWARE = new BibEntryTypeBuilder() diff --git a/src/main/java/org/jabref/model/entry/types/EntryTypeFactory.java b/src/main/java/org/jabref/model/entry/types/EntryTypeFactory.java index ae879fabafb..0f30ca5e6bf 100644 --- a/src/main/java/org/jabref/model/entry/types/EntryTypeFactory.java +++ b/src/main/java/org/jabref/model/entry/types/EntryTypeFactory.java @@ -28,7 +28,7 @@ public static boolean nameAndFieldsAreEqual(BibEntryType type1, BibEntryType typ return Objects.equals(type1.getType(), type2.getType()) && Objects.equals(type1.getRequiredFields(), type2.getRequiredFields()) && Objects.equals(type1.getOptionalFields(), type2.getOptionalFields()) - && Objects.equals(type1.getSecondaryOptionalFields(), type2.getSecondaryOptionalFields()); + && Objects.equals(type1.getDetailOptionalFields(), type2.getDetailOptionalFields()); } } From 1c9edc149bf96d37f9423af5cf5eac4815294a07 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 12 Mar 2024 16:50:19 +0100 Subject: [PATCH 05/12] Add test --- .../types/BibtexEntryTypeDefinitionsTest.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/test/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitionsTest.java b/src/test/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitionsTest.java index 1408a4760b7..31830fa74c9 100644 --- a/src/test/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitionsTest.java +++ b/src/test/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitionsTest.java @@ -1,12 +1,26 @@ package org.jabref.model.entry.types; +import org.jabref.model.entry.BibEntryType; +import org.jabref.model.entry.field.StandardField; + import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; class BibtexEntryTypeDefinitionsTest { + @Test void all() { assertNotNull(BibtexEntryTypeDefinitions.ALL); } + + @Test + void publisherContained() { + BibEntryType articleEntryType = BiblatexEntryTypeDefinitions.ALL.stream() + .filter(type -> type.getType().equals(StandardEntryType.Article)) + .findFirst() + .get(); + assertTrue(articleEntryType.getDetailOptionalFields().contains(StandardField.PUBLISHER)); + } } From 6469f79d9adf267b545625afb6bf08847eb2b0ce Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 12 Mar 2024 21:13:36 +0100 Subject: [PATCH 06/12] Add log output when using customized type --- .../java/org/jabref/model/entry/BibEntryTypesManager.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/org/jabref/model/entry/BibEntryTypesManager.java b/src/main/java/org/jabref/model/entry/BibEntryTypesManager.java index eb25ad23972..71a077acf01 100644 --- a/src/main/java/org/jabref/model/entry/BibEntryTypesManager.java +++ b/src/main/java/org/jabref/model/entry/BibEntryTypesManager.java @@ -18,7 +18,12 @@ import org.jabref.model.entry.types.EntryTypeFactory; import org.jabref.model.entry.types.IEEETranEntryTypeDefinitions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class BibEntryTypesManager { + private static final Logger LOGGER = LoggerFactory.getLogger(BibEntryTypesManager.class); + private final InternalEntryTypes BIBTEX_ENTRYTYPES = new InternalEntryTypes( Stream.concat(BibtexEntryTypeDefinitions.ALL.stream(), IEEETranEntryTypeDefinitions.ALL.stream()) .collect(Collectors.toList())); @@ -132,6 +137,7 @@ private Optional enrich(EntryType type) { .filter(typeEquals(type)) .findFirst(); if (enrichedType.isPresent()) { + LOGGER.debug("Using customized entry type for {}", type.getName()); return enrichedType; } else { return standardTypes.stream() From 5c1879cc380e9eec8712708f29bcea076ac1b6bb Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 12 Mar 2024 21:13:54 +0100 Subject: [PATCH 07/12] Fix test method names --- .../org/jabref/model/entry/BibEntryTypesManagerTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java b/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java index e736a1b8b90..c47f9abde47 100644 --- a/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java +++ b/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java @@ -140,7 +140,7 @@ void standardTypeIsStillAccessibleIfOverwritten(BibDatabaseMode mode) { @ParameterizedTest @EnumSource(BibDatabaseMode.class) - void sModifyingArticle(BibDatabaseMode mode) { + void modifyingArticle(BibDatabaseMode mode) { overwrittenStandardType = new BibEntryType( StandardEntryType.Article, List.of(new BibField(StandardField.TITLE, FieldPriority.IMPORTANT), @@ -155,7 +155,7 @@ void sModifyingArticle(BibDatabaseMode mode) { @ParameterizedTest @EnumSource(BibDatabaseMode.class) - void sModifyingArticleWithParsing(BibDatabaseMode mode) { + void modifyingArticleWithParsing(BibDatabaseMode mode) { overwrittenStandardType = new BibEntryType( StandardEntryType.Article, List.of(new BibField(StandardField.TITLE, FieldPriority.IMPORTANT), @@ -173,7 +173,7 @@ void sModifyingArticleWithParsing(BibDatabaseMode mode) { @ParameterizedTest @EnumSource(BibDatabaseMode.class) - void sModifyingArticleWithParsingKeepsListOrder(BibDatabaseMode mode) { + void modifyingArticleWithParsingKeepsListOrder(BibDatabaseMode mode) { overwrittenStandardType = new BibEntryType( StandardEntryType.Article, List.of(new BibField(StandardField.TITLE, FieldPriority.IMPORTANT), From 5d4e514bea9721db9f7d1b9988bc86ba0ded258d Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 12 Mar 2024 21:14:20 +0100 Subject: [PATCH 08/12] Add another test case --- .../org/jabref/model/entry/BibEntryTypesManagerTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java b/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java index c47f9abde47..9825e4eb841 100644 --- a/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java +++ b/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java @@ -188,4 +188,10 @@ void modifyingArticleWithParsingKeepsListOrder(BibDatabaseMode mode) { assertEquals(overwrittenStandardType.getOptionalFields(), type.get().getOptionalFields()); } + + @Test + void publicationContainedAtArticle() { + BibEntryType entryType = entryTypesManager.enrich(StandardEntryType.Article, BibDatabaseMode.BIBLATEX).get(); + assertTrue(entryType.getDetailOptionalFields().contains(StandardField.PUBLISHER)); + } } From a4720a583be16fe5b95825ce632776f40a9a2b9f Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 12 Mar 2024 22:31:02 +0100 Subject: [PATCH 09/12] Fix names --- .../org/jabref/model/entry/BibEntryType.java | 18 +++++++++--------- .../model/entry/BibEntryTypeBuilderTest.java | 13 +++++++++++++ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/jabref/model/entry/BibEntryType.java b/src/main/java/org/jabref/model/entry/BibEntryType.java index 9f90f6bf67f..164029fa799 100644 --- a/src/main/java/org/jabref/model/entry/BibEntryType.java +++ b/src/main/java/org/jabref/model/entry/BibEntryType.java @@ -22,8 +22,8 @@ public class BibEntryType implements Comparable { private final EntryType type; + private final SequencedSet allFields; private final SequencedSet requiredFields; - private final SequencedSet fields; /** * Provides an enriched EntryType with information about defined standards as mandatory fields etc. @@ -31,12 +31,12 @@ public class BibEntryType implements Comparable { * A builder is available at {@link BibEntryTypeBuilder} * * @param type The EntryType this BibEntryType is wrapped around. - * @param fields A BibFields list of all fields, including the required fields + * @param allFields A BibFields list of all fields, including the required fields * @param requiredFields A OrFields list of just the required fields */ - public BibEntryType(EntryType type, Collection fields, Collection requiredFields) { + public BibEntryType(EntryType type, Collection allFields, Collection requiredFields) { this.type = Objects.requireNonNull(type); - this.fields = new LinkedHashSet<>(fields); + this.allFields = new LinkedHashSet<>(allFields); this.requiredFields = new LinkedHashSet<>(requiredFields); } @@ -70,11 +70,11 @@ public SequencedSet getRequiredFields() { * Returns all defined fields. */ public SequencedSet getAllBibFields() { - return Collections.unmodifiableSequencedSet(fields); + return Collections.unmodifiableSequencedSet(allFields); } public Set getAllFields() { - return fields.stream().map(BibField::field).collect(Collectors.toCollection(LinkedHashSet::new)); + return allFields.stream().map(BibField::field).collect(Collectors.toCollection(LinkedHashSet::new)); } public SequencedSet getImportantOptionalFields() { @@ -139,12 +139,12 @@ public boolean equals(Object o) { BibEntryType that = (BibEntryType) o; return type.equals(that.type) && Objects.equals(requiredFields, that.requiredFields) && - Objects.equals(fields, that.fields); + Objects.equals(allFields, that.allFields); } @Override public int hashCode() { - return Objects.hash(type, requiredFields, fields); + return Objects.hash(type, requiredFields, allFields); } /** @@ -159,7 +159,7 @@ public int hashCode() { public String toString() { return "BibEntryType{" + "type=" + type + - ", allFields=" + fields + + ", allFields=" + allFields + ", requiredFields=" + requiredFields + '}'; } diff --git a/src/test/java/org/jabref/model/entry/BibEntryTypeBuilderTest.java b/src/test/java/org/jabref/model/entry/BibEntryTypeBuilderTest.java index b9d6b27ee4e..44794f55412 100644 --- a/src/test/java/org/jabref/model/entry/BibEntryTypeBuilderTest.java +++ b/src/test/java/org/jabref/model/entry/BibEntryTypeBuilderTest.java @@ -1,9 +1,13 @@ package org.jabref.model.entry; +import java.util.LinkedHashSet; +import java.util.List; + import org.jabref.model.entry.field.StandardField; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; class BibEntryTypeBuilderTest { @@ -17,6 +21,15 @@ void fieldAlreadySeenSameCategory() { .build()); } + @Test + void detailOptionalWorks() { + BibEntryType bibEntryType = new BibEntryTypeBuilder() + .withImportantFields(StandardField.AUTHOR) + .withDetailFields(StandardField.NOTE) + .build(); + assertEquals(new LinkedHashSet<>(List.of(StandardField.NOTE)), bibEntryType.getDetailOptionalFields()); + } + @Test void fieldAlreadySeenDifferentCategories() { assertThrows(IllegalArgumentException.class, () -> From 0e94dc004fd81cf751311f615ebc977d1eaf3335 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 12 Mar 2024 22:33:57 +0100 Subject: [PATCH 10/12] Revert adding "publisher" to article --- .../model/entry/types/BiblatexEntryTypeDefinitions.java | 3 --- .../jabref/model/entry/types/BibtexEntryTypeDefinitions.java | 3 --- .../java/org/jabref/model/entry/BibEntryTypesManagerTest.java | 4 ++-- .../model/entry/types/BibtexEntryTypeDefinitionsTest.java | 4 ++-- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java b/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java index 5ca2b8bae1f..7cc869ebff6 100644 --- a/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java +++ b/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java @@ -23,9 +23,6 @@ public class BiblatexEntryTypeDefinitions { StandardField.EID, StandardField.ISSUE, StandardField.PAGES, StandardField.NOTE, StandardField.ISSN, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) .withDetailFields( - // "Publisher" is missing in @article as default (see https://tex.stackexchange.com/a/16983/9075) - // We nevertheless support is as default, because it is a common field in article-like entries (and returned by the DOI fetcher) - StandardField.PUBLISHER, StandardField.TRANSLATOR, StandardField.ANNOTATOR, StandardField.COMMENTATOR, StandardField.TITLEADDON, StandardField.EDITORA, StandardField.EDITORB, StandardField.EDITORC, StandardField.JOURNALSUBTITLE, StandardField.ISSUETITLE, StandardField.ISSUESUBTITLE, StandardField.LANGUAGE, diff --git a/src/main/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitions.java b/src/main/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitions.java index ef933d47777..885235958f8 100644 --- a/src/main/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitions.java +++ b/src/main/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitions.java @@ -26,9 +26,6 @@ public class BibtexEntryTypeDefinitions { .withType(StandardEntryType.Article) .withRequiredFields(StandardField.AUTHOR, StandardField.TITLE, StandardField.JOURNAL, StandardField.YEAR) .withImportantFields(StandardField.VOLUME, StandardField.NUMBER, StandardField.PAGES, StandardField.MONTH, StandardField.ISSN, StandardField.NOTE) - // "Publisher" is missing in @article as default (see https://tex.stackexchange.com/a/16983/9075) - // We nevertheless support is as default, because it is a common field in article-like entries (and returned by the DOI fetcher) - .withDetailFields(StandardField.PUBLISHER) .build(); /** diff --git a/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java b/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java index 9825e4eb841..a4ebc832bfb 100644 --- a/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java +++ b/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java @@ -190,8 +190,8 @@ void modifyingArticleWithParsingKeepsListOrder(BibDatabaseMode mode) { } @Test - void publicationContainedAtArticle() { + void pagesContainedAtArticle() { BibEntryType entryType = entryTypesManager.enrich(StandardEntryType.Article, BibDatabaseMode.BIBLATEX).get(); - assertTrue(entryType.getDetailOptionalFields().contains(StandardField.PUBLISHER)); + assertTrue(entryType.getDetailOptionalFields().contains(StandardField.PAGES)); } } diff --git a/src/test/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitionsTest.java b/src/test/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitionsTest.java index 31830fa74c9..05aef2a503f 100644 --- a/src/test/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitionsTest.java +++ b/src/test/java/org/jabref/model/entry/types/BibtexEntryTypeDefinitionsTest.java @@ -16,11 +16,11 @@ void all() { } @Test - void publisherContained() { + void languageContained() { BibEntryType articleEntryType = BiblatexEntryTypeDefinitions.ALL.stream() .filter(type -> type.getType().equals(StandardEntryType.Article)) .findFirst() .get(); - assertTrue(articleEntryType.getDetailOptionalFields().contains(StandardField.PUBLISHER)); + assertTrue(articleEntryType.getDetailOptionalFields().contains(StandardField.LANGUAGE)); } } From f2c3062889de67080a44c2840e7740a2148a90d5 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 12 Mar 2024 22:39:17 +0100 Subject: [PATCH 11/12] Reorder with... --- .../model/entry/types/BiblatexEntryTypeDefinitions.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java b/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java index 7cc869ebff6..40c79b8b31d 100644 --- a/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java +++ b/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java @@ -18,6 +18,8 @@ public class BiblatexEntryTypeDefinitions { private static final BibEntryType ARTICLE = new BibEntryTypeBuilder() .withType(StandardEntryType.Article) + .withRequiredFields( + StandardField.AUTHOR, StandardField.TITLE, StandardField.JOURNALTITLE, StandardField.DATE) .withImportantFields( StandardField.SUBTITLE, StandardField.EDITOR, StandardField.SERIES, StandardField.VOLUME, StandardField.NUMBER, StandardField.EID, StandardField.ISSUE, StandardField.PAGES, StandardField.NOTE, StandardField.ISSN, StandardField.DOI, @@ -28,8 +30,6 @@ public class BiblatexEntryTypeDefinitions { StandardField.JOURNALSUBTITLE, StandardField.ISSUETITLE, StandardField.ISSUESUBTITLE, StandardField.LANGUAGE, StandardField.ORIGLANGUAGE, StandardField.VERSION, StandardField.ADDENDUM, StandardField.PUBSTATE) - .withRequiredFields( - StandardField.AUTHOR, StandardField.TITLE, StandardField.JOURNALTITLE, StandardField.DATE) .build(); private static final BibEntryType BOOK = new BibEntryTypeBuilder() @@ -84,9 +84,9 @@ public class BiblatexEntryTypeDefinitions { private static final BibEntryType BOOKINBOOK = new BibEntryTypeBuilder() .withType(StandardEntryType.BookInBook) + .withRequiredFields(INBOOK.getRequiredFields()) .withImportantFields(INBOOK.getImportantOptionalFields()) .withDetailFields(INBOOK.getDetailOptionalFields()) - .withRequiredFields(INBOOK.getRequiredFields()) .build(); private static final BibEntryType SUPPBOOK = new BibEntryTypeBuilder() From 38dc44fcc3bf1448e9fa933e98976bad4abecf80 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 12 Mar 2024 23:04:39 +0100 Subject: [PATCH 12/12] Fix test --- .../java/org/jabref/model/entry/BibEntryTypesManagerTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java b/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java index a4ebc832bfb..e227b226393 100644 --- a/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java +++ b/src/test/java/org/jabref/model/entry/BibEntryTypesManagerTest.java @@ -190,8 +190,8 @@ void modifyingArticleWithParsingKeepsListOrder(BibDatabaseMode mode) { } @Test - void pagesContainedAtArticle() { + void translatorDetailOptionalAtArticle() { BibEntryType entryType = entryTypesManager.enrich(StandardEntryType.Article, BibDatabaseMode.BIBLATEX).get(); - assertTrue(entryType.getDetailOptionalFields().contains(StandardField.PAGES)); + assertTrue(entryType.getDetailOptionalFields().contains(StandardField.TRANSLATOR)); } }