package org.jabref.model.entry; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; /** * Abstract base class for all biblatex entry types. */ public abstract class BiblatexEntryType implements EntryType { private final List<String> requiredFields; private final List<String> optionalFields; public BiblatexEntryType() { requiredFields = new ArrayList<>(); optionalFields = new ArrayList<>(); } @Override public List<String> getOptionalFields() { return Collections.unmodifiableList(optionalFields); } @Override public List<String> getRequiredFields() { return Collections.unmodifiableList(requiredFields); } void addAllOptional(String... fieldNames) { optionalFields.addAll(Arrays.asList(fieldNames)); } void addAllRequired(String... fieldNames) { requiredFields.addAll(Arrays.asList(fieldNames)); } @Override public List<String> getPrimaryOptionalFields() { return getOptionalFields(); } @Override public List<String> getSecondaryOptionalFields() { List<String> myOptionalFields = getOptionalFields(); if (myOptionalFields == null) { return Collections.emptyList(); } return myOptionalFields.stream().filter(field -> !isPrimary(field)).collect(Collectors.toList()); } private boolean isPrimary(String field) { List<String> primaryFields = getPrimaryOptionalFields(); if (primaryFields == null) { return false; } return primaryFields.contains(field); } @Override public int compareTo(EntryType o) { return getName().compareTo(o.getName()); } }