package org.jabref.model.groups; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; import org.jabref.model.entry.FieldName; /** * This group contains entries, which were manually assigned to it. * Assignments are stored in the {@link FieldName#GROUPS} field. * Thus, internally, we represent {@link ExplicitGroup} as a special {@link WordKeywordGroup} operating on * {@link FieldName#GROUPS}. */ public class ExplicitGroup extends WordKeywordGroup { /** * Previous versions of JabRef stored the linked entries directly in the "jabref-meta" comment at the end of the * file. These keys are still parsed and stored in this field. */ private final List<String> legacyEntryKeys = new ArrayList<>(); public ExplicitGroup(String name, GroupHierarchyType context, Character keywordSeparator) { super(name, context, FieldName.GROUPS, name, true, keywordSeparator, true); } public void addLegacyEntryKey(String key) { this.legacyEntryKeys.add(key); } @Override public AbstractGroup deepCopy() { ExplicitGroup copy = new ExplicitGroup(getName(), getHierarchicalContext(), keywordSeparator); copy.legacyEntryKeys.addAll(legacyEntryKeys); return copy; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof ExplicitGroup)) { return false; } ExplicitGroup other = (ExplicitGroup) o; return Objects.equals(getName(), other.getName()) && Objects.equals(getHierarchicalContext(), other.getHierarchicalContext()) && Objects.equals(getIconCode(), other.getIconCode()) && Objects.equals(getDescription(), other.getDescription()) && Objects.equals(getColor(), other.getColor()) && Objects.equals(isExpanded(), other.isExpanded()) && Objects.equals(getLegacyEntryKeys(), other.getLegacyEntryKeys()); } public void clearLegacyEntryKeys() { legacyEntryKeys.clear(); } public List<String> getLegacyEntryKeys() { return Collections.unmodifiableList(legacyEntryKeys); } @Override public int hashCode() { return Objects.hash(name, context, legacyEntryKeys, iconCode, color, description, isExpanded); } @Override public boolean isDynamic() { return false; } }