package org.jabref.logic.importer.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import org.jabref.logic.importer.ParserResult;
import org.jabref.model.entry.BibEntry;
import org.jabref.model.groups.ExplicitGroup;
import org.jabref.model.groups.GroupTreeNode;
/**
* Converts legacy explicit groups, where the group contained a list of assigned entries, to the new format,
* where the entry stores a list of groups it belongs to.
*/
public class ConvertLegacyExplicitGroups implements PostOpenAction {
@Override
public void performAction(ParserResult parserResult) {
Objects.requireNonNull(parserResult);
if (!parserResult.getMetaData().getGroups().isPresent()) {
return;
}
for (ExplicitGroup group : getExplicitGroupsWithLegacyKeys(parserResult.getMetaData().getGroups().get())) {
for (String entryKey : group.getLegacyEntryKeys()) {
for (BibEntry entry : parserResult.getDatabase().getEntriesByKey(entryKey)) {
group.add(entry);
}
}
group.clearLegacyEntryKeys();
}
}
private List<ExplicitGroup> getExplicitGroupsWithLegacyKeys(GroupTreeNode node) {
Objects.requireNonNull(node);
List<ExplicitGroup> findings = new ArrayList<>();
if (node.getGroup() instanceof ExplicitGroup) {
ExplicitGroup group = (ExplicitGroup) node.getGroup();
if (!group.getLegacyEntryKeys().isEmpty()) {
findings.add(group);
}
}
node.getChildren().forEach(child -> findings.addAll(getExplicitGroupsWithLegacyKeys(child)));
return findings;
}
}