package de.westnordost.streetcomplete.quests.opening_hours; import java.text.DateFormatSymbols; import java.util.ArrayList; import java.util.Collections; import java.util.Locale; public class OpeningMonths { public static final int MAX_MONTH_INDEX = 11; CircularSection months; ArrayList<OpeningWeekdays> weekdaysList; public OpeningMonths() { months = new CircularSection(0, MAX_MONTH_INDEX); weekdaysList = new ArrayList<>(); } public OpeningMonths(CircularSection months, OpeningWeekdays initialWeekdays) { this.months = months; weekdaysList = new ArrayList<>(); weekdaysList.add(initialWeekdays); } public String getLocalizedMonthsString() { return getMonthsString(DateFormatSymbols.getInstance().getMonths(), "–") + ": "; } public String toString() { // the US locale is important here as this is the OSM format for dates String monthsString = ""; if(!isWholeYear()) { monthsString = getMonthsString(DateFormatSymbols.getInstance(Locale.US).getShortMonths(), "-") + ": "; } StringBuilder result = new StringBuilder(); boolean firstDays = true; Weekdays lastWeekdays = null; for (OpeningWeekdays ow : weekdaysList) { boolean isSameWeekdays = lastWeekdays != null && lastWeekdays.equals(ow.weekdays); if(!isSameWeekdays) { if(!firstDays) result.append(", "); else firstDays = false; result.append(monthsString); result.append(ow.weekdays.toString()); result.append(" "); result.append(ow.timeRange.toStringUsing("-")); } else { result.append(","); result.append(ow.timeRange.toStringUsing("-")); } lastWeekdays = ow.weekdays; } return result.toString(); } private boolean isWholeYear() { NumberSystem aYear = new NumberSystem(0,OpeningMonths.MAX_MONTH_INDEX); return aYear.complemented(Collections.singletonList(months)).isEmpty(); } private String getMonthsString(String[] names, String range) { StringBuilder sb = new StringBuilder(); sb.append(names[months.getStart()]); if(months.getStart() != months.getEnd()) { sb.append(range); sb.append(names[months.getEnd()]); } return sb.toString(); } }