From ee624aa84cf4042c75ed45d25e3b032ccd055388 Mon Sep 17 00:00:00 2001 From: amontenegro Date: Mon, 4 Dec 2023 13:16:01 -0600 Subject: [PATCH] Fix end and start date comparators and make them all static so we dont have to init the class on each call --- .../v3/activities/FundingComparators.java | 37 +++++++++++++++---- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/orcid-core/src/main/java/org/orcid/core/utils/v3/activities/FundingComparators.java b/orcid-core/src/main/java/org/orcid/core/utils/v3/activities/FundingComparators.java index ae0864cd3ab..8e5ed621325 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/v3/activities/FundingComparators.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/v3/activities/FundingComparators.java @@ -9,6 +9,7 @@ import org.orcid.core.utils.v3.SourceUtils; import org.orcid.pojo.ajaxForm.FundingForm; import org.orcid.pojo.grouping.FundingGroup; +import org.orcid.pojo.grouping.PeerReviewGroup; public class FundingComparators { @@ -17,17 +18,25 @@ public class FundingComparators { private final String DATE_SORT_KEY = "date"; private final String TYPE_SORT_KEY = "type"; + + private final String START_DATE_KEY = "start"; + + private final String END_DATE_KEY = "end"; public FundingComparators() {} public Comparator getInstance(String key, boolean sortAsc, String orcid) { Comparator comparator = null; if (DATE_SORT_KEY.equals(key)) { - comparator = new FundingComparators().DATE_COMPARATOR; + comparator = FundingComparators.DATE_COMPARATOR; } else if (TITLE_SORT_KEY.equals(key)) { - comparator = new FundingComparators().TITLE_COMPARATOR; + comparator = FundingComparators.TITLE_COMPARATOR; } else if (TYPE_SORT_KEY.equals(key)) { - comparator = new FundingComparators().TYPE_COMPARATOR; + comparator = FundingComparators.TYPE_COMPARATOR; + } else if (START_DATE_KEY.equals(key)) { + comparator = FundingComparators.START_DATE_COMPARATOR; + } else if (END_DATE_KEY.equals(key)) { + comparator = FundingComparators.END_DATE_COMPARATOR; } if (sortAsc) { @@ -37,7 +46,7 @@ public Comparator getInstance(String key, boolean sortAsc, String } } - public Comparator TITLE_COMPARATOR = (g1, g2) -> { + public static Comparator TITLE_COMPARATOR = (g1, g2) -> { if (g1.getTitle() == null && g2.getTitle() == null) { return 0; } @@ -51,7 +60,7 @@ public Comparator getInstance(String key, boolean sortAsc, String return g1.getTitle().toLowerCase().compareTo(g2.getTitle().toLowerCase()); }; - public Comparator TYPE_COMPARATOR = (g1, g2) -> { + public static Comparator TYPE_COMPARATOR = (g1, g2) -> { FundingForm f1 = g1.getFundings().get(0); FundingForm f2 = g2.getFundings().get(0); @@ -69,7 +78,21 @@ public Comparator getInstance(String key, boolean sortAsc, String return f1.getFundingType().getValue().compareTo(f2.getFundingType().getValue()); }; - public Comparator END_DATE_COMPARATOR = (g1, g2) -> { + public static Comparator START_DATE_COMPARATOR = (g1, g2) -> { + if (g1.getStartDate() == null && g2.getStartDate() == null) + return TITLE_COMPARATOR.compare(g1, g2) * -1; // reverse secondary order;; + //Null = to present and should sort first + if (g1.getStartDate() == null) + return 1; + if (g2.getStartDate() == null) + return -1; + if (g1.getStartDate().compareTo(g2.getStartDate()) == 0){ + return TITLE_COMPARATOR.compare(g1, g2) * -1; // reverse secondary order;; + } + return g1.getStartDate().compareTo(g2.getStartDate()); + }; + + public static Comparator END_DATE_COMPARATOR = (g1, g2) -> { if (g1.getEndDate() == null && g2.getEndDate() == null) return TITLE_COMPARATOR.compare(g1, g2) * -1; // reverse secondary order;; //Null = to present and should sort first @@ -83,7 +106,7 @@ public Comparator getInstance(String key, boolean sortAsc, String return g1.getEndDate().compareTo(g2.getEndDate()); }; - public Comparator DATE_COMPARATOR = (g1, g2) -> { + public static Comparator DATE_COMPARATOR = (g1, g2) -> { if (g1.getStartDate() == null && g2.getStartDate() == null) { return TITLE_COMPARATOR.compare(g1, g2) * -1; // reverse secondary order;; }