/** * ============================================================================= * * ORCID (R) Open Source * http://orcid.org * * Copyright (c) 2012-2014 ORCID, Inc. * Licensed under an MIT-Style License (MIT) * http://orcid.org/open-source-license * * This copyright and license information (including a link to the full license) * shall be included in its entirety in all copies or substantial portion of * the software. * * ============================================================================= */ package org.orcid.core.utils.activities; import java.util.Comparator; import org.orcid.jaxb.model.common_v2.Title; import org.orcid.jaxb.model.record.summary_v2.WorkGroup; import org.orcid.jaxb.model.record.summary_v2.WorkSummary; import org.orcid.jaxb.model.record_v2.WorkTitle; import org.orcid.jaxb.model.record_v2.WorkType; import org.orcid.pojo.ajaxForm.PojoUtil; /** * * @author Will Simpson * */ public class WorkComparators { private static Comparator<WorkSummary> DISPLAY_INDEX = (w1, w2) -> { return w1.compareTo(w2); }; private static Comparator<WorkSummary> REVERSE_CHRONOLOGICAL = (w1, w2) -> { String dateString1 = PojoUtil.createDateSortString(null, w1.getPublicationDate()); String dateString2 = PojoUtil.createDateSortString(null, w2.getPublicationDate()); return -dateString1.compareTo(dateString2); }; private static Comparator<String> TITLE_CONTENT = Comparator.nullsLast(Comparator.<String> naturalOrder()); private static Comparator<Title> TITLE = Comparator.nullsLast((t1, t2) -> { return TITLE_CONTENT.compare(t1.getContent(), t2.getContent()); }); private static Comparator<WorkTitle> WORK_TITLE = Comparator.nullsLast((t1, t2) -> { return TITLE.compare(t1.getTitle(), t2.getTitle()); }); private static Comparator<WorkSummary> WORK_SUMMARY_WORK_TITLE = Comparator.nullsLast((w1, w2) -> { return WORK_TITLE.compare(w1.getTitle(), w2.getTitle()); }); private static Comparator<WorkType> WORK_TYPE = Comparator.nullsLast(Comparator.<WorkType> naturalOrder()); private static Comparator<WorkSummary> WORK_SUMMARY_WORK_TYPE = Comparator.nullsLast((w1, w2) -> { return WORK_TYPE.compare(w1.getType(), w2.getType()); }); public static Comparator<WorkSummary> ALL_EXCEPT_DISPLAY_INDEX = REVERSE_CHRONOLOGICAL.thenComparing(WORK_SUMMARY_WORK_TITLE).thenComparing(WORK_SUMMARY_WORK_TYPE); public static Comparator<WorkSummary> ALL = DISPLAY_INDEX.thenComparing(ALL_EXCEPT_DISPLAY_INDEX); public static Comparator<WorkGroup> GROUP = (g1, g2) -> { WorkSummary w1 = (WorkSummary) g1.getActivities().iterator().next(); WorkSummary w2 = (WorkSummary) g2.getActivities().iterator().next(); return WorkComparators.ALL_EXCEPT_DISPLAY_INDEX.compare(w1, w2); }; }