From e042d83baf509be075451b37da4813adfa80dd78 Mon Sep 17 00:00:00 2001 From: johnniang Date: Tue, 26 Mar 2019 23:00:31 +0800 Subject: [PATCH] Refactor BlogProperties --- .../halo/model/enums/BlogProperties.java | 80 +--------------- .../ryanc/halo/model/enums/PropertyEnum.java | 92 +++++++++++++++++++ .../cc/ryanc/halo/model/enums/ValueEnum.java | 13 +-- .../cc/ryanc/halo/service/OptionService.java | 13 +-- .../halo/service/impl/OptionServiceImpl.java | 23 ++--- 5 files changed, 121 insertions(+), 100 deletions(-) create mode 100644 src/main/java/cc/ryanc/halo/model/enums/PropertyEnum.java diff --git a/src/main/java/cc/ryanc/halo/model/enums/BlogProperties.java b/src/main/java/cc/ryanc/halo/model/enums/BlogProperties.java index f320b7228..388863ff8 100644 --- a/src/main/java/cc/ryanc/halo/model/enums/BlogProperties.java +++ b/src/main/java/cc/ryanc/halo/model/enums/BlogProperties.java @@ -1,13 +1,10 @@ package cc.ryanc.halo.model.enums; -import org.springframework.lang.NonNull; -import org.springframework.util.Assert; - /** * @author : RYAN0UP * @date : 2019-03-17 */ -public enum BlogProperties implements ValueEnum { +public enum BlogProperties implements PropertyEnum { /** * 博客语言 @@ -165,7 +162,7 @@ public enum BlogProperties implements ValueEnum { private Class type; BlogProperties(String value, Class type) { - if (!isSupportedType(type)) { + if (!PropertyEnum.isSupportedType(type)) { throw new IllegalArgumentException("Unsupported blog property type: " + type); } @@ -183,80 +180,9 @@ public enum BlogProperties implements ValueEnum { return value; } + @Override public Class getType() { return type; } - /** - * Converts to value with corresponding type - * - * @param value string value must not be null - * @param type property value type must not be null - * @param property value type - * @return property value - */ - @SuppressWarnings("unchecked") - public static T convertTo(@NonNull String value, @NonNull Class type) { - Assert.hasText(value, "Property value must not be blank"); - - if (!isSupportedType(type)) { - throw new IllegalArgumentException("Unsupported blog property type: " + type); - } - - if (type.isAssignableFrom(String.class)) { - return (T) value; - } - - if (type.isAssignableFrom(Integer.class)) { - return (T) Integer.valueOf(value); - } - - if (type.isAssignableFrom(Long.class)) { - return (T) Long.valueOf(value); - } - - if (type.isAssignableFrom(Boolean.class)) { - return (T) Boolean.valueOf(value); - } - - if (type.isAssignableFrom(Short.class)) { - return (T) Short.valueOf(value); - } - - if (type.isAssignableFrom(Byte.class)) { - return (T) Byte.valueOf(value); - } - - if (type.isAssignableFrom(Double.class)) { - return (T) Byte.valueOf(value); - } - - if (type.isAssignableFrom(Float.class)) { - return (T) Float.valueOf(value); - } - - // Should never happen - throw new UnsupportedOperationException("Unsupported blog property type:" + type.getName() + " provided"); - } - - /** - * Check the type is support by the blog property. - * - * @param type type to check - * @return true if supports; false else - */ - public static boolean isSupportedType(Class type) { - return type != null && ( - type.isAssignableFrom(String.class) - || type.isAssignableFrom(Number.class) - || type.isAssignableFrom(Integer.class) - || type.isAssignableFrom(Long.class) - || type.isAssignableFrom(Boolean.class) - || type.isAssignableFrom(Short.class) - || type.isAssignableFrom(Byte.class) - || type.isAssignableFrom(Double.class) - || type.isAssignableFrom(Float.class) - ); - } - } diff --git a/src/main/java/cc/ryanc/halo/model/enums/PropertyEnum.java b/src/main/java/cc/ryanc/halo/model/enums/PropertyEnum.java new file mode 100644 index 000000000..60df17652 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/enums/PropertyEnum.java @@ -0,0 +1,92 @@ +package cc.ryanc.halo.model.enums; + +import org.springframework.lang.NonNull; +import org.springframework.util.Assert; + +/** + * Property enum. + * + * @author johnniang + * @date 3/26/19 + */ +public interface PropertyEnum extends ValueEnum { + + /** + * Get property type. + * + * @return property type + */ + Class getType(); + + /** + * Converts to value with corresponding type + * + * @param value string value must not be null + * @param type property value type must not be null + * @param property value type + * @return property value + */ + @SuppressWarnings("unchecked") + static T convertTo(@NonNull String value, @NonNull Class type) { + Assert.hasText(value, "Property value must not be blank"); + + if (!isSupportedType(type)) { + throw new IllegalArgumentException("Unsupported blog property type: " + type); + } + + if (type.isAssignableFrom(String.class)) { + return (T) value; + } + + if (type.isAssignableFrom(Integer.class)) { + return (T) Integer.valueOf(value); + } + + if (type.isAssignableFrom(Long.class)) { + return (T) Long.valueOf(value); + } + + if (type.isAssignableFrom(Boolean.class)) { + return (T) Boolean.valueOf(value); + } + + if (type.isAssignableFrom(Short.class)) { + return (T) Short.valueOf(value); + } + + if (type.isAssignableFrom(Byte.class)) { + return (T) Byte.valueOf(value); + } + + if (type.isAssignableFrom(Double.class)) { + return (T) Byte.valueOf(value); + } + + if (type.isAssignableFrom(Float.class)) { + return (T) Float.valueOf(value); + } + + // Should never happen + throw new UnsupportedOperationException("Unsupported blog property type:" + type.getName() + " provided"); + } + + /** + * Check the type is support by the blog property. + * + * @param type type to check + * @return true if supports; false else + */ + static boolean isSupportedType(Class type) { + return type != null && ( + type.isAssignableFrom(String.class) + || type.isAssignableFrom(Number.class) + || type.isAssignableFrom(Integer.class) + || type.isAssignableFrom(Long.class) + || type.isAssignableFrom(Boolean.class) + || type.isAssignableFrom(Short.class) + || type.isAssignableFrom(Byte.class) + || type.isAssignableFrom(Double.class) + || type.isAssignableFrom(Float.class) + ); + } +} diff --git a/src/main/java/cc/ryanc/halo/model/enums/ValueEnum.java b/src/main/java/cc/ryanc/halo/model/enums/ValueEnum.java index edbc7dae9..eaa9e1f04 100644 --- a/src/main/java/cc/ryanc/halo/model/enums/ValueEnum.java +++ b/src/main/java/cc/ryanc/halo/model/enums/ValueEnum.java @@ -12,6 +12,13 @@ import java.util.stream.Stream; */ public interface ValueEnum { + /** + * Gets enum value. + * + * @return enum value + */ + T getValue(); + /** * Converts value to corresponding enum. * @@ -32,10 +39,4 @@ public interface ValueEnum { .orElseThrow(() -> new IllegalArgumentException("unknown database value: " + value)); } - /** - * Gets enum value. - * - * @return enum value - */ - T getValue(); } diff --git a/src/main/java/cc/ryanc/halo/service/OptionService.java b/src/main/java/cc/ryanc/halo/service/OptionService.java index 793e8dcde..d0280cfb8 100755 --- a/src/main/java/cc/ryanc/halo/service/OptionService.java +++ b/src/main/java/cc/ryanc/halo/service/OptionService.java @@ -4,6 +4,7 @@ import cc.ryanc.halo.exception.MissingPropertyValueException; import cc.ryanc.halo.model.dto.OptionOutputDTO; import cc.ryanc.halo.model.entity.Option; import cc.ryanc.halo.model.enums.BlogProperties; +import cc.ryanc.halo.model.enums.PropertyEnum; import cc.ryanc.halo.model.params.OptionParam; import cc.ryanc.halo.service.base.CrudService; import com.qiniu.common.Zone; @@ -59,7 +60,7 @@ public interface OptionService extends CrudService { * @param properties blog properties * @param source source */ - void saveProperties(@NonNull Map properties, String source); + void saveProperties(@NonNull Map, String> properties, String source); /** * Get all options @@ -109,7 +110,7 @@ public interface OptionService extends CrudService { * @return an option value */ @Nullable - String getByPropertyOfNullable(@NonNull BlogProperties property); + String getByPropertyOfNullable(@NonNull PropertyEnum property); /** * Gets option value by blog property. @@ -119,7 +120,7 @@ public interface OptionService extends CrudService { * @throws MissingPropertyValueException throws when property value dismisses */ @NonNull - String getByPropertyOfNonNull(@NonNull BlogProperties property); + String getByPropertyOfNonNull(@NonNull PropertyEnum property); /** * Gets option value by blog property. @@ -128,7 +129,7 @@ public interface OptionService extends CrudService { * @return an optional option value */ @NonNull - Optional getByProperty(@NonNull BlogProperties property); + Optional getByProperty(@NonNull PropertyEnum property); /** * Gets property value by blog property. @@ -139,7 +140,7 @@ public interface OptionService extends CrudService { * @param property type * @return property value */ - T getByProperty(@NonNull BlogProperties property, @NonNull Class propertyType, T defaultValue); + T getByProperty(@NonNull PropertyEnum property, @NonNull Class propertyType, T defaultValue); /** * Gets property value by blog property. @@ -149,7 +150,7 @@ public interface OptionService extends CrudService { * @param property type * @return property value */ - Optional getByProperty(@NonNull BlogProperties property, @NonNull Class propertyType); + Optional getByProperty(@NonNull PropertyEnum property, @NonNull Class propertyType); /** * Gets value by key. diff --git a/src/main/java/cc/ryanc/halo/service/impl/OptionServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/OptionServiceImpl.java index ec61983ec..1bb2ac00e 100644 --- a/src/main/java/cc/ryanc/halo/service/impl/OptionServiceImpl.java +++ b/src/main/java/cc/ryanc/halo/service/impl/OptionServiceImpl.java @@ -4,6 +4,7 @@ import cc.ryanc.halo.exception.MissingPropertyValueException; import cc.ryanc.halo.model.dto.OptionOutputDTO; import cc.ryanc.halo.model.entity.Option; import cc.ryanc.halo.model.enums.BlogProperties; +import cc.ryanc.halo.model.enums.PropertyEnum; import cc.ryanc.halo.model.params.OptionParam; import cc.ryanc.halo.repository.OptionRepository; import cc.ryanc.halo.service.OptionService; @@ -22,8 +23,6 @@ import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; -import static cc.ryanc.halo.model.enums.BlogProperties.convertTo; - /** * OptionService implementation class * @@ -103,12 +102,14 @@ public class OptionServiceImpl extends AbstractCrudService impl } @Override - public void saveProperties(Map properties, String source) { + public void saveProperties(Map, String> properties, String source) { if (CollectionUtils.isEmpty(properties)) { return; } - properties.forEach((property, value) -> save(property.getValue(), value, source)); + properties.forEach((property, value) -> { + save(property.getValue(), value, source); + }); } /** @@ -150,34 +151,34 @@ public class OptionServiceImpl extends AbstractCrudService impl } @Override - public String getByPropertyOfNullable(BlogProperties property) { + public String getByPropertyOfNullable(PropertyEnum property) { return getByProperty(property).orElse(null); } @Override - public String getByPropertyOfNonNull(BlogProperties property) { + public String getByPropertyOfNonNull(PropertyEnum property) { Assert.notNull(property, "Blog property must not be null"); return getByKeyOfNonNull(property.getValue()); } @Override - public Optional getByProperty(BlogProperties property) { + public Optional getByProperty(PropertyEnum property) { Assert.notNull(property, "Blog property must not be null"); return getByKey(property.getValue()); } @Override - public T getByProperty(BlogProperties property, Class propertyType, T defaultValue) { + public T getByProperty(PropertyEnum property, Class propertyType, T defaultValue) { Assert.notNull(property, "Blog property must not be null"); return getByProperty(property, propertyType).orElse(defaultValue); } @Override - public Optional getByProperty(BlogProperties property, Class propertyType) { - return getByProperty(property).map(propertyValue -> convertTo(propertyValue, propertyType)); + public Optional getByProperty(PropertyEnum property, Class propertyType) { + return getByProperty(property).map(propertyValue -> PropertyEnum.convertTo(propertyValue, propertyType)); } @Override @@ -187,7 +188,7 @@ public class OptionServiceImpl extends AbstractCrudService impl @Override public Optional getByKey(String key, Class valueType) { - return getByKey(key).map(value -> convertTo(value, valueType)); + return getByKey(key).map(value -> PropertyEnum.convertTo(value, valueType)); } @Override