package com.basgeekball.awesomevalidation; import android.app.Activity; import android.content.Context; import android.support.design.widget.TextInputLayout; import android.widget.EditText; import com.basgeekball.awesomevalidation.model.NumericRange; import com.basgeekball.awesomevalidation.validators.BasicValidator; import com.basgeekball.awesomevalidation.validators.ColorationValidator; import com.basgeekball.awesomevalidation.validators.TextInputLayoutValidator; import com.basgeekball.awesomevalidation.validators.UnderlabelValidator; import com.basgeekball.awesomevalidation.validators.Validator; import com.google.common.collect.Range; import java.util.regex.Pattern; public class AwesomeValidation { private Validator mValidator = null; public AwesomeValidation(ValidationStyle style) { switch (style) { case BASIC: if (mValidator == null || !(mValidator instanceof BasicValidator)) { mValidator = new BasicValidator(); } return; case COLORATION: if (mValidator == null || !(mValidator instanceof ColorationValidator)) { mValidator = new ColorationValidator(); } return; case UNDERLABEL: if (mValidator == null || !(mValidator instanceof UnderlabelValidator)) { mValidator = new UnderlabelValidator(); } return; case TEXT_INPUT_LAYOUT: if (mValidator == null || !(mValidator instanceof TextInputLayoutValidator)) { mValidator = new TextInputLayoutValidator(); } return; default: } } private void checkIsColorationValidator() { if (!(mValidator instanceof ColorationValidator)) { throw new UnsupportedOperationException("Only supported by ColorationValidator."); } } private void checkIsUnderlabelValidator() { if (!(mValidator instanceof UnderlabelValidator)) { throw new UnsupportedOperationException("Only supported by UnderlabelValidator."); } } private void checkIsTextInputLayoutValidator() { if (!(mValidator instanceof TextInputLayoutValidator)) { throw new UnsupportedOperationException("Only supported by TextInputLayoutValidator."); } } private void checkIsNotTextInputLayoutValidator() { if (mValidator instanceof TextInputLayoutValidator) { throw new UnsupportedOperationException("Not supported by TextInputLayoutValidator."); } } public void setColor(int color) { checkIsColorationValidator(); ((ColorationValidator) mValidator).setColor(color); } public void setContext(Context context) { checkIsUnderlabelValidator(); ((UnderlabelValidator) mValidator).setContext(context); } public void addValidation(EditText editText, String regex, String errMsg) { checkIsNotTextInputLayoutValidator(); mValidator.set(editText, regex, errMsg); } public void addValidation(TextInputLayout textInputLayout, String regex, String errMsg) { checkIsTextInputLayoutValidator(); mValidator.set(textInputLayout, regex, errMsg); } public void addValidation(Activity activity, int viewId, String regex, int errMsgId) { mValidator.set(activity, viewId, regex, errMsgId); } public void addValidation(EditText editText, Pattern pattern, String errMsg) { checkIsNotTextInputLayoutValidator(); mValidator.set(editText, pattern, errMsg); } public void addValidation(TextInputLayout textInputLayout, Pattern pattern, String errMsg) { checkIsTextInputLayoutValidator(); mValidator.set(textInputLayout, pattern, errMsg); } public void addValidation(Activity activity, int viewId, Pattern pattern, int errMsgId) { mValidator.set(activity, viewId, pattern, errMsgId); } public void addValidation(EditText editText, Range range, String errMsg) { checkIsNotTextInputLayoutValidator(); mValidator.set(editText, new NumericRange(range), errMsg); } public void addValidation(TextInputLayout textInputLayout, Range range, String errMsg) { checkIsTextInputLayoutValidator(); mValidator.set(textInputLayout, new NumericRange(range), errMsg); } public void addValidation(Activity activity, int viewId, Range range, int errMsgId) { mValidator.set(activity, viewId, new NumericRange(range), errMsgId); } public void addValidation(EditText confirmationEditText, EditText editText, String errMsg) { checkIsNotTextInputLayoutValidator(); mValidator.set(confirmationEditText, editText, errMsg); } public void addValidation(TextInputLayout confirmationTextInputLayout, TextInputLayout textInputLayout, String errMsg) { checkIsTextInputLayoutValidator(); mValidator.set(confirmationTextInputLayout, textInputLayout, errMsg); } public void addValidation(Activity activity, int confirmationViewId, int viewId, int errMsgId) { mValidator.set(activity, confirmationViewId, viewId, errMsgId); } public boolean validate() { return mValidator.trigger(); } public void clear() { mValidator.halt(); } }