Skip to content

Commit

Permalink
feat($Enum): abstract common methods for enum
Browse files Browse the repository at this point in the history
  • Loading branch information
johnnymillergh committed Feb 27, 2022
1 parent a3f4811 commit c8305fb
Show file tree
Hide file tree
Showing 10 changed files with 211 additions and 71 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.jmsoftware.maf.authcenter.user.service.UserRoleDomainService;
import com.jmsoftware.maf.common.bean.PageResponseBodyBean;
import com.jmsoftware.maf.common.domain.authcenter.user.*;
import com.jmsoftware.maf.common.enumeration.ValueDescriptionBaseEnum;
import com.jmsoftware.maf.common.exception.SecurityException;
import com.jmsoftware.maf.springcloudstarter.property.MafConfigurationProperties;
import com.jmsoftware.maf.springcloudstarter.property.MafProjectProperties;
Expand Down Expand Up @@ -132,7 +133,7 @@ public boolean logout(HttpServletRequest request) throws SecurityException {
@Override
public String getUserStatus(@Valid @NotNull GetUserStatusPayload payload) {
log.info("Current username: {}", UserUtil.getCurrentUsername());
return UserStatus.ofValue(payload.getStatus()).getDescription();
return ValueDescriptionBaseEnum.getDescriptionByValue(UserStatus.class, payload.getStatus());
}

@Override
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.jmsoftware.maf.common.domain.authcenter.user;

import com.jmsoftware.maf.common.bean.EnumerationBase;
import com.jmsoftware.maf.common.enumeration.ValueDescriptionBaseEnum;
import lombok.Getter;
import lombok.ToString;

/**
* Description: UserStatus, change description here.
Expand All @@ -10,7 +11,8 @@
* @date 2019-03-23 18:48
**/
@Getter
public enum UserStatus implements EnumerationBase<Byte> {
@ToString
public enum UserStatus implements ValueDescriptionBaseEnum<Byte> {
/**
* Enabled user
*/
Expand All @@ -27,21 +29,4 @@ public enum UserStatus implements EnumerationBase<Byte> {
this.value = value;
this.description = description;
}

/**
* Get user value enum by value value
*
* @param value value value
* @return user value enum
*/
public static UserStatus ofValue(Byte value) {
UserStatus result = UserStatus.DISABLED;
UserStatus[] userStatuses = UserStatus.values();
for (UserStatus userStatus : userStatuses) {
if (userStatus.value.equals(value)) {
result = userStatus;
}
}
return result;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.jmsoftware.maf.common.domain.authcenter.user;

import com.jmsoftware.maf.common.bean.EnumerationBase;
import com.jmsoftware.maf.common.enumeration.ValueDescriptionBaseEnum;
import lombok.Getter;
import lombok.ToString;

/**
* Description: UserStatus, change description here.
Expand All @@ -10,7 +11,8 @@
* @date 2019-03-23 18:48
**/
@Getter
public enum UserStatus2 implements EnumerationBase<Byte> {
@ToString
public enum UserStatus2 implements ValueDescriptionBaseEnum<Byte> {
/**
* Enabled user
*/
Expand All @@ -27,21 +29,4 @@ public enum UserStatus2 implements EnumerationBase<Byte> {
this.value = value;
this.description = description;
}

/**
* Get user value enum by value value
*
* @param value value value
* @return user value enum
*/
public static UserStatus2 ofValue(Byte value) {
UserStatus2 result = UserStatus2.DISABLED;
UserStatus2[] userStatuses = UserStatus2.values();
for (UserStatus2 userStatus : userStatuses) {
if (userStatus.value.equals(value)) {
result = userStatus;
}
}
return result;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
package com.jmsoftware.maf.common.enumeration;

import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.EnumUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import lombok.NonNull;
import lombok.val;

/**
* <h1>ValueDescriptionBaseEnum</h1>
* <p>
* Change description here.
*
* @param <V> the type of value
* @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 2/27/22 11:32 AM
*/
@SuppressWarnings("unused")
public interface ValueDescriptionBaseEnum<V> {
/**
* Gets value, which represents the value stored in database
*
* @return the value
*/
V getValue();

/**
* Gets description, which indicates what the value represents for.
*
* @return the description
*/
String getDescription();

/**
* Check if the value exists in the enums.
*
* @param <T> the type parameter
* @param enums the enums
* @param value the value
* @return the boolean
*/
static <T> boolean exists(@NonNull ValueDescriptionBaseEnum<T>[] enums, T value) {
if (!EnumUtil.isEnum(enums[0])) {
throw new IllegalArgumentException("Not an enum type");
}
if (value == null) {
return false;
}
if (ArrayUtil.isEmpty(enums)) {
return false;
}
for (ValueDescriptionBaseEnum<T> e : enums) {
if (value.equals(e.getValue())) {
return true;
}
}
return false;
}

/**
* Exists boolean.
*
* @param <E> the type of enum
* @param <V> the type of value
* @param enumClass the enum class
* @param value the value
* @return the boolean
*/
@SuppressWarnings("unchecked")
static <E extends Enum<? extends ValueDescriptionBaseEnum<V>>, V> boolean exists(@NonNull Class<E> enumClass, V value) {
for (Enum<? extends ValueDescriptionBaseEnum<V>> e : enumClass.getEnumConstants()) {
if (((ValueDescriptionBaseEnum<V>) e).getValue().equals(value)) {
return true;
}
}
return false;
}

/**
* Gets description by value.
*
* @param <E> the type parameter
* @param <V> the type parameter
* @param enumClass the enum class
* @param value the value
* @return the description by value
*/
@SuppressWarnings("unchecked")
static <E extends Enum<? extends ValueDescriptionBaseEnum<V>>, V> String getDescriptionByValue(@NonNull Class<E> enumClass, V value) {
if (value == null) {
return null;
}
for (Enum<? extends ValueDescriptionBaseEnum<V>> e : enumClass.getEnumConstants()) {
if (((ValueDescriptionBaseEnum<V>) e).getValue().equals(value)) {
return ((ValueDescriptionBaseEnum<?>) e).getDescription();
}
}
return null;
}

/**
* Gets by enum name.
*
* @param <E> the type parameter
* @param <V> the type parameter
* @param enumClass the enum class
* @param enumName the enum name
* @return the by enum name
*/
@SuppressWarnings("unchecked")
static <E extends Enum<? extends ValueDescriptionBaseEnum<V>>, V> E getByEnumName(
@NonNull Class<E> enumClass,
String enumName
) {
if (StrUtil.isEmpty(enumName)) {
return null;
}
for (Enum<? extends ValueDescriptionBaseEnum<V>> e : enumClass.getEnumConstants()) {
if (StrUtil.equalsIgnoreCase(e.name(), enumName)) {
return (E) e;
}
}
return null;
}


/**
* Gets value by enum name.
*
* @param <E> the type parameter
* @param <V> the type parameter
* @param enumClass the enum class
* @param enumName the enum name
* @return the value by enum name
*/
@SuppressWarnings("unchecked")
static <E extends Enum<? extends ValueDescriptionBaseEnum<V>>, V> V getValueByEnumName(
@NonNull Class<E> enumClass,
String enumName
) {
if (StrUtil.isEmpty(enumName)) {
return null;
}
val e = ((ValueDescriptionBaseEnum<V>) getByEnumName(enumClass, enumName));
if (e != null) {
return e.getValue();
}
return null;
}

/**
* Gets by value.
*
* @param <E> the type parameter
* @param <V> the type parameter
* @param enumClass the enum class
* @param value the value
* @return the by value
*/
@SuppressWarnings("unchecked")
static <E extends Enum<? extends ValueDescriptionBaseEnum<V>>, V> E getByValue(
@NonNull Class<E> enumClass,
V value
) {
if (ObjectUtil.isNull(value)) {
return null;
}
for (Enum<? extends ValueDescriptionBaseEnum<V>> e : enumClass.getEnumConstants()) {
if (((ValueDescriptionBaseEnum<V>) e).getValue().equals(value)) {
return (E) e;
}
}
return null;
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
package com.jmsoftware.maf.springcloudstarter.quartz.constant;

import com.jmsoftware.maf.common.bean.EnumerationBase;
import com.jmsoftware.maf.common.enumeration.ValueDescriptionBaseEnum;
import lombok.Getter;
import lombok.ToString;

/**
* Description: Concurrent, change description here.
*
* @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 9/23/2021 2:04 PM
**/
@Getter
public enum Concurrent implements EnumerationBase<Byte> {
@ToString
public enum Concurrent implements ValueDescriptionBaseEnum<Byte> {
/**
* Disallow Concurrent
*/
Expand All @@ -24,4 +26,9 @@ public enum Concurrent implements EnumerationBase<Byte> {
Concurrent(Byte value) {
this.value = value;
}

@Override
public String getDescription() {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.jmsoftware.maf.springcloudstarter.quartz.constant;

import com.jmsoftware.maf.common.bean.EnumerationBase;
import com.jmsoftware.maf.common.enumeration.ValueDescriptionBaseEnum;
import lombok.Getter;
import lombok.ToString;
import lombok.val;
Expand All @@ -19,7 +19,7 @@
**/
@Getter
@ToString
public enum MisfirePolicy implements EnumerationBase<Byte> {
public enum MisfirePolicy implements ValueDescriptionBaseEnum<Byte> {
/**
* Instructs the <code>{@link Scheduler}</code> that the
* <code>Trigger</code> will never be evaluated for a misfire situation,
Expand Down Expand Up @@ -82,4 +82,9 @@ public static MisfirePolicy getByValue(Byte value) {
}
return null;
}

@Override
public String getDescription() {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.jmsoftware.maf.springcloudstarter.quartz.constant;

import com.jmsoftware.maf.common.bean.EnumerationBase;
import com.jmsoftware.maf.common.enumeration.ValueDescriptionBaseEnum;
import lombok.Getter;
import lombok.ToString;

Expand All @@ -11,7 +11,7 @@
**/
@Getter
@ToString
public enum QuartzJobStatus implements EnumerationBase<Byte> {
public enum QuartzJobStatus implements ValueDescriptionBaseEnum<Byte> {
/**
* Normal
*/
Expand All @@ -27,4 +27,9 @@ public enum QuartzJobStatus implements EnumerationBase<Byte> {
QuartzJobStatus(Byte value) {
this.value = value;
}

@Override
public String getDescription() {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

Class<? extends Payload>[] payload() default {};

Class<?> targetEnum() default Class.class;
Class<? extends Enum> targetEnum() default Enum.class;

boolean ignoreNull() default false;
}
Loading

0 comments on commit c8305fb

Please sign in to comment.