Skip to content

Commit 8e8e79a

Browse files
committed
1 parent cbb4466 commit 8e8e79a

File tree

22 files changed

+272
-75
lines changed

22 files changed

+272
-75
lines changed

gravitee-apim-rest-api/gravitee-apim-rest-api-automation/gravitee-apim-rest-api-automation-rest/src/test/java/io/gravitee/apim/rest/api/automation/spring/ResourceContextConfiguration.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@
101101
import io.gravitee.apim.core.plugin.crud_service.PolicyPluginCrudService;
102102
import io.gravitee.apim.core.plugin.domain_service.EndpointConnectorPluginDomainService;
103103
import io.gravitee.apim.core.policy.domain_service.PolicyValidationDomainService;
104+
import io.gravitee.apim.core.portal_page.use_case.CreatePortalNavigationItemUseCase;
104105
import io.gravitee.apim.core.portal_page.use_case.ListPortalNavigationItemsUseCase;
105106
import io.gravitee.apim.core.promotion.service_provider.CockpitPromotionServiceProvider;
106107
import io.gravitee.apim.core.promotion.use_case.CreatePromotionUseCase;
@@ -855,6 +856,11 @@ public CreatePromotionUseCase createPromotionUseCase() {
855856
return mock(CreatePromotionUseCase.class);
856857
}
857858

