From 160bf6dee91ad5932c5e4c45b67a0b6228364afd Mon Sep 17 00:00:00 2001 From: Joerg Lenhard Date: Wed, 23 Sep 2015 12:21:53 +0200 Subject: [PATCH] Replace String[] with List in BibtexEntryType --- .../java/net/sf/jabref/JabRefPreferences.java | 4 +- .../jabref/gui/EntryCustomizationDialog2.java | 103 +-- .../jabref/gui/entryeditor/EntryEditor.java | 16 +- .../logic/bibtex/BibtexEntryWriter.java | 6 +- .../jabref/logic/bibtex/DuplicateCheck.java | 4 +- .../model/entry/BibLatexEntryTypes.java | 681 ++++++++---------- .../sf/jabref/model/entry/BibtexEntry.java | 8 +- .../jabref/model/entry/BibtexEntryType.java | 38 +- .../jabref/model/entry/BibtexEntryTypes.java | 438 +++-------- .../jabref/model/entry/CustomEntryType.java | 22 +- .../jabref/model/entry/UnknownEntryType.java | 17 +- .../sf/jabref/sql/exporter/DBExporter.java | 8 +- .../wizard/text/gui/TextInputDialog.java | 10 +- 13 files changed, 513 insertions(+), 842 deletions(-) diff --git a/src/main/java/net/sf/jabref/JabRefPreferences.java b/src/main/java/net/sf/jabref/JabRefPreferences.java index 31c71180025..f58506ae5de 100644 --- a/src/main/java/net/sf/jabref/JabRefPreferences.java +++ b/src/main/java/net/sf/jabref/JabRefPreferences.java @@ -1319,8 +1319,8 @@ public void storeCustomEntryType(CustomEntryType tp, int number) { String nr = "" + number; put(JabRefPreferences.CUSTOM_TYPE_NAME + nr, tp.getName()); put(JabRefPreferences.CUSTOM_TYPE_REQ + nr, tp.getRequiredFieldsString()); - putStringArray(JabRefPreferences.CUSTOM_TYPE_OPT + nr, tp.getOptionalFields()); - putStringArray(JabRefPreferences.CUSTOM_TYPE_PRIOPT + nr, tp.getPrimaryOptionalFields()); + putStringArray(JabRefPreferences.CUSTOM_TYPE_OPT + nr, tp.getOptionalFields().toArray(new String[0])); + putStringArray(JabRefPreferences.CUSTOM_TYPE_PRIOPT + nr, tp.getPrimaryOptionalFields().toArray(new String[0])); } /** diff --git a/src/main/java/net/sf/jabref/gui/EntryCustomizationDialog2.java b/src/main/java/net/sf/jabref/gui/EntryCustomizationDialog2.java index 90048497379..dbff538987e 100644 --- a/src/main/java/net/sf/jabref/gui/EntryCustomizationDialog2.java +++ b/src/main/java/net/sf/jabref/gui/EntryCustomizationDialog2.java @@ -62,7 +62,9 @@ public class EntryCustomizationDialog2 extends JDialog implements ListSelectionL private boolean biblatexMode; - /** Creates a new instance of EntryCustomizationDialog2 */ + /** + * Creates a new instance of EntryCustomizationDialog2 + */ public EntryCustomizationDialog2(JabRefFrame frame) { super(frame, Localization.lang("Customize entry types"), false); @@ -83,9 +85,9 @@ private void initGui() { right.setLayout(new GridLayout(biblatexMode ? 2 : 1, 2)); java.util.List entryTypes = new ArrayList(); - for (String s : BibtexEntryType.getAllTypes()) { - entryTypes.add(s); - } + for (String s : BibtexEntryType.getAllTypes()) { + entryTypes.add(s); + } typeComp = new EntryTypeList(entryTypes); typeComp.addListSelectionListener(this); @@ -114,7 +116,7 @@ private void initGui() { right.add(new JPanel()); right.add(optComp2); } - + //right.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Globals.lang("Fields"))); right.setBorder(BorderFactory.createEtchedBorder()); ok = new JButton("Ok"); @@ -177,38 +179,18 @@ public void valueChanged(ListSelectionEvent e) { } List rl = reqLists.get(s); if (rl == null) { - BibtexEntryType type = BibtexEntryType.getType(s); + BibtexEntryType type = BibtexEntryType.getType(s); if (type != null) { - String[] rf = type.getRequiredFieldsForCustomization(); - List req; - if (rf != null) { - req = java.util.Arrays.asList(rf); - } else { - req = new ArrayList(); - } + List req = type.getRequiredFieldsForCustomization(); List opt; if (!biblatexMode) { - String[] of = type.getOptionalFields(); - if (of != null) { - opt = java.util.Arrays.asList(of); - } else { - opt = new ArrayList(); - } + opt = type.getOptionalFields(); } else { - String[] priOf = type.getPrimaryOptionalFields(); - if (priOf != null) { - opt = java.util.Arrays.asList(priOf); - } else { - opt = new ArrayList(); - } - String[] secOpt = type.getSecondaryOptionalFields(); - List opt2; - if (secOpt != null) { - opt2 = java.util.Arrays.asList(secOpt); - } else { - opt2 = new ArrayList(); - } + opt = type.getPrimaryOptionalFields(); + + List opt2 = type.getSecondaryOptionalFields(); + optComp2.setFields(opt2); optComp2.setEnabled(true); } @@ -222,8 +204,7 @@ public void valueChanged(ListSelectionEvent e) { reqComp.setEnabled(true); optComp.setFields(new ArrayList()); optComp.setEnabled(true); - if (biblatexMode) - { + if (biblatexMode) { optComp2.setFields(new ArrayList()); optComp2.setEnabled(true); } @@ -281,11 +262,11 @@ private void applyChanges() { BibtexEntryType oldType = BibtexEntryType.getType(stringListEntry.getKey()); if (oldType != null) { - String[] oldReq = oldType.getRequiredFields(); - String[] oldOpt = oldType.getOptionalFields(); + String[] oldReq = oldType.getRequiredFields().toArray(new String[0]); + String[] oldOpt = oldType.getOptionalFields().toArray(new String[0]); if (biblatexMode) { - String[] oldPriOpt = oldType.getPrimaryOptionalFields(); - String[] oldSecOpt = oldType.getSecondaryOptionalFields(); + String[] oldPriOpt = oldType.getPrimaryOptionalFields().toArray(new String[0]); + String[] oldSecOpt = oldType.getSecondaryOptionalFields().toArray(new String[0]); if (equalArrays(oldReq, reqStr) && equalArrays(oldPriOpt, optStr) && equalArrays(oldSecOpt, opt2Str)) { changesMade = false; @@ -354,16 +335,13 @@ private void typeDeletion(String name) { } private boolean equalArrays(String[] one, String[] two) { - if ((one == null) && (two == null)) - { + if ((one == null) && (two == null)) { return true; // Both null. } - if ((one == null) || (two == null)) - { + if ((one == null) || (two == null)) { return false; // One of them null, the other not. } - if (one.length != two.length) - { + if (one.length != two.length) { return false; // Different length. } // If we get here, we know that both are non-null, and that they have the same length. @@ -438,36 +416,19 @@ public void actionPerformed(ActionEvent e) { BibtexEntryType type = BibtexEntryType.getStandardType(lastSelected); if (type != null) { - String[] rf = type.getRequiredFieldsForCustomization(); - String[] of = type.getOptionalFields(); - List req; - List opt1; - List opt2; - if (rf != null) { - req = java.util.Arrays.asList(rf); - } else { - req = new ArrayList(); - } + List of = type.getOptionalFields(); + List req = type.getRequiredFieldsForCustomization();; + List opt1 = new ArrayList<>(); + List opt2 = new ArrayList<>();; - opt1 = new ArrayList(); - opt2 = new ArrayList(); if (biblatexMode) { - if (of != null) - { - String[] priOptArray = type.getPrimaryOptionalFields(); - String[] secOptArray = type.getSecondaryOptionalFields(); - if (priOptArray != null) { - opt1 = java.util.Arrays.asList(priOptArray); - } - if (secOptArray != null) { - opt2 = java.util.Arrays.asList(secOptArray); - } + if (of.size() != 0) { + opt1 = type.getPrimaryOptionalFields(); + opt2 = type.getSecondaryOptionalFields(); } - } - else - { - if (of != null) { - opt1 = java.util.Arrays.asList(of); + } else { + if (of.size() != 0) { + opt1 = of; } } diff --git a/src/main/java/net/sf/jabref/gui/entryeditor/EntryEditor.java b/src/main/java/net/sf/jabref/gui/entryeditor/EntryEditor.java index ef14dee4ad6..98449969552 100644 --- a/src/main/java/net/sf/jabref/gui/entryeditor/EntryEditor.java +++ b/src/main/java/net/sf/jabref/gui/entryeditor/EntryEditor.java @@ -208,12 +208,8 @@ public EntryEditor(JabRefFrame frame, BasePanel panel, BibtexEntry entry) { private void setupFieldPanels() { tabbed.removeAll(); tabs.clear(); - String[] fields = entry.getRequiredFields(); + List fieldList = entry.getRequiredFields(); - List fieldList = null; - if (fields != null) { - fieldList = java.util.Arrays.asList(fields); - } EntryEditorTab reqPan = new EntryEditorTab(frame, panel, fieldList, this, true, false, Localization.lang("Required fields")); if (reqPan.fileListEditor != null) { fileListEditor = reqPan.fileListEditor; @@ -222,10 +218,10 @@ private void setupFieldPanels() { .getPane(), Localization.lang("Show required fields")); tabs.add(reqPan); - if (entry.getOptionalFields() != null && entry.getOptionalFields().length >= 1) { + if (entry.getOptionalFields() != null && entry.getOptionalFields().size() >= 1) { EntryEditorTab optPan; if (!prefs.getBoolean(JabRefPreferences.BIBLATEX_MODE)) { - optPan = new EntryEditorTab(frame, panel, java.util.Arrays.asList(entry.getOptionalFields()), this, + optPan = new EntryEditorTab(frame, panel, entry.getOptionalFields(), this, false, false, Localization.lang("Optional fields")); if (optPan.fileListEditor != null) { fileListEditor = optPan.fileListEditor; @@ -235,7 +231,7 @@ private void setupFieldPanels() { tabs.add(optPan); } else { optPan = new EntryEditorTab(frame, panel, - java.util.Arrays.asList(entry.getType().getPrimaryOptionalFields()), this, + entry.getType().getPrimaryOptionalFields(), this, false, true, Localization.lang("Optional fields")); if (optPan.fileListEditor != null) { fileListEditor = optPan.fileListEditor; @@ -247,8 +243,8 @@ private void setupFieldPanels() { Set deprecatedFields = new HashSet<>(BibtexEntry.FIELD_ALIASES_OLD_TO_NEW.keySet()); deprecatedFields.add("year"); deprecatedFields.add("month"); - String[] secondaryOptionalFields = entry.getType().getSecondaryOptionalFields(); - String[] optionalFieldsNotPrimaryOrDeprecated = StringUtil.getRemainder(secondaryOptionalFields, + List secondaryOptionalFields = entry.getType().getSecondaryOptionalFields(); + String[] optionalFieldsNotPrimaryOrDeprecated = StringUtil.getRemainder((secondaryOptionalFields.toArray(new String[0])), deprecatedFields.toArray(new String[deprecatedFields.size()])); // Get list of all optional fields of this entry and their aliases diff --git a/src/main/java/net/sf/jabref/logic/bibtex/BibtexEntryWriter.java b/src/main/java/net/sf/jabref/logic/bibtex/BibtexEntryWriter.java index 6ae79207c8b..7e488b1ee14 100644 --- a/src/main/java/net/sf/jabref/logic/bibtex/BibtexEntryWriter.java +++ b/src/main/java/net/sf/jabref/logic/bibtex/BibtexEntryWriter.java @@ -156,7 +156,7 @@ private String[] getRequiredFieldsSorted(BibtexEntry entry) { // put into chache if necessary if (sortedFields == null) { - sortedFields = entry.getRequiredFields().clone(); + sortedFields = entry.getRequiredFields().stream().toArray(size -> new String[size]); Arrays.sort(sortedFields); requiredFieldsSorted.put(entryTypeName, sortedFields); } @@ -170,7 +170,7 @@ private String[] getOptionalFieldsSorted(BibtexEntry entry) { // put into chache if necessary if (sortedFields == null) { - sortedFields = entry.getOptionalFields().clone(); + sortedFields = entry.getOptionalFields().stream().toArray(size -> new String[size]); Arrays.sort(sortedFields); optionalFieldsSorted.put(entryTypeName, sortedFields); } @@ -195,7 +195,7 @@ private void writeRequiredFieldsFirstRemainingFieldsSecond(BibtexEntry entry, Wr written.add(BibtexEntry.KEY_FIELD); boolean hasWritten = false; // Write required fields first. - String[] fields = entry.getRequiredFields(); + List fields = entry.getRequiredFields(); if (fields != null) { for (String value : fields) { hasWritten = hasWritten | writeField(entry, out, value, hasWritten); diff --git a/src/main/java/net/sf/jabref/logic/bibtex/DuplicateCheck.java b/src/main/java/net/sf/jabref/logic/bibtex/DuplicateCheck.java index 65c68ddffe5..864f0469cbe 100644 --- a/src/main/java/net/sf/jabref/logic/bibtex/DuplicateCheck.java +++ b/src/main/java/net/sf/jabref/logic/bibtex/DuplicateCheck.java @@ -70,7 +70,7 @@ public static boolean isDuplicate(BibtexEntry one, BibtexEntry two) { } // The check if they have the same required fields: - String[] fields = one.getType().getRequiredFields(); + String[] fields = one.getType().getRequiredFields().toArray(new String[0]); double[] req; if (fields == null) { req = new double[]{0., 0.}; @@ -83,7 +83,7 @@ public static boolean isDuplicate(BibtexEntry one, BibtexEntry two) { return req[0] >= DuplicateCheck.duplicateThreshold; } else { // Close to the threshold value, so we take a look at the optional fields, if any: - fields = one.getType().getOptionalFields(); + fields = one.getType().getOptionalFields().toArray(new String[0]); if (fields != null) { double[] opt = DuplicateCheck.compareFieldSet(fields, one, two); double totValue = (DuplicateCheck.reqWeight * req[0] * req[1] + opt[0] * opt[1]) / (req[1] * DuplicateCheck.reqWeight + opt[1]); diff --git a/src/main/java/net/sf/jabref/model/entry/BibLatexEntryTypes.java b/src/main/java/net/sf/jabref/model/entry/BibLatexEntryTypes.java index f1803fd9de2..8a321a20e38 100644 --- a/src/main/java/net/sf/jabref/model/entry/BibLatexEntryTypes.java +++ b/src/main/java/net/sf/jabref/model/entry/BibLatexEntryTypes.java @@ -17,6 +17,10 @@ import net.sf.jabref.model.database.BibtexDatabase; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + /** * This class defines entry types for BibLatex support. */ @@ -29,35 +33,32 @@ class BibLatexEntryTypes { "issuetitle", "issuesubtitle", "origlanguage", "version", "addendum" */ - - public static final BibtexEntryType ARTICLE = new BibtexEntryType() { - @Override - public String getName() { - return "Article"; - } + public static final BibtexEntryType ARTICLE = new BibtexEntryType() { - @Override - public String[] getRequiredFields() { - return new String[] {"author", "title", "journaltitle", "date"}; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"subtitle", + "editor", "series", "volume", "number", "eid", "issue", "pages", "note", "issn", + "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"})); - @Override - public String[] getOptionalFields() { - return new String[] {"translator", "annotator", "commentator", "subtitle", "titleaddon", + { + addAllOptional("translator", "annotator", "commentator", "subtitle", "titleaddon", "editor", "editora", "editorb", "editorc", "journalsubtitle", "issuetitle", "issuesubtitle", "language", "origlanguage", "series", "volume", "number", "eid", "issue", "month", "year", "pages", "version", "note", "issn", "addendum", "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url", - "urldate"}; + "urldate"); + addAllRequired("author", "title", "journaltitle", "date"); + } + + @Override + public String getName() { + return "Article"; } // TODO: number vs issue? @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"subtitle", "editor", "series", "volume", "number", - "eid", "issue", "pages", "note", "issn", - "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"}; + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -68,32 +69,30 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType BOOK = new BibtexEntryType() { - @Override - public String getName() { - return "Book"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"editor", + "subtitle", "titleaddon", "maintitle", "mainsubtitle", "maintitleaddon", "volume", "edition", + "publisher", "isbn", "chapter", "pages", "pagetotal", "doi", "eprint", "eprintclass", "eprinttype", + "url", "urldate"})); - @Override - public String[] getRequiredFields() { - return new String[] {"author", "title", "date"}; - } - - @Override - public String[] getOptionalFields() { - return new String[] {"editor", "editora", "editorb", "editorc", "translator", + { + addAllOptional("editor", "editora", "editorb", "editorc", "translator", "annotator", "commentator", "introduction", "foreword", "afterword", "subtitle", "titleaddon", "maintitle", "mainsubtitle", "maintitleaddon", "language", "origlanguage", "volume", "part", "edition", "volumes", "series", "number", "month", "year", "note", "publisher", "location", "isbn", "chapter", "pages", "pagetotal", "addendum", "pubstate", - "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"}; + "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"); + addAllRequired("author", "title", "date"); } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"editor", "subtitle", "titleaddon", "maintitle", "mainsubtitle", - "maintitleaddon", "volume", "edition", "publisher", "isbn", "chapter", "pages", - "pagetotal", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"}; + public String getName() { + return "Book"; + } + + @Override + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -104,33 +103,31 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType INBOOK = new BibtexEntryType() { - @Override - public String getName() { - return "InBook"; - } - - @Override - public String[] getRequiredFields() { - return new String[] {"author", "title", "booktitle", "date"}; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{ + "bookauthor", "editor", "subtitle", "titleaddon", "maintitle", + "mainsubtitle", "maintitleaddon", "booksubtitle", "booktitleaddon", "volume", + "edition", "publisher", "isbn", "chapter", "pages", "doi", "eprint", "eprintclass", + "eprinttype", "url", "urldate"})); - @Override - public String[] getOptionalFields() { - return new String[] {"bookauthor", "editor", "editora", "editorb", "editorc", + { + addAllOptional("bookauthor", "editor", "editora", "editorb", "editorc", "translator", "annotator", "commentator", "introduction", "foreword", "afterword", "subtitle", "titleaddon", "maintitle", "mainsubtitle", "maintitleaddon", "booksubtitle", "booktitleaddon", "language", "origlanguage", "volume", "part", "edition", "volumes", "series", "number", "note", "publisher", "location", "isbn", "chapter", "pages", "addendum", "pubstate", "doi", "eprint", "eprintclass", - "eprinttype", "url", "urldate", "year"}; + "eprinttype", "url", "urldate", "year"); + addAllRequired("author", "title", "booktitle", "date"); } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"bookauthor", "editor", "subtitle", "titleaddon", "maintitle", - "mainsubtitle", "maintitleaddon", "booksubtitle", "booktitleaddon", "volume", - "edition", "publisher", "isbn", "chapter", "pages", "doi", "eprint", "eprintclass", - "eprinttype", "url", "urldate"}; + public String getName() { + return "InBook"; + } + + @Override + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -148,17 +145,17 @@ public String getName() { // Same fields as "INBOOK" according to Biblatex 1.0: @Override - public String[] getRequiredFields() { + public List getRequiredFields() { return BibLatexEntryTypes.INBOOK.getRequiredFields(); } @Override - public String[] getOptionalFields() { + public List getOptionalFields() { return BibLatexEntryTypes.INBOOK.getOptionalFields(); } @Override - public String[] getPrimaryOptionalFields() { + public List getPrimaryOptionalFields() { return BibLatexEntryTypes.INBOOK.getPrimaryOptionalFields(); } @@ -177,17 +174,17 @@ public String getName() { // Same fields as "INBOOK" according to Biblatex 1.0: @Override - public String[] getRequiredFields() { + public List getRequiredFields() { return BibLatexEntryTypes.INBOOK.getRequiredFields(); } @Override - public String[] getOptionalFields() { + public List getOptionalFields() { return BibLatexEntryTypes.INBOOK.getOptionalFields(); } @Override - public String[] getPrimaryOptionalFields() { + public List getPrimaryOptionalFields() { return BibLatexEntryTypes.INBOOK.getPrimaryOptionalFields(); } @@ -199,27 +196,25 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType BOOKLET = new BibtexEntryType() { - @Override - public String getName() { - return "Booklet"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"subtitle", + "titleaddon", "howpublished", "chapter", "pages", "doi", "eprint", + "eprintclass", "eprinttype", "url", "urldate"})); - @Override - public String[] getRequiredFields() { - return new String[] {"author", "editor", "title", "date"}; + { + addAllRequired("author", "editor", "title", "date"); + addAllOptional("subtitle", "titleaddon", "language", "howpublished", "type", "note", + "location", "chapter", "year", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", + "eprintclass", "eprinttype", "url", "urldate"); } @Override - public String[] getOptionalFields() { - return new String[] {"subtitle", "titleaddon", "language", "howpublished", "type", "note", - "location", "chapter", "year", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", - "eprintclass", "eprinttype", "url", "urldate"}; + public String getName() { + return "Booklet"; } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"subtitle", "titleaddon", "howpublished", "chapter", "pages", "doi", "eprint", - "eprintclass", "eprinttype", "url", "urldate"}; + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -230,32 +225,30 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType COLLECTION = new BibtexEntryType() { - @Override - public String getName() { - return "Collection"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{ + "translator", "subtitle", "titleaddon", "maintitle", + "mainsubtitle", "maintitleaddon", "volume", + "edition", "publisher", "isbn", "chapter", "pages", "doi", "eprint", "eprintclass", + "eprinttype", "url", "urldate"})); - @Override - public String[] getRequiredFields() { - return new String[] {"editor", "title", "date"}; - } - - @Override - public String[] getOptionalFields() { - return new String[] {"editora", "editorb", "editorc", "translator", "annotator", + { + addAllRequired("editor", "title", "date"); + addAllOptional("editora", "editorb", "editorc", "translator", "annotator", "commentator", "introduction", "foreword", "afterword", "subtitle", "titleaddon", "maintitle", "mainsubtitle", "maintitleaddon", "language", "origlanguage", "volume", "part", "edition", "volumes", "series", "number", "note", "publisher", "location", "isbn", "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass", - "eprinttype", "url", "urldate", "year"}; + "eprinttype", "url", "urldate", "year"); + } + + @Override + public String getName() { + return "Collection"; } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"translator", "subtitle", "titleaddon", "maintitle", - "mainsubtitle", "maintitleaddon", "volume", - "edition", "publisher", "isbn", "chapter", "pages", "doi", "eprint", "eprintclass", - "eprinttype", "url", "urldate"}; + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -266,32 +259,30 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType INCOLLECTION = new BibtexEntryType() { - @Override - public String getName() { - return "InCollection"; - } - - @Override - public String[] getRequiredFields() { - return new String[] {"author", "editor", "title", "booktitle", "date"}; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{ + "translator", "subtitle", "titleaddon", "maintitle", + "mainsubtitle", "maintitleaddon", "booksubtitle", "booktitleaddon", "volume", + "edition", "publisher", "isbn", "chapter", "pages", "doi", "eprint", "eprintclass", + "eprinttype", "url", "urldate"})); - @Override - public String[] getOptionalFields() { - return new String[] {"editora", "editorb", "editorc", "translator", "annotator", + { + addAllRequired("author", "editor", "title", "booktitle", "date"); + addAllOptional("editora", "editorb", "editorc", "translator", "annotator", "commentator", "introduction", "foreword", "afterword", "subtitle", "titleaddon", "maintitle", "mainsubtitle", "maintitleaddon", "booksubtitle", "booktitleaddon", "language", "origlanguage", "volume", "part", "edition", "volumes", "series", "number", "note", "publisher", "location", "isbn", "chapter", "pages", "addendum", "pubstate", "doi", - "eprint", "eprintclass", "eprinttype", "url", "urldate", "year"}; + "eprint", "eprintclass", "eprinttype", "url", "urldate", "year"); } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"translator", "subtitle", "titleaddon", "maintitle", - "mainsubtitle", "maintitleaddon", "booksubtitle", "booktitleaddon", "volume", - "edition", "publisher", "isbn", "chapter", "pages", "doi", "eprint", "eprintclass", - "eprinttype", "url", "urldate"}; + public String getName() { + return "InCollection"; + } + + @Override + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -309,17 +300,17 @@ public String getName() { // Treated as alias of "INCOLLECTION" according to Biblatex 1.0: @Override - public String[] getRequiredFields() { + public List getRequiredFields() { return BibLatexEntryTypes.INCOLLECTION.getRequiredFields(); } @Override - public String[] getOptionalFields() { + public List getOptionalFields() { return BibLatexEntryTypes.INCOLLECTION.getOptionalFields(); } @Override - public String[] getPrimaryOptionalFields() { + public List getPrimaryOptionalFields() { return BibLatexEntryTypes.INCOLLECTION.getPrimaryOptionalFields(); } @@ -331,29 +322,27 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType MANUAL = new BibtexEntryType() { - @Override - public String getName() { - return "Manual"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"subtitle", + "titleaddon", "edition", "publisher", "isbn", "chapter", + "pages", "doi", "eprint", "eprintclass", + "eprinttype", "url", "urldate"})); - @Override - public String[] getRequiredFields() { - return new String[] {"author", "editor", "title", "date"}; + { + addAllRequired("author", "editor", "title", "date"); + addAllOptional("subtitle", "titleaddon", "language", "edition", "type", "series", + "number", "version", "note", "organization", "publisher", "location", "isbn", "chapter", + "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass", + "eprinttype", "url", "urldate", "year"); } @Override - public String[] getOptionalFields() { - return new String[] {"subtitle", "titleaddon", "language", "edition", "type", "series", - "number", "version", "note", "organization", "publisher", "location", "isbn", "chapter", - "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass", - "eprinttype", "url", "urldate", "year"}; + public String getName() { + return "Manual"; } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"subtitle", "titleaddon", "edition", "publisher", "isbn", "chapter", - "pages", "doi", "eprint", "eprintclass", - "eprinttype", "url", "urldate"}; + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -364,27 +353,25 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType MISC = new BibtexEntryType() { - @Override - public String getName() { - return "Misc"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"subtitle", + "titleaddon", "howpublished", "location", "doi", "eprint", "eprintclass", + "eprinttype", "url", "urldate"})); - @Override - public String[] getRequiredFields() { - return new String[] {"author", "editor", "title", "date"}; + { + addAllRequired("author", "editor", "title", "date"); + addAllOptional("subtitle", "titleaddon", "language", "howpublished", "type", + "version", "note", "organization", "location", "month", "year", "addendum", + "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"); } @Override - public String[] getOptionalFields() { - return new String[] {"subtitle", "titleaddon", "language", "howpublished", "type", - "version", "note", "organization", "location", "month", "year", "addendum", - "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"}; + public String getName() { + return "Misc"; } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"subtitle", "titleaddon", "howpublished", "location", "doi", "eprint", "eprintclass", - "eprinttype", "url", "urldate"}; + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -395,25 +382,24 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType ONLINE = new BibtexEntryType() { - @Override - public String getName() { - return "Online"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"subtitle", + "titleaddon", "note", "organization", "urldate"})); - @Override - public String[] getRequiredFields() { - return new String[] {"author", "editor", "title", "date", "url"}; + { + addAllRequired("author", "editor", "title", "date", "url"); + addAllOptional("subtitle", "titleaddon", "language", "version", "note", + "organization", "month", "year", "addendum", "pubstate", "urldate"); } + @Override - public String[] getOptionalFields() { - return new String[] {"subtitle", "titleaddon", "language", "version", "note", - "organization", "month", "year", "addendum", "pubstate", "urldate"}; + public String getName() { + return "Online"; } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"subtitle", "titleaddon", "note", "organization", "urldate"}; + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -424,27 +410,24 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType PATENT = new BibtexEntryType() { - @Override - public String getName() { - return "Patent"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"holder", + "subtitle", "titleaddon", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"})); - @Override - public String[] getRequiredFields() { - return new String[] {"author", "title", "number", "date"}; + { + addAllRequired("author", "title", "number", "date"); + addAllOptional("holder", "subtitle", "titleaddon", "type", "version", "location", "note", + "month", "year", "addendum", "pubstate", "doi", "eprint", "eprintclass", + "eprinttype", "url", "urldate"); } @Override - public String[] getOptionalFields() { - return new String[] {"holder", "subtitle", "titleaddon", "type", "version", "location", "note", - "month", "year", "addendum", "pubstate", "doi", "eprint", "eprintclass", - "eprinttype", "url", "urldate"}; + public String getName() { + return "Patent"; } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"holder", "subtitle", "titleaddon", "doi", "eprint", "eprintclass", - "eprinttype", "url", "urldate"}; + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -455,28 +438,26 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType PERIODICAL = new BibtexEntryType() { - @Override - public String getName() { - return "Periodical"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"subtitle", + "issuetitle", "issuesubtitle", "issn", "doi", "eprint", "eprintclass", + "eprinttype", "url", "urldate"})); - @Override - public String[] getRequiredFields() { - return new String[] {"editor", "title", "date"}; + { + addAllRequired("editor", "title", "date"); + addAllOptional("editora", "editorb", "editorc", "subtitle", "issuetitle", + "issuesubtitle", "language", "series", "volume", "number", "issue", "month", "year", + "note", "issn", "addendum", "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url", + "urldate"); } @Override - public String[] getOptionalFields() { - return new String[] {"editora", "editorb", "editorc", "subtitle", "issuetitle", - "issuesubtitle", "language", "series", "volume", "number", "issue", "month", "year", - "note", "issn", "addendum", "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url", - "urldate"}; + public String getName() { + return "Periodical"; } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"subtitle", "issuetitle", "issuesubtitle", "issn", "doi", "eprint", "eprintclass", - "eprinttype", "url", "urldate"}; + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -494,17 +475,17 @@ public String getName() { // Treated as alias of "ARTICLE" according to Biblatex 1.0: @Override - public String[] getRequiredFields() { + public List getRequiredFields() { return BibLatexEntryTypes.ARTICLE.getRequiredFields(); } @Override - public String[] getOptionalFields() { + public List getOptionalFields() { return BibLatexEntryTypes.ARTICLE.getOptionalFields(); } @Override - public String[] getPrimaryOptionalFields() { + public List getPrimaryOptionalFields() { return BibLatexEntryTypes.ARTICLE.getPrimaryOptionalFields(); } @@ -516,30 +497,28 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType PROCEEDINGS = new BibtexEntryType() { - @Override - public String getName() { - return "Proceedings"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"subtitle", + "titleaddon", "maintitle", "mainsubtitle", + "maintitleaddon", "eventtitle", "volume", "publisher", "isbn", "chapter", "pages", + "pagetotal", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"})); - @Override - public String[] getRequiredFields() { - return new String[] {"editor", "title", "date"}; - } - - @Override - public String[] getOptionalFields() { - return new String[] {"subtitle", "titleaddon", "maintitle", "mainsubtitle", + { + addAllRequired("editor", "title", "date"); + addAllOptional("subtitle", "titleaddon", "maintitle", "mainsubtitle", "maintitleaddon", "eventtitle", "eventdate", "venue", "language", "volume", "part", "volumes", "series", "number", "note", "organization", "publisher", "location", "month", "year", "isbn", "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", - "eprintclass", "eprinttype", "url", "urldate"}; + "eprintclass", "eprinttype", "url", "urldate"); } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"subtitle", "titleaddon", "maintitle", "mainsubtitle", - "maintitleaddon", "eventtitle", "volume", "publisher", "isbn", "chapter", "pages", - "pagetotal", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"}; + public String getName() { + return "Proceedings"; + } + + @Override + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -550,31 +529,29 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType INPROCEEDINGS = new BibtexEntryType() { - @Override - public String getName() { - return "InProceedings"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"subtitle", + "titleaddon", "maintitle", "mainsubtitle", + "maintitleaddon", "booksubtitle", "booktitleaddon", "eventtitle", "volume", + "publisher", "isbn", "chapter", "pages", + "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"})); - @Override - public String[] getRequiredFields() { - return new String[] {"author", "editor", "title", "booktitle", "date"}; - } - - @Override - public String[] getOptionalFields() { - return new String[] {"subtitle", "titleaddon", "maintitle", "mainsubtitle", + { + addAllRequired("author", "editor", "title", "booktitle", "date"); + addAllOptional("subtitle", "titleaddon", "maintitle", "mainsubtitle", "maintitleaddon", "booksubtitle", "booktitleaddon", "eventtitle", "eventdate", "venue", "language", "volume", "part", "volumes", "series", "number", "note", "organization", "publisher", "location", "month", "year", "isbn", "chapter", "pages", "addendum", - "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"}; + "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"); } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"subtitle", "titleaddon", "maintitle", "mainsubtitle", - "maintitleaddon", "booksubtitle", "booktitleaddon", "eventtitle", "volume", - "publisher", "isbn", "chapter", "pages", - "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"}; + public String getName() { + return "InProceedings"; + } + + @Override + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -592,17 +569,17 @@ public String getName() { // Treated as alias of "COLLECTION" according to Biblatex 1.0: @Override - public String[] getRequiredFields() { + public List getRequiredFields() { return BibLatexEntryTypes.COLLECTION.getRequiredFields(); } @Override - public String[] getOptionalFields() { + public List getOptionalFields() { return BibLatexEntryTypes.COLLECTION.getOptionalFields(); } @Override - public String[] getPrimaryOptionalFields() { + public List getPrimaryOptionalFields() { return BibLatexEntryTypes.COLLECTION.getPrimaryOptionalFields(); } @@ -621,17 +598,17 @@ public String getName() { // Treated as alias of "INCOLLECTION" according to Biblatex 1.0: @Override - public String[] getRequiredFields() { + public List getRequiredFields() { return BibLatexEntryTypes.INCOLLECTION.getRequiredFields(); } @Override - public String[] getOptionalFields() { + public List getOptionalFields() { return BibLatexEntryTypes.INCOLLECTION.getOptionalFields(); } @Override - public String[] getPrimaryOptionalFields() { + public List getPrimaryOptionalFields() { return BibLatexEntryTypes.INCOLLECTION.getPrimaryOptionalFields(); } @@ -643,27 +620,25 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType REPORT = new BibtexEntryType() { - @Override - public String getName() { - return "Report"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"subtitle", + "titleaddon", "number", "isrn", "chapter", "pages", "pagetotal", "doi", + "eprint", "eprintclass", "eprinttype", "url", "urldate"})); - @Override - public String[] getRequiredFields() { - return new String[] {"author", "title", "type", "institution", "date"}; + { + addAllRequired("author", "title", "type", "institution", "date"); + addAllOptional("subtitle", "titleaddon", "language", "number", "version", "note", + "location", "month", "year", "isrn", "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", + "eprint", "eprintclass", "eprinttype", "url", "urldate"); } @Override - public String[] getOptionalFields() { - return new String[] {"subtitle", "titleaddon", "language", "number", "version", "note", - "location", "month", "year", "isrn", "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", - "eprint", "eprintclass", "eprinttype", "url", "urldate"}; + public String getName() { + return "Report"; } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"subtitle", "titleaddon", "number", "isrn", "chapter", "pages", "pagetotal", "doi", - "eprint", "eprintclass", "eprinttype", "url", "urldate"}; + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -674,54 +649,13 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType SET = new BibtexEntryType() { - @Override - public String getName() { - return "Set"; - } - - @Override - public String[] getRequiredFields() { - return new String[] {"entryset", "crossref"}; - } - - // These are all the standard entry fields, custom fields and field aliases not included: - /* Optional fields left out since they take up too much space - I think the set type is mainly supposed - to fall back on content from the entries contained in the set, so only the required fields are included.*/ - @Override - public String[] getOptionalFields() { - return null; - /*return new String[] {"abstract", "addendum", "afterword", "annotation", "annotator", "author", "authortype", - "bookauthor", "bookpagination", "booksubtitle", "booktitle", "booktitleaddon", - "chapter", "commentator", "date", "doi", "edition", "editor", "editora", "editorb", - "editorc", "editortype", "editoratype", "editorbtype", "editorctype", "eid", "eprint", - "eprintclass", "eprinttype", "eventdate", "eventtitle", "file", "foreword", "holder", - "howpublished", "indextitle", "insitution", "introduction", "isan", "isbn", "ismn", - "isrn", "issn", "issue", "issuesubtitle", "issuetitle", "iswc", "journalsubtitle", - "journaltitle", "label", "language", "library", "location", "mainsubtitle", - "maintitle", "maintitleaddon", "month", "nameaddon", "note", "number", "organization", - "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "pages", - "pagetotal", "pagination", "part", "publisher", "pubstate", "reprinttitle", "series", - "shortauthor", "shorteditor", "shorthand", "shorthandintro", "shortjournal", - "shortseries", "shorttitle", "subtitle", "title", "titleaddon", "translator", "type", - "url", "urldate", "venue", "version", "volume", "volumes", "year", "crossref", - "entryset", "entrysubtype", "execute", "gender", "hyphenation", "indexsorttitle", - "keywords", "options", "presort", "sortkey", "sortname", "sorttitle", "sortyear", - "xref"};*/ + { + addAllRequired("entryset", "crossref"); } - // These are just appr. the first half of the above fields: @Override - public String[] getPrimaryOptionalFields() { - return null; - /*return new String[] {"abstract", "addendum", "afterword", "annotation", "annotator", "author", "authortype", - "bookauthor", "bookpagination", "booksubtitle", "booktitle", "booktitleaddon", - "chapter", "commentator", "date", "doi", "edition", "editor", "editora", "editorb", - "editorc", "editortype", "editoratype", "editorbtype", "editorctype", "eid", "eprint", - "eprintclass", "eprinttype", "eventdate", "eventtitle", "file", "foreword", "holder", - "howpublished", "indextitle", "insitution", "introduction", "isan", "isbn", "ismn", - "isrn", "issn", "issue", "issuesubtitle", "issuetitle", "iswc", "journalsubtitle", - "journaltitle", "label", "language", "library", "location", "mainsubtitle", - "maintitle", "maintitleaddon", "month", "nameaddon"};*/ + public String getName() { + return "Set"; } @Override @@ -732,27 +666,25 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType THESIS = new BibtexEntryType() { - @Override - public String getName() { - return "Thesis"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"subtitle", + "titleaddon", "chapter", "pages", "pagetotal", "doi", "eprint", + "eprintclass", "eprinttype", "url", "urldate"})); - @Override - public String[] getRequiredFields() { - return new String[] {"author", "title", "type", "institution", "date"}; + { + addAllRequired("author", "title", "type", "institution", "date"); + addAllOptional("subtitle", "titleaddon", "language", "note", "location", "month", "year", + "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass", + "eprinttype", "url", "urldate"); } @Override - public String[] getOptionalFields() { - return new String[] {"subtitle", "titleaddon", "language", "note", "location", "month", "year", - "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass", - "eprinttype", "url", "urldate"}; + public String getName() { + return "Thesis"; } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"subtitle", "titleaddon", "chapter", "pages", "pagetotal", "doi", "eprint", - "eprintclass", "eprinttype", "url", "urldate"}; + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -763,25 +695,23 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType UNPUBLISHED = new BibtexEntryType() { - @Override - public String getName() { - return "Unpublished"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"subtitle", + "titleaddon", "howpublished", "pubstate", "url", "urldate"})); - @Override - public String[] getRequiredFields() { - return new String[] {"author", "title", "date"}; + { + addAllRequired("author", "title", "date"); + addAllOptional("subtitle", "titleaddon", "language", "howpublished", "note", + "location", "month", "year", "addendum", "pubstate", "url", "urldate"); } @Override - public String[] getOptionalFields() { - return new String[] {"subtitle", "titleaddon", "language", "howpublished", "note", - "location", "month", "year", "addendum", "pubstate", "url", "urldate"}; + public String getName() { + return "Unpublished"; } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"subtitle", "titleaddon", "howpublished", "pubstate", "url", "urldate"}; + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -801,17 +731,17 @@ public String getName() { // Treated as alias of "INPROCEEDINGS" according to Biblatex 1.0: @Override - public String[] getRequiredFields() { + public List getRequiredFields() { return BibLatexEntryTypes.INPROCEEDINGS.getRequiredFields(); } @Override - public String[] getOptionalFields() { + public List getOptionalFields() { return BibLatexEntryTypes.INPROCEEDINGS.getOptionalFields(); } @Override - public String[] getPrimaryOptionalFields() { + public List getPrimaryOptionalFields() { return BibLatexEntryTypes.INPROCEEDINGS.getPrimaryOptionalFields(); } @@ -830,17 +760,17 @@ public String getName() { // Treated as alias of "ONLINE" according to Biblatex 1.0: @Override - public String[] getRequiredFields() { + public List getRequiredFields() { return BibLatexEntryTypes.ONLINE.getRequiredFields(); } @Override - public String[] getOptionalFields() { + public List getOptionalFields() { return BibLatexEntryTypes.ONLINE.getOptionalFields(); } @Override - public String[] getPrimaryOptionalFields() { + public List getPrimaryOptionalFields() { return BibLatexEntryTypes.ONLINE.getPrimaryOptionalFields(); } @@ -852,28 +782,27 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType MASTERSTHESIS = new BibtexEntryType() { - @Override - public String getName() { - return "MastersThesis"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"subtitle", + "titleaddon", "type", "chapter", "pages", "pagetotal", "doi", "eprint", + "eprintclass", "eprinttype", "url", "urldate"})); - // Treated as alias of "THESIS", except "type" field is optional - @Override - public String[] getRequiredFields() { - return new String[] {"author", "title", "institution", "date"}; + { + // Treated as alias of "THESIS", except "type" field is optional + addAllRequired("author", "title", "institution", "date"); + addAllOptional("subtitle", "titleaddon", "type", "language", "note", "location", "month", "year", + "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass", + "eprinttype", "url", "urldate"); } @Override - public String[] getOptionalFields() { - return new String[] {"subtitle", "titleaddon", "type", "language", "note", "location", "month", "year", - "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass", - "eprinttype", "url", "urldate"}; + public String getName() { + return "MastersThesis"; } + @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"subtitle", "titleaddon", "type", "chapter", "pages", "pagetotal", "doi", "eprint", - "eprintclass", "eprinttype", "url", "urldate"}; + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -884,28 +813,26 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType PHDTHESIS = new BibtexEntryType() { - @Override - public String getName() { - return "PhdThesis"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"subtitle", + "titleaddon", "type", "chapter", "pages", "pagetotal", "doi", "eprint", + "eprintclass", "eprinttype", "url", "urldate"})); - // Treated as alias of "THESIS", except "type" field is optional - @Override - public String[] getRequiredFields() { - return new String[] {"author", "title", "institution", "date"}; + { + // Treated as alias of "THESIS", except "type" field is optional + addAllRequired("author", "title", "institution", "date"); + addAllOptional("subtitle", "titleaddon", "type", "language", "note", "location", "month", "year", + "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass", + "eprinttype", "url", "urldate"); } @Override - public String[] getOptionalFields() { - return new String[] {"subtitle", "titleaddon", "type", "language", "note", "location", "month", "year", - "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass", - "eprinttype", "url", "urldate"}; + public String getName() { + return "PhdThesis"; } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"subtitle", "titleaddon", "type", "chapter", "pages", "pagetotal", "doi", "eprint", - "eprintclass", "eprinttype", "url", "urldate"}; + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -916,28 +843,26 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType TECHREPORT = new BibtexEntryType() { - @Override - public String getName() { - return "TechReport"; - } + private List primaryOptionalFields = Collections.unmodifiableList(Arrays.asList(new String[]{"subtitle", + "titleaddon", "type", "number", "isrn", "chapter", "pages", "pagetotal", + "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"})); - // Treated as alias of "REPORT", except "type" field is optional - @Override - public String[] getRequiredFields() { - return new String[] {"author", "title", "institution", "date"}; + { + // Treated as alias of "REPORT", except "type" field is optional + addAllRequired("author", "title", "institution", "date"); + addAllOptional("subtitle", "titleaddon", "type", "language", "number", "version", "note", + "location", "month", "year", "isrn", "chapter", "pages", "pagetotal", "addendum", "pubstate", + "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"); } @Override - public String[] getOptionalFields() { - return new String[] {"subtitle", "titleaddon", "type", "language", "number", "version", "note", - "location", "month", "year", "isrn", "chapter", "pages", "pagetotal", "addendum", "pubstate", - "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"}; + public String getName() { + return "TechReport"; } @Override - public String[] getPrimaryOptionalFields() { - return new String[] {"subtitle", "titleaddon", "type", "number", "isrn", "chapter", "pages", "pagetotal", - "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"}; + public List getPrimaryOptionalFields() { + return primaryOptionalFields; } @Override @@ -955,17 +880,17 @@ public String getName() { // Treated as alias of "ONLINE" according to Biblatex 1.0: @Override - public String[] getRequiredFields() { + public List getRequiredFields() { return BibLatexEntryTypes.ONLINE.getRequiredFields(); } @Override - public String[] getOptionalFields() { + public List getOptionalFields() { return BibLatexEntryTypes.ONLINE.getOptionalFields(); } @Override - public String[] getPrimaryOptionalFields() { + public List getPrimaryOptionalFields() { return BibLatexEntryTypes.ONLINE.getPrimaryOptionalFields(); } @@ -976,37 +901,25 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) }; /** - * This type is used for IEEEtran.bst to control various + * This type is used for IEEEtran.bst to control various * be repeated or not. Not a very elegant solution, but it works... */ public static final BibtexEntryType IEEETRANBSTCTL = new BibtexEntryType() { - @Override - public String getName() { - return "IEEEtranBSTCTL"; - } - - @Override - public String[] getOptionalFields() - { - return new String[] { - "ctluse_article_number", "ctluse_paper", "ctluse_forced_etal", + addAllOptional("ctluse_article_number", "ctluse_paper", "ctluse_forced_etal", "ctlmax_names_forced_etal", "ctlnames_show_etal", "ctluse_alt_spacing", "ctlalt_stretch_factor", "ctldash_repeated_names", "ctlname_format_string", - "ctlname_latex_cmd", "ctlname_url_prefix" - }; + "ctlname_latex_cmd", "ctlname_url_prefix"); } @Override - public String[] getRequiredFields() - { - return null; + public String getName() { + return "IEEEtranBSTCTL"; } @Override - public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) - { + public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) { return true; } }; diff --git a/src/main/java/net/sf/jabref/model/entry/BibtexEntry.java b/src/main/java/net/sf/jabref/model/entry/BibtexEntry.java index 1adc85cd05f..ea82147c300 100644 --- a/src/main/java/net/sf/jabref/model/entry/BibtexEntry.java +++ b/src/main/java/net/sf/jabref/model/entry/BibtexEntry.java @@ -118,14 +118,14 @@ public BibtexEntry(String id, BibtexEntryType type) { /** * @return An array describing the optional fields for this entry. "null" if no fields are required */ - public String[] getOptionalFields() { + public List getOptionalFields() { return type.getOptionalFields(); } /** * @return an array describing the required fields for this entry. "null" if no fields are required */ - public String[] getRequiredFields() { + public List getRequiredFields() { return type.getRequiredFields(); } @@ -436,6 +436,10 @@ boolean allFieldsPresent(String[] fields, BibtexDatabase database) { return true; } + boolean allFieldsPresent(List fields, BibtexDatabase database) { + return allFieldsPresent((String[]) fields.toArray(), database); + } + boolean atLeastOnePresent(String[] fields, BibtexDatabase database) { for (String field : fields) { String value = BibtexDatabase.getResolvedField(field, this, database); diff --git a/src/main/java/net/sf/jabref/model/entry/BibtexEntryType.java b/src/main/java/net/sf/jabref/model/entry/BibtexEntryType.java index a6a5be3ab0c..a8add2180e3 100644 --- a/src/main/java/net/sf/jabref/model/entry/BibtexEntryType.java +++ b/src/main/java/net/sf/jabref/model/entry/BibtexEntryType.java @@ -30,6 +30,7 @@ package net.sf.jabref.model.entry; import java.util.*; +import java.util.stream.Collectors; import net.sf.jabref.Globals; import net.sf.jabref.JabRefPreferences; @@ -108,28 +109,43 @@ public abstract class BibtexEntryType implements Comparable { STANDARD_TYPES = new TreeMap<>(ALL_TYPES); } + private List requiredFields = new ArrayList<>(); + + private List optionalFields = new ArrayList<>(); @Override public int compareTo(BibtexEntryType o) { return getName().compareTo(o.getName()); } - public abstract String[] getOptionalFields(); + public List getOptionalFields() { + return Collections.unmodifiableList(optionalFields); + } + + public List getRequiredFields() { + return Collections.unmodifiableList(requiredFields); + } - public abstract String[] getRequiredFields(); + void addAllOptional(String... fieldNames) { + optionalFields.addAll(Arrays.asList(fieldNames)); + } + + void addAllRequired(String... fieldNames) { + requiredFields.addAll(Arrays.asList(fieldNames)); + } - public String[] getPrimaryOptionalFields() { + public List getPrimaryOptionalFields() { return getOptionalFields(); } - public String[] getSecondaryOptionalFields() { - String[] optionalFields = getOptionalFields(); + public List getSecondaryOptionalFields() { + List optionalFields = getOptionalFields(); if (optionalFields == null) { - return new String[0]; + return new ArrayList<>(0); } - return Arrays.stream(optionalFields).filter(field -> !isPrimary(field)).toArray(String[]::new); + return optionalFields.stream().filter(field -> !isPrimary(field)).collect(Collectors.toList()); } public abstract boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database); @@ -139,7 +155,7 @@ public String[] getUtilityFields() { } public boolean isRequired(String field) { - String[] requiredFields = getRequiredFields(); + List requiredFields = getRequiredFields(); if (requiredFields == null) { return false; } @@ -152,7 +168,7 @@ public boolean isRequired(String field) { } public boolean isOptional(String field) { - String[] optionalFields = getOptionalFields(); + List optionalFields = getOptionalFields(); if (optionalFields == null) { return false; @@ -162,7 +178,7 @@ public boolean isOptional(String field) { } private boolean isPrimary(String field) { - String[] primaryFields = getPrimaryOptionalFields(); + List primaryFields = getPrimaryOptionalFields(); if (primaryFields == null) { return false; @@ -277,7 +293,7 @@ public static void saveCustomEntryTypes(JabRefPreferences prefs) { * * @return Array of the required fields in a form appropriate for the entry customization dialog. */ - public String[] getRequiredFieldsForCustomization() { + public List getRequiredFieldsForCustomization() { return getRequiredFields(); } } diff --git a/src/main/java/net/sf/jabref/model/entry/BibtexEntryTypes.java b/src/main/java/net/sf/jabref/model/entry/BibtexEntryTypes.java index 1c289ae6194..a2b21e34c62 100644 --- a/src/main/java/net/sf/jabref/model/entry/BibtexEntryTypes.java +++ b/src/main/java/net/sf/jabref/model/entry/BibtexEntryTypes.java @@ -2,6 +2,10 @@ import net.sf.jabref.model.database.BibtexDatabase; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + public class BibtexEntryTypes { // Get an entry type defined in BibtexEntryType public static BibtexEntryType getEntryType(String type) { @@ -22,16 +26,6 @@ public String getName() { return "Other"; } - @Override - public String[] getOptionalFields() { - return new String[0]; - } - - @Override - public String[] getRequiredFields() { - return new String[0]; - } - @Override public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) { return true; @@ -41,23 +35,14 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType ARTICLE = new BibtexEntryType() { - @Override - public String getName() { - return "Article"; - } - - @Override - public String[] getOptionalFields() { - return new String[]{ - "volume", "pages", "number", "month", "note", //- "volume", "pages", "part", "eid" - }; + { + addAllOptional("volume", "pages", "number", "month", "note"); //- "volume", "pages", "part", "eid" + addAllRequired("author", "title", "journal", "year"); //+ "volume", "pages" } @Override - public String[] getRequiredFields() { - return new String[]{ - "author", "title", "journal", "year" //+ "volume", "pages" - }; + public String getName() { + return "Article"; } @Override @@ -71,21 +56,13 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType BOOKLET = new BibtexEntryType() { - @Override - public String getName() { - return "Booklet"; - } - - @Override - public String[] getOptionalFields() { - return new String[]{ - "author", "howpublished", "address", "month", "year", "note" //+ "lastchecked" - }; + { + addAllOptional("author", "howpublished", "address", "month", "year", "note"); //+ "lastchecked" } @Override - public String[] getRequiredFields() { - return new String[]{"title"}; + public String getName() { + return "Booklet"; } @Override @@ -97,32 +74,23 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType INBOOK = new BibtexEntryType() { - @Override - public String getName() { - return "InBook"; - } + private List requiredFieldsForCustomization = Collections.unmodifiableList(Arrays.asList(new String[]{"author/editor", "title", "chapter/pages", "year", "publisher"})); - @Override - public String[] getOptionalFields() { - return new String[] - { - "volume", "number", "series", "type", "address", "edition", - "month", "note" //+ "pages" - }; + { + addAllOptional("volume", "number", "series", "type", "address", "edition", + "month", "note"); //+ "pages" + addAllRequired("chapter", "pages", "title", "publisher", "year", "editor", + "author"); } @Override - public String[] getRequiredFields() { - return new String[] - { - "chapter", "pages", "title", "publisher", "year", "editor", - "author" - }; + public String getName() { + return "InBook"; } @Override - public String[] getRequiredFieldsForCustomization() { - return new String[]{"author/editor", "title", "chapter/pages", "year", "publisher"}; + public List getRequiredFieldsForCustomization() { + return requiredFieldsForCustomization; } @Override @@ -139,34 +107,24 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType BOOK = new BibtexEntryType() { - @Override - public String getName() { - return "Book"; - } + private List requiredFieldsForCustomization = Collections.unmodifiableList(Arrays.asList(new String[] + {"title", "publisher", "year", "author/editor"})); - @Override - public String[] getOptionalFields() { - return new String[] - { - "volume", "number", "series", "address", "edition", "month", - "note" //+ pages - }; + { + addAllRequired("title", "publisher", "year", "editor", "author"); + addAllOptional("volume", "number", "series", "address", "edition", "month", + "note"); //+ pages } @Override - public String[] getRequiredFields() { - return new String[] - { - "title", "publisher", "year", "editor", "author" - }; + public String getName() { + return "Book"; } + @Override - public String[] getRequiredFieldsForCustomization() { - return new String[] - { - "title", "publisher", "year", "author/editor" - }; + public List getRequiredFieldsForCustomization() { + return requiredFieldsForCustomization; } @Override @@ -183,26 +141,15 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType INCOLLECTION = new BibtexEntryType() { - @Override - public String getName() { - return "InCollection"; + { + addAllRequired("author", "title", "booktitle", "publisher", "year"); + addAllOptional("editor", "volume", "number", "series", "type", "chapter", + "pages", "address", "edition", "month", "note"); } @Override - public String[] getOptionalFields() { - return new String[] - { - "editor", "volume", "number", "series", "type", "chapter", - "pages", "address", "edition", "month", "note" - }; - } - - @Override - public String[] getRequiredFields() { - return new String[] - { - "author", "title", "booktitle", "publisher", "year" - }; + public String getName() { + return "InCollection"; } @Override @@ -219,26 +166,15 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType CONFERENCE = new BibtexEntryType() { - @Override - public String getName() { - return "Conference"; - } - - @Override - public String[] getOptionalFields() { - return new String[] - { - "editor", "volume", "number", "series", "pages", - "address", "month", "organization", "publisher", "note" - }; + { + addAllOptional("editor", "volume", "number", "series", "pages", + "address", "month", "organization", "publisher", "note"); + addAllRequired("author", "title", "booktitle", "year"); } @Override - public String[] getRequiredFields() { - return new String[] - { - "author", "title", "booktitle", "year" - }; + public String getName() { + return "Conference"; } @Override @@ -253,26 +189,15 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType INPROCEEDINGS = new BibtexEntryType() { - @Override - public String getName() { - return "InProceedings"; - } - - @Override - public String[] getOptionalFields() { - return new String[] - { - "editor", "volume", "number", "series", "pages", - "address", "month", "organization", "publisher", "note" - }; + { + addAllOptional("editor", "volume", "number", "series", "pages", + "address", "month", "organization", "publisher", "note"); + addAllRequired("author", "title", "booktitle", "year"); } @Override - public String[] getRequiredFields() { - return new String[] - { - "author", "title", "booktitle", "year" - }; + public String getName() { + return "InProceedings"; } @Override @@ -287,26 +212,15 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType PROCEEDINGS = new BibtexEntryType() { - @Override - public String getName() { - return "Proceedings"; - } - - @Override - public String[] getOptionalFields() { - return new String[] - { - "editor", "volume", "number", "series", "address", - "publisher", "note", "month", "organization" - }; + { + addAllOptional("editor", "volume", "number", "series", "address", + "publisher", "note", "month", "organization"); + addAllRequired("title", "year"); } @Override - public String[] getRequiredFields() { - return new String[] - { - "title", "year" - }; + public String getName() { + return "Proceedings"; } @Override @@ -321,26 +235,15 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType MANUAL = new BibtexEntryType() { - @Override - public String getName() { - return "Manual"; - } - - @Override - public String[] getOptionalFields() { - return new String[] - { - "author", "organization", "address", "edition", - "month", "year", "note" - }; + { + addAllOptional("author", "organization", "address", "edition", + "month", "year", "note"); + addAllRequired("title"); } @Override - public String[] getRequiredFields() { - return new String[] - { - "title" - }; + public String getName() { + return "Manual"; } @Override @@ -355,25 +258,14 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType TECHREPORT = new BibtexEntryType() { - @Override - public String getName() { - return "TechReport"; - } - - @Override - public String[] getOptionalFields() { - return new String[] - { - "type", "number", "address", "month", "note" - }; + { + addAllOptional("type", "number", "address", "month", "note"); + addAllRequired("author", "title", "institution", "year"); } @Override - public String[] getRequiredFields() { - return new String[] - { - "author", "title", "institution", "year" - }; + public String getName() { + return "TechReport"; } @Override @@ -389,25 +281,14 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType MASTERSTHESIS = new BibtexEntryType() { - @Override - public String getName() { - return "MastersThesis"; - } - - @Override - public String[] getOptionalFields() { - return new String[] - { - "type", "address", "month", "note" - }; + { + addAllOptional("type", "address", "month", "note"); + addAllRequired("author", "title", "school", "year"); } @Override - public String[] getRequiredFields() { - return new String[] - { - "author", "title", "school", "year" - }; + public String getName() { + return "MastersThesis"; } @Override @@ -422,25 +303,14 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType PHDTHESIS = new BibtexEntryType() { - @Override - public String getName() { - return "PhdThesis"; - } - - @Override - public String[] getOptionalFields() { - return new String[] - { - "type", "address", "month", "note" - }; + { + addAllOptional("type", "address", "month", "note"); + addAllRequired("author", "title", "school", "year"); } @Override - public String[] getRequiredFields() { - return new String[] - { - "author", "title", "school", "year" - }; + public String getName() { + return "PhdThesis"; } @Override @@ -455,25 +325,14 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType UNPUBLISHED = new BibtexEntryType() { - @Override - public String getName() { - return "Unpublished"; - } - - @Override - public String[] getOptionalFields() { - return new String[] - { - "month", "year" - }; + { + addAllOptional("month", "year"); + addAllRequired("author", "title", "note"); } @Override - public String[] getRequiredFields() { - return new String[] - { - "author", "title", "note" - }; + public String getName() { + return "Unpublished"; } @Override @@ -488,25 +347,14 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType PERIODICAL = new BibtexEntryType() { - @Override - public String getName() { - return "Periodical"; - } - - @Override - public String[] getOptionalFields() { - return new String[] - { - "editor", "language", "series", "volume", "number", "organization", "month", "note", "url" - }; + { + addAllOptional("editor", "language", "series", "volume", "number", "organization", "month", "note", "url"); + addAllRequired("title", "year"); } @Override - public String[] getRequiredFields() { - return new String[] - { - "title", "year" - }; + public String getName() { + return "Periodical"; } @Override @@ -521,25 +369,14 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType PATENT = new BibtexEntryType() { - @Override - public String getName() { - return "Patent"; + { + addAllOptional("author", "title", "language", "assignee", "address", "type", "number", "day", "dayfiled", "month", "monthfiled", "note", "url"); + addAllRequired("nationality", "number", "year", "yearfiled"); } @Override - public String[] getOptionalFields() { - return new String[] - { - "author", "title", "language", "assignee", "address", "type", "number", "day", "dayfiled", "month", "monthfiled", "note", "url" - }; - } - - @Override - public String[] getRequiredFields() { - return new String[] - { - "nationality", "number", "year", "yearfiled" - }; + public String getName() { + return "Patent"; } @Override @@ -556,30 +393,22 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType STANDARD = new BibtexEntryType() { - @Override - public String getName() { - return "Standard"; - } + private List requiredFieldsForCustomization = Collections.unmodifiableList(Arrays.asList(new String[]{"title", "organization/institution"})); - @Override - public String[] getOptionalFields() { - return new String[] - { - "author", "language", "howpublished", "type", "number", "revision", "address", "month", "year", "note", "url" - }; + { + addAllOptional("author", "language", "howpublished", "type", "number", "revision", "address", "month", "year", "note", "url"); + addAllRequired("title", "organization", "institution"); } @Override - public String[] getRequiredFields() { - return new String[] - { - "title", "organization", "institution" - }; + public String getName() { + return "Standard"; } + @Override - public String[] getRequiredFieldsForCustomization() { - return new String[]{"title", "organization/institution"}; + public List getRequiredFieldsForCustomization() { + return requiredFieldsForCustomization; } @Override @@ -596,22 +425,14 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType ELECTRONIC = new BibtexEntryType() { - @Override - public String getName() { - return "Electronic"; - } + { + addAllOptional("author", "month", "year", "title", "language", "howpublished", "organization", "address", "note", "url"); - @Override - public String[] getOptionalFields() { - return new String[] - { - "author", "month", "year", "title", "language", "howpublished", "organization", "address", "note", "url" - }; } @Override - public String[] getRequiredFields() { - return new String[]{}; + public String getName() { + return "Electronic"; } @Override @@ -626,22 +447,13 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType MISC = new BibtexEntryType() { - @Override - public String getName() { - return "Misc"; - } - - @Override - public String[] getOptionalFields() { - return new String[] - { - "author", "title", "howpublished", "month", "year", "note" - }; + { + addAllOptional("author", "title", "howpublished", "month", "year", "note"); } @Override - public String[] getRequiredFields() { - return new String[]{}; + public String getName() { + return "Misc"; } @Override @@ -660,24 +472,16 @@ public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) public static final BibtexEntryType IEEETRANBSTCTL = new BibtexEntryType() { - @Override - public String getName() { - return "IEEEtranBSTCTL"; - } - - @Override - public String[] getOptionalFields() { - return new String[]{ - "ctluse_article_number", "ctluse_paper", "ctluse_forced_etal", + { + addAllOptional("ctluse_article_number", "ctluse_paper", "ctluse_forced_etal", "ctlmax_names_forced_etal", "ctlnames_show_etal", "ctluse_alt_spacing", "ctlalt_stretch_factor", "ctldash_repeated_names", "ctlname_format_string", - "ctlname_latex_cmd", "ctlname_url_prefix" - }; + "ctlname_latex_cmd", "ctlname_url_prefix"); } @Override - public String[] getRequiredFields() { - return new String[]{}; + public String getName() { + return "IEEEtranBSTCTL"; } @Override @@ -703,16 +507,6 @@ public String getName() { return "Typeless"; } - @Override - public String[] getOptionalFields() { - return new String[]{}; - } - - @Override - public String[] getRequiredFields() { - return new String[]{}; - } - @Override public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) { return false; diff --git a/src/main/java/net/sf/jabref/model/entry/CustomEntryType.java b/src/main/java/net/sf/jabref/model/entry/CustomEntryType.java index 38c7b738e90..c6ad9bbfd90 100644 --- a/src/main/java/net/sf/jabref/model/entry/CustomEntryType.java +++ b/src/main/java/net/sf/jabref/model/entry/CustomEntryType.java @@ -18,7 +18,9 @@ import java.io.IOException; import java.io.Writer; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; +import java.util.List; import net.sf.jabref.Globals; import net.sf.jabref.logic.util.strings.StringUtil; @@ -96,28 +98,28 @@ public String getName() { } @Override - public String[] getOptionalFields() { - return optional; + public List getOptionalFields() { + return Arrays.asList(optional); } @Override - public String[] getRequiredFields() { - return required; + public List getRequiredFields() { + return Arrays.asList(required); } @Override - public String[] getPrimaryOptionalFields() { - return priOpt; + public List getPrimaryOptionalFields() { + return Arrays.asList(priOpt); } @Override - public String[] getSecondaryOptionalFields() { - return StringUtil.getRemainder(optional, priOpt); + public List getSecondaryOptionalFields() { + return Arrays.asList(StringUtil.getRemainder(optional, priOpt)); } @Override - public String[] getRequiredFieldsForCustomization() { - return getRequiredFieldsString().split(";"); + public List getRequiredFieldsForCustomization() { + return Arrays.asList(getRequiredFieldsString().split(";")); } /** diff --git a/src/main/java/net/sf/jabref/model/entry/UnknownEntryType.java b/src/main/java/net/sf/jabref/model/entry/UnknownEntryType.java index 6cefe708073..f35ce795821 100644 --- a/src/main/java/net/sf/jabref/model/entry/UnknownEntryType.java +++ b/src/main/java/net/sf/jabref/model/entry/UnknownEntryType.java @@ -22,17 +22,15 @@ * during bibtex parsing. The only known information is the type name. * This is useful if the bibtex file contains type definitions that are used * in the file - because the entries will be parsed before the type definitions - * are found. In the meantime, the entries will be assigned an + * are found. In the meantime, the entries will be assigned an * UnknownEntryType giving the name. */ public class UnknownEntryType extends BibtexEntryType { private final String name; - private final String[] fields = new String[0]; - - public UnknownEntryType(String name_) { - name = name_; + public UnknownEntryType(String name) { + this.name = name; } @Override @@ -40,15 +38,6 @@ public String getName() { return name; } - @Override - public String[] getOptionalFields() { - return fields; - } - - @Override - public String[] getRequiredFields() { - return fields; - } @Override public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) { diff --git a/src/main/java/net/sf/jabref/sql/exporter/DBExporter.java b/src/main/java/net/sf/jabref/sql/exporter/DBExporter.java index 87ed49d3297..52ba7e358b7 100644 --- a/src/main/java/net/sf/jabref/sql/exporter/DBExporter.java +++ b/src/main/java/net/sf/jabref/sql/exporter/DBExporter.java @@ -231,12 +231,8 @@ private void populateEntryTypesTable(Object out) throws SQLException { for (int i = 0; i < SQLUtil.getAllFields().size(); i++) { fieldRequirement.add(i, "gen"); } - List reqFields = Arrays - .asList(val.getRequiredFields() != null ? val - .getRequiredFields() : new String[0]); - List optFields = Arrays - .asList(val.getOptionalFields() != null ? val - .getOptionalFields() : new String[0]); + List reqFields = val.getRequiredFields(); + List optFields = val.getOptionalFields(); List utiFields = Arrays .asList(val.getUtilityFields() != null ? val .getUtilityFields() : new String[0]); diff --git a/src/main/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java b/src/main/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java index 0823f600204..3326102f6c2 100644 --- a/src/main/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java +++ b/src/main/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java @@ -554,12 +554,12 @@ private void updateSourceView() { } private String[] getAllFields() { - ArrayList f = new ArrayList(); - String[] req = entry.getRequiredFields(); - String[] opt = entry.getOptionalFields(); + ArrayList f = new ArrayList<>(); + List req = entry.getRequiredFields(); + List opt = entry.getOptionalFields(); String[] allFields = BibtexFields.getAllFieldNames(); - Collections.addAll(f, req); - Collections.addAll(f, opt); + f.addAll(req); + f.addAll(opt); for (String allField : allFields) { if (!f.contains(allField)) { f.add(allField);