Skip to content

Commit 0429554

Browse files
committed
feat: compatible for compound application
1 parent cd0a1a0 commit 0429554

File tree

2 files changed

+30
-9
lines changed

2 files changed

+30
-9
lines changed

server/api-service/openblocks-sdk/src/main/java/com/openblocks/sdk/constants/DslConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ public static class CompoundAppDslConstants {
1010
public static final String HIDE_WHEN_NO_PERMISSION = "hideWhenNoPermission";
1111
public static final String APP = "app";
1212
public static final String APP_ID = "appId";
13+
public static final String ACTION = "action";
1314
}
1415
}

server/api-service/openblocks-server/src/main/java/com/openblocks/api/application/CompoundApplicationDslFilter.java

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
package com.openblocks.api.application;
22

33
import static com.openblocks.domain.permission.model.ResourceAction.READ_APPLICATIONS;
4+
import static com.openblocks.sdk.constants.DslConstants.CompoundAppDslConstants.ACTION;
5+
import static com.openblocks.sdk.constants.DslConstants.CompoundAppDslConstants.APP;
6+
import static com.openblocks.sdk.constants.DslConstants.CompoundAppDslConstants.APP_ID;
7+
import static com.openblocks.sdk.constants.DslConstants.CompoundAppDslConstants.COMP;
8+
import static com.openblocks.sdk.constants.DslConstants.CompoundAppDslConstants.HIDE_WHEN_NO_PERMISSION;
49

510
import java.util.ArrayList;
611
import java.util.Collections;
712
import java.util.HashMap;
813
import java.util.Iterator;
914
import java.util.List;
1015
import java.util.Map;
16+
import java.util.Optional;
1117
import java.util.Set;
1218
import java.util.stream.Collectors;
1319

@@ -19,9 +25,9 @@
1925

2026
import com.google.common.collect.Sets;
2127
import com.openblocks.api.home.SessionUserService;
22-
import com.openblocks.sdk.util.MoreMapUtils;
2328
import com.openblocks.domain.permission.service.ResourcePermissionService;
2429
import com.openblocks.sdk.constants.DslConstants.CompoundAppDslConstants;
30+
import com.openblocks.sdk.util.MoreMapUtils;
2531

2632
import reactor.core.publisher.Mono;
2733

@@ -50,7 +56,6 @@ public Mono<Void> removeSubAppsFromCompoundDsl(Map<String, Object> dsl) {
5056
.then();
5157
}
5258

53-
@SuppressWarnings("unchecked")
5459
private void removeSubAppsFromCompoundDsl(Map<String, Object> dsl, Set<String> appIdsNeedRemoved) {
5560

5661
List<Map<String, Object>> items = MoreMapUtils.getList(dsl, CompoundAppDslConstants.ITEMS, new ArrayList<>());
@@ -59,13 +64,11 @@ private void removeSubAppsFromCompoundDsl(Map<String, Object> dsl, Set<String> a
5964
Map<String, Object> item = iterator.next();
6065
// for leaf node which has empty items.
6166
if (isLeaf(item)) {
62-
boolean hideWhenNoPermission = MapUtils.getBoolean(item, CompoundAppDslConstants.HIDE_WHEN_NO_PERMISSION, true);
63-
if (!hideWhenNoPermission) {
67+
if (!hideWhenNoPermission(item)) {
6468
continue;
6569
}
6670

67-
Map<String, Object> app = (Map<String, Object>) MapUtils.getMap(item, CompoundAppDslConstants.APP, new HashMap<>());
68-
String appId = MapUtils.getString(app, CompoundAppDslConstants.APP_ID);
71+
String appId = getAppId(item);
6972
if (StringUtils.isNotBlank(appId) && appIdsNeedRemoved.contains(appId)) {
7073
iterator.remove();
7174
continue;
@@ -92,15 +95,13 @@ private boolean isLeaf(Map<String, Object> item) {
9295
/**
9396
* Recursively find all sub-application ids from the DSL of the compound application.
9497
*/
95-
@SuppressWarnings("unchecked")
9698
public Set<String> getAllSubAppIdsFromCompoundAppDsl(Map<String, Object> dsl) {
9799
List<Map<String, Object>> items = MoreMapUtils.getList(dsl, CompoundAppDslConstants.ITEMS, new ArrayList<>());
98100
return items.stream()
99101
.map(item -> {
100102
// If the item is a leaf node, find its id and return it.
101103
if (isLeaf(item)) {
102-
Map<String, Object> app = (Map<String, Object>) MapUtils.getMap(item, CompoundAppDslConstants.APP, new HashMap<>());
103-
String appId = MapUtils.getString(app, CompoundAppDslConstants.APP_ID);
104+
String appId = getAppId(item);
104105
if (StringUtils.isBlank(appId)) {
105106
return Collections.<String> emptySet();
106107
}
@@ -112,4 +113,23 @@ public Set<String> getAllSubAppIdsFromCompoundAppDsl(Map<String, Object> dsl) {
112113
.flatMap(Set::stream)
113114
.collect(Collectors.toSet());
114115
}
116+
117+
@SuppressWarnings("unchecked")
118+
private String getAppId(Map<String, Object> item) {
119+
return Optional.ofNullable((Map<String, Object>) MapUtils.getMap(item, ACTION))
120+
.map(action -> (Map<String, Object>) MapUtils.getMap(action, COMP))
121+
.or(() -> Optional.of(item)) // compatible code
122+
.map(i -> (Map<String, Object>) MapUtils.getMap(i, APP))
123+
.map(app -> MapUtils.getString(app, APP_ID))
124+
.orElse(null);
125+
}
126+
127+
@SuppressWarnings("unchecked")
128+
private boolean hideWhenNoPermission(Map<String, Object> item) {
129+
return Optional.ofNullable((Map<String, Object>) MapUtils.getMap(item, ACTION))
130+
.map(action -> (Map<String, Object>) MapUtils.getMap(action, COMP))
131+
.or(() -> Optional.of(item)) // compatible code
132+
.map(i -> MapUtils.getBoolean(i, HIDE_WHEN_NO_PERMISSION))
133+
.orElse(true);
134+
}
115135
}

0 commit comments

Comments
 (0)