package com.ciandt.techgallery.service.enums; import com.ciandt.techgallery.persistence.model.Technology; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * Enum for mapping Order Options. * * @author Felipe Ibrahim * */ public enum TechnologyOrderOptionEnum { POSITIVE_RECOMMENDATION_AMOUNT("Recomendações Positivas") { @Override public void sort(List<Technology> techList) { Collections.sort(techList, new Comparator<Technology>() { @Override public int compare(Technology counter1, Technology counter2) { return Integer.compare(counter2.getPositiveRecommendationsCounter(), counter1.getPositiveRecommendationsCounter()); } }); } }, NEGATIVE_RECOMMENDATION_AMOUNT("Recomendações Negativas") { @Override public void sort(List<Technology> techList) { Collections.sort(techList, new Comparator<Technology>() { @Override public int compare(Technology counter1, Technology counter2) { return Integer.compare(counter2.getNegativeRecommendationsCounter(), counter1.getNegativeRecommendationsCounter()); } }); } }, COMMENT_AMOUNT("Comentários") { @Override public void sort(List<Technology> techList) { Collections.sort(techList, new Comparator<Technology>() { @Override public int compare(Technology counter1, Technology counter2) { return Integer.compare(counter2.getCommentariesCounter(), counter1.getCommentariesCounter()); } }); } }, ENDORSEMENT_AMOUNT("Indicações") { @Override public void sort(List<Technology> techList) { Collections.sort(techList, new Comparator<Technology>() { @Override public int compare(Technology counter1, Technology counter2) { return Integer.compare(counter2.getEndorsersCounter(), counter1.getEndorsersCounter()); } }); } }, APHABETIC("Alfabética") { @Override public void sort(List<Technology> techList) { Collections.sort(techList, new Comparator<Technology>() { @Override public int compare(Technology counter1, Technology counter2) { return counter1.getName().compareTo(counter2.getName()); } }); } }; private String option; TechnologyOrderOptionEnum(String option) { this.option = option; } public String option() { return option; } /** * Convert the text informed to Enum. * * @param text to be converted. * * @return the enum value. */ public static TechnologyOrderOptionEnum fromString(String text) { if (text != null) { for (TechnologyOrderOptionEnum item : TechnologyOrderOptionEnum.values()) { if (text.equalsIgnoreCase(item.option())) { return item; } } } return null; } public abstract void sort(List<Technology> techList); }