package io.github.memfis19.cadar.internal.configuration; import android.support.annotation.NonNull; import android.support.annotation.StringRes; import java.util.Calendar; import java.util.Locale; import io.github.memfis19.cadar.data.factory.EventFactory; import io.github.memfis19.cadar.data.process.EventCalculator; import io.github.memfis19.cadar.data.process.impl.CadarEventCalculator; import io.github.memfis19.cadar.internal.utils.DateUtils; import io.github.memfis19.cadar.settings.CadarSettings; /** * Created by memfis on 7/21/16. */ public abstract class BaseCalendarConfigurationBuilder<T> { protected Locale locale = Locale.getDefault(); protected Calendar initialDay = DateUtils.getCalendarInstance(); protected boolean eventProcessingEnabled = false; protected EventCalculator eventCalculator = new CadarEventCalculator(); protected EventFactory eventFactory; @CadarSettings.PeriodType protected int periodType = Calendar.YEAR; protected int periodValue = 1; protected boolean weekDayTitleTranslationEnabled = false; @StringRes protected int mondayTitle, tuesdayTitle, wednesdayTitle, thursdayTitle, fridayTitle, saturdayTitle, sundayTitle; public BaseCalendarConfigurationBuilder() { } public BaseCalendarConfigurationBuilder setLocale(Locale locale) { this.locale = locale; return this; } public BaseCalendarConfigurationBuilder setInitialDay(Calendar initialDay) { this.initialDay = initialDay; return this; } public BaseCalendarConfigurationBuilder setEventProcessingEnabled(boolean enabled) { this.eventProcessingEnabled = enabled; return this; } public BaseCalendarConfigurationBuilder setEventCalculator(EventCalculator eventCalculator) { this.eventCalculator = eventCalculator; return this; } public BaseCalendarConfigurationBuilder setEventFactory(@NonNull EventFactory eventFactory) { this.eventFactory = eventFactory; return this; } public BaseCalendarConfigurationBuilder setDisplayPeriod(@CadarSettings.PeriodType int periodType, int periodValue) { this.periodType = periodType; this.periodValue = periodValue; return this; } public BaseCalendarConfigurationBuilder setWeekTitlesSystemTranslationsEnabled(boolean enabled) { this.weekDayTitleTranslationEnabled = enabled; return this; } public BaseCalendarConfigurationBuilder setMondayTitle(@StringRes int mondayTitle) { this.mondayTitle = mondayTitle; return this; } public BaseCalendarConfigurationBuilder setTuesdayTitle(@StringRes int tuesdayTitle) { this.tuesdayTitle = tuesdayTitle; return this; } public BaseCalendarConfigurationBuilder setWednesdayTitle(@StringRes int wednesdayTitle) { this.wednesdayTitle = wednesdayTitle; return this; } public BaseCalendarConfigurationBuilder setThursdayTitle(@StringRes int thursdayTitle) { this.thursdayTitle = thursdayTitle; return this; } public BaseCalendarConfigurationBuilder setFridayTitle(@StringRes int fridayTitle) { this.fridayTitle = fridayTitle; return this; } public BaseCalendarConfigurationBuilder setSaturdayTitle(@StringRes int saturdayTitle) { this.saturdayTitle = saturdayTitle; return this; } public BaseCalendarConfigurationBuilder setSundayTitle(@StringRes int sundayTitle) { this.sundayTitle = sundayTitle; return this; } public abstract T build(); }