Last active
August 19, 2021 21:48
-
-
Save arthurfiorette/51155d05330de4fb1cfb3e39afa09739 to your computer and use it in GitHub Desktop.
Todas as UF do Brasil em um único enum + suporte extras.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.fasterxml.jackson.annotation.JsonCreator; | |
import lombok.Getter; | |
import lombok.RequiredArgsConstructor; | |
import lombok.experimental.Accessors; | |
/** | |
* Enum com todas as Unidades da Federação do Brasil. Contém o nome da Unidade, | |
* a sigla e a capital da Unidade da Federação. As unidades estão listadas por | |
* ordem alfabética no enum. | |
* | |
* @author https://github.com/arthurfiorette | |
* @version 1.1.0 | |
* @since 1.0.0 | |
*/ | |
@Accessors(fluent = true) | |
@RequiredArgsConstructor | |
public enum UF { | |
AC("Acre", "Rio Branco"), | |
AL("Alagoas", "Maceió"), | |
AM("Amazonas", "Manaus"), | |
AP("Amapá", "Macapá"), | |
BA("Bahia", "Salvador"), | |
CE("Ceará", "Fortaleza"), | |
DF("Distrito Federal", "Brasília"), | |
ES("Espírito Santo", "Vitória"), | |
GO("Goiás", "Goiânia"), | |
MA("Maranhão", "São Luís"), | |
MG("Minas Gerais", "Belo Horizonte"), | |
MS("Mato Grosso do Sul", "Campo Grande"), | |
MT("Mato Grosso", "Cuiabá"), | |
PA("Pará", "Belém"), | |
PB("Paraíba", "João Pessoa"), | |
PE("Pernambuco", "Recife"), | |
PI("Piauí", "Teresina"), | |
PR("Paraná", "Curitiba"), | |
RJ("Rio de Janeiro", "Rio de Janeiro"), | |
RN("Rio Grande do Norte", "Natal"), | |
RO("Rondônia", "Porto Velho"), | |
RR("Roraima", "Boa Vista"), | |
RS("Rio Grande do Sul", "Porto Alegre"), | |
SC("Santa Cataria", "Florianópolis"), | |
SE("Sergipe", "Aracaju"), | |
SP("São Paulo", "São Paulo"), | |
TO("Tocantins", "Palmas"); | |
@Getter | |
private final String nome; | |
@Getter | |
private final String capital; | |
/** | |
* Converte, a partir da sigla da federação para o enum UF. | |
* | |
* @param nomeUf sigla da Unidade da Federação. Exemplo: "eS" | |
* @return a Unidade da Federação ou nulo caso não encontrado | |
*/ | |
@JsonCreator | |
public static UF fromSigla(final String nomeUf) { | |
for (final UF uf : UF.values()) { | |
if (uf.name().equalsIgnoreCase(nomeUf)) { | |
return uf; | |
} | |
} | |
return null; | |
} | |
/** | |
* Converte, a partir do nome da federação para o enum UF. | |
* | |
* @param nome capital da Unidade da Federação. Exemplo: "portO AlegrE" | |
* @return a Unidade da Federacao ou nulo caso não encontrado | |
*/ | |
public static UF fromNome(final String nome) { | |
for (final UF uf : UF.values()) { | |
if (uf.nome.equalsIgnoreCase(nome)) { | |
return uf; | |
} | |
} | |
return null; | |
} | |
/** | |
* Converte, a partir do nome da capital para o enum UF. | |
* | |
* @param capital A capital da Unidade da Federação. Exemplo: "portO AlegrE" | |
* @return a Unidade da Federacao ou nulo caso não encontrado | |
*/ | |
public static UF fromCapital(final String capital) { | |
for (final UF uf : UF.values()) { | |
if (uf.capital.equalsIgnoreCase(capital)) { | |
return uf; | |
} | |
} | |
return null; | |
} | |
public String sigla() { | |
return this.name(); | |
} | |
@Override | |
public String toString() { | |
return ( | |
"UF{sigla='" + | |
this.sigla() + | |
"', nome='" + | |
this.nome() + | |
"', capital='" + | |
this.capital() + | |
"'}" | |
); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import javax.persistence.AttributeConverter; | |
import javax.persistence.Converter; | |
/** | |
* Conversor do JPA que transforma automaticamente as entitades em siglas | |
* durante a serialização do banco de dados. | |
* <p> | |
* Veja mais em https://www.baeldung.com/jpa-persisting-enums-in-jpa#converter | |
* | |
* @author https://github.com/arthurfiorette | |
* @version 1.1.0 | |
* @since 1.1.0 | |
*/ | |
@Converter(autoApply = true) | |
public class UFConverter implements AttributeConverter<UF, String> { | |
@Override | |
public String convertToDatabaseColumn(final UF attribute) { | |
if (attribute == null) { | |
return null; | |
} | |
return attribute.sigla(); | |
} | |
@Override | |
public UF convertToEntityAttribute(final String dbData) { | |
if (dbData == null || dbData.length() != 2) { | |
// Talvez você queira lançar uma excessão aqui... | |
return null; | |
} | |
return UF.fromSigla(dbData); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment