Skip to content

Instantly share code, notes, and snippets.

@arthurfiorette
Last active August 19, 2021 21:48
Show Gist options
  • Save arthurfiorette/51155d05330de4fb1cfb3e39afa09739 to your computer and use it in GitHub Desktop.
Save arthurfiorette/51155d05330de4fb1cfb3e39afa09739 to your computer and use it in GitHub Desktop.
Todas as UF do Brasil em um único enum + suporte extras.
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() +
"'}"
);
}
}
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