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 BibTex entry types. */ public abstract class BibtexEntryType implements EntryType { private final List<String> requiredFields; private final List<String> optionalFields; public BibtexEntryType() { requiredFields = new ArrayList<>(); optionalFields = new ArrayList<>(); } void addAllOptional(String... fieldNames) { optionalFields.addAll(Arrays.asList(fieldNames)); } void addAllRequired(String... fieldNames) { requiredFields.addAll(Arrays.asList(fieldNames)); } @Override public List<String> getOptionalFields() { return Collections.unmodifiableList(optionalFields); } @Override public List<String> getRequiredFields() { return Collections.unmodifiableList(requiredFields); } @Override public int compareTo(EntryType o) { return getName().compareTo(o.getName()); } @Override public List<String> getPrimaryOptionalFields() { return getOptionalFields(); } @Override public List<String> getSecondaryOptionalFields() { return getOptionalFields().stream().filter(field -> !isPrimary(field)).collect(Collectors.toList()); } private boolean isPrimary(String field) { return getPrimaryOptionalFields().contains(field); } }