package br.gov.servicos.v3.schema; import br.gov.servicos.foundation.exceptions.ConteudoNaoEncontrado; import com.github.slugify.Slugify; import lombok.SneakyThrows; import org.springframework.stereotype.Component; import javax.xml.bind.annotation.XmlEnum; import javax.xml.bind.annotation.XmlEnumValue; import javax.xml.bind.annotation.XmlType; import java.text.ParseException; import java.util.Locale; import java.util.stream.Stream; @XmlType(name = "SegmentoDaSociedade") @XmlEnum public enum SegmentoDaSociedade { @XmlEnumValue("Cidad\u00e3os") CIDADAOS("Cidadãos"), @XmlEnumValue("Empresas") EMPRESAS("Empresas"), @XmlEnumValue("Órgãos e entidades públicas") ORGAOS_E_ENTIDADES_PUBLICAS("Órgãos e entidades públicas"), @XmlEnumValue("Demais segmentos (ONGs, organizações sociais, etc)") DEMAIS_SEGMENTOS("Demais segmentos (ONGs, organizações sociais, etc)"); private final String id; private final String value; @SneakyThrows SegmentoDaSociedade(String v) { id = new Slugify().slugify(v); value = v; } public static SegmentoDaSociedade findById(String v) { return Stream.of(values()) .filter(c -> c.getId().equals(v)) .findFirst() .orElseThrow(() -> new IllegalArgumentException(v)); } public String getValue() { return value; } @SneakyThrows public String getId() { return id; } @Component public static class Formatter implements org.springframework.format.Formatter<SegmentoDaSociedade> { @Override public SegmentoDaSociedade parse(String id, Locale locale) throws ParseException { try { return SegmentoDaSociedade.findById(id); } catch (IllegalArgumentException e) { throw new ConteudoNaoEncontrado(id); } } @Override public String print(SegmentoDaSociedade segmento, Locale locale) { return segmento.getId(); } } }