diff --git a/jabgui/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java b/jabgui/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java index 3210e763d3c..c8208c8d4b3 100644 --- a/jabgui/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java @@ -40,6 +40,7 @@ import org.jabref.model.groups.AutomaticGroup; import org.jabref.model.groups.AutomaticKeywordGroup; import org.jabref.model.groups.AutomaticPersonsGroup; +import org.jabref.model.groups.DateGroup; import org.jabref.model.groups.ExplicitGroup; import org.jabref.model.groups.GroupEntryChanger; import org.jabref.model.groups.GroupTreeNode; @@ -464,6 +465,8 @@ public boolean canAddEntriesIn() { return false; } else if (group instanceof AutomaticDateGroup) { return false; + } else if (group instanceof DateGroup) { + return false; } else { throw new UnsupportedOperationException("canAddEntriesIn method not yet implemented in group: " + group.getClass().getName()); } @@ -508,6 +511,7 @@ public boolean canAddGroupsIn() { case AutomaticKeywordGroup _, AutomaticPersonsGroup _, AutomaticDateGroup _, + DateGroup _, SmartGroup _ -> false; case KeywordGroup _ -> @@ -534,6 +538,7 @@ public boolean canRemove() { AutomaticKeywordGroup _, AutomaticPersonsGroup _, AutomaticDateGroup _, + DateGroup _, TexGroup _ -> true; case KeywordGroup _ -> @@ -553,6 +558,7 @@ public boolean isEditable() { AbstractGroup group = groupNode.getGroup(); return switch (group) { case AllEntriesGroup _, + DateGroup _, SmartGroup _ -> false; case ExplicitGroup _, diff --git a/jablib/src/main/java/org/jabref/model/entry/field/FieldFactory.java b/jablib/src/main/java/org/jabref/model/entry/field/FieldFactory.java index 4cdae0dd021..3eec0274940 100644 --- a/jablib/src/main/java/org/jabref/model/entry/field/FieldFactory.java +++ b/jablib/src/main/java/org/jabref/model/entry/field/FieldFactory.java @@ -193,8 +193,12 @@ public static Set getPersonNameFields() { return getFieldsFiltered(field -> field.getProperties().contains(FieldProperty.PERSON_NAMES)); } + /// Gets all fields with [FieldProperty#DATE]. + /// Also includes [StandardField#YEAR]. + /// + /// @return Set of fields public static Set getDateFields() { - return getFieldsFiltered(field -> field.getProperties().contains(FieldProperty.DATE)); + return getFieldsFiltered(field -> field.getProperties().contains(FieldProperty.DATE) || field == StandardField.YEAR); } private static Set getFieldsFiltered(Predicate selector) { diff --git a/jablib/src/main/java/org/jabref/model/groups/AutomaticDateGroup.java b/jablib/src/main/java/org/jabref/model/groups/AutomaticDateGroup.java index d8b259b5bb4..68b1d4a9f96 100644 --- a/jablib/src/main/java/org/jabref/model/groups/AutomaticDateGroup.java +++ b/jablib/src/main/java/org/jabref/model/groups/AutomaticDateGroup.java @@ -49,20 +49,20 @@ public DateGranularity getGranularity() { public Set createSubgroups(BibEntry entry) { var out = new LinkedHashSet(); - DateGroup.extractDate(field, entry).ifPresent(d -> { + DateGroup.extractDate(field, entry).ifPresent(date -> { switch (granularity) { case YEAR -> { - DateGroup.extractYear(field, entry).ifPresent(y -> { - String key = "%04d".formatted(y); + date.getYear().ifPresent(year -> { + String key = "%04d".formatted(year); out.add(new GroupTreeNode(new DateGroup(key, GroupHierarchyType.INDEPENDENT, field, key))); }); } case MONTH -> - DateGroup.getDateKey(d, "YYYY-MM").ifPresent(key -> { + DateGroup.getDateKey(date, "YYYY-MM").ifPresent(key -> { out.add(new GroupTreeNode(new DateGroup(key, GroupHierarchyType.INDEPENDENT, field, key))); }); case FULL_DATE -> - DateGroup.getDateKey(d, "YYYY-MM-DD").ifPresent(key -> { + DateGroup.getDateKey(date, "YYYY-MM-DD").ifPresent(key -> { out.add(new GroupTreeNode(new DateGroup(key, GroupHierarchyType.INDEPENDENT, field, key))); }); } diff --git a/jablib/src/main/java/org/jabref/model/groups/DateGroup.java b/jablib/src/main/java/org/jabref/model/groups/DateGroup.java index ec764d5ec43..ff22d32a7b2 100644 --- a/jablib/src/main/java/org/jabref/model/groups/DateGroup.java +++ b/jablib/src/main/java/org/jabref/model/groups/DateGroup.java @@ -22,12 +22,6 @@ public DateGroup(String groupName, GroupHierarchyType context, Field searchField this.date = date; } - static Optional extractYear(Field field, BibEntry bibEntry) { - return bibEntry.getField(field) - .flatMap(Date::parse) - .flatMap(Date::getYear); - } - static Optional extractDate(Field field, BibEntry entry) { boolean isCore = (field == StandardField.DATE) @@ -58,7 +52,7 @@ static Optional getDateKey(Date d, String dateKeyFormat) { Optional y = d.getYear(); return switch (numOfdashes) { case 0 -> - y.map(val -> "%04d".formatted(val)); // "YYYY" + y.map("%04d"::formatted); // "YYYY" case 1 -> { // "YYYY-MM" if (d.getYear().isPresent() && d.getMonth().isPresent()) { String out = "%04d-%02d".formatted(d.getYear().get(), d.getMonth().get().getNumber());