package org.nextprot.api.core.utils.annot.comp;
import org.nextprot.api.commons.constants.AnnotationCategory;
import org.nextprot.api.core.domain.annotation.Annotation;
import java.util.Comparator;
import java.util.Map;
import java.util.Objects;
public class AnnotationComparators {
public static Comparator<Annotation> newComparator(AnnotationCategory annotationCategory) {
switch (annotationCategory) {
case MUTAGENESIS:
case VARIANT:
return new ByAnnotationVariantComparator();
default:
return new ByFeaturePositionComparator()
.thenComparing(Annotation::getAnnotationId);
}
}
public static Comparator<Annotation> newPhenotypicVariationComparator(Map<String, Annotation> annotationByHash) {
return new ByAnnotationSubjectComparator(annotationByHash)
.thenComparing(new ByAnnotationBioObjectComparator(annotationByHash))
.thenComparing(Annotation::getCvTermName);
}
public static int compareNullableComparableObject(Comparable o1, Comparable o2) {
return compareNullableComparableObject(o1, o2, true);
}
public static int compareNullableComparableObject(Comparable o1, Comparable o2, boolean asc) {
int cmp;
if (Objects.equals(o1, o2)) return 0;
if (o1 == null)
cmp = -1;
else if (o2 == null)
cmp = 1;
else
cmp = o1.compareTo(o2);
return (asc) ? cmp : -cmp;
}
}