859+
@Bean
860+
public CreatePortalNavigationItemUseCase createPortalNavigationItemUseCase() {
861+
return mock(CreatePortalNavigationItemUseCase.class);
862+
}
863+
858864
@Bean
859865
public ListPortalNavigationItemsUseCase listPortalNavigationItemsUseCase() {
860866
return mock(ListPortalNavigationItemsUseCase.class);

gravitee-apim-rest-api/gravitee-apim-rest-api-management-v2/gravitee-apim-rest-api-management-v2-rest/src/main/java/io/gravitee/rest/api/management/v2/rest/mapper/PortalNavigationItemsMapper.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,25 +38,29 @@ default BasePortalNavigationItem map(io.gravitee.apim.core.portal_page.model.Por
3838
final var id = portalNavigationItem.getId().toString();
3939
final var title = portalNavigationItem.getTitle();
4040
final var area = BasePortalNavigationItem.AreaEnum.fromValue(portalNavigationItem.getArea().name());
41+
final var order = portalNavigationItem.getOrder();
4142
final var parentId = mapParentId(portalNavigationItem.getParentId());
4243

4344
return switch (portalNavigationItem) {
4445
case io.gravitee.apim.core.portal_page.model.PortalNavigationFolder ignored -> new PortalNavigationFolder()
4546
.id(id)
4647
.title(title)
4748
.area(area)
49+
.order(order)
4850
.parentId(parentId);
4951
case io.gravitee.apim.core.portal_page.model.PortalNavigationPage page -> new PortalNavigationPage()
50-
.contentId(page.getContentId().toString())
52+
.contentId(page.getPortalPageContentId().toString())
5153
.id(id)
5254
.title(title)
5355
.area(area)
56+
.order(order)
5457
.parentId(parentId);
5558
case io.gravitee.apim.core.portal_page.model.PortalNavigationLink link -> new PortalNavigationLink()
5659
.url(link.getHref())
5760
.id(id)
5861
.title(title)
5962
.area(area)
63+
.order(order)
6064
.parentId(parentId);
6165
};
6266
}
@@ -69,24 +73,24 @@ default io.gravitee.apim.core.portal_page.model.PortalNavigationItem map(
6973
final var id = PortalNavigationItemId.random();
7074
final var title = createPortalNavigationItem.getTitle();
7175
final var area = PortalArea.valueOf(createPortalNavigationItem.getArea().getValue());
72-
final var parentId = mapParentId(createPortalNavigationItem.getParentId());
76+
final var order = createPortalNavigationItem.getOrder() == null ? Integer.MAX_VALUE : createPortalNavigationItem.getOrder();
7377

74-
return switch (createPortalNavigationItem) {
78+
final var item = switch (createPortalNavigationItem) {
7579
case CreatePortalNavigationFolder ignored -> new io.gravitee.apim.core.portal_page.model.PortalNavigationFolder(
7680
id,
7781
organizationId,
7882
environmentId,
7983
title,
8084
area,
81-
parentId
85+
order
8286
);
8387
case CreatePortalNavigationPage page -> new io.gravitee.apim.core.portal_page.model.PortalNavigationPage(
8488
id,
8589
organizationId,
8690
environmentId,
8791
title,
8892
area,
89-
parentId,
93+
order,
9094
PortalPageContentId.of(page.getContentId())
9195
);
9296
case CreatePortalNavigationLink link -> new io.gravitee.apim.core.portal_page.model.PortalNavigationLink(
@@ -95,13 +99,16 @@ default io.gravitee.apim.core.portal_page.model.PortalNavigationItem map(
9599
environmentId,
96100
title,
97101
area,
98-
parentId,
102+
order,
99103
link.getUrl()
100104
);
101105
default -> throw new TechnicalDomainException(
102106
String.format("Unknown PortalNavigationItem class %s", createPortalNavigationItem.getClass().getSimpleName())
103107
);
104108
};
109+
item.setParentId(mapParentId(createPortalNavigationItem.getParentId()));
110+
111+
return item;
105112
}
106113

107114
private PortalNavigationItemId mapParentId(String parentId) {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package io.gravitee.rest.api.management.v2.rest.resource.ui;
16+
package io.gravitee.rest.api.management.v2.rest.resource.environment;
1717

1818
import io.gravitee.apim.core.portal_page.use_case.CreatePortalNavigationItemUseCase;
1919
import io.gravitee.common.http.MediaType;

gravitee-apim-rest-api/gravitee-apim-rest-api-management-v2/gravitee-apim-rest-api-management-v2-rest/src/main/java/io/gravitee/rest/api/management/v2/rest/resource/installation/EnvironmentResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@
2626
import io.gravitee.rest.api.management.v2.rest.resource.environment.EnvironmentAnalyticsResource;
2727
import io.gravitee.rest.api.management.v2.rest.resource.environment.EnvironmentNewtAIResource;
2828
import io.gravitee.rest.api.management.v2.rest.resource.environment.EnvironmentScoringResource;
29+
import io.gravitee.rest.api.management.v2.rest.resource.environment.PortalNavigationItemsResource;
2930
import io.gravitee.rest.api.management.v2.rest.resource.environment.SharedPolicyGroupsResource;
3031
import io.gravitee.rest.api.management.v2.rest.resource.group.GroupsResource;
3132
import io.gravitee.rest.api.management.v2.rest.resource.kafka_console.ProxyKafkaConsoleResource;
3233
import io.gravitee.rest.api.management.v2.rest.resource.ui.PortalMenuLinksResource;
33-
import io.gravitee.rest.api.management.v2.rest.resource.ui.PortalNavigationItemsResource;
3434
import io.gravitee.rest.api.management.v2.rest.resource.ui.ThemesResource;
3535
import io.gravitee.rest.api.service.EnvironmentService;
3636
import io.gravitee.rest.api.service.common.GraviteeContext;

gravitee-apim-rest-api/gravitee-apim-rest-api-management-v2/gravitee-apim-rest-api-management-v2-rest/src/main/resources/openapi/openapi-environments.yaml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1670,31 +1670,32 @@ components:
16701670
published:
16711671
type: boolean
16721672
description: Whether the page is published or not
1673+
PortalArea:
1674+
type: string
1675+
description: The portal area (used by portal navigation items)
1676+
enum: [HOMEPAGE, TOP_NAVBAR]
1677+
example: TOP_NAVBAR
16731678
BaseCreatePortalNavigationItem:
16741679
type: object
16751680
properties:
16761681
title:
16771682
type: string
1678-
description: Navigation item title
1683+
description: Portal navigation item title
16791684
example: APIs, Guides
16801685
type:
16811686
type: string
1682-
description: Navigation item type
1687+
description: Portal navigation item type
16831688
example: FOLDER
16841689
enum:
16851690
- FOLDER
16861691
- PAGE
16871692
- LINK
16881693
area:
1689-
type: string
1690-
description: Portal area to create navigation item in
1691-
enum:
1692-
- HOMEPAGE
1693-
- TOP_NAVBAR
1694-
example: TOP_NAVBAR
1694+
$ref: "#/components/schemas/PortalArea"
16951695
order:
16961696
type: integer
1697-
description: Order of navigation item (zero based)
1697+
minimum: 0
1698+
description: Portal navigation item order (zero-based)
16981699
example: 2
16991700
parentId:
17001701
type: string
@@ -1710,7 +1711,6 @@ components:
17101711
- title
17111712
- type
17121713
- area
1713-
- order
17141714
CreatePortalNavigationFolder:
17151715
type: object
17161716
title: "CreatePortalNavigationFolder"
@@ -1772,7 +1772,7 @@ components:
17721772
example: TOP_NAVBAR
17731773
order:
17741774
type: integer
1775-
description: Portal navigation item order (zero based)
1775+
description: Portal navigation item order (zero-based)
17761776
example: 2
17771777
parentId:
17781778
type: string

gravitee-apim-rest-api/gravitee-apim-rest-api-management-v2/gravitee-apim-rest-api-management-v2-rest/src/test/java/io/gravitee/rest/api/management/v2/rest/spring/ResourceContextConfiguration.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@
109109
import io.gravitee.apim.core.plugin.crud_service.PolicyPluginCrudService;
110110
import io.gravitee.apim.core.plugin.domain_service.EndpointConnectorPluginDomainService;
111111
import io.gravitee.apim.core.policy.domain_service.PolicyValidationDomainService;
112+
import io.gravitee.apim.core.portal_page.use_case.CreatePortalNavigationItemUseCase;
112113
import io.gravitee.apim.core.portal_page.use_case.ListPortalNavigationItemsUseCase;
113114
import io.gravitee.apim.core.promotion.service_provider.CockpitPromotionServiceProvider;
114115
import io.gravitee.apim.core.promotion.use_case.CreatePromotionUseCase;
@@ -858,6 +859,11 @@ public CreatePromotionUseCase createPromotionUseCase() {
858859
return mock(CreatePromotionUseCase.class);
859860
}
860861

862+
@Bean
863+
public CreatePortalNavigationItemUseCase createPortalNavigationItemUseCase() {
864+
return mock(CreatePortalNavigationItemUseCase.class);
865+
}
866+
861867
@Bean
862868
public ListPortalNavigationItemsUseCase listPortalNavigationItemsUseCase() {
863869
return mock(ListPortalNavigationItemsUseCase.class);

gravitee-apim-rest-api/gravitee-apim-rest-api-management/gravitee-apim-rest-api-management-rest/src/test/java/io/gravitee/rest/api/management/rest/spring/ResourceContextConfiguration.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
import io.gravitee.apim.core.plugin.crud_service.PolicyPluginCrudService;
8787
import io.gravitee.apim.core.plugin.domain_service.EndpointConnectorPluginDomainService;
8888
import io.gravitee.apim.core.policy.domain_service.PolicyValidationDomainService;
89+
import io.gravitee.apim.core.portal_page.use_case.CreatePortalNavigationItemUseCase;
8990
import io.gravitee.apim.core.portal_page.use_case.ListPortalNavigationItemsUseCase;
9091
import io.gravitee.apim.core.promotion.service_provider.CockpitPromotionServiceProvider;
9192
import io.gravitee.apim.core.promotion.use_case.CreatePromotionUseCase;
@@ -994,6 +995,11 @@ public CreatePromotionUseCase createPromotionUseCase() {
994995
return mock(CreatePromotionUseCase.class);
995996
}
996997

998+
@Bean
999+
public CreatePortalNavigationItemUseCase createPortalNavigationItemUseCase() {
1000+
return mock(CreatePortalNavigationItemUseCase.class);
1001+
}
1002+
9971003
@Bean
9981004
public ListPortalNavigationItemsUseCase listPortalNavigationItemsUseCase() {
9991005
return mock(ListPortalNavigationItemsUseCase.class);

gravitee-apim-rest-api/gravitee-apim-rest-api-portal/gravitee-apim-rest-api-portal-rest/src/test/java/io/gravitee/rest/api/portal/rest/spring/ResourceContextConfiguration.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
import io.gravitee.apim.core.plugin.crud_service.PolicyPluginCrudService;
8686
import io.gravitee.apim.core.plugin.domain_service.EndpointConnectorPluginDomainService;
8787
import io.gravitee.apim.core.policy.domain_service.PolicyValidationDomainService;
88+
import io.gravitee.apim.core.portal_page.use_case.CreatePortalNavigationItemUseCase;
8889
import io.gravitee.apim.core.portal_page.use_case.ListPortalNavigationItemsUseCase;
8990
import io.gravitee.apim.core.promotion.service_provider.CockpitPromotionServiceProvider;
9091
import io.gravitee.apim.core.promotion.use_case.CreatePromotionUseCase;
@@ -955,6 +956,11 @@ public CreatePromotionUseCase createPromotionUseCase() {
955956
return mock(CreatePromotionUseCase.class);
956957
}
957958

959+
@Bean
960+
public CreatePortalNavigationItemUseCase createPortalNavigationItemUseCase() {
961+
return mock(CreatePortalNavigationItemUseCase.class);
962+
}
963+
958964
@Bean
959965
public ListPortalNavigationItemsUseCase listPortalNavigationItemsUseCase() {
960966
return mock(ListPortalNavigationItemsUseCase.class);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Copyright © 2015 The Gravitee team (http://gravitee.io)
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package io.gravitee.apim.core.portal_page.exception;
17+
18+
import io.gravitee.apim.core.exception.ValidationDomainException;
19+
20+
public class HomepageAlreadyExistsException extends ValidationDomainException {
21+
22+
public HomepageAlreadyExistsException(String message) {
23+
super(message);
24+
}
25+
}

gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/apim/core/portal_page/model/PortalNavigationFolder.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package io.gravitee.apim.core.portal_page.model;
1717

1818
import jakarta.annotation.Nonnull;
19-
import jakarta.annotation.Nullable;
2019

2120
public final class PortalNavigationFolder extends PortalNavigationItem {
2221

@@ -26,8 +25,8 @@ public PortalNavigationFolder(
2625
@Nonnull String environmentId,
2726
@Nonnull String title,
2827
@Nonnull PortalArea area,
29-
@Nullable PortalNavigationItemId parentId
28+
@Nonnull Integer order
3029
) {
31-
super(id, organizationId, environmentId, title, area, parentId);
30+
super(id, organizationId, environmentId, title, area, order);
3231
}
3332
}

0 commit comments

Comments
 (0)