You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shenyu.apache.org by xi...@apache.org on 2022/03/01 10:00:28 UTC
[incubator-shenyu] branch master updated: [Type:Refactor] optimize some code in admin (#2946)
This is an automated email from the ASF dual-hosted git repository.
xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new 909a539 [Type:Refactor] optimize some code in admin (#2946)
909a539 is described below
commit 909a53938156808c2a43edbb259d2ed0072112ab
Author: likeguo <33...@users.noreply.github.com>
AuthorDate: Tue Mar 1 18:00:20 2022 +0800
[Type:Refactor] optimize some code in admin (#2946)
* clean code:user has permission
* clean code:used method reference
* clean code:switch case merge
* clean code:switch case merge
* clean code:switch case merge
---
.../listener/AbstractDataChangedListener.java | 65 ++++++++++------------
.../shenyu/admin/mapper/DataPermissionMapper.java | 8 +++
.../service/impl/DashboardUserServiceImpl.java | 30 ++++++----
.../admin/service/impl/MetaDataServiceImpl.java | 22 ++++----
.../admin/service/impl/PluginServiceImpl.java | 2 +-
.../shenyu/admin/service/impl/RuleServiceImpl.java | 4 +-
.../admin/service/impl/SelectorServiceImpl.java | 2 +-
.../admin/service/impl/SyncDataServiceImpl.java | 2 +-
.../resources/mappers/data-permission-sqlmap.xml | 6 +-
9 files changed, 77 insertions(+), 64 deletions(-)
diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractDataChangedListener.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractDataChangedListener.java
index 2247a7a..dd426ce 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractDataChangedListener.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractDataChangedListener.java
@@ -17,7 +17,6 @@
package org.apache.shenyu.admin.listener;
-import com.google.gson.reflect.TypeToken;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.shenyu.admin.service.AppAuthService;
import org.apache.shenyu.admin.service.MetaDataService;
@@ -52,7 +51,6 @@ import java.util.concurrent.ConcurrentMap;
*
* @since 2.0.0
*/
-@SuppressWarnings("all")
public abstract class AbstractDataChangedListener implements DataChangedListener, InitializingBean {
/**
@@ -96,30 +94,20 @@ public abstract class AbstractDataChangedListener implements DataChangedListener
ConfigDataCache config = CACHE.get(groupKey.name());
switch (groupKey) {
case APP_AUTH:
- List<AppAuthData> appAuthList = GsonUtils.getGson().fromJson(config.getJson(), new TypeToken<List<AppAuthData>>() {
- }.getType());
- return new ConfigData<>(config.getMd5(), config.getLastModifyTime(), appAuthList);
+ return buildConfigData(config, AppAuthData.class);
case PLUGIN:
- List<PluginData> pluginList = GsonUtils.getGson().fromJson(config.getJson(), new TypeToken<List<PluginData>>() {
- }.getType());
- return new ConfigData<>(config.getMd5(), config.getLastModifyTime(), pluginList);
+ return buildConfigData(config, PluginData.class);
case RULE:
- List<RuleData> ruleList = GsonUtils.getGson().fromJson(config.getJson(), new TypeToken<List<RuleData>>() {
- }.getType());
- return new ConfigData<>(config.getMd5(), config.getLastModifyTime(), ruleList);
+ return buildConfigData(config, RuleData.class);
case SELECTOR:
- List<SelectorData> selectorList = GsonUtils.getGson().fromJson(config.getJson(), new TypeToken<List<SelectorData>>() {
- }.getType());
- return new ConfigData<>(config.getMd5(), config.getLastModifyTime(), selectorList);
+ return buildConfigData(config, SelectorData.class);
case META_DATA:
- List<MetaData> metaList = GsonUtils.getGson().fromJson(config.getJson(), new TypeToken<List<MetaData>>() {
- }.getType());
- return new ConfigData<>(config.getMd5(), config.getLastModifyTime(), metaList);
+ return buildConfigData(config, MetaData.class);
default:
throw new IllegalStateException("Unexpected groupKey: " + groupKey);
}
}
-
+
@Override
public void onAppAuthChanged(final List<AppAuthData> changed, final DataEventTypeEnum eventType) {
if (CollectionUtils.isEmpty(changed)) {
@@ -128,7 +116,7 @@ public abstract class AbstractDataChangedListener implements DataChangedListener
this.updateAppAuthCache();
this.afterAppAuthChanged(changed, eventType);
}
-
+
/**
* After app auth changed.
*
@@ -137,7 +125,7 @@ public abstract class AbstractDataChangedListener implements DataChangedListener
*/
protected void afterAppAuthChanged(final List<AppAuthData> changed, final DataEventTypeEnum eventType) {
}
-
+
@Override
public void onMetaDataChanged(final List<MetaData> changed, final DataEventTypeEnum eventType) {
if (CollectionUtils.isEmpty(changed)) {
@@ -146,7 +134,7 @@ public abstract class AbstractDataChangedListener implements DataChangedListener
this.updateMetaDataCache();
this.afterMetaDataChanged(changed, eventType);
}
-
+
/**
* After meta data changed.
*
@@ -155,7 +143,7 @@ public abstract class AbstractDataChangedListener implements DataChangedListener
*/
protected void afterMetaDataChanged(final List<MetaData> changed, final DataEventTypeEnum eventType) {
}
-
+
@Override
public void onPluginChanged(final List<PluginData> changed, final DataEventTypeEnum eventType) {
if (CollectionUtils.isEmpty(changed)) {
@@ -164,7 +152,7 @@ public abstract class AbstractDataChangedListener implements DataChangedListener
this.updatePluginCache();
this.afterPluginChanged(changed, eventType);
}
-
+
/**
* After plugin changed.
*
@@ -173,7 +161,7 @@ public abstract class AbstractDataChangedListener implements DataChangedListener
*/
protected void afterPluginChanged(final List<PluginData> changed, final DataEventTypeEnum eventType) {
}
-
+
@Override
public void onRuleChanged(final List<RuleData> changed, final DataEventTypeEnum eventType) {
if (CollectionUtils.isEmpty(changed)) {
@@ -182,7 +170,7 @@ public abstract class AbstractDataChangedListener implements DataChangedListener
this.updateRuleCache();
this.afterRuleChanged(changed, eventType);
}
-
+
/**
* After rule changed.
*
@@ -191,7 +179,7 @@ public abstract class AbstractDataChangedListener implements DataChangedListener
*/
protected void afterRuleChanged(final List<RuleData> changed, final DataEventTypeEnum eventType) {
}
-
+
@Override
public void onSelectorChanged(final List<SelectorData> changed, final DataEventTypeEnum eventType) {
if (CollectionUtils.isEmpty(changed)) {
@@ -200,7 +188,7 @@ public abstract class AbstractDataChangedListener implements DataChangedListener
this.updateSelectorCache();
this.afterSelectorChanged(changed, eventType);
}
-
+
/**
* After selector changed.
*
@@ -209,15 +197,15 @@ public abstract class AbstractDataChangedListener implements DataChangedListener
*/
protected void afterSelectorChanged(final List<SelectorData> changed, final DataEventTypeEnum eventType) {
}
-
+
@Override
public final void afterPropertiesSet() {
this.refreshLocalCache();
this.afterInitialize();
}
-
+
protected abstract void afterInitialize();
-
+
/**
* if md5 is not the same as the original, then update lcoal cache.
* @param group ConfigGroupEnum
@@ -230,7 +218,7 @@ public abstract class AbstractDataChangedListener implements DataChangedListener
ConfigDataCache oldVal = CACHE.put(newVal.getGroup(), newVal);
LOG.info("update config cache[{}], old: {}, updated: {}", group, oldVal, newVal);
}
-
+
/**
* refresh local cache.
*/
@@ -241,40 +229,43 @@ public abstract class AbstractDataChangedListener implements DataChangedListener
this.updateSelectorCache();
this.updateMetaDataCache();
}
-
+
/**
* Update selector cache.
*/
protected void updateSelectorCache() {
this.updateCache(ConfigGroupEnum.SELECTOR, selectorService.listAll());
}
-
+
/**
* Update rule cache.
*/
protected void updateRuleCache() {
this.updateCache(ConfigGroupEnum.RULE, ruleService.listAll());
}
-
+
/**
* Update plugin cache.
*/
protected void updatePluginCache() {
this.updateCache(ConfigGroupEnum.PLUGIN, pluginService.listAll());
}
-
+
/**
* Update app auth cache.
*/
protected void updateAppAuthCache() {
this.updateCache(ConfigGroupEnum.APP_AUTH, appAuthService.listAll());
}
-
+
/**
* Update meta data cache.
*/
protected void updateMetaDataCache() {
this.updateCache(ConfigGroupEnum.META_DATA, metaDataService.listAll());
}
-
+
+ private <T> ConfigData<T> buildConfigData(final ConfigDataCache config, final Class<T> dataType) {
+ return new ConfigData<>(config.getMd5(), config.getLastModifyTime(), GsonUtils.getInstance().fromList(config.getJson(), dataType));
+ }
}
diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DataPermissionMapper.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DataPermissionMapper.java
index 26c3680..0beb2d8 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DataPermissionMapper.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DataPermissionMapper.java
@@ -30,6 +30,14 @@ import java.util.Set;
*/
@Mapper
public interface DataPermissionMapper {
+
+ /**
+ * user has permission.
+ *
+ * @param userId userId
+ * @return has permission,if not has permission the return null.
+ */
+ Boolean existed(String userId);
/**
* get list of {@link DataPermissionDO} by user id and data type.
diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DashboardUserServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DashboardUserServiceImpl.java
index 5e3c071..88c78a8 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DashboardUserServiceImpl.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DashboardUserServiceImpl.java
@@ -147,7 +147,7 @@ public class DashboardUserServiceImpl implements DashboardUserService {
if (Objects.nonNull(dashboardUserDO)) {
idSet.remove(dashboardUserDO.getId());
}
- if (idSet.size() > 0) {
+ if (CollectionUtils.isNotEmpty(ids)) {
ret = dashboardUserMapper.deleteByIdSet(idSet);
userRoleMapper.deleteByUserIdSet(idSet);
dataPermissionMapper.deleteByUserIdSet(idSet);
@@ -168,15 +168,25 @@ public class DashboardUserServiceImpl implements DashboardUserService {
DashboardUserVO dashboardUserVO = DashboardUserVO.buildDashboardUserVO(dashboardUserMapper.selectById(id));
- Set<String> roleIdSet = Optional.ofNullable(userRoleMapper.findByUserId(id)).orElseGet(() -> new ArrayList<>())
- .stream().map(userRoleDO -> userRoleDO.getRoleId()).collect(Collectors.toSet());
-
- List<RoleDO> allRoleDOList = Optional.ofNullable(roleMapper.selectAll()).orElseGet(() -> new ArrayList<>());
- List<RoleVO> allRoles = allRoleDOList.stream().map(RoleVO::buildRoleVO).collect(Collectors.toList());
-
- List<RoleDO> roleDOList = allRoleDOList.stream().filter(roleDO -> roleIdSet.contains(roleDO.getId())).collect(Collectors.toList());
- List<RoleVO> roles = Optional.ofNullable(roleDOList).orElseGet(() -> new ArrayList<>()).stream()
- .map(roleDO -> RoleVO.buildRoleVO(roleDO)).filter(Objects::nonNull).collect(Collectors.toList());
+ Set<String> roleIdSet = Optional.ofNullable(userRoleMapper.findByUserId(id))
+ .orElseGet(ArrayList::new)
+ .stream()
+ .map(UserRoleDO::getRoleId)
+ .collect(Collectors.toSet());
+
+ List<RoleDO> allRoleDOList = Optional.ofNullable(roleMapper.selectAll())
+ .orElseGet(ArrayList::new);
+ List<RoleVO> allRoles = allRoleDOList.stream()
+ .map(RoleVO::buildRoleVO).collect(Collectors.toList());
+
+ List<RoleDO> roleDOList = allRoleDOList.stream()
+ .filter(roleDO -> roleIdSet.contains(roleDO.getId()))
+ .collect(Collectors.toList());
+ List<RoleVO> roles = Optional.of(roleDOList)
+ .orElseGet(ArrayList::new).stream()
+ .map(RoleVO::buildRoleVO)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
return DashboardUserEditVO.buildDashboardUserEditVO(dashboardUserVO, roles, allRoles);
}
diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java
index d9f10da..57bbf3e 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java
@@ -125,12 +125,12 @@ public class MetaDataServiceImpl implements MetaDataService {
public int delete(final List<String> ids) {
int count = 0;
- Set<String> idSet = Optional.ofNullable(ids).orElseGet(() -> new ArrayList<>())
- .stream().filter(id -> StringUtils.isNotEmpty(id)).collect(Collectors.toSet());
+ Set<String> idSet = Optional.ofNullable(ids).orElseGet(ArrayList::new)
+ .stream().filter(StringUtils::isNotEmpty).collect(Collectors.toSet());
if (CollectionUtils.isNotEmpty(idSet)) {
List<MetaDataDO> metaDataDoList = metaDataMapper.selectByIdSet(idSet);
- List<MetaData> metaDataList = Optional.ofNullable(metaDataDoList).orElseGet(() -> new ArrayList<>())
- .stream().map(metaDataDO -> MetaDataTransfer.INSTANCE.mapToData(metaDataDO)).collect(Collectors.toList());
+ List<MetaData> metaDataList = Optional.ofNullable(metaDataDoList).orElseGet(ArrayList::new)
+ .stream().map(MetaDataTransfer.INSTANCE::mapToData).collect(Collectors.toList());
count = metaDataMapper.deleteByIdSet(idSet);
eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.META_DATA, DataEventTypeEnum.DELETE, metaDataList));
@@ -142,16 +142,17 @@ public class MetaDataServiceImpl implements MetaDataService {
@Override
public String enabled(final List<String> ids, final Boolean enabled) {
- Set<String> idSet = Optional.ofNullable(ids).orElseGet(() -> new ArrayList<>())
- .stream().filter(id -> StringUtils.isNotEmpty(id)).collect(Collectors.toSet());
+ Set<String> idSet = Optional.ofNullable(ids).orElseGet(ArrayList::new)
+ .stream().filter(StringUtils::isNotEmpty).collect(Collectors.toSet());
if (CollectionUtils.isEmpty(idSet)) {
return AdminConstants.ID_NOT_EXIST;
}
- List<MetaDataDO> metaDataDoList = Optional.ofNullable(metaDataMapper.selectByIdSet(idSet)).orElseGet(() -> new ArrayList<>());
+ List<MetaDataDO> metaDataDoList = Optional.ofNullable(metaDataMapper.selectByIdSet(idSet)).orElseGet(ArrayList::new);
if (idSet.size() != metaDataDoList.size()) {
return AdminConstants.ID_NOT_EXIST;
}
- List<MetaData> metaDataList = metaDataDoList.stream().map(metaDataDO -> MetaDataTransfer.INSTANCE.mapToData(metaDataDO))
+ List<MetaData> metaDataList = metaDataDoList.stream()
+ .map(MetaDataTransfer.INSTANCE::mapToData)
.collect(Collectors.toList());
metaDataMapper.updateEnableBatch(idSet, enabled);
@@ -219,8 +220,7 @@ public class MetaDataServiceImpl implements MetaDataService {
}
private String checkData(final MetaDataDTO metaDataDTO) {
- Boolean success = checkParam(metaDataDTO);
- if (!success) {
+ if (!checkParam(metaDataDTO)) {
LOG.error("metaData create param is error, {}", metaDataDTO);
return AdminConstants.PARAMS_ERROR;
}
@@ -233,7 +233,7 @@ public class MetaDataServiceImpl implements MetaDataService {
return StringUtils.EMPTY;
}
- private Boolean checkParam(final MetaDataDTO metaDataDTO) {
+ private boolean checkParam(final MetaDataDTO metaDataDTO) {
return !StringUtils.isEmpty(metaDataDTO.getAppName())
&& !StringUtils.isEmpty(metaDataDTO.getPath())
&& !StringUtils.isEmpty(metaDataDTO.getRpcType())
diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java
index 868c474..6a7cff1 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java
@@ -202,7 +202,7 @@ public class PluginServiceImpl implements PluginService {
return AdminConstants.SYS_PLUGIN_ID_NOT_EXIST;
}
List<PluginDO> plugins = Optional.ofNullable(pluginMapper.selectByIds(ids)).orElseGet(ArrayList::new);
- Set<String> idSet = new HashSet<>(Optional.ofNullable(ids).orElseGet(ArrayList::new));
+ Set<String> idSet = new HashSet<>(Optional.of(ids).orElseGet(ArrayList::new));
if (idSet.size() > plugins.size()) {
return AdminConstants.SYS_PLUGIN_ID_NOT_EXIST;
}
diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
index 8b0e9e6..ca48a83 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
@@ -129,7 +129,7 @@ public class RuleServiceImpl implements RuleService {
List<RuleConditionDTO> ruleConditions = ruleDTO.getRuleConditions();
if (StringUtils.isEmpty(ruleDTO.getId())) {
ruleCount = ruleMapper.insertSelective(ruleDO);
- if (dataPermissionMapper.listByUserId(JwtUtils.getUserInfo().getUserId()).size() > 0) {
+ if (Boolean.TRUE.equals(dataPermissionMapper.existed(JwtUtils.getUserInfo().getUserId()))) {
DataPermissionDTO dataPermissionDTO = new DataPermissionDTO();
dataPermissionDTO.setUserId(JwtUtils.getUserInfo().getUserId());
dataPermissionDTO.setDataId(ruleDO.getId());
@@ -274,7 +274,7 @@ public class RuleServiceImpl implements RuleService {
return list1;
}));
- return Optional.ofNullable(ruleDOList).orElseGet(ArrayList::new)
+ return Optional.of(ruleDOList).orElseGet(ArrayList::new)
.stream().filter(Objects::nonNull).map(ruleDO -> {
String ruleId = ruleDO.getId();
List<ConditionData> conditions = conditionMap.get(ruleId);
diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SelectorServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SelectorServiceImpl.java
index 5fc41b8..afee8b1 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SelectorServiceImpl.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SelectorServiceImpl.java
@@ -163,7 +163,7 @@ public class SelectorServiceImpl implements SelectorService {
selectorConditionMapper.insertSelective(SelectorConditionDO.buildSelectorConditionDO(selectorConditionDTO));
});
// check selector add
- if (dataPermissionMapper.listByUserId(JwtUtils.getUserInfo().getUserId()).size() > 0) {
+ if (Boolean.TRUE.equals(dataPermissionMapper.existed(JwtUtils.getUserInfo().getUserId()))) {
DataPermissionDTO dataPermissionDTO = new DataPermissionDTO();
dataPermissionDTO.setUserId(JwtUtils.getUserInfo().getUserId());
dataPermissionDTO.setDataId(selectorDO.getId());
diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java
index 57150ec..c1c5cd2 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java
@@ -111,7 +111,7 @@ public class SyncDataServiceImpl implements SyncDataService {
eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.SELECTOR, DataEventTypeEnum.REFRESH, selectorDataList));
- List<String> selectorIdList = selectorDataList.stream().map(selectorData -> selectorData.getId())
+ List<String> selectorIdList = selectorDataList.stream().map(SelectorData::getId)
.collect(Collectors.toList());
List<RuleData> allRuleDataList = ruleService.findBySelectorIdList(selectorIdList);
diff --git a/shenyu-admin/src/main/resources/mappers/data-permission-sqlmap.xml b/shenyu-admin/src/main/resources/mappers/data-permission-sqlmap.xml
index 2df75cc..96c360b 100644
--- a/shenyu-admin/src/main/resources/mappers/data-permission-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/data-permission-sqlmap.xml
@@ -89,6 +89,10 @@
and user_id = #{userId,jdbcType=VARCHAR} and data_type = #{dataType,jdbcType=INTEGER}
</select>
+ <select id="existed" resultType="java.lang.Boolean">
+ select true from data_permission where user_id = #{userId,jdbcType=VARCHAR} limit 1
+ </select>
+
<insert id="insertSelective" parameterType="org.apache.shenyu.admin.model.entity.DataPermissionDO">
insert into data_permission
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -142,4 +146,4 @@
</foreach>
</insert>
-</mapper>
\ No newline at end of file
+</mapper>