package br.com.ilhasoft.support.validation.rule; import android.support.annotation.StringRes; import android.widget.TextView; import java.lang.reflect.InvocationTargetException; import br.com.ilhasoft.support.validation.R; /** * Created by john-mac on 5/14/16. */ public abstract class TypeRule extends Rule<TextView, TypeRule.FieldType> { public enum FieldType { Cpf(CpfTypeRule.class, R.string.error_message_cpf_validation), Username(UsernameRule.class, R.string.error_message_username_validation), Email(EmailTypeRule.class, R.string.error_message_email_validation), Url(UrlTypeRule.class, R.string.error_message_url_validation), CreditCard(CreditCardTypeRule.class, R.string.error_message_credit_card_validation), None; Class<? extends TypeRule> mClass; public @StringRes int errorMessageId; FieldType(Class<? extends TypeRule> mClass, @StringRes int errorMessageId) { this.mClass = mClass; this.errorMessageId = errorMessageId; } FieldType() {} public TypeRule instantiate(TextView view, String errorMessage) throws NoSuchMethodException, IllegalAccessException , InvocationTargetException, InstantiationException { if(this != None) { return mClass.getConstructor(TextView.class, String.class).newInstance(view, errorMessage); } throw new IllegalStateException("It's not possible to bind a none value type"); } } public TypeRule(TextView view, FieldType value, String errorMessage) { super(view, value, errorMessage); } }