package br.com.caelum.stella.type; import br.com.caelum.stella.MessageProducer; import br.com.caelum.stella.validation.Validator; import br.com.caelum.stella.validation.ie.IEAcreValidator; import br.com.caelum.stella.validation.ie.IEAlagoasValidator; import br.com.caelum.stella.validation.ie.IEAmapaValidator; import br.com.caelum.stella.validation.ie.IEAmazonasValidator; import br.com.caelum.stella.validation.ie.IEBahiaValidator; import br.com.caelum.stella.validation.ie.IECearaValidator; import br.com.caelum.stella.validation.ie.IEDistritoFederalValidator; import br.com.caelum.stella.validation.ie.IEEspiritoSantoValidator; import br.com.caelum.stella.validation.ie.IEGoiasValidator; import br.com.caelum.stella.validation.ie.IEMaranhaoValidator; import br.com.caelum.stella.validation.ie.IEMatoGrossoDoSulValidator; import br.com.caelum.stella.validation.ie.IEMatoGrossoValidator; import br.com.caelum.stella.validation.ie.IEMinasGeraisValidator; import br.com.caelum.stella.validation.ie.IEParaValidator; import br.com.caelum.stella.validation.ie.IEParaibaValidator; import br.com.caelum.stella.validation.ie.IEParanaValidator; import br.com.caelum.stella.validation.ie.IEPernambucoValidator; import br.com.caelum.stella.validation.ie.IEPiauiValidator; import br.com.caelum.stella.validation.ie.IERioDeJaneiroValidator; import br.com.caelum.stella.validation.ie.IERioGrandeDoNorteValidator; import br.com.caelum.stella.validation.ie.IERioGrandeDoSulValidator; import br.com.caelum.stella.validation.ie.IERondoniaValidator; import br.com.caelum.stella.validation.ie.IERoraimaValidator; import br.com.caelum.stella.validation.ie.IESantaCatarinaValidator; import br.com.caelum.stella.validation.ie.IESaoPauloValidator; import br.com.caelum.stella.validation.ie.IESergipeValidator; import br.com.caelum.stella.validation.ie.IETocantinsValidator; /** * Respresenta um estado brasileiro, ou o Destrito Federal. * * @author leobessa * @author <a href="mailto:hprange@gmail.com">Henrique Prange</a> */ public enum Estado { AC(12) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEAcreValidator(messageProducer, isFormatted); } }, AL(27) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEAlagoasValidator(messageProducer, isFormatted); } }, AP(16) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEAmapaValidator(messageProducer, isFormatted); } }, AM(13) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEAmazonasValidator(messageProducer, isFormatted); } }, BA(29) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEBahiaValidator(messageProducer, isFormatted); } }, CE(23) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IECearaValidator(messageProducer, isFormatted); } }, DF(53) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEDistritoFederalValidator(messageProducer, isFormatted); } }, ES(32) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEEspiritoSantoValidator(messageProducer, isFormatted); } }, GO(52) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEGoiasValidator(messageProducer, isFormatted); } }, MA(21) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEMaranhaoValidator(messageProducer, isFormatted); } }, MT(51) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEMatoGrossoValidator(messageProducer, isFormatted); } }, MS(50) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEMatoGrossoDoSulValidator(messageProducer, isFormatted); } }, MG(31) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEMinasGeraisValidator(messageProducer, isFormatted); } }, PA(15) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEParaValidator(messageProducer, isFormatted); } }, PB(25) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEParaibaValidator(messageProducer, isFormatted); } }, PR(41) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEParanaValidator(messageProducer, isFormatted); } }, PE(26) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEPernambucoValidator(messageProducer, isFormatted); } }, PI(22) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IEPiauiValidator(messageProducer, isFormatted); } }, RJ(33) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IERioDeJaneiroValidator(messageProducer, isFormatted); } }, RN(24) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IERioGrandeDoNorteValidator(messageProducer, isFormatted); } }, RS(43) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IERioGrandeDoSulValidator(messageProducer, isFormatted); } }, RO(11) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IERondoniaValidator(messageProducer, isFormatted); } }, RR(14) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IERoraimaValidator(messageProducer, isFormatted); } }, SC(42) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IESantaCatarinaValidator(messageProducer, isFormatted); } }, SP(35) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IESaoPauloValidator(messageProducer, isFormatted); } }, SE(28) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IESergipeValidator(messageProducer, isFormatted); } }, TO(17) { public Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted) { return new IETocantinsValidator(messageProducer, isFormatted); } }; private final int codigoIBGE; /** * Retorna um validador de Inscrição Estadual. * * @param messageProducer * um produtor de mensagens. * @param isFormatted * indicando se o validador deve considerar as cadeias como * formatadas. * @return Validador de Inscrição Estudual correspondente. */ public abstract Validator<String> getIEValidator(MessageProducer messageProducer, boolean isFormatted); private Estado(int codigoIBGE) { this.codigoIBGE = codigoIBGE; } public int getCodigoIBGE() { return codigoIBGE; } /** * A região do território brasileiro em que esse estado está localizado. * * @return Retorna a região em que esse estado está localizado. */ public Regiao regiao() { Regiao[] regioes = Regiao.values(); for (Regiao regiao : regioes) { if(regiao.compostaPor(this)) { return regiao; } } throw new IllegalStateException("Não foi possível determinar a região do estado " + this); } /** * Verifica se esse estado está localizado na região informada. * * @param regiao Uma das regiões do território brasileiro. * @return Retorna {@code true} se esse estado pertencer à região informada ou {@code false} caso contrário. */ public boolean localizadoEm(Regiao regiao) { return regiao() == regiao; } }