diff --git a/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/GenericsDataDefinition.java b/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/GenericsDataDefinition.java index 2900a33e..9bddaa81 100644 --- a/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/GenericsDataDefinition.java +++ b/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/GenericsDataDefinition.java @@ -1,9 +1,8 @@ package com.orion.visor.framework.common.handler.data; -import com.alibaba.fastjson.JSON; import com.orion.spring.SpringHolder; import com.orion.visor.framework.common.handler.data.model.GenericsDataModel; -import com.orion.visor.framework.common.handler.data.strategy.MapDataStrategy; +import com.orion.visor.framework.common.handler.data.strategy.GenericsDataStrategy; /** * 标准数据定义 @@ -12,45 +11,50 @@ import com.orion.visor.framework.common.handler.data.strategy.MapDataStrategy; * @version 1.0.0 * @since 2023/12/21 0:07 */ +@SuppressWarnings("unchecked") public interface GenericsDataDefinition { - /** - * 获取数据模型类型 - * - * @return class - */ - Class getModel(); - /** * 获取数据处理策略 * * @return class */ - Class> getStrategy(); + Class> getStrategyClass(); /** * 获取数据模型策略处理器 * - * @param Model - * @param Strategy - * @return StrategyBean + * @param Model + * @param Strategy + * @return Strategy Bean */ - @SuppressWarnings("unchecked") - default > Strategy getStrategyBean() { - return (Strategy) SpringHolder.getBean(this.getStrategy()); + default > S getStrategy() { + return (S) SpringHolder.getBean(this.getStrategyClass()); } /** * 反序列化对象 * - * @param json json - * @param Model + * @param serialModel serialModel + * @param Model * @return object */ - @SuppressWarnings("unchecked") - default Model parse(String json) { - return (Model) JSON.parseObject(json, this.getModel()); + default M parse(String serialModel) { + return (M) this.getStrategy().parse(serialModel); } + /** + * 转为视图对象 + * + * @param serialModel serialModel + * @param Model + * @return viewModel + */ + default M toView(String serialModel) { + GenericsDataStrategy strategy = this.getStrategy(); + GenericsDataModel model = strategy.parse(serialModel); + strategy.toView(model); + return (M) model; + } } diff --git a/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/model/GenericsDataModel.java b/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/model/GenericsDataModel.java index f55dd244..ab068d5f 100644 --- a/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/model/GenericsDataModel.java +++ b/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/model/GenericsDataModel.java @@ -2,6 +2,8 @@ package com.orion.visor.framework.common.handler.data.model; import com.alibaba.fastjson.JSON; +import java.util.Map; + /** * 标准数据模型 * @@ -20,4 +22,14 @@ public interface GenericsDataModel { return JSON.toJSONString(this); } + + /** + * 转为 map + * + * @return map + */ + default Map toMap() { + return JSON.parseObject(this.serial()); + } + } diff --git a/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/strategy/AbstractGenericsDataStrategy.java b/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/strategy/AbstractGenericsDataStrategy.java new file mode 100644 index 00000000..11c74a56 --- /dev/null +++ b/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/strategy/AbstractGenericsDataStrategy.java @@ -0,0 +1,65 @@ +package com.orion.visor.framework.common.handler.data.strategy; + +import com.alibaba.fastjson.JSON; +import com.orion.visor.framework.common.handler.data.model.GenericsDataModel; + +/** + * 标准数据处理策略 基类 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2024/6/11 21:44 + */ +public abstract class AbstractGenericsDataStrategy implements GenericsDataStrategy { + + protected final Class modelClass; + + public AbstractGenericsDataStrategy(Class modelClass) { + this.modelClass = modelClass; + } + + /** + * 更新填充 + * + * @param beforeModel 修改前的配置 + * @param afterModel 修改后的配置 + */ + protected void updateFill(M beforeModel, M afterModel) { + } + + /** + * 预校验参数 + * + * @param model model + */ + protected void preValid(M model) { + } + + /** + * 校验参数 + * + * @param model model + */ + protected void valid(M model) { + } + + @Override + public void doValid(M beforeModel, M afterModel) { + // 预校验参数 + this.preValid(afterModel); + // 更新填充 + this.updateFill(beforeModel, afterModel); + // 校验参数 + this.valid(afterModel); + } + + @Override + public M parse(String serialModel) { + return JSON.parseObject(serialModel, modelClass); + } + + @Override + public void toView(M model) { + } + +} diff --git a/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/strategy/GenericsDataStrategy.java b/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/strategy/GenericsDataStrategy.java index 93992305..4378269e 100644 --- a/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/strategy/GenericsDataStrategy.java +++ b/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/strategy/GenericsDataStrategy.java @@ -9,60 +9,38 @@ import com.orion.visor.framework.common.handler.data.model.GenericsDataModel; * @version 1.0.0 * @since 2023/12/20 22:09 */ -public interface GenericsDataStrategy { +public interface GenericsDataStrategy { /** * 获取默认值 * * @return 默认值 */ - Model getDefault(); - - /** - * 更新填充 - * - * @param beforeModel 修改前的配置 - * @param afterModel 修改后的配置 - */ - void updateFill(Model beforeModel, Model afterModel); - - /** - * 预校验参数 - * - * @param model model - */ - void preValid(Model model); - - /** - * 校验参数 - * - * @param model model - */ - void valid(Model model); + M getDefault(); /** * 执行完整验证链 *

- * preValid > updateFill > preValid + * preValid > updateFill > valid * * @param beforeModel beforeModel * @param afterModel afterModel */ - default void doValidChain(Model beforeModel, Model afterModel) { - // 预校验参数 - this.preValid(afterModel); - // 更新填充 - this.updateFill(beforeModel, afterModel); - // 校验参数 - this.valid(afterModel); - } + void doValid(M beforeModel, M afterModel); + + /** + * 解析数据 + * + * @param serialModel serialModel + * @return model + */ + M parse(String serialModel); /** * 转为视图配置 * * @param model model - * @return 视图配置 */ - View toView(String model); + void toView(M model); } diff --git a/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/strategy/MapDataStrategy.java b/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/strategy/MapDataStrategy.java deleted file mode 100644 index 4e92dbb4..00000000 --- a/orion-visor-framework/orion-visor-framework-common/src/main/java/com/orion/visor/framework/common/handler/data/strategy/MapDataStrategy.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.orion.visor.framework.common.handler.data.strategy; - -import com.alibaba.fastjson.JSONObject; -import com.orion.visor.framework.common.handler.data.model.GenericsDataModel; - -import java.util.Map; - -/** - * map 数据处理策略 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023/12/20 22:11 - */ -public interface MapDataStrategy extends GenericsDataStrategy> { - - @Override - default Map toView(String model) { - return JSONObject.parseObject(model); - } - -} diff --git a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/enums/HostConfigTypeEnum.java b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/enums/HostConfigTypeEnum.java index 81b3a636..996bf15f 100644 --- a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/enums/HostConfigTypeEnum.java +++ b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/enums/HostConfigTypeEnum.java @@ -3,8 +3,7 @@ package com.orion.visor.module.asset.enums; import com.orion.visor.framework.common.enums.EnableStatus; import com.orion.visor.framework.common.handler.data.GenericsDataDefinition; import com.orion.visor.framework.common.handler.data.model.GenericsDataModel; -import com.orion.visor.framework.common.handler.data.strategy.MapDataStrategy; -import com.orion.visor.module.asset.handler.host.config.model.HostSshConfigModel; +import com.orion.visor.framework.common.handler.data.strategy.GenericsDataStrategy; import com.orion.visor.module.asset.handler.host.config.strategy.HostSshConfigStrategy; import lombok.AllArgsConstructor; import lombok.Getter; @@ -24,7 +23,6 @@ public enum HostConfigTypeEnum implements GenericsDataDefinition { * SSH 配置 */ SSH("ssh", - HostSshConfigModel.class, HostSshConfigStrategy.class, EnableStatus.ENABLED.getValue()), @@ -32,9 +30,7 @@ public enum HostConfigTypeEnum implements GenericsDataDefinition { private final String type; - private final Class model; - - private final Class> strategy; + private final Class> strategyClass; private final Integer defaultStatus; diff --git a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/enums/HostExtraItemEnum.java b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/enums/HostExtraItemEnum.java index 3cb4b484..f0f78510 100644 --- a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/enums/HostExtraItemEnum.java +++ b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/enums/HostExtraItemEnum.java @@ -2,9 +2,7 @@ package com.orion.visor.module.asset.enums; import com.orion.visor.framework.common.handler.data.GenericsDataDefinition; import com.orion.visor.framework.common.handler.data.model.GenericsDataModel; -import com.orion.visor.framework.common.handler.data.strategy.MapDataStrategy; -import com.orion.visor.module.asset.handler.host.extra.model.HostLabelExtraModel; -import com.orion.visor.module.asset.handler.host.extra.model.HostSshExtraModel; +import com.orion.visor.framework.common.handler.data.strategy.GenericsDataStrategy; import com.orion.visor.module.asset.handler.host.extra.strategy.HostLabelExtraStrategy; import com.orion.visor.module.asset.handler.host.extra.strategy.HostSshExtraStrategy; import lombok.AllArgsConstructor; @@ -24,20 +22,18 @@ public enum HostExtraItemEnum implements GenericsDataDefinition { /** * SSH 额外配置 */ - SSH("ssh", HostSshExtraModel.class, HostSshExtraStrategy.class), + SSH("ssh", HostSshExtraStrategy.class), /** * 标签额外配置 */ - LABEL("label", HostLabelExtraModel.class, HostLabelExtraStrategy.class), + LABEL("label", HostLabelExtraStrategy.class), ; private final String item; - private final Class model; - - private final Class> strategy; + private final Class> strategyClass; public static HostExtraItemEnum of(String type) { if (type == null) { diff --git a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/config/strategy/HostSshConfigStrategy.java b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/config/strategy/HostSshConfigStrategy.java index ceb4ae5f..d0775b68 100644 --- a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/config/strategy/HostSshConfigStrategy.java +++ b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/config/strategy/HostSshConfigStrategy.java @@ -1,13 +1,12 @@ package com.orion.visor.module.asset.handler.host.config.strategy; -import com.alibaba.fastjson.JSON; import com.orion.lang.utils.Booleans; import com.orion.lang.utils.Charsets; import com.orion.lang.utils.Exceptions; import com.orion.lang.utils.Strings; import com.orion.visor.framework.common.constant.Const; import com.orion.visor.framework.common.constant.ErrorMessage; -import com.orion.visor.framework.common.handler.data.strategy.MapDataStrategy; +import com.orion.visor.framework.common.handler.data.strategy.AbstractGenericsDataStrategy; import com.orion.visor.framework.common.security.PasswordModifier; import com.orion.visor.framework.common.utils.Valid; import com.orion.visor.module.asset.dao.HostIdentityDAO; @@ -18,7 +17,6 @@ import com.orion.visor.module.asset.handler.host.config.model.HostSshConfigModel import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.util.Map; /** * 主机 SSH 配置策略 @@ -28,7 +26,7 @@ import java.util.Map; * @since 2023/9/19 14:26 */ @Component -public class HostSshConfigStrategy implements MapDataStrategy { +public class HostSshConfigStrategy extends AbstractGenericsDataStrategy { @Resource private HostKeyDAO hostKeyDAO; @@ -40,6 +38,10 @@ public class HostSshConfigStrategy implements MapDataStrategy toView(String config) { - if (config == null) { - return null; + public void toView(HostSshConfigModel model) { + if (model == null) { + return; } - HostSshConfigModel model = JSON.parseObject(config, HostSshConfigModel.class); model.setHasPassword(Strings.isNotBlank(model.getPassword())); model.setPassword(null); - return JSON.parseObject(JSON.toJSONString(model)); } /** diff --git a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/extra/strategy/HostLabelExtraStrategy.java b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/extra/strategy/HostLabelExtraStrategy.java index 0f93e2fa..bb7fc4c6 100644 --- a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/extra/strategy/HostLabelExtraStrategy.java +++ b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/extra/strategy/HostLabelExtraStrategy.java @@ -1,7 +1,7 @@ package com.orion.visor.module.asset.handler.host.extra.strategy; import com.orion.visor.framework.common.constant.Const; -import com.orion.visor.framework.common.handler.data.strategy.MapDataStrategy; +import com.orion.visor.framework.common.handler.data.strategy.AbstractGenericsDataStrategy; import com.orion.visor.module.asset.handler.host.extra.model.HostLabelExtraModel; import org.springframework.stereotype.Component; @@ -13,7 +13,11 @@ import org.springframework.stereotype.Component; * @since 2024/2/29 23:16 */ @Component -public class HostLabelExtraStrategy implements MapDataStrategy { +public class HostLabelExtraStrategy extends AbstractGenericsDataStrategy { + + public HostLabelExtraStrategy() { + super(HostLabelExtraModel.class); + } @Override public HostLabelExtraModel getDefault() { @@ -36,12 +40,4 @@ public class HostLabelExtraStrategy implements MapDataStrategy { +public class HostSshExtraStrategy extends AbstractGenericsDataStrategy { @Resource private HostKeyDAO hostKeyDAO; @@ -33,6 +33,10 @@ public class HostSshExtraStrategy implements MapDataStrategy @Resource private DataPermissionApi dataPermissionApi; + public HostSshExtraStrategy() { + super(HostSshExtraModel.class); + } + @Override public HostSshExtraModel getDefault() { return HostSshExtraModel.builder() @@ -40,10 +44,6 @@ public class HostSshExtraStrategy implements MapDataStrategy .build(); } - @Override - public void updateFill(HostSshExtraModel beforeModel, HostSshExtraModel afterModel) { - } - @Override public void preValid(HostSshExtraModel model) { HostExtraSshAuthTypeEnum authType = Valid.valid(HostExtraSshAuthTypeEnum::of, model.getAuthType()); @@ -79,8 +79,4 @@ public class HostSshExtraStrategy implements MapDataStrategy } } - @Override - public void valid(HostSshExtraModel model) { - } - } diff --git a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/HostConfigServiceImpl.java b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/HostConfigServiceImpl.java index 7691813a..a108fa76 100644 --- a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/HostConfigServiceImpl.java +++ b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/HostConfigServiceImpl.java @@ -8,7 +8,7 @@ import com.orion.visor.framework.common.constant.ErrorMessage; import com.orion.visor.framework.common.enums.BooleanBit; import com.orion.visor.framework.common.enums.EnableStatus; import com.orion.visor.framework.common.handler.data.model.GenericsDataModel; -import com.orion.visor.framework.common.handler.data.strategy.MapDataStrategy; +import com.orion.visor.framework.common.handler.data.strategy.GenericsDataStrategy; import com.orion.visor.framework.common.utils.Valid; import com.orion.visor.module.asset.convert.HostConfigConvert; import com.orion.visor.module.asset.dao.HostConfigDAO; @@ -53,7 +53,7 @@ public class HostConfigServiceImpl implements HostConfigService { // 转换 HostConfigVO vo = HostConfigConvert.MAPPER.to(config); // 获取配置 - Map configMap = configType.getStrategyBean().toView(config.getConfig()); + Map configMap = configType.toView(config.getConfig()).toMap(); vo.setConfig(configMap); return vo; } @@ -121,10 +121,10 @@ public class HostConfigServiceImpl implements HostConfigService { OperatorLogs.add(OperatorLogs.TYPE, type.getType()); // 检查版本 Valid.eq(record.getVersion(), request.getVersion(), ErrorMessage.DATA_MODIFIED); - MapDataStrategy strategy = type.getStrategyBean(); + GenericsDataStrategy strategy = type.getStrategy(); GenericsDataModel beforeConfig = type.parse(record.getConfig()); // 更新前校验 - strategy.doValidChain(beforeConfig, newConfig); + strategy.doValid(beforeConfig, newConfig); // 修改配置 HostConfigDO update = new HostConfigDO(); update.setId(record.getId()); @@ -225,7 +225,7 @@ public class HostConfigServiceImpl implements HostConfigService { insert.setHostId(hostId); insert.setType(type.getType()); insert.setStatus(type.getDefaultStatus()); - insert.setConfig(type.getStrategyBean().getDefault().serial()); + insert.setConfig(type.getStrategy().getDefault().serial()); insert.setVersion(Const.DEFAULT_VERSION); return insert; } @@ -244,7 +244,7 @@ public class HostConfigServiceImpl implements HostConfigService { } // 转为视图 HostConfigVO vo = HostConfigConvert.MAPPER.to(row); - Map config = type.getStrategyBean().toView(row.getConfig()); + Map config = type.toView(row.getConfig()).toMap(); vo.setConfig(config); return vo; } diff --git a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/HostExtraServiceImpl.java b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/HostExtraServiceImpl.java index 1eac608b..f825edd4 100644 --- a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/HostExtraServiceImpl.java +++ b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/HostExtraServiceImpl.java @@ -3,7 +3,7 @@ package com.orion.visor.module.asset.service.impl; import com.orion.lang.function.Functions; import com.orion.lang.utils.collect.Maps; import com.orion.visor.framework.common.handler.data.model.GenericsDataModel; -import com.orion.visor.framework.common.handler.data.strategy.MapDataStrategy; +import com.orion.visor.framework.common.handler.data.strategy.GenericsDataStrategy; import com.orion.visor.framework.common.utils.Valid; import com.orion.visor.framework.security.core.utils.SecurityUtils; import com.orion.visor.module.asset.entity.request.host.HostExtraQueryRequest; @@ -98,7 +98,7 @@ public class HostExtraServiceImpl implements HostExtraService { Long hostId = request.getHostId(); Long userId = SecurityUtils.getLoginUserId(); HostExtraItemEnum item = Valid.valid(HostExtraItemEnum::of, request.getItem()); - MapDataStrategy strategy = item.getStrategyBean(); + GenericsDataStrategy strategy = item.getStrategy(); // 查询原始配置 DataExtraQueryDTO query = DataExtraQueryDTO.builder() .userId(userId) @@ -114,7 +114,7 @@ public class HostExtraServiceImpl implements HostExtraService { GenericsDataModel newExtra = item.parse(request.getExtra()); GenericsDataModel beforeExtra = item.parse(beforeExtraItem.getValue()); // 更新验证 - strategy.doValidChain(beforeExtra, newExtra); + strategy.doValid(beforeExtra, newExtra); // 更新配置 return dataExtraApi.updateExtraValue(beforeExtraItem.getId(), newExtra.serial()); } @@ -129,12 +129,11 @@ public class HostExtraServiceImpl implements HostExtraService { * @return viewMap */ private Map checkItemAndToView(HostExtraItemEnum item, String extraValue, Long userId, Long hostId) { - MapDataStrategy strategy = item.getStrategyBean(); if (extraValue == null) { // 初始化默认数据 extraValue = this.checkInitItem(item, userId, hostId); } - return strategy.toView(extraValue); + return item.toView(extraValue).toMap(); } /** @@ -146,7 +145,7 @@ public class HostExtraServiceImpl implements HostExtraService { * @return defaultValue */ private String checkInitItem(HostExtraItemEnum item, Long userId, Long hostId) { - MapDataStrategy strategy = item.getStrategyBean(); + GenericsDataStrategy strategy = item.getStrategy(); // 初始化默认数据 String extraValue = strategy.getDefault().serial(); // 插入默认值 diff --git a/orion-visor-module-infra/orion-visor-module-infra-provider/src/main/java/com/orion/visor/module/infra/handler/preference/model/PreferenceModel.java b/orion-visor-module-infra/orion-visor-module-infra-provider/src/main/java/com/orion/visor/module/infra/handler/preference/model/PreferenceModel.java deleted file mode 100644 index dbdd181a..00000000 --- a/orion-visor-module-infra/orion-visor-module-infra-provider/src/main/java/com/orion/visor/module/infra/handler/preference/model/PreferenceModel.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.orion.visor.module.infra.handler.preference.model; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.orion.lang.utils.Refs; -import com.orion.lang.utils.collect.Maps; - -import java.util.Map; -import java.util.function.Function; - -/** - * 偏好 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023/10/8 13:54 - */ -public interface PreferenceModel { - - /** - * 转为 map - * - * @return map - */ - default Map toMap() { - JSONObject map = JSON.parseObject(JSON.toJSONString(this)); - return Maps.map(map, Function.identity(), Refs::json); - } - -} diff --git a/orion-visor-module-infra/orion-visor-module-infra-provider/src/main/java/com/orion/visor/module/infra/handler/preference/strategy/IPreferenceStrategy.java b/orion-visor-module-infra/orion-visor-module-infra-provider/src/main/java/com/orion/visor/module/infra/handler/preference/strategy/IPreferenceStrategy.java deleted file mode 100644 index 58e6bd7d..00000000 --- a/orion-visor-module-infra/orion-visor-module-infra-provider/src/main/java/com/orion/visor/module/infra/handler/preference/strategy/IPreferenceStrategy.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.orion.visor.module.infra.handler.preference.strategy; - -import com.orion.visor.module.infra.handler.preference.model.PreferenceModel; - -/** - * 偏好处理策略 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023/10/8 13:49 - */ -public interface IPreferenceStrategy { - - /** - * 获取默认值 - * - * @return 默认值 - */ - Model getDefault(); - -} diff --git a/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/enums/PreferenceTypeEnum.java b/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/enums/PreferenceTypeEnum.java index 83493575..abc999a5 100644 --- a/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/enums/PreferenceTypeEnum.java +++ b/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/enums/PreferenceTypeEnum.java @@ -1,8 +1,10 @@ package com.orion.visor.module.infra.enums; -import com.orion.spring.SpringHolder; -import com.orion.visor.module.infra.handler.preference.model.PreferenceModel; -import com.orion.visor.module.infra.handler.preference.strategy.IPreferenceStrategy; +import com.orion.visor.framework.common.handler.data.GenericsDataDefinition; +import com.orion.visor.framework.common.handler.data.model.GenericsDataModel; +import com.orion.visor.framework.common.handler.data.strategy.GenericsDataStrategy; +import com.orion.visor.module.infra.handler.preference.strategy.SystemPreferenceStrategy; +import com.orion.visor.module.infra.handler.preference.strategy.TerminalPreferenceStrategy; import lombok.Getter; /** @@ -13,32 +15,28 @@ import lombok.Getter; * @since 2023/10/8 11:31 */ @Getter -public enum PreferenceTypeEnum { +public enum PreferenceTypeEnum implements GenericsDataDefinition { /** * 系统偏好 */ - SYSTEM("systemPreferenceStrategy"), + SYSTEM(SystemPreferenceStrategy.class), /** * 终端偏好 */ - TERMINAL("terminalPreferenceStrategy"), + TERMINAL(TerminalPreferenceStrategy.class), ; - PreferenceTypeEnum(String beanName) { + PreferenceTypeEnum(Class> strategyClass) { this.type = this.name(); - this.beanName = beanName; + this.strategyClass = strategyClass; } private final String type; - /** - * 策越 bean 名称 - * 可能跨模块所以不用 class - */ - private final String beanName; + private final Class> strategyClass; public static PreferenceTypeEnum of(String type) { if (type == null) { @@ -52,15 +50,4 @@ public enum PreferenceTypeEnum { return null; } - /** - * 获取策略 - * - * @param model - * @param type - * @return IPreferenceStrategy - */ - public > T getStrategy() { - return SpringHolder.getBean(beanName); - } - } diff --git a/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/handler/preference/model/SystemPreferenceModel.java b/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/handler/preference/model/SystemPreferenceModel.java index 731ac309..e63b1288 100644 --- a/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/handler/preference/model/SystemPreferenceModel.java +++ b/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/handler/preference/model/SystemPreferenceModel.java @@ -1,5 +1,6 @@ package com.orion.visor.module.infra.handler.preference.model; +import com.orion.visor.framework.common.handler.data.model.GenericsDataModel; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -16,7 +17,7 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -public class SystemPreferenceModel implements PreferenceModel { +public class SystemPreferenceModel implements GenericsDataModel { /** * 是否使用侧边菜单 diff --git a/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/handler/preference/model/TerminalPreferenceModel.java b/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/handler/preference/model/TerminalPreferenceModel.java index 9dd05b41..eb2d8bd7 100644 --- a/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/handler/preference/model/TerminalPreferenceModel.java +++ b/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/handler/preference/model/TerminalPreferenceModel.java @@ -2,6 +2,7 @@ package com.orion.visor.module.infra.handler.preference.model; import com.alibaba.fastjson.JSONObject; import com.orion.lang.able.IJsonObject; +import com.orion.visor.framework.common.handler.data.model.GenericsDataModel; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -20,7 +21,7 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -public class TerminalPreferenceModel implements PreferenceModel { +public class TerminalPreferenceModel implements GenericsDataModel { /** * 新建连接类型 diff --git a/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/handler/preference/strategy/SystemPreferenceStrategy.java b/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/handler/preference/strategy/SystemPreferenceStrategy.java index 5fc83f25..25029c9d 100644 --- a/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/handler/preference/strategy/SystemPreferenceStrategy.java +++ b/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/handler/preference/strategy/SystemPreferenceStrategy.java @@ -1,5 +1,7 @@ package com.orion.visor.module.infra.handler.preference.strategy; +import com.orion.lang.utils.Exceptions; +import com.orion.visor.framework.common.handler.data.strategy.AbstractGenericsDataStrategy; import com.orion.visor.module.infra.handler.preference.model.SystemPreferenceModel; import org.springframework.stereotype.Component; @@ -10,8 +12,12 @@ import org.springframework.stereotype.Component; * @version 1.0.0 * @since 2023/10/8 13:48 */ -@Component("systemPreferenceStrategy") -public class SystemPreferenceStrategy implements IPreferenceStrategy { +@Component +public class SystemPreferenceStrategy extends AbstractGenericsDataStrategy { + + public SystemPreferenceStrategy() { + super(SystemPreferenceModel.class); + } @Override public SystemPreferenceModel getDefault() { @@ -28,4 +34,9 @@ public class SystemPreferenceStrategy implements IPreferenceStrategy { +@Component +public class TerminalPreferenceStrategy extends AbstractGenericsDataStrategy { + + public TerminalPreferenceStrategy() { + super(TerminalPreferenceModel.class); + } @Override public TerminalPreferenceModel getDefault() { @@ -24,7 +30,7 @@ public class TerminalPreferenceStrategy implements IPreferenceStrategy getDefaultPreferenceByType(String type, List items) { PreferenceTypeEnum preferenceType = Valid.valid(PreferenceTypeEnum::of, type); // 获取默认值 - Map defaultModel = preferenceType.getStrategy() + Map defaultModel = preferenceType.getStrategy() .getDefault() .toMap(); Map result = Maps.newMap(); if (Lists.isEmpty(items)) { - defaultModel.forEach((k, v) -> result.put(k, Refs.unref(defaultModel.get(k)))); + defaultModel.forEach((k, v) -> result.put(k, defaultModel.get(k))); } else { - items.forEach(s -> result.put(s, Refs.unref(defaultModel.get(s)))); + items.forEach(s -> result.put(s, defaultModel.get(s))); } return result; } @@ -218,9 +218,10 @@ public class PreferenceServiceImpl implements PreferenceService { // 初始化 if (Maps.isEmpty(config)) { // 获取默认值 - config = type.getStrategy() + Map defaultConfig = type.getStrategy() .getDefault() .toMap(); + config = Maps.map(defaultConfig, Function.identity(), Refs::json); // 插入默认值 List entities = config .entrySet()