package com.mlykotom.valifi.fields; import com.mlykotom.valifi.ValiFi; import com.mlykotom.valifi.ValiFieldBase; import java.text.DateFormat; import java.text.ParseException; import java.util.Calendar; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; /** * // TODO BETA!! */ public class ValiFieldDate extends ValiFieldBase<Calendar> { public ValiFieldDate() { super(); } /** * Checking for specific type if value is empty. * Used for checking if empty is allowed. * * @param actualValue value when checking * @return true when value is empty, false when values is not empty (e.g for String, use isEmpty()) * @see #mCallback */ @Override protected boolean whenThisFieldIsEmpty(@NonNull Calendar actualValue) { return !actualValue.isSet(Calendar.YEAR); // TODO maybe check other values } @Override protected String convertValueToString(@NonNull Calendar value) { return DateFormat.getDateInstance().format(value.getTime()); } @Override @Nullable protected Calendar convertStringToValue(@Nullable String value) { Calendar calendar = Calendar.getInstance(); try { calendar.setTime(DateFormat.getDateInstance().parse(value)); } catch (ParseException e) { // TODO solve e.printStackTrace(); } return calendar; } // ------------------ OLDER THAN VALIDATOR ------------------ // public ValiFieldDate addOlderThanYearsValidator(int amount) { return addOlderThanValidator(getErrorRes(ValiFi.Builder.ERROR_RES_YEARS_OLDER_THAN), Calendar.YEAR, amount); } public ValiFieldDate addOlderThanValidator(@StringRes int errorResource, int calendarField, int amount) { String errorMessage = getString(errorResource, amount); return addOlderThanValidator(errorMessage, calendarField, amount); } public ValiFieldDate addOlderThanValidator(String errorMessage, int calendarField, int amount) { final Calendar wantedDate = Calendar.getInstance(); wantedDate.add(calendarField, -amount); addCustomValidator(errorMessage, new PropertyValidator<Calendar>() { @Override public boolean isValid(@Nullable Calendar value) { return value != null && value.compareTo(wantedDate) < 0; } }); return this; } }