From a21ba136a52515acf05511214a6cd9701defdcfa Mon Sep 17 00:00:00 2001 From: rchen9 Date: Wed, 21 Aug 2024 15:49:49 +0800 Subject: [PATCH] refactor: the logic "transformMethod parse" --- .../business/SystemConfigurationService.java | 48 ++++++------- ...omparisonTransformConfigurableHandler.java | 67 ++++++++++++++++++- 2 files changed, 85 insertions(+), 30 deletions(-) diff --git a/arex-web-core/src/main/java/com/arextest/web/core/business/SystemConfigurationService.java b/arex-web-core/src/main/java/com/arextest/web/core/business/SystemConfigurationService.java index 0a69fba6..219fd460 100644 --- a/arex-web-core/src/main/java/com/arextest/web/core/business/SystemConfigurationService.java +++ b/arex-web-core/src/main/java/com/arextest/web/core/business/SystemConfigurationService.java @@ -1,21 +1,17 @@ package com.arextest.web.core.business; -import com.arextest.common.model.classloader.RemoteJarClassLoader; -import com.arextest.common.utils.RemoteJarLoaderUtils; import com.arextest.config.model.dao.config.SystemConfigurationCollection; import com.arextest.config.model.dto.system.ComparePluginInfo; import com.arextest.config.model.dto.system.SystemConfiguration; import com.arextest.config.repository.SystemConfigurationRepository; -import com.arextest.diff.service.DecompressService; +import com.arextest.web.core.business.config.replay.ComparisonTransformConfigurableHandler; import com.arextest.web.model.contract.contracts.config.SystemConfigWithProperties; -import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.Set; +import java.util.Objects; import javax.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -33,6 +29,8 @@ public class SystemConfigurationService { @Resource private ConfigLoadService configLoadService; + @Resource + private ComparisonTransformConfigurableHandler comparisonTransformConfigurableHandler; public boolean saveConfig(SystemConfiguration systemConfiguration) { List systemConfigurations = new ArrayList<>(); @@ -55,10 +53,10 @@ public boolean saveConfig(SystemConfiguration systemConfiguration) { removeKeys.add(SystemConfigurationCollection.KeySummary.DESERIALIZATION_JAR); } if (systemConfiguration.getComparePluginInfo() != null - && StringUtils.isNotBlank(systemConfiguration.getComparePluginInfo().getComparePluginUrl())) { + && StringUtils.isNotBlank( + systemConfiguration.getComparePluginInfo().getComparePluginUrl())) { SystemConfiguration comparePluginInfoConfig = new SystemConfiguration(); ComparePluginInfo comparePluginInfo = systemConfiguration.getComparePluginInfo(); - comparePluginInfo.setTransMethodList(identifyTransformMethod(comparePluginInfo)); comparePluginInfoConfig.setComparePluginInfo(comparePluginInfo); comparePluginInfoConfig.setKey(SystemConfigurationCollection.KeySummary.COMPARE_PLUGIN_INFO); systemConfigurations.add(comparePluginInfoConfig); @@ -92,6 +90,7 @@ public SystemConfiguration getSystemConfigByKey(String key) { public SystemConfigWithProperties listSystemConfig() { List systemConfigurations = systemConfigurationRepository.getAllSystemConfigList(); + appendTransformMethod(systemConfigurations); SystemConfiguration systemConfiguration = SystemConfiguration.mergeConfigs( systemConfigurations); return this.appendGlobalCompareConfig( @@ -103,28 +102,23 @@ public boolean deleteSystemConfigByKey(String key) { return systemConfigurationRepository.deleteConfig(key); } - private List identifyTransformMethod(ComparePluginInfo comparePluginInfo) { - String comparePluginUrl = comparePluginInfo.getComparePluginUrl(); - if (StringUtils.isEmpty(comparePluginUrl)) { - return Collections.emptyList(); - } - Set result = new HashSet<>(); - try { - RemoteJarClassLoader remoteJarClassLoader = RemoteJarLoaderUtils.loadJar(comparePluginUrl); - List decompressServices = RemoteJarLoaderUtils.loadService( - DecompressService.class, remoteJarClassLoader); - decompressServices.forEach( - decompressService -> { - if (decompressService.getAliasName() != null) { - result.add(decompressService.getAliasName()); + private void appendTransformMethod(List systemConfigurations) { + if (CollectionUtils.isNotEmpty(systemConfigurations)) { + systemConfigurations.stream() + .filter(item -> Objects.equals(item.getKey(), + SystemConfigurationCollection.KeySummary.COMPARE_PLUGIN_INFO)) + .forEach(item -> { + if (item.getComparePluginInfo() == null || + StringUtils.isEmpty(item.getComparePluginInfo().getComparePluginUrl())) { + return; } + List transformMethodList = comparisonTransformConfigurableHandler.getTransformMethodList( + item); + ComparePluginInfo comparePluginInfo = item.getComparePluginInfo(); + comparePluginInfo.setTransMethodList(transformMethodList); }); - remoteJarClassLoader.close(); - } catch (RuntimeException | IOException e) { - LOGGER.error("identifyTransformMethod failed, url:{}, exception:{}", comparePluginUrl, e); } - return new ArrayList<>(result); } private SystemConfigWithProperties appendGlobalCompareConfig(ConfigLoadService configLoadService, diff --git a/arex-web-core/src/main/java/com/arextest/web/core/business/config/replay/ComparisonTransformConfigurableHandler.java b/arex-web-core/src/main/java/com/arextest/web/core/business/config/replay/ComparisonTransformConfigurableHandler.java index 43b95bbd..6e506365 100644 --- a/arex-web-core/src/main/java/com/arextest/web/core/business/config/replay/ComparisonTransformConfigurableHandler.java +++ b/arex-web-core/src/main/java/com/arextest/web/core/business/config/replay/ComparisonTransformConfigurableHandler.java @@ -1,9 +1,14 @@ package com.arextest.web.core.business.config.replay; +import com.arextest.common.model.classloader.RemoteJarClassLoader; +import com.arextest.common.utils.RemoteJarLoaderUtils; import com.arextest.config.model.dao.config.SystemConfigurationCollection.KeySummary; import com.arextest.config.model.dto.application.ApplicationOperationConfiguration; +import com.arextest.config.model.dto.system.ComparePluginInfo; import com.arextest.config.model.dto.system.SystemConfiguration; import com.arextest.config.repository.ConfigRepositoryProvider; +import com.arextest.diff.service.DecompressService; +import com.arextest.web.common.LogUtils; import com.arextest.web.core.business.SystemConfigurationService; import com.arextest.web.core.business.config.application.ApplicationOperationConfigurableHandler; import com.arextest.web.core.repository.AppContractRepository; @@ -11,16 +16,24 @@ import com.arextest.web.core.repository.mongo.ComparisonTransformConfigurationRepositoryImpl; import com.arextest.web.model.contract.contracts.config.replay.ComparisonTransformConfiguration; import com.arextest.web.model.dto.filesystem.FSInterfaceDto; +import com.google.common.collect.ImmutableMap; +import java.io.IOException; +import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.Set; import javax.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; /** * Created by rchen9 on 2022/9/16. */ +@Slf4j @Component public class ComparisonTransformConfigurableHandler extends AbstractComparisonConfigurableHandler { @@ -32,6 +45,7 @@ public class ComparisonTransformConfigurableHandler @Resource ComparisonTransformConfigurationRepositoryImpl comparisonTransformConfigurationRepository; + @Lazy @Resource SystemConfigurationService systemConfigurationService; @@ -73,9 +87,56 @@ public List queryByInterfaceId(String interfac public List getTransformMethodList() { SystemConfiguration comparePluginInfoConfig = systemConfigurationService.getSystemConfigByKey( KeySummary.COMPARE_PLUGIN_INFO); + return getTransformMethodList(comparePluginInfoConfig); + } + + public List getTransformMethodList(SystemConfiguration comparePluginSystemConfig) { + if (comparePluginSystemConfig == null + || comparePluginSystemConfig.getComparePluginInfo() == null) { + return Collections.emptyList(); + } + + ComparePluginInfo comparePluginInfo = comparePluginSystemConfig.getComparePluginInfo(); + String comparePluginUrl = comparePluginInfo.getComparePluginUrl(); + List transMethodList = comparePluginInfo.getTransMethodList(); - return comparePluginInfoConfig ==null || comparePluginInfoConfig.getComparePluginInfo() == null - ? Collections.emptyList() - : comparePluginInfoConfig.getComparePluginInfo().getTransMethodList(); + if (StringUtils.isNotEmpty(comparePluginUrl) && transMethodList != null) { + return transMethodList; + } + + // update transformMethod in SystemConfiguration + List transformMethod = identifyTransformMethod(comparePluginInfo); + comparePluginInfo.setTransMethodList(transformMethod); + systemConfigurationService.saveConfig(comparePluginSystemConfig); + return transformMethod; } + + private List identifyTransformMethod(ComparePluginInfo comparePluginInfo) { + String comparePluginUrl = comparePluginInfo.getComparePluginUrl(); + if (StringUtils.isEmpty(comparePluginUrl)) { + return Collections.emptyList(); + } + + LogUtils.info(LOGGER, ImmutableMap.of("title", "identifyTransformMethod"), + "identifyTransformMethod, url:{}", comparePluginUrl); + Set result = new HashSet<>(); + try { + RemoteJarClassLoader remoteJarClassLoader = RemoteJarLoaderUtils.loadJar(comparePluginUrl); + List decompressServices = RemoteJarLoaderUtils.loadService( + DecompressService.class, remoteJarClassLoader); + decompressServices.forEach( + decompressService -> { + if (decompressService.getAliasName() != null) { + result.add(decompressService.getAliasName()); + } + }); + remoteJarClassLoader.close(); + } catch (RuntimeException | IOException e) { + LogUtils.error(LOGGER, ImmutableMap.of("title", "identifyTransformMethod"), + "identifyTransformMethod failed, url:{}, exception:{}", comparePluginUrl, e); + } + return new ArrayList<>(result); + } + + }