TranslationKeyComparator.java

package sk.iway.iwcm.components.translation_keys.jpa;

import org.springframework.stereotype.Component;

import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * TranslationKeyComparator
 * <p>
 * Metoda sluzi na vratenie pozadovaneho comparatora na zaklade vlozeneho stringu.
 */
@Component
public class TranslationKeyComparator {

    private Map<String, Comparator<TranslationKeyEntity>> sortingOptions = new HashMap<>();

    public TranslationKeyComparator() {
        Comparator<Date> nullSafeDateComparator = Comparator.nullsFirst(Date::compareTo);
        this.sortingOptions.put("id", Comparator.comparing(TranslationKeyEntity::getId));
        this.sortingOptions.put("key", Comparator.comparing(TranslationKeyEntity::getKey));
        this.sortingOptions.put("value", Comparator.comparing(TranslationKeyEntity::getValue));
        this.sortingOptions.put("updateDate", Comparator.comparing(TranslationKeyEntity::getUpdateDate, nullSafeDateComparator));

        this.sortingOptions.put("fieldA", Comparator.comparing(TranslationKeyEntity::getFieldA));
        this.sortingOptions.put("fieldB", Comparator.comparing(TranslationKeyEntity::getFieldB));
        this.sortingOptions.put("fieldC", Comparator.comparing(TranslationKeyEntity::getFieldC));
        this.sortingOptions.put("fieldD", Comparator.comparing(TranslationKeyEntity::getFieldD));
        this.sortingOptions.put("fieldE", Comparator.comparing(TranslationKeyEntity::getFieldE));
        this.sortingOptions.put("fieldF", Comparator.comparing(TranslationKeyEntity::getFieldF));
        this.sortingOptions.put("fieldG", Comparator.comparing(TranslationKeyEntity::getFieldG));
        this.sortingOptions.put("fieldH", Comparator.comparing(TranslationKeyEntity::getFieldH));
        this.sortingOptions.put("fieldI", Comparator.comparing(TranslationKeyEntity::getFieldI));
        this.sortingOptions.put("fieldJ", Comparator.comparing(TranslationKeyEntity::getFieldJ));

        this.sortingOptions.put("originalValueA", Comparator.comparing(TranslationKeyEntity::getOriginalValueA));
        this.sortingOptions.put("originalValueB", Comparator.comparing(TranslationKeyEntity::getOriginalValueB));
        this.sortingOptions.put("originalValueC", Comparator.comparing(TranslationKeyEntity::getOriginalValueC));
        this.sortingOptions.put("originalValueD", Comparator.comparing(TranslationKeyEntity::getOriginalValueD));
        this.sortingOptions.put("originalValueE", Comparator.comparing(TranslationKeyEntity::getOriginalValueE));
        this.sortingOptions.put("originalValueF", Comparator.comparing(TranslationKeyEntity::getOriginalValueF));
        this.sortingOptions.put("originalValueG", Comparator.comparing(TranslationKeyEntity::getOriginalValueG));
        this.sortingOptions.put("originalValueH", Comparator.comparing(TranslationKeyEntity::getOriginalValueH));
        this.sortingOptions.put("originalValueI", Comparator.comparing(TranslationKeyEntity::getOriginalValueI));
        this.sortingOptions.put("originalValueJ", Comparator.comparing(TranslationKeyEntity::getOriginalValueJ));

    }

    public Comparator<TranslationKeyEntity> getSortingComparator(String key) {
        return sortingOptions.get(key);
    }

}