Na minha empresa temos muitos Enums que implementam uma interface como esta:
public interface DomainEnum {
String getDomainId();
}
@Getter
@AllArgsConstructor
public enum ExampleEnum implements DomainEnum {
A("1"), B("2"), C("3");
private final String domainId;
}
Gostaria de usar o MapStruct para mapear Strings para qualquer Enum implementado DomainEnum
usando o domainId. Nos documentos, vi que você pode implementar uma estratégia de nomeação de enum personalizada que descreve exatamente o que eu quero. Meu problema atual é que não tenho certeza de como obter o domainId
do enum. Este é meu código até agora:
public class CustomEnumMappingStrategy extends DefaultEnumMappingStrategy {
// other methods like in example from docs
protected String getCustomEnumConstant(TypeElement enumTypeElement, String enumConstant) {
var enumValue = getEnumValue(enumTypeElement, enumConstant);
// How can I now get the domainId from the ElementKind?
}
protected ElementKind getEnumValue(TypeElement enumTypeElement, String enumConstant) {
return enumTypeElement.getEnclosedElements().stream()
.filter(it -> it.getKind().equals(ElementKind.ENUM_CONSTANT))
.filter(it -> it.toString().equals(enumConstant))
.findFirst()
.orElse(null);
}
}
Então, como eu poderia começar domainId
do ElementKind
agora para finalizar minha estratégia de mapeamento?