package org.schabi.newpipe.extractor.timeago; import static java.util.Arrays.asList; import java.time.temporal.ChronoUnit; import java.util.Collection; import java.util.EnumMap; import java.util.LinkedHashMap; import java.util.Map; public abstract class PatternsHolder { private final String wordSeparator; private final Collection seconds; private final Collection minutes; private final Collection hours; private final Collection days; private final Collection weeks; private final Collection months; private final Collection years; private final Map> specialCases = new EnumMap<>(ChronoUnit.class); protected PatternsHolder(String wordSeparator, Collection seconds, Collection minutes, Collection hours, Collection days, Collection weeks, Collection months, Collection years) { this.wordSeparator = wordSeparator; this.seconds = seconds; this.minutes = minutes; this.hours = hours; this.days = days; this.weeks = weeks; this.months = months; this.years = years; } protected PatternsHolder(String wordSeparator, String[] seconds, String[] minutes, String[] hours, String[] days, String[] weeks, String[] months, String[] years) { this(wordSeparator, asList(seconds), asList(minutes), asList(hours), asList(days), asList(weeks), asList(months), asList(years)); } public String wordSeparator() { return wordSeparator; } public Collection seconds() { return seconds; } public Collection minutes() { return minutes; } public Collection hours() { return hours; } public Collection days() { return days; } public Collection weeks() { return weeks; } public Collection months() { return months; } public Collection years() { return years; } public Map> specialCases() { return specialCases; } protected void putSpecialCase(ChronoUnit unit, String caseText, int caseAmount) { Map item = specialCases.computeIfAbsent(unit, k -> new LinkedHashMap<>()); item.put(caseText, caseAmount); } public Map> asMap() { final Map> returnMap = new EnumMap<>(ChronoUnit.class); returnMap.put(ChronoUnit.SECONDS, seconds()); returnMap.put(ChronoUnit.MINUTES, minutes()); returnMap.put(ChronoUnit.HOURS, hours()); returnMap.put(ChronoUnit.DAYS, days()); returnMap.put(ChronoUnit.WEEKS, weeks()); returnMap.put(ChronoUnit.MONTHS, months()); returnMap.put(ChronoUnit.YEARS, years()); return returnMap; } }