Conversion con/de Enumerados


El problema: el API de Factura electronica tiene un enumerado llamado FacturaeVersion. Este contiene el siguiente string “FACTURAE_32”, segun la version, varian los ultimos digitos, estos pueden ser: 30, 31, 32. Cuando necesitas usar las clases que validan el xml, o la contabilidad, o la firma del xml necesitas indicar la version de la siguiente manera: “3.0”, “3.1”, “3.2”. ¿Porque? porque casi solo contemplan que el xml esta en fichero y no como un Stream. La version dentro del xml esta de esta ultima forma. La gran pregunta seria ¿Porque denominar “FACTURAE_31” si luego vas a usar “3.0”?.

La solucion:

public enum FacturaeVersionConverter {

	v30("3.0", FacturaeVersion.FACTURAE_30),
	v31("3.1", FacturaeVersion.FACTURAE_31),
	v32("3.2", FacturaeVersion.FACTURAE_32);

	private FacturaeVersion facturaeVersion;
	private String strVersion;

	FacturaeVersionConverter(String strVersion, FacturaeVersion facturaeVersion){
		this.facturaeVersion = facturaeVersion;
		this.strVersion = strVersion;

		EnumHelper.correspondencesMap.put(strVersion, this);
	}

	public String getStringVersion(){
		return strVersion;
	}

	public FacturaeVersion getFacturaeVersion(){
		return facturaeVersion;
	}

    public static FacturaeVersionConverter convert(String strVersion) {
        return EnumHelper.correspondencesMap.get(strVersion);
    }

    public static FacturaeVersionConverter convert(FacturaeVersion facturaeVersion) {
    	for(Entry entry: EnumHelper.correspondencesMap.entrySet()){
    		if(entry.getValue().getFacturaeVersion().name().equals(facturaeVersion.name())){
    			return entry.getValue();
    		}
    	}

        return null;
    }

	private static final class EnumHelper {

        static final Map correspondencesMap =
                new HashMap();
    }
}

La llamada a la solucion:

String strVersion = FacturaeVersionConverter.convert(FacturaeVersion.FACTURAE_30).getStringVersion();
FacturaeVersion facturaeVersion = FacturaeVersionConverter.convert("3.1").getFacturaeVersion();
Anuncios
Conversion con/de Enumerados