package com.constellio.model.services.records.utils; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import com.constellio.data.utils.AccentApostropheCleaner; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.entities.schemas.sort.DefaultStringSortFieldNormalizer; import com.constellio.model.entities.schemas.sort.StringSortFieldNormalizer; public class RecordCodeComparator implements Comparator<Record> { List<String> typesOrder; public RecordCodeComparator(List<String> typesOrder) { this.typesOrder = typesOrder; } @Override public int compare(Record o1, Record o2) { return compareRecords(o1, o2); } public static int compareRecords(Record o1, Record o2) { return compareRecords(new ArrayList<String>(), o1, o2); } public static int compareRecords(List<String> typesOrder, Record o1, Record o2) { int type1 = typesOrder.indexOf(o1.getTypeCode()); int type2 = typesOrder.indexOf(o2.getTypeCode()); if (type1 == -1) { type1 = 10000; } if (type2 == -1) { type2 = 10000; } int result = new Integer(type1).compareTo(type2); if (result == 0) { String code1 = convert(o1.<String>get(Schemas.CODE)); String code2 = convert(o2.<String>get(Schemas.CODE)); result = compare(code1, code2); if (result == 0) { String title1 = convert(o1.<String>get(Schemas.TITLE)); String title2 = convert(o2.<String>get(Schemas.TITLE)); result = compare(title1, title2); } } return result; } static DefaultStringSortFieldNormalizer normalizer = new DefaultStringSortFieldNormalizer(); private static String convert(String value) { if (value == null) { return normalizer.normalizeNull(); } else { return normalizer.normalize(value); } } private static int compare(String s1, String s2) { if (s1 != null && s2 != null) { return s1.compareTo(s2); } else if (s1 != null) { return 1; } else if (s2 != null) { return -1; } else { return 0; } } }