package fr.adrienbrault.idea.symfony2plugin.templating.dict; import org.jetbrains.annotations.Nullable; import java.util.*; /** * @author Daniel Espendiller <daniel@espendiller.net> */ public class TwigCreateContainer { private Map<String, Integer> extendHap = new HashMap<>(); private Map<String, Integer> blockHap = new HashMap<>(); public void addExtend(String extend) { if(extendHap.containsKey(extend)) { extendHap.put(extend, extendHap.get(extend) + 1); } else { extendHap.put(extend, 1); } } public void addBlock(String block) { if(blockHap.containsKey(block)) { blockHap.put(block, blockHap.get(block) + 1); } else { blockHap.put(block, 1); } } @Nullable public String getExtend() { Map<String, Integer> extendsMap = this.getExtends(); return extendsMap.size() > 0 ? extendsMap.keySet().iterator().next() : null; } public Map<String, Integer> getExtends() { return sortByValue(extendHap); } public Map<String, Integer> getBlocks() { return sortByValue(blockHap); } public Collection<String> getBlockNames(int limit) { List<String> strings = new ArrayList<>(getBlocks().keySet()); if(strings.size() > limit) { strings = strings.subList(0, limit); } return strings; } private static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map ) { List<Map.Entry<K, V>> list = new LinkedList<>(map.entrySet()); list.sort(Comparator.comparing(o -> (o.getValue()))); Collections.reverse(list); Map<K, V> result = new LinkedHashMap<>(); for (Map.Entry<K, V> entry : list) { result.put( entry.getKey(), entry.getValue() ); } return result; } }