Convertir une liste de valeurs séparées par des virgules en liste d'Enum Java avec Spring

publié le

Convertir une liste de valeurs séparées par des virgules dans un fichier de propriétés (.properties) en liste d'Enum Java avec Spring

Un des besoins d'un projet est de pouvoir configurer une ou plusieurs entités séparées par des virgules (représentées par une Enum) en utilisant une liste dans un fichier de propriétés (.properties).

Exemple de liste dans un fichier .properties:

process.only.programcode=A,B

Comme nous utilisons le framework Spring, j'ai utilisé un bean factory method pour appeler la méthode parseProgramCodeList qui permet de parser la liste et de la convertir en liste d'Enum Java.

public static List parseProgramCodeList(String programCodeList) {
        List programCodesEnum = new ArrayList();
        String[] programCodes = programCodeList.split(",");
        
        for (String programCode : programCodes) {
            ProgramCodeEnum companyProgramCode = ProgramCodeEnum.valueOfCode(programCode.trim());
            programCodesEnum.add(companyProgramCode);
        }
        
        return programCodesEnum;
    }

Dans l'Enum ProgramCodeEnum, j'ai défini une méthode utilitaire qui prend comme paramètre un programCode pour retourner l'instance correspondante de ProgramCodeEnum :

    public static ProgramCodeEnum valueOfCode(String value) {

        if (StringUtils.isEmpty(value)) {
            return null;
        }

        for (ProgramCodeEnum v : values()) {
            if (v.code.equals(value)) {
                return v;
            }

        }
        throw new IllegalArgumentException("no enum value found for code: " + value);
    }

Enfin voici la config Spring pour injecter la liste d'Enum:

    <bean id="beanId" class="com.inoneo.test">
        <property name="processProgramCodes">
            <bean factory-method="parseProgramCodeList" class="com.inoneo.test">
                <constructor-arg value="${process.only.programcode}" />
            </bean>
        </property>
    </bean>

Avec processProgramCodes pour ArrayList:

private List<ProgramCodeEnum> processProgramCodes;
...
setProcessProgramCodes(List<ProgramCodeEnum> processProgramCodes){
	this.processProgramCodes = processProgramCodes;
}
comments powered by Disqus