diff --git a/fpi-framework-core/src/main/java/com/abavilla/fpi/fw/entity/enums/IBaseEnum.java b/fpi-framework-core/src/main/java/com/abavilla/fpi/fw/entity/enums/IBaseEnum.java index a65eb1b..02952da 100644 --- a/fpi-framework-core/src/main/java/com/abavilla/fpi/fw/entity/enums/IBaseEnum.java +++ b/fpi-framework-core/src/main/java/com/abavilla/fpi/fw/entity/enums/IBaseEnum.java @@ -16,7 +16,11 @@ package com.abavilla.fpi.fw.entity.enums; +import java.util.Map; + import io.quarkus.runtime.annotations.RegisterForReflection; +import org.apache.commons.lang3.NotImplementedException; +import org.apache.commons.lang3.StringUtils; /** * Base implementation of {@link Enum} types @@ -26,4 +30,53 @@ @RegisterForReflection public interface IBaseEnum { + /** + * Creates an enum based from given string value, returns the default enum value if value does not map + * + * @param value the string value + * @param enumMap id to enum mapping + * @param unknownVal default enum value + * @return the created enum + */ + static IBaseEnum fromValue(String value, Map enumMap, IBaseEnum unknownVal) { + if (StringUtils.isBlank(value)) { + return null; + } else { + return enumMap.values().stream().filter(enumItem -> + StringUtils.equalsIgnoreCase(value, enumItem.getValue())).findAny() + .orElse(unknownVal); + } + } + + /** + * Creates an enum based from given an ordinal id, returns the default enum value if id does not map + * + * @param id the ordinal id + * @param enumMap id to enum mapping + * @param unknownVal default enum value + * @return the created enum + */ + static IBaseEnum fromId(int id, Map enumMap, IBaseEnum unknownVal) { + return enumMap.values().stream().filter(enumItem -> id == enumItem.getId()).findAny() + .orElse(unknownVal); + } + + /** + * Gets the value + * + * @return the value + */ + default String getValue() { + throw new NotImplementedException(); + } + + /** + * Gets the id + * + * @return the id + */ + default int getId() { + throw new NotImplementedException(); + } + } diff --git a/fpi-framework-core/src/main/java/com/abavilla/fpi/fw/entity/enums/SampleEnum.java b/fpi-framework-core/src/main/java/com/abavilla/fpi/fw/entity/enums/SampleEnum.java index 2b3dce4..25100af 100644 --- a/fpi-framework-core/src/main/java/com/abavilla/fpi/fw/entity/enums/SampleEnum.java +++ b/fpi-framework-core/src/main/java/com/abavilla/fpi/fw/entity/enums/SampleEnum.java @@ -27,7 +27,6 @@ import io.quarkus.runtime.annotations.RegisterForReflection; import lombok.AllArgsConstructor; import lombok.Getter; -import org.apache.commons.lang3.StringUtils; /** * Template base {@link Enum} for creating enums from, since {@link Enum} do not @@ -48,7 +47,7 @@ public enum SampleEnum implements IBaseEnum { /** * Ordinal id to enum mapping */ - private static final Map ENUM_MAP = new HashMap<>(); + private static final Map ENUM_MAP = new HashMap<>(); static { for(SampleEnum w : EnumSet.allOf(SampleEnum.class)) @@ -63,7 +62,7 @@ public enum SampleEnum implements IBaseEnum { /** * The enum value */ - private String value; + private final String value; /** * Creates an enum based from given string value @@ -72,21 +71,8 @@ public enum SampleEnum implements IBaseEnum { * @return the created enum */ @JsonCreator - public static SampleEnum fromValue(String value) { - if (StringUtils.isBlank(value)) { - return null; - } else { - return ENUM_MAP.values().stream().filter(enumItem -> StringUtils.equalsIgnoreCase(value, enumItem.getValue())).findAny() - .orElseGet(() -> { - var unknown = UNKNOWN; - String enumValue = value; - if (StringUtils.startsWithIgnoreCase(enumValue, UNKNOWN_PREFIX)) { - enumValue = StringUtils.removeStart(enumValue, UNKNOWN_PREFIX); - } - unknown.value = UNKNOWN_PREFIX + enumValue; - return unknown; - }); - } + public static IBaseEnum fromValue(String value) { + return IBaseEnum.fromValue(value, ENUM_MAP, UNKNOWN); } /** @@ -95,13 +81,8 @@ public static SampleEnum fromValue(String value) { * @param id the ordinal id * @return the created enum */ - public static SampleEnum fromId(int id) { - return ENUM_MAP.values().stream().filter(enumItem -> id == enumItem.getId()).findAny() - .orElseGet(() -> { - var unknown = UNKNOWN; - unknown.value = UNKNOWN_PREFIX + id; - return unknown; - }); + public static IBaseEnum fromId(int id) { + return IBaseEnum.fromId(id, ENUM_MAP, UNKNOWN); } /** diff --git a/fpi-framework-core/src/main/java/com/abavilla/fpi/fw/util/FWConst.java b/fpi-framework-core/src/main/java/com/abavilla/fpi/fw/util/FWConst.java index 5373ce5..5b453e7 100644 --- a/fpi-framework-core/src/main/java/com/abavilla/fpi/fw/util/FWConst.java +++ b/fpi-framework-core/src/main/java/com/abavilla/fpi/fw/util/FWConst.java @@ -44,6 +44,6 @@ public final class FWConst { /** * Prefix for Unknown enum values */ - public static final String UNKNOWN_PREFIX = "UNK >> "; + public static final String UNKNOWN_PREFIX = "Unknown"; } diff --git a/lombok.config b/lombok.config new file mode 100644 index 0000000..8f7e8aa --- /dev/null +++ b/lombok.config @@ -0,0 +1 @@ +lombok.addLombokGeneratedAnnotation = true \ No newline at end of file