11package com .openblocks .api .application ;
22
33import 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
510import java .util .ArrayList ;
611import java .util .Collections ;
712import java .util .HashMap ;
813import java .util .Iterator ;
914import java .util .List ;
1015import java .util .Map ;
16+ import java .util .Optional ;
1117import java .util .Set ;
1218import java .util .stream .Collectors ;
1319
1925
2026import com .google .common .collect .Sets ;
2127import com .openblocks .api .home .SessionUserService ;
22- import com .openblocks .sdk .util .MoreMapUtils ;
2328import com .openblocks .domain .permission .service .ResourcePermissionService ;
2429import com .openblocks .sdk .constants .DslConstants .CompoundAppDslConstants ;
30+ import com .openblocks .sdk .util .MoreMapUtils ;
2531
2632import 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