diff --git a/.run/Rest API - JDBC.run.xml b/.run/Rest API - JDBC.run.xml
index aba30df4fec..90effe21320 100644
--- a/.run/Rest API - JDBC.run.xml
+++ b/.run/Rest API - JDBC.run.xml
@@ -14,6 +14,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/gravitee-apim-integration-tests/src/test/resources/proto/hello_streaming.proto b/gravitee-apim-integration-tests/src/test/resources/proto/hello_streaming.proto
index 033c1708851..7aa7b372606 100644
--- a/gravitee-apim-integration-tests/src/test/resources/proto/hello_streaming.proto
+++ b/gravitee-apim-integration-tests/src/test/resources/proto/hello_streaming.proto
@@ -1,4 +1,5 @@
-// Copyright 2015 The gRPC Authors
+//
+// Copyright © 2015 The Gravitee team (http://gravitee.io)
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -11,6 +12,8 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
+//
+
syntax = "proto3";
option java_multiple_files = true;
diff --git a/gravitee-apim-integration-tests/src/test/resources/proto/helloworld.proto b/gravitee-apim-integration-tests/src/test/resources/proto/helloworld.proto
index 12d0bd4d906..03d5ba1db03 100644
--- a/gravitee-apim-integration-tests/src/test/resources/proto/helloworld.proto
+++ b/gravitee-apim-integration-tests/src/test/resources/proto/helloworld.proto
@@ -1,4 +1,5 @@
-// Copyright 2015 The gRPC Authors
+//
+// Copyright © 2015 The Gravitee team (http://gravitee.io)
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -11,6 +12,8 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
+//
+
syntax = "proto3";
option java_multiple_files = true;
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-management/gravitee-apim-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/auth/CockpitAuthenticationResource.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-management/gravitee-apim-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/auth/CockpitAuthenticationResource.java
index 333d732548e..40c00f76f04 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-management/gravitee-apim-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/auth/CockpitAuthenticationResource.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-management/gravitee-apim-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/auth/CockpitAuthenticationResource.java
@@ -172,16 +172,18 @@ public Response tokenExchange(@QueryParam(value = "token") final String token, @
private Key getPublicKey() throws Exception {
final KeyStore trustStore = loadTrustStore();
- final Certificate cert = trustStore.getCertificate(environment.getProperty("cockpit.keystore.key.alias", "cockpit-client"));
+ final Certificate cert = trustStore.getCertificate(
+ environment.getProperty("cockpit.connector.ws.ssl.keystore.key.alias", "cockpit-client")
+ );
return cert.getPublicKey();
}
private KeyStore loadTrustStore() throws Exception {
- final KeyStore keystore = KeyStore.getInstance(environment.getProperty("cockpit.keystore.type"));
+ final KeyStore keystore = KeyStore.getInstance(environment.getProperty("cockpit.connector.ws.ssl.keystore.type"));
- try (InputStream is = new File(environment.getProperty("cockpit.keystore.path")).toURI().toURL().openStream()) {
- final String password = environment.getProperty("cockpit.keystore.password");
+ try (InputStream is = new File(environment.getProperty("cockpit.connector.ws.ssl.keystore.path")).toURI().toURL().openStream()) {
+ final String password = environment.getProperty("cockpit.connector.ws.ssl.keystore.password");
keystore.load(is, null == password ? null : password.toCharArray());
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/CockpitCommandService.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/CockpitCommandService.java
index a2da502b927..00aa9410f27 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/CockpitCommandService.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/CockpitCommandService.java
@@ -15,13 +15,9 @@
*/
package io.gravitee.rest.api.service.cockpit.command;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.Payload;
-import io.gravitee.cockpit.api.command.Reply;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgeReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReply;
public interface CockpitCommandService {
BridgeReply send(BridgeCommand command);
- Reply send(Command command);
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/CockpitCommandServiceImpl.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/CockpitCommandServiceImpl.java
index bf2e7f7ede6..edf124b8246 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/CockpitCommandServiceImpl.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/CockpitCommandServiceImpl.java
@@ -16,14 +16,8 @@
package io.gravitee.rest.api.service.cockpit.command;
import io.gravitee.cockpit.api.CockpitConnector;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.Payload;
-import io.gravitee.cockpit.api.command.Reply;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgePayload;
-import io.gravitee.cockpit.api.command.bridge.BridgeReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeSimpleReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReply;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@@ -41,20 +35,10 @@ public CockpitCommandServiceImpl(
@Override
public BridgeReply send(BridgeCommand command) {
- return (BridgeReply) send((Command) command);
- }
-
- @Override
- public Reply send(Command command) {
return cockpitConnector
.sendCommand(command)
- .onErrorReturn(error ->
- new BridgeSimpleReply(
- command.getId(),
- CommandStatus.ERROR,
- error.getMessage() != null ? error.getMessage() : error.toString()
- )
- )
+ .onErrorReturn(error -> new BridgeReply(command.getId(), error.getMessage() != null ? error.getMessage() : error.toString()))
+ .cast(BridgeReply.class)
.blockingGet();
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/CockpitConnectorCommandHandlersFactory.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/CockpitConnectorCommandHandlersFactory.java
new file mode 100644
index 00000000000..737f40f7e0d
--- /dev/null
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/CockpitConnectorCommandHandlersFactory.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright © 2015 The Gravitee team (http://gravitee.io)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.gravitee.rest.api.service.cockpit.command;
+
+import io.gravitee.exchange.api.command.Command;
+import io.gravitee.exchange.api.command.CommandAdapter;
+import io.gravitee.exchange.api.command.CommandHandler;
+import io.gravitee.exchange.api.command.Reply;
+import io.gravitee.exchange.api.command.ReplyAdapter;
+import io.gravitee.exchange.api.connector.ConnectorCommandContext;
+import io.gravitee.exchange.api.connector.ConnectorCommandHandlersFactory;
+import io.gravitee.exchange.api.websocket.protocol.ProtocolVersion;
+import java.util.List;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author Guillaume LAMIRAND (guillaume.lamirand at graviteesource.com)
+ * @author GraviteeSource Team
+ */
+@Component("cockpitConnectorCommandHandlersFactory")
+@RequiredArgsConstructor
+public class CockpitConnectorCommandHandlersFactory implements ConnectorCommandHandlersFactory {
+
+ private final List, ? extends Reply>>> commandHandlers;
+ private final List, ? extends Command>, ? extends Reply>>> commandAdapters;
+ private final List, ? extends Reply>>> replyAdapters;
+
+ @Override
+ public List, ? extends Reply>>> buildCommandHandlers(
+ final ConnectorCommandContext connectorCommandContext
+ ) {
+ return commandHandlers;
+ }
+
+ @Override
+ public List, ? extends Command>, ? extends Reply>>> buildCommandAdapters(
+ final ConnectorCommandContext connectorCommandContext,
+ final ProtocolVersion protocolVersion
+ ) {
+ return commandAdapters;
+ }
+
+ @Override
+ public List, ? extends Reply>>> buildReplyAdapters(
+ final ConnectorCommandContext connectorCommandContext,
+ final ProtocolVersion protocolVersion
+ ) {
+ return replyAdapters;
+ }
+}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/adapter/HelloCommandAdapter.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/adapter/HelloCommandAdapter.java
new file mode 100644
index 00000000000..f5bf9ab9bf0
--- /dev/null
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/adapter/HelloCommandAdapter.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright © 2015 The Gravitee team (http://gravitee.io)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.gravitee.rest.api.service.cockpit.command.adapter;
+
+import io.gravitee.apim.core.cockpit.query_service.CockpitAccessService;
+import io.gravitee.apim.core.installation.domain_service.InstallationTypeDomainService;
+import io.gravitee.apim.core.installation.model.InstallationType;
+import io.gravitee.cockpit.api.CockpitConnector;
+import io.gravitee.cockpit.api.command.model.accesspoint.AccessPoint;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.hello.HelloCommand;
+import io.gravitee.cockpit.api.command.v1.hello.HelloCommandPayload;
+import io.gravitee.cockpit.api.command.v1.hello.HelloReply;
+import io.gravitee.cockpit.api.command.v1.installation.AdditionalInfoConstants;
+import io.gravitee.common.util.Version;
+import io.gravitee.exchange.api.command.CommandAdapter;
+import io.gravitee.node.api.Node;
+import io.gravitee.plugin.core.api.PluginRegistry;
+import io.gravitee.rest.api.service.InstallationService;
+import io.gravitee.rest.api.service.common.GraviteeContext;
+import io.reactivex.rxjava3.core.Single;
+import jakarta.annotation.PostConstruct;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author Florent CHAMFROY (florent.chamfroy at graviteesource.com)
+ * @author GraviteeSource Team
+ */
+@Component
+@RequiredArgsConstructor
+@Slf4j
+public class HelloCommandAdapter implements CommandAdapter {
+
+ private static final String PATH_SUFFIX = "/";
+
+ @Value("${installation.api.url:http://localhost:8083}")
+ private String apiURL;
+
+ @Value("${installation.api.proxyPath.management:${http.api.management.entrypoint:${http.api.entrypoint:/}management}}")
+ private String managementProxyPath;
+
+ @Value("${cockpit.auth.path:/auth/cockpit?token={token}}")
+ private String authPath;
+
+ @Value("${cockpit.trial:false}")
+ private boolean cockpitTrial;
+
+ private final Node node;
+ private final InstallationService installationService;
+ private final InstallationTypeDomainService installationTypeDomainService;
+ private final CockpitAccessService cockpitAccessService;
+ private final PluginRegistry pluginRegistry;
+ private String buildAuthPath;
+
+ @PostConstruct
+ public void afterPropertiesSet() {
+ StringBuilder authPathBuilder = new StringBuilder(managementProxyPath);
+ if (managementProxyPath.endsWith(PATH_SUFFIX) && authPath.startsWith(PATH_SUFFIX)) {
+ authPathBuilder.append(authPath.substring(1));
+ } else if (
+ (managementProxyPath.endsWith(PATH_SUFFIX) && !authPath.startsWith(PATH_SUFFIX)) ||
+ (!managementProxyPath.endsWith(PATH_SUFFIX) && authPath.startsWith(PATH_SUFFIX))
+ ) {
+ authPathBuilder.append(authPath);
+ } else if (!managementProxyPath.endsWith(PATH_SUFFIX) && !authPath.startsWith(PATH_SUFFIX)) {
+ authPathBuilder.append(managementProxyPath).append(PATH_SUFFIX).append(authPath);
+ }
+ this.buildAuthPath = authPathBuilder.toString();
+ }
+
+ @Override
+ public String supportType() {
+ return CockpitCommandType.HELLO.name();
+ }
+
+ @Override
+ public Single adapt(final io.gravitee.exchange.api.command.hello.HelloCommand command) {
+ return Single
+ .fromCallable(installationService::getOrInitialize)
+ .map(installation -> {
+ InstallationType installationType = installationTypeDomainService.get();
+
+ HelloCommandPayload.HelloCommandPayloadBuilder, ?> payloadBuilder = HelloCommandPayload
+ .builder()
+ .node(
+ io.gravitee.cockpit.api.command.model.Node
+ .builder()
+ .application(node.application())
+ .installationId(installation.getId())
+ .hostname(node.hostname())
+ .version(Version.RUNTIME_VERSION.MAJOR_VERSION)
+ .connectorVersion(connectorVersion())
+ .build()
+ )
+ .installationType(installationType.getLabel())
+ .trial(cockpitTrial)
+ .defaultOrganizationId(GraviteeContext.getDefaultOrganization())
+ .defaultEnvironmentId(GraviteeContext.getDefaultEnvironment());
+ Map additionalInformation = new HashMap<>(installation.getAdditionalInformation());
+ additionalInformation.put(AdditionalInfoConstants.AUTH_PATH, buildAuthPath);
+ if (installationType == InstallationType.MULTI_TENANT) {
+ Map> accessPointTemplates = new EnumMap<>(AccessPoint.Type.class);
+ cockpitAccessService
+ .getAccessPointsTemplate()
+ .forEach((type, accessPoints) ->
+ accessPointTemplates.put(
+ AccessPoint.Type.valueOf(type.name()),
+ accessPoints
+ .stream()
+ .map(accessPoint ->
+ AccessPoint
+ .builder()
+ .host(accessPoint.getHost())
+ .secured(accessPoint.isSecured())
+ .target(AccessPoint.Target.valueOf(accessPoint.getTarget().name()))
+ .build()
+ )
+ .toList()
+ )
+ );
+ payloadBuilder.accessPointsTemplate(accessPointTemplates);
+ } else {
+ additionalInformation.put(AdditionalInfoConstants.AUTH_BASE_URL, apiURL);
+ }
+ payloadBuilder.additionalInformation(additionalInformation);
+ return new HelloCommand(payloadBuilder.build());
+ });
+ }
+
+ private String connectorVersion() {
+ try {
+ return this.pluginRegistry.get("cockpit", "cockpit-connectors-ws").manifest().version();
+ } catch (Exception e) {
+ return "unknown";
+ }
+ }
+}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/adapter/HelloReplyAdapter.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/adapter/HelloReplyAdapter.java
new file mode 100644
index 00000000000..d04707ae464
--- /dev/null
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/adapter/HelloReplyAdapter.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright © 2015 The Gravitee team (http://gravitee.io)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.gravitee.rest.api.service.cockpit.command.adapter;
+
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.hello.HelloReply;
+import io.gravitee.exchange.api.command.CommandStatus;
+import io.gravitee.exchange.api.command.ReplyAdapter;
+import io.gravitee.rest.api.model.EnvironmentEntity;
+import io.gravitee.rest.api.model.OrganizationEntity;
+import io.gravitee.rest.api.model.UpdateEnvironmentEntity;
+import io.gravitee.rest.api.model.UpdateOrganizationEntity;
+import io.gravitee.rest.api.service.EnvironmentService;
+import io.gravitee.rest.api.service.InstallationService;
+import io.gravitee.rest.api.service.OrganizationService;
+import io.reactivex.rxjava3.core.Single;
+import java.util.Map;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author Florent CHAMFROY (florent.chamfroy at graviteesource.com)
+ * @author GraviteeSource Team
+ */
+@Component
+@RequiredArgsConstructor
+@Slf4j
+public class HelloReplyAdapter implements ReplyAdapter {
+
+ private final InstallationService installationService;
+ private final EnvironmentService environmentService;
+ private final OrganizationService organizationService;
+
+ @Override
+ public String supportType() {
+ return CockpitCommandType.HELLO.name();
+ }
+
+ @Override
+ public Single adapt(final HelloReply reply) {
+ return Single
+ .just(reply.getPayload())
+ .map(replyPayload -> {
+ if (reply.getCommandStatus() == CommandStatus.SUCCEEDED) {
+ final Map additionalInformation = installationService.getOrInitialize().getAdditionalInformation();
+ additionalInformation.put(InstallationService.COCKPIT_INSTALLATION_ID, replyPayload.getInstallationId());
+ additionalInformation.put(InstallationService.COCKPIT_INSTALLATION_STATUS, replyPayload.getInstallationStatus());
+ installationService.setAdditionalInformation(additionalInformation);
+
+ if (replyPayload.getDefaultEnvironmentCockpitId() != null) {
+ updateDefaultEnvironmentCockpitId(replyPayload.getDefaultEnvironmentCockpitId());
+ }
+
+ if (replyPayload.getDefaultOrganizationCockpitId() != null) {
+ updateDefaultOrganizationCockpitId(replyPayload.getDefaultOrganizationCockpitId());
+ }
+ }
+
+ return new io.gravitee.exchange.api.command.hello.HelloReply(reply.getCommandId(), replyPayload);
+ });
+ }
+
+ private void updateDefaultEnvironmentCockpitId(String defaultEnvironmentCockpitId) {
+ EnvironmentEntity defaultEnvironment = environmentService.getDefaultOrInitialize();
+
+ UpdateEnvironmentEntity updateEnvironment = new UpdateEnvironmentEntity(defaultEnvironment);
+ updateEnvironment.setCockpitId(defaultEnvironmentCockpitId);
+
+ environmentService.createOrUpdate(defaultEnvironment.getOrganizationId(), defaultEnvironment.getId(), updateEnvironment);
+ }
+
+ private void updateDefaultOrganizationCockpitId(String defaultOrganizationCockpitId) {
+ OrganizationEntity defaultOrganization = organizationService.getDefaultOrInitialize();
+
+ UpdateOrganizationEntity updateOrganization = new UpdateOrganizationEntity(defaultOrganization);
+ updateOrganization.setCockpitId(defaultOrganizationCockpitId);
+
+ organizationService.updateOrganization(defaultOrganization.getId(), updateOrganization);
+ }
+}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandFactory.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandFactory.java
index b978ad14005..a51f5c5a63c 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandFactory.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandFactory.java
@@ -15,9 +15,8 @@
*/
package io.gravitee.rest.api.service.cockpit.command.bridge;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgePayload;
-import io.gravitee.cockpit.api.command.bridge.BridgeTarget;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommandPayload;
import io.gravitee.rest.api.service.InstallationService;
import io.gravitee.rest.api.service.cockpit.command.bridge.operation.BridgeOperation;
import java.util.Collections;
@@ -35,15 +34,20 @@ public BridgeCommandFactory(InstallationService installationService) {
}
public BridgeCommand createListEnvironmentCommand(String organizationId, String environmentId) {
- BridgeCommand listEnvironmentCommand = initBridgeCommand(organizationId, environmentId);
-
- BridgeTarget target = new BridgeTarget();
- target.setScopes(Collections.singletonList(BRIDGE_SCOPE_APIM));
- listEnvironmentCommand.setTarget(target);
-
- listEnvironmentCommand.setOperation(BridgeOperation.LIST_ENVIRONMENT.name());
-
- return listEnvironmentCommand;
+ BridgeCommandPayload.BridgeTarget target = new BridgeCommandPayload.BridgeTarget(
+ Collections.singletonList(BRIDGE_SCOPE_APIM),
+ null
+ );
+ return new BridgeCommand(
+ BridgeCommandPayload
+ .builder()
+ .environmentId(environmentId)
+ .organizationId(organizationId)
+ .installationId(installationService.get().getId())
+ .operation(BridgeOperation.LIST_ENVIRONMENT.name())
+ .target(target)
+ .build()
+ );
}
public BridgeCommand createPromoteApiCommand(
@@ -52,19 +56,21 @@ public BridgeCommand createPromoteApiCommand(
String targetEnvironmentId,
String serializedPromotion
) {
- BridgeCommand createPromoteApiCommand = initBridgeCommand(organizationId, environmentId);
- createPromoteApiCommand.setOperation(BridgeOperation.PROMOTE_API.name());
-
- BridgePayload payload = new BridgePayload();
- payload.setContent(serializedPromotion);
- createPromoteApiCommand.setPayload(payload);
-
- BridgeTarget target = new BridgeTarget();
- target.setScopes(Collections.singletonList(BRIDGE_SCOPE_APIM));
- target.setEnvironmentId(targetEnvironmentId);
- createPromoteApiCommand.setTarget(target);
-
- return createPromoteApiCommand;
+ BridgeCommandPayload.BridgeTarget target = new BridgeCommandPayload.BridgeTarget(
+ Collections.singletonList(BRIDGE_SCOPE_APIM),
+ targetEnvironmentId
+ );
+ return new BridgeCommand(
+ BridgeCommandPayload
+ .builder()
+ .environmentId(environmentId)
+ .organizationId(organizationId)
+ .installationId(installationService.get().getId())
+ .operation(BridgeOperation.PROMOTE_API.name())
+ .target(target)
+ .content(serializedPromotion)
+ .build()
+ );
}
public BridgeCommand createProcessPromotionCommand(
@@ -73,26 +79,20 @@ public BridgeCommand createProcessPromotionCommand(
String sourceEnvCockpitId,
String serializedPromotion
) {
- BridgeCommand processPromotionCommand = initBridgeCommand(organizationId, environmentId);
- processPromotionCommand.setOperation(BridgeOperation.PROCESS_API_PROMOTION.name());
-
- BridgePayload payload = new BridgePayload();
- payload.setContent(serializedPromotion);
- processPromotionCommand.setPayload(payload);
-
- BridgeTarget target = new BridgeTarget();
- target.setScopes(Collections.singletonList(BRIDGE_SCOPE_APIM));
- target.setEnvironmentId(sourceEnvCockpitId);
- processPromotionCommand.setTarget(target);
-
- return processPromotionCommand;
- }
-
- private BridgeCommand initBridgeCommand(String organizationId, String environmentId) {
- BridgeCommand command = new BridgeCommand();
- command.setEnvironmentId(environmentId);
- command.setOrganizationId(organizationId);
- command.setInstallationId(installationService.get().getId());
- return command;
+ BridgeCommandPayload.BridgeTarget target = new BridgeCommandPayload.BridgeTarget(
+ Collections.singletonList(BRIDGE_SCOPE_APIM),
+ sourceEnvCockpitId
+ );
+ return new BridgeCommand(
+ BridgeCommandPayload
+ .builder()
+ .environmentId(environmentId)
+ .organizationId(organizationId)
+ .installationId(installationService.get().getId())
+ .operation(BridgeOperation.PROCESS_API_PROMOTION.name())
+ .target(target)
+ .content(serializedPromotion)
+ .build()
+ );
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandHandler.java
index 90c4ae28d94..ce39207a21b 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandHandler.java
@@ -15,17 +15,15 @@
*/
package io.gravitee.rest.api.service.cockpit.command.bridge;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandHandler;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgeReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeSimpleReply;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReply;
+import io.gravitee.exchange.api.command.CommandHandler;
import io.gravitee.rest.api.service.cockpit.command.bridge.operation.BridgeOperationHandler;
import io.reactivex.rxjava3.core.Single;
import java.util.List;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
@@ -33,10 +31,10 @@
* @author GraviteeSource Team
*/
@Component
+@RequiredArgsConstructor
+@Slf4j
public class BridgeCommandHandler implements CommandHandler {
- private final Logger logger = LoggerFactory.getLogger(BridgeCommandHandler.class);
-
private List operationHandlers;
public BridgeCommandHandler(List operationHandlers) {
@@ -44,15 +42,15 @@ public BridgeCommandHandler(List operationHandlers) {
}
@Override
- public Command.Type handleType() {
- return Command.Type.BRIDGE_COMMAND;
+ public String supportType() {
+ return CockpitCommandType.BRIDGE.name();
}
@Override
public Single handle(BridgeCommand command) {
return operationHandlers
.stream()
- .filter(handle -> handle.canHandle(command.getOperation()))
+ .filter(handle -> handle.canHandle(command.getPayload().operation()))
.findFirst()
.orElse(noOperationHandler)
.handle(command);
@@ -66,13 +64,9 @@ public boolean canHandle(String bridgeOperation) {
@Override
public Single handle(BridgeCommand command) {
- logger.warn("No handler found for this operation {} ", command.getOperation());
+ log.warn("No handler found for this operation {} ", command.getPayload().operation());
return Single.just(
- new BridgeSimpleReply(
- command.getId(),
- CommandStatus.ERROR,
- "No handler found for this operation: " + command.getOperation()
- )
+ new BridgeReply(command.getId(), "No handler found for this operation: " + command.getPayload().operation())
);
}
};
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/BridgeOperationHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/BridgeOperationHandler.java
index 10b9290014d..a68207c9c5a 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/BridgeOperationHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/BridgeOperationHandler.java
@@ -15,8 +15,8 @@
*/
package io.gravitee.rest.api.service.cockpit.command.bridge.operation;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgeReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReply;
import io.reactivex.rxjava3.core.Single;
public interface BridgeOperationHandler {
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ListEnvironmentOperationHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ListEnvironmentOperationHandler.java
index 815f8957dc9..c99ac6a075f 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ListEnvironmentOperationHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ListEnvironmentOperationHandler.java
@@ -17,42 +17,28 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgeMultiReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeSimpleReply;
-import io.gravitee.rest.api.model.EnvironmentEntity;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReplyPayload;
import io.gravitee.rest.api.service.EnvironmentService;
import io.gravitee.rest.api.service.InstallationService;
import io.gravitee.rest.api.service.exceptions.TechnicalManagementException;
import io.reactivex.rxjava3.core.Single;
import java.util.List;
import java.util.Objects;
-import java.util.stream.Collectors;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
+@RequiredArgsConstructor
@Component
+@Slf4j
public class ListEnvironmentOperationHandler implements BridgeOperationHandler {
- private final Logger logger = LoggerFactory.getLogger(ListEnvironmentOperationHandler.class);
-
private final EnvironmentService environmentService;
private final InstallationService installationService;
private final ObjectMapper objectMapper;
- public ListEnvironmentOperationHandler(
- EnvironmentService environmentService,
- InstallationService installationService,
- ObjectMapper objectMapper
- ) {
- this.environmentService = environmentService;
- this.installationService = installationService;
- this.objectMapper = objectMapper;
- }
-
@Override
public boolean canHandle(String bridgeOperation) {
return Objects.equals(BridgeOperation.LIST_ENVIRONMENT.name(), bridgeOperation);
@@ -60,37 +46,36 @@ public boolean canHandle(String bridgeOperation) {
@Override
public Single handle(BridgeCommand bridgeCommand) {
- BridgeMultiReply multiReply = new BridgeMultiReply();
- multiReply.setCommandId(bridgeCommand.getId());
+ String organizationId = bridgeCommand.getPayload().organizationId();
try {
- final List managedEnvironments =
- this.environmentService.findByOrganization(bridgeCommand.getOrganizationId());
- multiReply.setCommandStatus(CommandStatus.SUCCEEDED);
- multiReply.setReplies(
- managedEnvironments
+ List replyContents =
+ this.environmentService.findByOrganization(organizationId)
.stream()
.map(environmentEntity -> {
- BridgeSimpleReply simpleReply = new BridgeSimpleReply();
- simpleReply.setCommandId(bridgeCommand.getId());
- simpleReply.setCommandStatus(CommandStatus.SUCCEEDED);
- simpleReply.setOrganizationId(environmentEntity.getOrganizationId());
- simpleReply.setEnvironmentId(environmentEntity.getId());
- simpleReply.setInstallationId(installationService.get().getId());
+ BridgeReplyPayload.BridgeReplyContent.BridgeReplyContentBuilder builder = BridgeReplyPayload.BridgeReplyContent
+ .builder()
+ .environmentId(environmentEntity.getId())
+ .organizationId(environmentEntity.getOrganizationId())
+ .installationId(installationService.get().getId());
+
try {
- simpleReply.setPayload(objectMapper.writeValueAsString(environmentEntity));
+ return BridgeReplyPayload.BridgeReplyContent
+ .builder()
+ .environmentId(environmentEntity.getId())
+ .organizationId(environmentEntity.getOrganizationId())
+ .installationId(installationService.get().getId())
+ .content(objectMapper.writeValueAsString(environmentEntity))
+ .build();
} catch (JsonProcessingException e) {
- logger.warn("Problem while serializing environment {}", environmentEntity.getId());
- simpleReply.setMessage("Problem while serializing environment: " + environmentEntity.getId());
- simpleReply.setCommandStatus(CommandStatus.ERROR);
+ log.warn("Problem while serializing environment {}", environmentEntity.getId());
+ return null;
}
- return simpleReply;
})
- .collect(Collectors.toList())
- );
+ .filter(Objects::nonNull)
+ .toList();
+ return Single.just(new BridgeReply(bridgeCommand.getId(), new BridgeReplyPayload(replyContents)));
} catch (TechnicalManagementException ex) {
- multiReply.setCommandStatus(CommandStatus.ERROR);
- multiReply.setMessage("No environment available for organization: " + bridgeCommand.getOrganizationId());
+ return Single.just(new BridgeReply(bridgeCommand.getId(), "No environment available for organization: " + organizationId));
}
- return Single.just(multiReply);
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ProcessPromotionOperationHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ProcessPromotionOperationHandler.java
index 199eabadc4d..646fce49d25 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ProcessPromotionOperationHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ProcessPromotionOperationHandler.java
@@ -17,17 +17,18 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgeReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeSimpleReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommandPayload;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReplyPayload;
import io.gravitee.rest.api.model.promotion.PromotionEntity;
import io.gravitee.rest.api.service.InstallationService;
import io.gravitee.rest.api.service.promotion.PromotionService;
import io.reactivex.rxjava3.core.Single;
+import java.util.List;
import java.util.Objects;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
@@ -35,24 +36,14 @@
* @author GraviteeSource Team
*/
@Component
+@Slf4j
+@RequiredArgsConstructor
public class ProcessPromotionOperationHandler implements BridgeOperationHandler {
- private final Logger logger = LoggerFactory.getLogger(ProcessPromotionOperationHandler.class);
-
private final PromotionService promotionService;
private final InstallationService installationService;
private final ObjectMapper objectMapper;
- public ProcessPromotionOperationHandler(
- PromotionService promotionService,
- InstallationService installationService,
- ObjectMapper objectMapper
- ) {
- this.promotionService = promotionService;
- this.installationService = installationService;
- this.objectMapper = objectMapper;
- }
-
@Override
public boolean canHandle(String bridgeOperation) {
return Objects.equals(BridgeOperation.PROCESS_API_PROMOTION.name(), bridgeOperation);
@@ -60,36 +51,41 @@ public boolean canHandle(String bridgeOperation) {
@Override
public Single handle(BridgeCommand bridgeCommand) {
- BridgeSimpleReply reply = new BridgeSimpleReply();
- reply.setCommandId(bridgeCommand.getId());
-
final PromotionEntity promotionEntity;
try {
- promotionEntity = objectMapper.readValue(bridgeCommand.getPayload().getContent(), PromotionEntity.class);
+ promotionEntity = objectMapper.readValue(bridgeCommand.getPayload().content(), PromotionEntity.class);
} catch (JsonProcessingException e) {
- logger.warn("Problem while deserializing promotion for environment {}", bridgeCommand.getEnvironmentId());
- reply.setCommandStatus(CommandStatus.ERROR);
- reply.setMessage("Problem while deserializing promotion for environment [" + bridgeCommand.getEnvironmentId() + "]");
- return Single.just(reply);
+ String errorDetails =
+ "Problem while deserializing promotion for environment [%s]".formatted(bridgeCommand.getPayload().environmentId());
+ log.warn(errorDetails, e);
+ return Single.just(new BridgeReply(bridgeCommand.getId(), errorDetails));
}
- PromotionEntity promotion = promotionService.createOrUpdate(promotionEntity);
-
- reply.setCommandStatus(CommandStatus.SUCCEEDED);
- reply.setOrganizationId(bridgeCommand.getOrganizationId());
- reply.setEnvironmentId(bridgeCommand.getTarget().getEnvironmentId());
- reply.setInstallationId(installationService.get().getId());
-
try {
- reply.setPayload(objectMapper.writeValueAsString(promotion));
+ PromotionEntity promotion = promotionService.createOrUpdate(promotionEntity);
+ BridgeCommandPayload commandPayload = bridgeCommand.getPayload();
+ return Single.just(
+ new BridgeReply(
+ bridgeCommand.getId(),
+ new BridgeReplyPayload(
+ List.of(
+ BridgeReplyPayload.BridgeReplyContent
+ .builder()
+ .environmentId(commandPayload.target().environmentId())
+ .organizationId(commandPayload.organizationId())
+ .installationId(installationService.get().getId())
+ .content(objectMapper.writeValueAsString(promotion))
+ .build()
+ )
+ )
+ )
+ );
} catch (JsonProcessingException e) {
- logger.warn("Problem while serializing promotion for environment {}", promotion.getId());
- reply.setCommandStatus(CommandStatus.ERROR);
- reply.setMessage("Problem while serializing promotion for environment [" + bridgeCommand.getEnvironmentId() + "]");
- return Single.just(reply);
+ String errorDetails =
+ "Problem while serializing promotion for environment [%s]".formatted(bridgeCommand.getPayload().environmentId());
+ log.warn(errorDetails);
+ return Single.just(new BridgeReply(bridgeCommand.getId(), errorDetails));
}
-
- return Single.just(reply);
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/PromoteApiOperationHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/PromoteApiOperationHandler.java
index 7a65ee51d15..c84b36765a4 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/PromoteApiOperationHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/PromoteApiOperationHandler.java
@@ -17,17 +17,22 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgeReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeSimpleReply;
+import io.gravitee.cockpit.api.command.legacy.bridge.BridgeSimpleReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommandPayload;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReplyPayload;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.promotion.PromotionEntity;
import io.gravitee.rest.api.model.promotion.PromotionEntityStatus;
import io.gravitee.rest.api.service.InstallationService;
import io.gravitee.rest.api.service.promotion.PromotionService;
import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.schedulers.Schedulers;
+import java.util.List;
import java.util.Objects;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@@ -37,24 +42,14 @@
* @author GraviteeSource Team
*/
@Component
+@Slf4j
+@RequiredArgsConstructor
public class PromoteApiOperationHandler implements BridgeOperationHandler {
- private final Logger logger = LoggerFactory.getLogger(PromoteApiOperationHandler.class);
-
private final PromotionService promotionService;
private final InstallationService installationService;
private final ObjectMapper objectMapper;
- public PromoteApiOperationHandler(
- PromotionService promotionService,
- InstallationService installationService,
- ObjectMapper objectMapper
- ) {
- this.promotionService = promotionService;
- this.installationService = installationService;
- this.objectMapper = objectMapper;
- }
-
@Override
public boolean canHandle(String bridgeOperation) {
return Objects.equals(BridgeOperation.PROMOTE_API.name(), bridgeOperation);
@@ -62,18 +57,17 @@ public boolean canHandle(String bridgeOperation) {
@Override
public Single handle(BridgeCommand bridgeCommand) {
- BridgeSimpleReply reply = new BridgeSimpleReply();
- reply.setCommandId(bridgeCommand.getId());
+ BridgeCommandPayload commandPayload = bridgeCommand.getPayload();
final PromotionEntity promotionEntity;
try {
- promotionEntity = objectMapper.readValue(bridgeCommand.getPayload().getContent(), PromotionEntity.class);
+ promotionEntity = objectMapper.readValue(commandPayload.content(), PromotionEntity.class);
} catch (JsonProcessingException e) {
- logger.warn("Problem while deserializing promotion request for environment {}", bridgeCommand.getEnvironmentId());
- reply.setCommandStatus(CommandStatus.ERROR);
- reply.setMessage("Problem while deserializing promotion request for environment [" + bridgeCommand.getEnvironmentId() + "]");
- return Single.just(reply);
+ String errorDetails =
+ "Problem while deserializing promotion request for environment [%s]".formatted(commandPayload.environmentId());
+ log.warn(errorDetails, e);
+ return Single.just(new BridgeReply(bridgeCommand.getId(), errorDetails));
}
promotionEntity.setStatus(PromotionEntityStatus.TO_BE_VALIDATED);
@@ -82,27 +76,37 @@ public Single handle(BridgeCommand bridgeCommand) {
.fromCallable(() -> promotionService.createOrUpdate(promotionEntity))
.subscribeOn(Schedulers.io())
.map(promotion -> {
- reply.setCommandStatus(CommandStatus.SUCCEEDED);
- reply.setOrganizationId(bridgeCommand.getOrganizationId());
- reply.setEnvironmentId(bridgeCommand.getTarget().getEnvironmentId());
- reply.setInstallationId(installationService.get().getId());
-
try {
- reply.setPayload(objectMapper.writeValueAsString(promotion));
- } catch (JsonProcessingException e) {
- logger.warn("Problem while serializing promotion request for environment {}", promotion.getId());
- reply.setCommandStatus(CommandStatus.ERROR);
- reply.setMessage(
- "Problem while serializing promotion request for environment [" + bridgeCommand.getEnvironmentId() + "]"
+ return new BridgeReply(
+ bridgeCommand.getId(),
+ new BridgeReplyPayload(
+ List.of(
+ BridgeReplyPayload.BridgeReplyContent
+ .builder()
+ .environmentId(commandPayload.target().environmentId())
+ .organizationId(commandPayload.organizationId())
+ .installationId(installationService.get().getId())
+ .content(objectMapper.writeValueAsString(promotion))
+ .build()
+ )
+ )
);
+ } catch (JsonProcessingException e) {
+ String errorDetails =
+ "Problem while serializing promotion request for environment [%s]".formatted(
+ bridgeCommand.getPayload().environmentId()
+ );
+ log.warn(errorDetails);
+ return new BridgeReply(bridgeCommand.getId(), errorDetails);
}
- return (BridgeReply) reply;
})
.onErrorReturn(throwable -> {
- logger.warn("Problem while creating or updating promotion for environment {}", bridgeCommand.getEnvironmentId());
- reply.setCommandStatus(CommandStatus.ERROR);
- reply.setMessage("Problem while creating or updating promotion for environment [" + bridgeCommand.getEnvironmentId() + "]");
- return reply;
+ String errorDetails =
+ "Problem while serializing promotion request for environment [%s]".formatted(
+ bridgeCommand.getPayload().environmentId()
+ );
+ log.warn(errorDetails);
+ return new BridgeReply(bridgeCommand.getId(), errorDetails);
});
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/DeployModelCommandHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/DeployModelCommandHandler.java
index 0bdecad43ff..4eb1058a4f5 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/DeployModelCommandHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/DeployModelCommandHandler.java
@@ -17,12 +17,11 @@
import static io.gravitee.rest.api.service.common.SecurityContextHelper.authenticateAs;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandHandler;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.designer.DeployModelCommand;
-import io.gravitee.cockpit.api.command.designer.DeployModelPayload;
-import io.gravitee.cockpit.api.command.designer.DeployModelReply;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.designer.DeployModelCommand;
+import io.gravitee.cockpit.api.command.v1.designer.DeployModelCommandPayload;
+import io.gravitee.cockpit.api.command.v1.designer.DeployModelReply;
+import io.gravitee.exchange.api.command.CommandHandler;
import io.gravitee.rest.api.model.EnvironmentEntity;
import io.gravitee.rest.api.model.UserEntity;
import io.gravitee.rest.api.model.api.ApiEntityResult;
@@ -59,20 +58,20 @@ public class DeployModelCommandHandler implements CommandHandler handle(DeployModelCommand command) {
- DeployModelPayload payload = command.getPayload();
+ DeployModelCommandPayload payload = command.getPayload();
- String apiCrossId = payload.getModelId();
- String userId = payload.getUserId();
- String swaggerDefinition = payload.getSwaggerDefinition();
- String environmentId = payload.getEnvironmentId();
+ String apiCrossId = payload.modelId();
+ String userId = payload.userId();
+ String swaggerDefinition = payload.swaggerDefinition();
+ String environmentId = payload.environmentId();
DeploymentMode mode = DeploymentMode.fromDeployModelPayload(payload);
- List labels = payload.getLabels();
+ List labels = payload.labels();
try {
final EnvironmentEntity environment = getEnvironment(environmentId);
@@ -98,9 +97,7 @@ public Single handle(DeployModelCommand command) {
);
if (message.isPresent()) {
- var reply = new DeployModelReply(command.getId(), CommandStatus.FAILED);
- reply.setMessage(message.get());
- return Single.just(reply);
+ return Single.just(new DeployModelReply(command.getId(), message.get()));
}
result =
@@ -122,9 +119,7 @@ public Single handle(DeployModelCommand command) {
);
if (message.isPresent()) {
- var reply = new DeployModelReply(command.getId(), CommandStatus.FAILED);
- reply.setMessage(message.get());
- return Single.just(reply);
+ return Single.just(new DeployModelReply(command.getId(), message.get()));
}
result =
@@ -141,16 +136,15 @@ public Single handle(DeployModelCommand command) {
if (result.isSuccess()) {
logger.info("Api imported [{}].", result.getApi().getId());
-
- return Single.just(new DeployModelReply(command.getId(), CommandStatus.SUCCEEDED));
+ return Single.just(new DeployModelReply(command.getId()));
}
- logger.error("Failed to import API [{}].", result.getErrorMessage());
- var reply = new DeployModelReply(command.getId(), CommandStatus.FAILED);
- reply.setMessage(result.getErrorMessage());
- return Single.just(reply);
+ String errorDetails = "Failed to import API [%s].".formatted(result.getErrorMessage());
+ logger.error(errorDetails);
+ return Single.just(new DeployModelReply(command.getId(), errorDetails));
} catch (Exception e) {
- logger.error("Error occurred when importing api [{}].", payload.getModelId(), e);
- return Single.just(new DeployModelReply(command.getId(), CommandStatus.ERROR));
+ String errorDetails = "Error occurred when importing api [%s]".formatted(payload.modelId());
+ logger.error(errorDetails, e);
+ return Single.just(new DeployModelReply(command.getId(), errorDetails));
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableEnvironmentCommandHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableEnvironmentCommandHandler.java
index 02b1d732ccf..3b332de1118 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableEnvironmentCommandHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableEnvironmentCommandHandler.java
@@ -17,10 +17,10 @@
import io.gravitee.apim.core.access_point.crud_service.AccessPointCrudService;
import io.gravitee.apim.core.access_point.model.AccessPoint;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandHandler;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.environment.*;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.environment.DisableEnvironmentCommand;
+import io.gravitee.cockpit.api.command.v1.environment.DisableEnvironmentReply;
+import io.gravitee.exchange.api.command.CommandHandler;
import io.gravitee.repository.management.api.ApiRepository;
import io.gravitee.repository.management.api.search.ApiCriteria;
import io.gravitee.repository.management.api.search.ApiFieldFilter;
@@ -31,7 +31,6 @@
import io.gravitee.rest.api.service.configuration.identity.IdentityProviderActivationService;
import io.gravitee.rest.api.service.v4.ApiStateService;
import io.reactivex.rxjava3.core.Single;
-import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@@ -61,8 +60,8 @@ public DisableEnvironmentCommandHandler(
}
@Override
- public Command.Type handleType() {
- return Command.Type.DISABLE_ENVIRONMENT_COMMAND;
+ public String supportType() {
+ return CockpitCommandType.DISABLE_ENVIRONMENT.name();
}
@Override
@@ -70,7 +69,7 @@ public Single handle(DisableEnvironmentCommand command)
var payload = command.getPayload();
try {
- var environment = environmentService.findByCockpitId(payload.getCockpitId());
+ var environment = environmentService.findByCockpitId(payload.cockpitId());
var executionContext = new ExecutionContext(environment);
// Stop all Environment APIs
@@ -79,7 +78,7 @@ public Single handle(DisableEnvironmentCommand command)
new ApiCriteria.Builder().state(LifecycleState.STARTED).environmentId(environment.getId()).build(),
new ApiFieldFilter.Builder().excludeDefinition().excludePicture().build()
)
- .forEach(api -> apiStateService.stop(executionContext, api.getId(), payload.getUserId()));
+ .forEach(api -> apiStateService.stop(executionContext, api.getId(), payload.userId()));
// Delete related access points
this.accessPointService.deleteAccessPoints(AccessPoint.ReferenceType.ENVIRONMENT, environment.getId());
@@ -94,10 +93,11 @@ public Single handle(DisableEnvironmentCommand command)
);
log.info("Environment [{}] with id [{}] has been disabled.", environment.getName(), environment.getId());
- return Single.just(new DisableEnvironmentReply(command.getId(), CommandStatus.SUCCEEDED));
+ return Single.just(new DisableEnvironmentReply(command.getId()));
} catch (Exception e) {
- log.error("Error occurred when disabling environment [{}] with id [{}].", payload.getName(), payload.getId(), e);
- return Single.just(new DisableEnvironmentReply(command.getId(), CommandStatus.ERROR));
+ String errorDetails = "Error occurred when disabling environment [%s] with id [%s].".formatted(payload.name(), payload.id());
+ log.error(errorDetails, e);
+ return Single.just(new DisableEnvironmentReply(command.getId(), errorDetails));
}
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableOrganizationCommandHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableOrganizationCommandHandler.java
index aa53820dc6c..f14cb73fb6b 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableOrganizationCommandHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableOrganizationCommandHandler.java
@@ -17,17 +17,15 @@
import io.gravitee.apim.core.access_point.crud_service.AccessPointCrudService;
import io.gravitee.apim.core.access_point.model.AccessPoint;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandHandler;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.organization.DisableOrganizationCommand;
-import io.gravitee.cockpit.api.command.organization.DisableOrganizationReply;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.organization.DisableOrganizationCommand;
+import io.gravitee.cockpit.api.command.v1.organization.DisableOrganizationReply;
+import io.gravitee.exchange.api.command.CommandHandler;
import io.gravitee.rest.api.model.configuration.identity.IdentityProviderActivationReferenceType;
import io.gravitee.rest.api.service.OrganizationService;
import io.gravitee.rest.api.service.common.ExecutionContext;
import io.gravitee.rest.api.service.configuration.identity.IdentityProviderActivationService;
import io.reactivex.rxjava3.core.Single;
-import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -50,15 +48,15 @@ public DisableOrganizationCommandHandler(
}
@Override
- public Command.Type handleType() {
- return Command.Type.DISABLE_ORGANIZATION_COMMAND;
+ public String supportType() {
+ return CockpitCommandType.DISABLE_ORGANIZATION.name();
}
@Override
public Single handle(DisableOrganizationCommand command) {
var organizationPayload = command.getPayload();
try {
- var organization = organizationService.findByCockpitId(organizationPayload.getCockpitId());
+ var organization = organizationService.findByCockpitId(organizationPayload.cockpitId());
// Delete related access points
this.accessPointService.deleteAccessPoints(AccessPoint.ReferenceType.ORGANIZATION, organization.getId());
@@ -75,15 +73,15 @@ public Single handle(DisableOrganizationCommand comman
);
log.info("Organization [{}] with id [{}] has been disabled.", organization.getName(), organization.getId());
- return Single.just(new DisableOrganizationReply(command.getId(), CommandStatus.SUCCEEDED));
+ return Single.just(new DisableOrganizationReply(command.getId()));
} catch (Exception e) {
- log.error(
- "Error occurred when disabling organization [{}] with id [{}].",
- organizationPayload.getName(),
- organizationPayload.getId(),
- e
- );
- return Single.just(new DisableOrganizationReply(command.getId(), CommandStatus.ERROR));
+ String errorDetails =
+ "Error occurred when disabling organization [%s] with id [%s].".formatted(
+ organizationPayload.name(),
+ organizationPayload.id()
+ );
+ log.error(errorDetails, e);
+ return Single.just(new DisableOrganizationReply(command.getId(), errorDetails));
}
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/EnvironmentCommandHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/EnvironmentCommandHandler.java
index 27a0a1c2382..76cc2ae3d86 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/EnvironmentCommandHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/EnvironmentCommandHandler.java
@@ -16,13 +16,12 @@
package io.gravitee.rest.api.service.cockpit.command.handler;
import io.gravitee.apim.core.access_point.crud_service.AccessPointCrudService;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandHandler;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.environment.EnvironmentCommand;
-import io.gravitee.cockpit.api.command.environment.EnvironmentPayload;
-import io.gravitee.cockpit.api.command.environment.EnvironmentReply;
-import io.gravitee.repository.management.model.Environment;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.environment.EnvironmentCommand;
+import io.gravitee.cockpit.api.command.v1.environment.EnvironmentCommandPayload;
+import io.gravitee.cockpit.api.command.v1.environment.EnvironmentReply;
+import io.gravitee.exchange.api.command.CommandHandler;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.EnvironmentEntity;
import io.gravitee.rest.api.model.UpdateEnvironmentEntity;
import io.gravitee.rest.api.service.EnvironmentService;
@@ -47,33 +46,33 @@ public class EnvironmentCommandHandler implements CommandHandler handle(EnvironmentCommand command) {
- EnvironmentPayload environmentPayload = command.getPayload();
+ EnvironmentCommandPayload environmentPayload = command.getPayload();
try {
EnvironmentEntity existingEnvironment = this.getEnvironment(environmentPayload);
UpdateEnvironmentEntity newEnvironment = new UpdateEnvironmentEntity();
- newEnvironment.setCockpitId(environmentPayload.getCockpitId());
- newEnvironment.setHrids(environmentPayload.getHrids());
- newEnvironment.setName(environmentPayload.getName());
- newEnvironment.setDescription(environmentPayload.getDescription());
+ newEnvironment.setCockpitId(environmentPayload.cockpitId());
+ newEnvironment.setHrids(environmentPayload.hrids());
+ newEnvironment.setName(environmentPayload.name());
+ newEnvironment.setDescription(environmentPayload.description());
final EnvironmentEntity environment = environmentService.createOrUpdate(
- existingEnvironment != null ? existingEnvironment.getOrganizationId() : environmentPayload.getOrganizationId(),
- existingEnvironment != null ? existingEnvironment.getId() : environmentPayload.getId(),
+ existingEnvironment != null ? existingEnvironment.getOrganizationId() : environmentPayload.organizationId(),
+ existingEnvironment != null ? existingEnvironment.getId() : environmentPayload.id(),
newEnvironment
);
List accessPointsToCreate;
- if (environmentPayload.getAccessPoints() != null) {
+ if (environmentPayload.accessPoints() != null) {
accessPointsToCreate =
environmentPayload
- .getAccessPoints()
+ .accessPoints()
.stream()
.map(cockpitAccessPoint ->
io.gravitee.apim.core.access_point.model.AccessPoint
@@ -100,21 +99,18 @@ public Single handle(EnvironmentCommand command) {
accessPointsToCreate
);
log.info("Environment [{}] handled with id [{}].", environment.getName(), environment.getId());
- return Single.just(new EnvironmentReply(command.getId(), CommandStatus.SUCCEEDED));
+ return Single.just(new EnvironmentReply(command.getId()));
} catch (Exception e) {
- log.error(
- "Error occurred when handling environment [{}] with id [{}].",
- environmentPayload.getName(),
- environmentPayload.getId(),
- e
- );
- return Single.just(new EnvironmentReply(command.getId(), CommandStatus.ERROR));
+ String errorDetails =
+ "Error occurred when handling environment [%s] with id [%s]".formatted(environmentPayload.name(), environmentPayload.id());
+ log.error(errorDetails, e);
+ return Single.just(new EnvironmentReply(command.getId(), errorDetails));
}
}
- private EnvironmentEntity getEnvironment(EnvironmentPayload environmentPayload) {
+ private EnvironmentEntity getEnvironment(EnvironmentCommandPayload environmentPayload) {
try {
- return this.environmentService.findByCockpitId(environmentPayload.getCockpitId());
+ return this.environmentService.findByCockpitId(environmentPayload.cockpitId());
} catch (EnvironmentNotFoundException ex) {
return null;
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/GoodbyeCommandHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/GoodByeCommandHandler.java
similarity index 65%
rename from gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/GoodbyeCommandHandler.java
rename to gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/GoodByeCommandHandler.java
index effb934e75a..1e2bd166a7b 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/GoodbyeCommandHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/GoodByeCommandHandler.java
@@ -15,11 +15,10 @@
*/
package io.gravitee.rest.api.service.cockpit.command.handler;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandHandler;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.goodbye.GoodbyeCommand;
-import io.gravitee.cockpit.api.command.goodbye.GoodbyeReply;
+import io.gravitee.exchange.api.command.CommandHandler;
+import io.gravitee.exchange.api.command.goodbye.GoodByeCommand;
+import io.gravitee.exchange.api.command.goodbye.GoodByeReply;
+import io.gravitee.exchange.api.command.goodbye.GoodByeReplyPayload;
import io.gravitee.rest.api.model.promotion.PromotionEntityStatus;
import io.gravitee.rest.api.model.promotion.PromotionQuery;
import io.gravitee.rest.api.service.InstallationService;
@@ -27,8 +26,8 @@
import io.reactivex.rxjava3.core.Single;
import java.util.List;
import java.util.Map;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
@@ -36,26 +35,21 @@
* @author GraviteeSource Team
*/
@Component
-public class GoodbyeCommandHandler implements CommandHandler {
+@RequiredArgsConstructor
+@Slf4j
+public class GoodByeCommandHandler implements CommandHandler {
static final String DELETED_STATUS = "DELETED";
- private final Logger logger = LoggerFactory.getLogger(GoodbyeCommandHandler.class);
-
private final InstallationService installationService;
private final PromotionService promotionService;
- public GoodbyeCommandHandler(final InstallationService installationService, PromotionService promotionService) {
- this.installationService = installationService;
- this.promotionService = promotionService;
- }
-
@Override
- public Command.Type handleType() {
- return Command.Type.GOODBYE_COMMAND;
+ public String supportType() {
+ return GoodByeCommand.COMMAND_TYPE;
}
@Override
- public Single handle(GoodbyeCommand command) {
+ public Single handle(GoodByeCommand command) {
final Map additionalInformation = this.installationService.getOrInitialize().getAdditionalInformation();
additionalInformation.put(InstallationService.COCKPIT_INSTALLATION_STATUS, DELETED_STATUS);
@@ -63,11 +57,12 @@ public Single handle(GoodbyeCommand command) {
try {
this.installationService.setAdditionalInformation(additionalInformation);
- logger.info("Installation status is [{}].", DELETED_STATUS);
- return Single.just(new GoodbyeReply(command.getId(), CommandStatus.SUCCEEDED));
+ log.info("Installation status is [{}].", DELETED_STATUS);
+ return Single.just(new GoodByeReply(command.getId(), new GoodByeReplyPayload()));
} catch (Exception ex) {
- logger.info("Error occurred when deleting installation.", ex);
- return Single.just(new GoodbyeReply(command.getId(), CommandStatus.ERROR));
+ String errorDetails = "Error occurred when deleting installation.";
+ log.info(errorDetails, ex);
+ return Single.just(new GoodByeReply(command.getId(), errorDetails));
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/InstallationCommandHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/InstallationCommandHandler.java
index 7b929ae9dcf..201a6fd5da4 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/InstallationCommandHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/InstallationCommandHandler.java
@@ -15,17 +15,16 @@
*/
package io.gravitee.rest.api.service.cockpit.command.handler;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandHandler;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.installation.InstallationCommand;
-import io.gravitee.cockpit.api.command.installation.InstallationPayload;
-import io.gravitee.cockpit.api.command.installation.InstallationReply;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.installation.InstallationCommand;
+import io.gravitee.cockpit.api.command.v1.installation.InstallationCommandPayload;
+import io.gravitee.cockpit.api.command.v1.installation.InstallationReply;
+import io.gravitee.exchange.api.command.CommandHandler;
import io.gravitee.rest.api.service.InstallationService;
import io.reactivex.rxjava3.core.Single;
import java.util.Map;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
@@ -33,34 +32,31 @@
* @author GraviteeSource Team
*/
@Component
+@Slf4j
+@RequiredArgsConstructor
public class InstallationCommandHandler implements CommandHandler {
- private final Logger logger = LoggerFactory.getLogger(InstallationCommandHandler.class);
-
private final InstallationService installationService;
- public InstallationCommandHandler(InstallationService installationService) {
- this.installationService = installationService;
- }
-
@Override
- public Command.Type handleType() {
- return Command.Type.INSTALLATION_COMMAND;
+ public String supportType() {
+ return CockpitCommandType.INSTALLATION.name();
}
@Override
public Single handle(InstallationCommand command) {
- InstallationPayload installationPayload = command.getPayload();
+ InstallationCommandPayload installationPayload = command.getPayload();
final Map additionalInformation = this.installationService.getOrInitialize().getAdditionalInformation();
- additionalInformation.put(InstallationService.COCKPIT_INSTALLATION_STATUS, installationPayload.getStatus());
+ additionalInformation.put(InstallationService.COCKPIT_INSTALLATION_STATUS, installationPayload.status());
try {
this.installationService.setAdditionalInformation(additionalInformation);
- logger.info("Installation status is [{}].", installationPayload.getStatus());
- return Single.just(new InstallationReply(command.getId(), CommandStatus.SUCCEEDED));
+ log.info("Installation status is [{}].", installationPayload.status());
+ return Single.just(new InstallationReply(command.getId()));
} catch (Exception ex) {
- logger.info("Error occurred when updating installation status.", ex);
- return Single.just(new InstallationReply(command.getId(), CommandStatus.ERROR));
+ String errorDetails = "Error occurred when updating installation status.";
+ log.info(errorDetails, ex);
+ return Single.just(new InstallationReply(command.getId(), errorDetails));
}
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/MembershipCommandHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/MembershipCommandHandler.java
index 9bb05aa98de..3e6ac852f18 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/MembershipCommandHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/MembershipCommandHandler.java
@@ -17,12 +17,11 @@
import static io.gravitee.rest.api.service.cockpit.command.handler.UserCommandHandler.COCKPIT_SOURCE;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandHandler;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.membership.MembershipCommand;
-import io.gravitee.cockpit.api.command.membership.MembershipPayload;
-import io.gravitee.cockpit.api.command.membership.MembershipReply;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.membership.MembershipCommand;
+import io.gravitee.cockpit.api.command.v1.membership.MembershipCommandPayload;
+import io.gravitee.cockpit.api.command.v1.membership.MembershipReply;
+import io.gravitee.exchange.api.command.CommandHandler;
import io.gravitee.rest.api.model.MembershipMemberType;
import io.gravitee.rest.api.model.MembershipReferenceType;
import io.gravitee.rest.api.model.RoleEntity;
@@ -36,8 +35,8 @@
import io.reactivex.rxjava3.core.Single;
import java.util.Collections;
import java.util.Optional;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
@@ -45,56 +44,51 @@
* @author GraviteeSource Team
*/
@Component
+@RequiredArgsConstructor
+@Slf4j
public class MembershipCommandHandler implements CommandHandler {
- private final Logger logger = LoggerFactory.getLogger(MembershipCommandHandler.class);
-
private final UserService userService;
private final RoleService roleService;
private final MembershipService membershipService;
- public MembershipCommandHandler(UserService userService, RoleService roleService, MembershipService membershipService) {
- this.userService = userService;
- this.roleService = roleService;
- this.membershipService = membershipService;
- }
-
@Override
- public Command.Type handleType() {
- return Command.Type.MEMBERSHIP_COMMAND;
+ public String supportType() {
+ return CockpitCommandType.MEMBERSHIP.name();
}
@Override
public Single handle(MembershipCommand command) {
- MembershipPayload membershipPayload = command.getPayload();
+ MembershipCommandPayload membershipPayload = command.getPayload();
try {
RoleScope roleScope;
MembershipReferenceType membershipReferenceType;
try {
- roleScope = RoleScope.valueOf(membershipPayload.getReferenceType());
- membershipReferenceType = MembershipReferenceType.valueOf(membershipPayload.getReferenceType());
+ roleScope = RoleScope.valueOf(membershipPayload.referenceType());
+ membershipReferenceType = MembershipReferenceType.valueOf(membershipPayload.referenceType());
} catch (Exception e) {
- logger.error("Invalid referenceType [{}].", membershipPayload.getReferenceType());
- return Single.just(new MembershipReply(command.getId(), CommandStatus.ERROR));
+ String errorDetails = "Invalid referenceType [%s].".formatted(membershipPayload.referenceType());
+ log.error(errorDetails, e);
+ return Single.just(new MembershipReply(command.getId(), errorDetails));
}
ExecutionContext executionContext = new ExecutionContext(
- membershipPayload.getOrganizationId(),
- membershipReferenceType.equals(MembershipReferenceType.ENVIRONMENT) ? membershipPayload.getReferenceId() : null
+ membershipPayload.organizationId(),
+ membershipReferenceType.equals(MembershipReferenceType.ENVIRONMENT) ? membershipPayload.referenceId() : null
);
final UserEntity userEntity = userService.findBySource(
executionContext.getOrganizationId(),
COCKPIT_SOURCE,
- membershipPayload.getUserId(),
+ membershipPayload.userId(),
false
);
- final RoleEntity roleEntity = findRole(executionContext.getOrganizationId(), roleScope, membershipPayload.getRole());
+ final RoleEntity roleEntity = findRole(executionContext.getOrganizationId(), roleScope, membershipPayload.role());
final MembershipService.MembershipReference membershipReference = new MembershipService.MembershipReference(
membershipReferenceType,
- membershipPayload.getReferenceId()
+ membershipPayload.referenceId()
);
final MembershipService.MembershipMember membershipMember = new MembershipService.MembershipMember(
userEntity.getId(),
@@ -115,26 +109,26 @@ public Single handle(MembershipCommand command) {
false
);
- logger.info(
+ log.info(
"Role [{}] assigned on {} [{}] for user [{}] and organization [{}].",
- membershipPayload.getRole(),
- membershipPayload.getReferenceType(),
- membershipPayload.getReferenceId(),
+ membershipPayload.role(),
+ membershipPayload.referenceType(),
+ membershipPayload.referenceId(),
userEntity.getId(),
- membershipPayload.getOrganizationId()
+ membershipPayload.organizationId()
);
- return Single.just(new MembershipReply(command.getId(), CommandStatus.SUCCEEDED));
+ return Single.just(new MembershipReply(command.getId()));
} catch (Exception e) {
- logger.error(
- "Error occurred when trying to assign role [{}] on {} [{}] for cockpit user [{}] and organization [{}].",
- membershipPayload.getRole(),
- membershipPayload.getReferenceType(),
- membershipPayload.getReferenceId(),
- membershipPayload.getUserId(),
- membershipPayload.getOrganizationId(),
- e
- );
- return Single.just(new MembershipReply(command.getId(), CommandStatus.ERROR));
+ String errorDetails =
+ "Error occurred when trying to assign role [%s] on %s [%s] for cockpit user [%s] and organization [%s].".formatted(
+ membershipPayload.role(),
+ membershipPayload.referenceType(),
+ membershipPayload.referenceId(),
+ membershipPayload.userId(),
+ membershipPayload.organizationId()
+ );
+ log.error(errorDetails, e);
+ return Single.just(new MembershipReply(command.getId(), errorDetails));
}
}
@@ -147,7 +141,7 @@ private RoleEntity findRole(String organizationId, RoleScope roleScope, String r
final Optional role = roleService.findByScopeAndName(roleScope, mappedRoleName, organizationId);
- if (!role.isPresent()) {
+ if (role.isEmpty()) {
throw new RoleNotFoundException(roleScope, mappedRoleName);
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/OrganizationCommandHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/OrganizationCommandHandler.java
index 28b71405740..b63678d2510 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/OrganizationCommandHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/OrganizationCommandHandler.java
@@ -18,12 +18,11 @@
import io.gravitee.apim.core.access_point.crud_service.AccessPointCrudService;
import io.gravitee.apim.core.license.domain_service.LicenseDomainService;
import io.gravitee.apim.core.license.model.License;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandHandler;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.organization.OrganizationCommand;
-import io.gravitee.cockpit.api.command.organization.OrganizationPayload;
-import io.gravitee.cockpit.api.command.organization.OrganizationReply;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.organization.OrganizationCommand;
+import io.gravitee.cockpit.api.command.v1.organization.OrganizationCommandPayload;
+import io.gravitee.cockpit.api.command.v1.organization.OrganizationReply;
+import io.gravitee.exchange.api.command.CommandHandler;
import io.gravitee.rest.api.model.OrganizationEntity;
import io.gravitee.rest.api.model.UpdateOrganizationEntity;
import io.gravitee.rest.api.service.OrganizationService;
@@ -50,39 +49,39 @@ public class OrganizationCommandHandler implements CommandHandler handle(OrganizationCommand command) {
- OrganizationPayload organizationPayload = command.getPayload();
+ OrganizationCommandPayload organizationPayload = command.getPayload();
try {
final OrganizationEntity organization = createOrUpdateOrganization(organizationPayload);
- handleLicense(organization, command.getPayload().getLicense());
+ handleLicense(organization, command.getPayload().license());
handleAccessPoints(organizationPayload, organization);
log.info("Organization [{}] handled with id [{}].", organization.getName(), organization.getId());
- return Single.just(new OrganizationReply(command.getId(), CommandStatus.SUCCEEDED));
+ return Single.just(new OrganizationReply(command.getId()));
} catch (Exception e) {
- log.error(
- "Error occurred when handling organization [{}] with id [{}].",
- organizationPayload.getName(),
- organizationPayload.getId(),
- e
- );
- return Single.just(new OrganizationReply(command.getId(), CommandStatus.ERROR));
+ String errorDetails =
+ "Error occurred when handling organization [%s] with id [%s].".formatted(
+ organizationPayload.name(),
+ organizationPayload.id()
+ );
+ log.error(errorDetails, e);
+ return Single.just(new OrganizationReply(command.getId(), errorDetails));
}
}
- private void handleAccessPoints(OrganizationPayload organizationPayload, OrganizationEntity organization) {
+ private void handleAccessPoints(OrganizationCommandPayload organizationPayload, OrganizationEntity organization) {
List accessPointsToCreate;
- if (organizationPayload.getAccessPoints() != null) {
+ if (organizationPayload.accessPoints() != null) {
accessPointsToCreate =
organizationPayload
- .getAccessPoints()
+ .accessPoints()
.stream()
.map(cockpitAccessPoint ->
io.gravitee.apim.core.access_point.model.AccessPoint
@@ -117,23 +116,23 @@ private void handleLicense(OrganizationEntity organization, String license) {
}
}
- private OrganizationEntity createOrUpdateOrganization(OrganizationPayload organizationPayload) {
+ private OrganizationEntity createOrUpdateOrganization(OrganizationCommandPayload organizationPayload) {
String organizationId = this.getOrganizationId(organizationPayload);
UpdateOrganizationEntity newOrganization = new UpdateOrganizationEntity();
- newOrganization.setCockpitId(organizationPayload.getCockpitId());
- newOrganization.setHrids(organizationPayload.getHrids());
- newOrganization.setName(organizationPayload.getName());
- newOrganization.setDescription(organizationPayload.getDescription());
+ newOrganization.setCockpitId(organizationPayload.cockpitId());
+ newOrganization.setHrids(organizationPayload.hrids());
+ newOrganization.setName(organizationPayload.name());
+ newOrganization.setDescription(organizationPayload.description());
return organizationService.createOrUpdate(organizationId, newOrganization);
}
- private String getOrganizationId(OrganizationPayload organizationPayload) {
+ private String getOrganizationId(OrganizationCommandPayload organizationPayload) {
try {
- OrganizationEntity byCockpitId = this.organizationService.findByCockpitId(organizationPayload.getCockpitId());
+ OrganizationEntity byCockpitId = this.organizationService.findByCockpitId(organizationPayload.cockpitId());
return byCockpitId.getId();
} catch (OrganizationNotFoundException ex) {
- return organizationPayload.getId();
+ return organizationPayload.id();
}
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/UnlinkInstallationCommandHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/UnlinkInstallationCommandHandler.java
index 236c7a30d5a..9f317abeccc 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/UnlinkInstallationCommandHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/UnlinkInstallationCommandHandler.java
@@ -17,67 +17,58 @@
import io.gravitee.apim.core.access_point.crud_service.AccessPointCrudService;
import io.gravitee.apim.core.access_point.model.AccessPoint;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandHandler;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.installation.*;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.installation.UnlinkInstallationCommand;
+import io.gravitee.cockpit.api.command.v1.installation.UnlinkInstallationCommandPayload;
+import io.gravitee.cockpit.api.command.v1.installation.UnlinkInstallationReply;
+import io.gravitee.exchange.api.command.CommandHandler;
import io.gravitee.rest.api.model.EnvironmentEntity;
import io.gravitee.rest.api.model.OrganizationEntity;
import io.gravitee.rest.api.service.EnvironmentService;
import io.gravitee.rest.api.service.OrganizationService;
import io.reactivex.rxjava3.core.Single;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Component
+@Slf4j
+@RequiredArgsConstructor
public class UnlinkInstallationCommandHandler implements CommandHandler {
- private final Logger logger = LoggerFactory.getLogger(UnlinkInstallationCommandHandler.class);
-
private final OrganizationService organizationService;
private final EnvironmentService environmentService;
private final AccessPointCrudService accessPointService;
- public UnlinkInstallationCommandHandler(
- OrganizationService organizationService,
- EnvironmentService environmentService,
- AccessPointCrudService accessPointService
- ) {
- this.organizationService = organizationService;
- this.environmentService = environmentService;
- this.accessPointService = accessPointService;
- }
-
@Override
- public Command.Type handleType() {
- return Command.Type.UNLINK_INSTALLATION_COMMAND;
+ public String supportType() {
+ return CockpitCommandType.UNLINK_INSTALLATION.name();
}
@Override
public Single handle(UnlinkInstallationCommand command) {
- UnlinkInstallationPayload unlinkInstallationPayload = command.getPayload();
+ UnlinkInstallationCommandPayload unlinkInstallationPayload = command.getPayload();
try {
- if (unlinkInstallationPayload.getOrganizationCockpitId() != null) {
+ if (unlinkInstallationPayload.organizationCockpitId() != null) {
OrganizationEntity organization =
- this.organizationService.findByCockpitId(unlinkInstallationPayload.getOrganizationCockpitId());
+ this.organizationService.findByCockpitId(unlinkInstallationPayload.organizationCockpitId());
this.accessPointService.deleteAccessPoints(AccessPoint.ReferenceType.ORGANIZATION, organization.getId());
}
- if (unlinkInstallationPayload.getEnvironmentCockpitId() != null) {
- EnvironmentEntity environment =
- this.environmentService.findByCockpitId(unlinkInstallationPayload.getEnvironmentCockpitId());
+ if (unlinkInstallationPayload.environmentCockpitId() != null) {
+ EnvironmentEntity environment = this.environmentService.findByCockpitId(unlinkInstallationPayload.environmentCockpitId());
this.accessPointService.deleteAccessPoints(
io.gravitee.apim.core.access_point.model.AccessPoint.ReferenceType.ENVIRONMENT,
environment.getId()
);
}
- return Single.just(new UnlinkInstallationReply(command.getId(), CommandStatus.SUCCEEDED));
+ return Single.just(new UnlinkInstallationReply(command.getId()));
} catch (Exception ex) {
- logger.info("Error occurred when unlink installation.", ex);
- return Single.just(new UnlinkInstallationReply(command.getId(), CommandStatus.ERROR));
+ String errorDetails = "Error occurred when unlink installation.";
+ log.info(errorDetails, ex);
+ return Single.just(new UnlinkInstallationReply(command.getId(), errorDetails));
}
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/UserCommandHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/UserCommandHandler.java
index 07f9f6b01db..6439a2b7a97 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/UserCommandHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/UserCommandHandler.java
@@ -18,12 +18,11 @@
import static io.gravitee.rest.api.model.configuration.identity.SocialIdentityProviderEntity.UserProfile.PICTURE;
import static io.gravitee.rest.api.model.configuration.identity.SocialIdentityProviderEntity.UserProfile.SUB;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandHandler;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.user.UserCommand;
-import io.gravitee.cockpit.api.command.user.UserPayload;
-import io.gravitee.cockpit.api.command.user.UserReply;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.user.UserCommand;
+import io.gravitee.cockpit.api.command.v1.user.UserCommandPayload;
+import io.gravitee.cockpit.api.command.v1.user.UserReply;
+import io.gravitee.exchange.api.command.CommandHandler;
import io.gravitee.rest.api.model.NewExternalUserEntity;
import io.gravitee.rest.api.model.UpdateUserEntity;
import io.gravitee.rest.api.model.UserEntity;
@@ -32,8 +31,8 @@
import io.gravitee.rest.api.service.exceptions.UserNotFoundException;
import io.reactivex.rxjava3.core.Single;
import java.util.HashMap;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
@@ -41,90 +40,82 @@
* @author GraviteeSource Team
*/
@Component
+@Slf4j
+@RequiredArgsConstructor
public class UserCommandHandler implements CommandHandler {
public static final String COCKPIT_SOURCE = "cockpit";
- private final Logger logger = LoggerFactory.getLogger(UserCommandHandler.class);
private final UserService userService;
- public UserCommandHandler(UserService userService) {
- this.userService = userService;
- }
-
@Override
- public Command.Type handleType() {
- return Command.Type.USER_COMMAND;
+ public String supportType() {
+ return CockpitCommandType.USER.name();
}
@Override
public Single handle(UserCommand command) {
- UserPayload userPayload = command.getPayload();
- ExecutionContext executionContext = new ExecutionContext(userPayload.getOrganizationId(), null);
+ UserCommandPayload userPayload = command.getPayload();
+ ExecutionContext executionContext = new ExecutionContext(userPayload.organizationId(), null);
try {
- final UserEntity existingUser = userService.findBySource(
- userPayload.getOrganizationId(),
- COCKPIT_SOURCE,
- userPayload.getId(),
- false
- );
+ final UserEntity existingUser = userService.findBySource(userPayload.organizationId(), COCKPIT_SOURCE, userPayload.id(), false);
UpdateUserEntity updatedUser = new UpdateUserEntity();
- updatedUser.setFirstname(userPayload.getFirstName());
- updatedUser.setLastname(userPayload.getLastName());
- updatedUser.setEmail(userPayload.getEmail());
- updatedUser.setPicture(userPayload.getPicture());
+ updatedUser.setFirstname(userPayload.firstName());
+ updatedUser.setLastname(userPayload.lastName());
+ updatedUser.setEmail(userPayload.email());
+ updatedUser.setPicture(userPayload.picture());
updatedUser.setCustomFields(new HashMap<>());
- if (userPayload.getAdditionalInformation() != null) {
- updatedUser.getCustomFields().putAll(userPayload.getAdditionalInformation());
+ if (userPayload.additionalInformation() != null) {
+ updatedUser.getCustomFields().putAll(userPayload.additionalInformation());
}
- updatedUser.getCustomFields().computeIfAbsent(PICTURE, k -> userPayload.getPicture());
- updatedUser.getCustomFields().computeIfAbsent(SUB, k -> userPayload.getUsername());
+ updatedUser.getCustomFields().computeIfAbsent(PICTURE, k -> userPayload.picture());
+ updatedUser.getCustomFields().computeIfAbsent(SUB, k -> userPayload.username());
UserEntity cockpitUserEntity = userService.update(executionContext, existingUser.getId(), updatedUser);
- logger.info("User [{}] with APIM id [{}] updated.", userPayload.getUsername(), cockpitUserEntity.getId());
+ log.info("User [{}] with APIM id [{}] updated.", userPayload.username(), cockpitUserEntity.getId());
- return Single.just(new UserReply(command.getId(), CommandStatus.SUCCEEDED));
+ return Single.just(new UserReply(command.getId()));
} catch (UserNotFoundException unfe) {
NewExternalUserEntity newUser = new NewExternalUserEntity();
- newUser.setSourceId(userPayload.getId());
- newUser.setFirstname(userPayload.getFirstName());
- newUser.setLastname(userPayload.getLastName());
- newUser.setEmail(userPayload.getEmail());
- newUser.setPicture(userPayload.getPicture());
+ newUser.setSourceId(userPayload.id());
+ newUser.setFirstname(userPayload.firstName());
+ newUser.setLastname(userPayload.lastName());
+ newUser.setEmail(userPayload.email());
+ newUser.setPicture(userPayload.picture());
newUser.setSource(COCKPIT_SOURCE);
newUser.setCustomFields(new HashMap<>());
- if (userPayload.getAdditionalInformation() != null) {
- newUser.getCustomFields().putAll(userPayload.getAdditionalInformation());
+ if (userPayload.additionalInformation() != null) {
+ newUser.getCustomFields().putAll(userPayload.additionalInformation());
}
- newUser.getCustomFields().computeIfAbsent(PICTURE, k -> userPayload.getPicture());
- newUser.getCustomFields().computeIfAbsent(SUB, k -> userPayload.getUsername());
+ newUser.getCustomFields().computeIfAbsent(PICTURE, k -> userPayload.picture());
+ newUser.getCustomFields().computeIfAbsent(SUB, k -> userPayload.username());
try {
UserEntity cockpitUserEntity = userService.create(executionContext, newUser, false);
- logger.info("User [{}] created with APIM id [{}].", userPayload.getUsername(), cockpitUserEntity.getId());
- return Single.just(new UserReply(command.getId(), CommandStatus.SUCCEEDED));
+ log.info("User [{}] created with APIM id [{}].", userPayload.username(), cockpitUserEntity.getId());
+ return Single.just(new UserReply(command.getId()));
} catch (Exception e) {
- logger.info(
- "Error occurred when creating user [{}] for organization [{}].",
- userPayload.getUsername(),
- userPayload.getOrganizationId(),
- e
- );
- return Single.just(new UserReply(command.getId(), CommandStatus.ERROR));
+ String errorDetails =
+ "Error occurred when creating user [%s] for organization [%s].".formatted(
+ userPayload.username(),
+ userPayload.organizationId()
+ );
+ log.error(errorDetails, e);
+ return Single.just(new UserReply(command.getId(), errorDetails));
}
} catch (Exception e) {
- logger.info(
- "Error occurred when updating user [{}] for organization [{}].",
- userPayload.getUsername(),
- userPayload.getOrganizationId(),
- e
- );
- return Single.just(new UserReply(command.getId(), CommandStatus.ERROR));
+ String errorDetails =
+ "Error occurred when updating user [%s] for organization [%s].".formatted(
+ userPayload.username(),
+ userPayload.organizationId()
+ );
+ log.error(errorDetails, e);
+ return Single.just(new UserReply(command.getId(), errorDetails));
}
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/V4ApiCommandHandler.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/V4ApiCommandHandler.java
index 98b2821aa52..609d9a9e98c 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/V4ApiCommandHandler.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/handler/V4ApiCommandHandler.java
@@ -18,19 +18,18 @@
import static io.gravitee.rest.api.service.common.SecurityContextHelper.authenticateAs;
import com.fasterxml.jackson.core.JsonProcessingException;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandHandler;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.v4api.V4ApiCommand;
-import io.gravitee.cockpit.api.command.v4api.V4ApiPayload;
-import io.gravitee.cockpit.api.command.v4api.V4ApiReply;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.v4api.V4ApiCommand;
+import io.gravitee.cockpit.api.command.v1.v4api.V4ApiCommandPayload;
+import io.gravitee.cockpit.api.command.v1.v4api.V4ApiReply;
+import io.gravitee.cockpit.api.command.v1.v4api.V4ApiReplyPayload;
+import io.gravitee.exchange.api.command.CommandHandler;
import io.gravitee.rest.api.model.UserEntity;
import io.gravitee.rest.api.service.UserService;
import io.gravitee.rest.api.service.cockpit.services.V4ApiServiceCockpit;
-import io.gravitee.rest.api.service.common.GraviteeContext;
import io.reactivex.rxjava3.core.Single;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
@@ -38,46 +37,43 @@
* @author GraviteeSource Team
*/
@Component
+@Slf4j
+@RequiredArgsConstructor
public class V4ApiCommandHandler implements CommandHandler {
- private final Logger logger = LoggerFactory.getLogger(V4ApiCommandHandler.class);
-
private final V4ApiServiceCockpit v4ApiServiceCockpit;
private final UserService userService;
- public V4ApiCommandHandler(V4ApiServiceCockpit v4ApiServiceCockpit, UserService userService) {
- this.v4ApiServiceCockpit = v4ApiServiceCockpit;
- this.userService = userService;
- }
-
@Override
- public Command.Type handleType() {
- return Command.Type.V4_API_COMMAND;
+ public String supportType() {
+ return CockpitCommandType.V4_API.name();
}
@Override
public Single handle(V4ApiCommand command) {
- final V4ApiPayload payload = command.getPayload();
- final UserEntity user = userService.findBySource(payload.getOrganizationId(), "cockpit", payload.getUserId(), true);
+ final V4ApiCommandPayload payload = command.getPayload();
+ final UserEntity user = userService.findBySource(payload.organizationId(), "cockpit", payload.userId(), true);
authenticateAs(user);
try {
return v4ApiServiceCockpit
- .createPublishApi(payload.getOrganizationId(), payload.getEnvironmentId(), user.getId(), payload.getApiDefinition())
+ .createPublishApi(payload.organizationId(), payload.environmentId(), user.getId(), payload.apiDefinition())
.flatMap(apiEntity -> {
- final V4ApiReply reply = new V4ApiReply(command.getId(), CommandStatus.SUCCEEDED);
- reply.setApiId(apiEntity.getId());
- reply.setApiName(apiEntity.getName());
- reply.setApiVersion(apiEntity.getApiVersion());
- logger.info("Api {} successfully created.", apiEntity.getName());
+ final V4ApiReplyPayload v4ApiReplyPayload = V4ApiReplyPayload
+ .builder()
+ .apiId(apiEntity.getId())
+ .apiName(apiEntity.getName())
+ .apiVersion(apiEntity.getApiVersion())
+ .build();
+ log.info("Api {} successfully created.", apiEntity.getName());
- return Single.just(reply);
+ return Single.just(new V4ApiReply(command.getId(), v4ApiReplyPayload));
});
} catch (JsonProcessingException exception) {
- logger.error("An error occurred while creating Api.", exception);
-
- return Single.just(new V4ApiReply(command.getId(), CommandStatus.FAILED));
+ String errorDetails = "An error occurred while creating Api.";
+ log.error(errorDetails, exception);
+ return Single.just(new V4ApiReply(command.getId(), errorDetails));
}
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/producer/HelloCommandProducer.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/producer/HelloCommandProducer.java
deleted file mode 100644
index 9ef5bc31885..00000000000
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/command/producer/HelloCommandProducer.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright © 2015 The Gravitee team (http://gravitee.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.gravitee.rest.api.service.cockpit.command.producer;
-
-import io.gravitee.apim.core.cockpit.query_service.CockpitAccessService;
-import io.gravitee.apim.core.installation.domain_service.InstallationTypeDomainService;
-import io.gravitee.apim.core.installation.model.InstallationType;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandProducer;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.accesspoint.AccessPoint;
-import io.gravitee.cockpit.api.command.hello.HelloCommand;
-import io.gravitee.cockpit.api.command.hello.HelloReply;
-import io.gravitee.cockpit.api.command.installation.AdditionalInfoConstants;
-import io.gravitee.node.api.Node;
-import io.gravitee.rest.api.model.EnvironmentEntity;
-import io.gravitee.rest.api.model.InstallationEntity;
-import io.gravitee.rest.api.model.OrganizationEntity;
-import io.gravitee.rest.api.model.UpdateEnvironmentEntity;
-import io.gravitee.rest.api.model.UpdateOrganizationEntity;
-import io.gravitee.rest.api.service.EnvironmentService;
-import io.gravitee.rest.api.service.InstallationService;
-import io.gravitee.rest.api.service.OrganizationService;
-import io.gravitee.rest.api.service.common.GraviteeContext;
-import io.reactivex.rxjava3.core.Single;
-import jakarta.annotation.PostConstruct;
-import java.util.EnumMap;
-import java.util.List;
-import java.util.Map;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-/**
- * @author Florent CHAMFROY (florent.chamfroy at graviteesource.com)
- * @author GraviteeSource Team
- */
-@Component("cockpitHelloCommandProducer")
-@RequiredArgsConstructor
-@Slf4j
-public class HelloCommandProducer implements CommandProducer {
-
- private static final String PATH_SUFFIX = "/";
-
- @Value("${installation.api.url:http://localhost:8083}")
- private String apiURL;
-
- @Value("${installation.api.proxyPath.management:${http.api.management.entrypoint:${http.api.entrypoint:/}management}}")
- private String managementProxyPath;
-
- @Value("${cockpit.auth.path:/auth/cockpit?token={token}}")
- private String authPath;
-
- @Value("${cockpit.trial:false}")
- private boolean cockpitTrial;
-
- private final Node node;
- private final InstallationService installationService;
- private final EnvironmentService environmentService;
- private final OrganizationService organizationService;
- private final InstallationTypeDomainService installationTypeDomainService;
- private final CockpitAccessService cockpitAccessService;
-
- private String buildAuthPath;
-
- @PostConstruct
- public void afterPropertiesSet() {
- StringBuilder authPathBuilder = new StringBuilder(managementProxyPath);
- if (managementProxyPath.endsWith(PATH_SUFFIX) && authPath.startsWith(PATH_SUFFIX)) {
- authPathBuilder.append(authPath.substring(1));
- } else if (
- (managementProxyPath.endsWith(PATH_SUFFIX) && !authPath.startsWith(PATH_SUFFIX)) ||
- (!managementProxyPath.endsWith(PATH_SUFFIX) && authPath.startsWith(PATH_SUFFIX))
- ) {
- authPathBuilder.append(authPath);
- } else if (!managementProxyPath.endsWith(PATH_SUFFIX) && !authPath.startsWith(PATH_SUFFIX)) {
- authPathBuilder.append(managementProxyPath).append(PATH_SUFFIX).append(authPath);
- }
- this.buildAuthPath = authPathBuilder.toString();
- }
-
- @Override
- public Command.Type produceType() {
- return Command.Type.HELLO_COMMAND;
- }
-
- @Override
- public Single prepare(HelloCommand command) {
- final InstallationEntity installation = installationService.getOrInitialize();
-
- command.getPayload().getNode().setInstallationId(installation.getId());
- command.getPayload().getNode().setHostname(node.hostname());
- command.getPayload().getAdditionalInformation().putAll(installation.getAdditionalInformation());
-
- InstallationType installationType = installationTypeDomainService.get();
- command.getPayload().setInstallationType(installationType.getLabel());
- command.getPayload().setTrial(cockpitTrial);
- command.getPayload().getAdditionalInformation().put(AdditionalInfoConstants.AUTH_PATH, buildAuthPath);
- if (installationType == InstallationType.MULTI_TENANT) {
- Map> accessPointTemplates = new EnumMap<>(AccessPoint.Type.class);
- cockpitAccessService
- .getAccessPointsTemplate()
- .forEach((type, accessPoints) ->
- accessPointTemplates.put(
- AccessPoint.Type.valueOf(type.name()),
- accessPoints
- .stream()
- .map(accessPoint ->
- AccessPoint
- .builder()
- .host(accessPoint.getHost())
- .secured(accessPoint.isSecured())
- .target(AccessPoint.Target.valueOf(accessPoint.getTarget().name()))
- .build()
- )
- .toList()
- )
- );
- command.getPayload().setAccessPointsTemplate(accessPointTemplates);
- } else {
- command.getPayload().getAdditionalInformation().put(AdditionalInfoConstants.AUTH_BASE_URL, apiURL);
- }
-
- command.getPayload().setDefaultOrganizationId(GraviteeContext.getDefaultOrganization());
- command.getPayload().setDefaultEnvironmentId(GraviteeContext.getDefaultEnvironment());
-
- return Single.just(command);
- }
-
- @Override
- public Single handleReply(HelloReply reply) {
- if (reply.getCommandStatus() == CommandStatus.SUCCEEDED) {
- final Map additionalInformation = installationService.getOrInitialize().getAdditionalInformation();
- additionalInformation.put(InstallationService.COCKPIT_INSTALLATION_ID, reply.getInstallationId());
- additionalInformation.put(InstallationService.COCKPIT_INSTALLATION_STATUS, reply.getInstallationStatus());
- installationService.setAdditionalInformation(additionalInformation);
-
- if (reply.getDefaultEnvironmentCockpitId() != null) {
- updateDefaultEnvironmentCockpitId(reply.getDefaultEnvironmentCockpitId());
- }
-
- if (reply.getDefaultOrganizationCockpitId() != null) {
- updateDefaultOrganizationCockpitId(reply.getDefaultOrganizationCockpitId());
- }
- }
-
- return Single.just(reply);
- }
-
- private void updateDefaultEnvironmentCockpitId(String defaultEnvironmentCockpitId) {
- EnvironmentEntity defaultEnvironment = environmentService.getDefaultOrInitialize();
-
- UpdateEnvironmentEntity updateEnvironment = new UpdateEnvironmentEntity(defaultEnvironment);
- updateEnvironment.setCockpitId(defaultEnvironmentCockpitId);
-
- environmentService.createOrUpdate(defaultEnvironment.getOrganizationId(), defaultEnvironment.getId(), updateEnvironment);
- }
-
- private void updateDefaultOrganizationCockpitId(String defaultOrganizationCockpitId) {
- OrganizationEntity defaultOrganization = organizationService.getDefaultOrInitialize();
-
- UpdateOrganizationEntity updateOrganization = new UpdateOrganizationEntity(defaultOrganization);
- updateOrganization.setCockpitId(defaultOrganizationCockpitId);
-
- organizationService.updateOrganization(defaultOrganization.getId(), updateOrganization);
- }
-}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/model/DeploymentMode.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/model/DeploymentMode.java
index ab1fbb9fe7a..e59d4e9eee8 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/model/DeploymentMode.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/model/DeploymentMode.java
@@ -15,7 +15,7 @@
*/
package io.gravitee.rest.api.service.cockpit.model;
-import io.gravitee.cockpit.api.command.designer.DeployModelPayload;
+import io.gravitee.cockpit.api.command.v1.designer.DeployModelCommandPayload;
import java.util.Optional;
public enum DeploymentMode {
@@ -23,16 +23,16 @@ public enum DeploymentMode {
API_MOCKED,
API_PUBLISHED;
- public static DeploymentMode fromDeployModelPayload(DeployModelPayload payload) {
- DeployModelPayload.DeploymentMode mode = Optional
- .ofNullable(payload.getMode())
- .orElse(DeployModelPayload.DeploymentMode.API_DOCUMENTED);
+ public static DeploymentMode fromDeployModelPayload(DeployModelCommandPayload payload) {
+ DeployModelCommandPayload.DeploymentMode mode = Optional
+ .ofNullable(payload.mode())
+ .orElse(DeployModelCommandPayload.DeploymentMode.API_DOCUMENTED);
- if (mode == DeployModelPayload.DeploymentMode.API_MOCKED) {
+ if (mode == DeployModelCommandPayload.DeploymentMode.API_MOCKED) {
return DeploymentMode.API_MOCKED;
}
- if (mode == DeployModelPayload.DeploymentMode.API_PUBLISHED) {
+ if (mode == DeployModelCommandPayload.DeploymentMode.API_PUBLISHED) {
return DeploymentMode.API_PUBLISHED;
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/services/CockpitPromotionServiceImpl.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/services/CockpitPromotionServiceImpl.java
index 282db9a2cf3..f663499be3e 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/services/CockpitPromotionServiceImpl.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/cockpit/services/CockpitPromotionServiceImpl.java
@@ -17,10 +17,9 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgeMultiReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReply;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.EnvironmentEntity;
import io.gravitee.rest.api.model.promotion.PromotionEntity;
import io.gravitee.rest.api.model.promotion.PromotionTargetEntity;
@@ -31,70 +30,58 @@
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Component
+@RequiredArgsConstructor
+@Slf4j
public class CockpitPromotionServiceImpl implements CockpitPromotionService {
- /**
- * Logger.
- */
- private final Logger logger = LoggerFactory.getLogger(CockpitPromotionServiceImpl.class);
-
private final BridgeCommandFactory bridgeCommandFactory;
private final CockpitCommandService cockpitCommandService;
private final ObjectMapper objectMapper;
- public CockpitPromotionServiceImpl(
- BridgeCommandFactory bridgeCommandFactory,
- CockpitCommandService cockpitCommandService,
- ObjectMapper objectMapper
- ) {
- this.bridgeCommandFactory = bridgeCommandFactory;
- this.cockpitCommandService = cockpitCommandService;
- this.objectMapper = objectMapper;
- }
-
@Override
public CockpitReply> listPromotionTargets(String organizationId, String environmentId) {
final BridgeCommand listEnvironmentCommand = this.bridgeCommandFactory.createListEnvironmentCommand(organizationId, environmentId);
BridgeReply bridgeReply = cockpitCommandService.send(listEnvironmentCommand);
if (bridgeReply.getCommandStatus() != CommandStatus.SUCCEEDED) {
- logger.warn("Problem while listing promotion targets through cockpit. \n {}", bridgeReply.getMessage());
+ log.warn("Problem while listing promotion targets through cockpit. \n {}", bridgeReply.getErrorDetails());
return new CockpitReply<>(Collections.emptyList(), CockpitReplyStatus.ERROR);
}
- final List environmentEntities =
- ((BridgeMultiReply) bridgeReply).getReplies()
- .stream()
- .filter(simpleReply -> CommandStatus.SUCCEEDED == simpleReply.getCommandStatus())
- .map(simpleReply -> {
- try {
- final EnvironmentEntity environmentEntity =
- this.objectMapper.readValue(simpleReply.getPayload(), EnvironmentEntity.class);
-
- // Be careful with env and org ids, we need to use the one from the reply and not the payload
- // because cockpit has updated them to handle the case were id is "DEFAULT"
- return new PromotionTargetEntity(
- environmentEntity,
- simpleReply.getOrganizationId(),
- simpleReply.getEnvironmentId(),
- simpleReply.getInstallationId()
- );
- } catch (JsonProcessingException e) {
- logger.warn(
- "Problem while deserializing environment {} with payload {}",
- simpleReply.getEnvironmentId(),
- simpleReply.getPayload()
- );
- return null;
- }
- })
- .filter(Objects::nonNull)
- .collect(Collectors.toList());
+ final List environmentEntities = bridgeReply
+ .getPayload()
+ .contents()
+ .stream()
+ .filter(bridgeReplyContent -> bridgeReplyContent.content() != null)
+ .map(bridgeReplyContent -> {
+ try {
+ final EnvironmentEntity environmentEntity =
+ this.objectMapper.readValue(bridgeReplyContent.content(), EnvironmentEntity.class);
+
+ // Be careful with env and org ids, we need to use the one from the reply and not the payload
+ // because cockpit has updated them to handle the case were id is "DEFAULT"
+ return new PromotionTargetEntity(
+ environmentEntity,
+ bridgeReplyContent.organizationId(),
+ bridgeReplyContent.environmentId(),
+ bridgeReplyContent.installationId()
+ );
+ } catch (JsonProcessingException e) {
+ log.warn(
+ "Problem while deserializing environment {} with payload {}",
+ bridgeReplyContent.environmentId(),
+ bridgeReplyContent.content()
+ );
+ return null;
+ }
+ })
+ .filter(Objects::nonNull)
+ .toList();
return new CockpitReply<>(environmentEntities, CockpitReplyStatus.SUCCEEDED);
}
@@ -104,7 +91,7 @@ public CockpitReply requestPromotion(ExecutionContext execution
try {
serializedPromotion = objectMapper.writeValueAsString(promotionEntity);
} catch (JsonProcessingException e) {
- logger.warn("Problem while serializing promotion {}", promotionEntity.getId());
+ log.warn("Problem while serializing promotion {}", promotionEntity.getId());
}
final BridgeCommand promoteApiCommand =
@@ -117,7 +104,7 @@ public CockpitReply requestPromotion(ExecutionContext execution
BridgeReply bridgeReply = cockpitCommandService.send(promoteApiCommand);
if (bridgeReply.getCommandStatus() != CommandStatus.SUCCEEDED) {
- logger.warn("Problem while sending API promotion request through cockpit. \n {}", bridgeReply.getMessage());
+ log.warn("Problem while sending API promotion request through cockpit. \n {}", bridgeReply.getErrorDetails());
return new CockpitReply<>(null, CockpitReplyStatus.ERROR);
}
@@ -130,7 +117,7 @@ public CockpitReply processPromotion(ExecutionContext execution
try {
serializedPromotion = objectMapper.writeValueAsString(promotionEntity);
} catch (JsonProcessingException e) {
- logger.warn("Problem while serializing promotion {}", promotionEntity.getId());
+ log.warn("Problem while serializing promotion {}", promotionEntity.getId());
}
final BridgeCommand processPromotionCommand =
@@ -143,7 +130,7 @@ public CockpitReply processPromotion(ExecutionContext execution
final BridgeReply bridgeReply = cockpitCommandService.send(processPromotionCommand);
if (bridgeReply.getCommandStatus() != CommandStatus.SUCCEEDED) {
- logger.warn("Problem while processing API promotion request through cockpit. \n {}", bridgeReply.getMessage());
+ log.warn("Problem while processing API promotion request through cockpit. \n {}", bridgeReply.getErrorDetails());
return new CockpitReply<>(null, CockpitReplyStatus.ERROR);
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/CockpitCommandServiceTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/CockpitCommandServiceTest.java
index 339ca4b8246..7e4ffca4c0e 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/CockpitCommandServiceTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/CockpitCommandServiceTest.java
@@ -16,15 +16,16 @@
package io.gravitee.rest.api.service.cockpit.command;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import io.gravitee.cockpit.api.CockpitConnector;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgePayload;
-import io.gravitee.cockpit.api.command.bridge.BridgeReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeTarget;
+import io.gravitee.cockpit.api.command.legacy.bridge.BridgePayload;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommandPayload;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReply;
import io.gravitee.common.utils.UUID;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.reactivex.rxjava3.core.Single;
import org.junit.Before;
import org.junit.Test;
@@ -47,16 +48,15 @@ public void setup() {
@Test
public void shouldSendCommandToCockpitConnector() {
- BridgePayload payload = new BridgePayload();
- payload.setContent("a content");
-
- BridgeCommand command = new BridgeCommand();
- command.setId(UUID.toString(UUID.random()));
- command.setInstallationId(UUID.toString(UUID.random()));
- command.setOrganizationId(UUID.toString(UUID.random()));
- command.setOperation("an_operation");
- command.setTarget(new BridgeTarget());
- command.setPayload(payload);
+ BridgeCommandPayload payload = BridgeCommandPayload
+ .builder()
+ .installationId(UUID.toString(UUID.random()))
+ .organizationId(UUID.toString(UUID.random()))
+ .operation("an_operation")
+ .target(new BridgeCommandPayload.BridgeTarget(null, null))
+ .content("a content")
+ .build();
+ BridgeCommand command = new BridgeCommand(payload);
BridgeReply reply = mock(BridgeReply.class);
when(cockpitConnector.sendCommand(command)).thenReturn(Single.just(reply));
@@ -68,17 +68,16 @@ public void shouldSendCommandToCockpitConnector() {
@Test
public void shouldReturnAnErrorBridgeReplyWhenWebSocketIsThrowing() {
- BridgePayload payload = new BridgePayload();
- payload.setContent("a content");
-
- BridgeCommand command = new BridgeCommand();
- command.setId(UUID.toString(UUID.random()));
- command.setInstallationId(UUID.toString(UUID.random()));
- command.setOrganizationId(UUID.toString(UUID.random()));
- command.setOperation("an_operation");
- command.setTarget(new BridgeTarget());
- command.setPayload(payload);
+ BridgeCommandPayload payload = BridgeCommandPayload
+ .builder()
+ .installationId(UUID.toString(UUID.random()))
+ .organizationId(UUID.toString(UUID.random()))
+ .operation("an_operation")
+ .target(new BridgeCommandPayload.BridgeTarget(null, null))
+ .content("a content")
+ .build();
+ BridgeCommand command = new BridgeCommand(payload);
when(cockpitConnector.sendCommand(command)).thenReturn(Single.error(new RuntimeException()));
BridgeReply bridgeReply = cockpitCommandService.send(command);
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/adapter/HelloCommandAdapterTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/adapter/HelloCommandAdapterTest.java
new file mode 100644
index 00000000000..0e4844359ca
--- /dev/null
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/adapter/HelloCommandAdapterTest.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright © 2015 The Gravitee team (http://gravitee.io)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.gravitee.rest.api.service.cockpit.command.adapter;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
+
+import io.gravitee.apim.core.cockpit.query_service.CockpitAccessService;
+import io.gravitee.apim.core.installation.domain_service.InstallationTypeDomainService;
+import io.gravitee.apim.core.installation.model.InstallationType;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.hello.HelloCommand;
+import io.gravitee.cockpit.api.command.v1.installation.AdditionalInfoConstants;
+import io.gravitee.exchange.api.command.hello.HelloCommandPayload;
+import io.gravitee.node.api.Node;
+import io.gravitee.plugin.core.api.PluginRegistry;
+import io.gravitee.rest.api.model.InstallationEntity;
+import io.gravitee.rest.api.service.EnvironmentService;
+import io.gravitee.rest.api.service.InstallationService;
+import io.gravitee.rest.api.service.OrganizationService;
+import io.gravitee.rest.api.service.common.GraviteeContext;
+import io.gravitee.rest.api.service.exceptions.TechnicalManagementException;
+import io.reactivex.rxjava3.observers.TestObserver;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+/**
+ * @author Florent CHAMFROY (florent.chamfroy at graviteesource.com)
+ * @author GraviteeSource Team
+ */
+@RunWith(MockitoJUnitRunner.class)
+public class HelloCommandAdapterTest {
+
+ private static final String HOSTNAME = "test.gravitee.io";
+ private static final String CUSTOM_VALUE = "customValue";
+ private static final String CUSTOM_KEY = "customKey";
+ private static final String INSTALLATION_ID = "installation#1";
+
+ @Mock
+ private InstallationService installationService;
+
+ @Mock
+ private EnvironmentService environmentService;
+
+ @Mock
+ private OrganizationService organizationService;
+
+ @Mock
+ private Node node;
+
+ @Mock
+ private InstallationTypeDomainService installationTypeDomainService;
+
+ @Mock
+ private CockpitAccessService cockpitAccessService;
+
+ @Mock
+ private PluginRegistry pluginRegistry;
+
+ private HelloCommandAdapter cut;
+
+ @Before
+ public void before() {
+ cut = new HelloCommandAdapter(node, installationService, installationTypeDomainService, cockpitAccessService, pluginRegistry);
+ when(installationTypeDomainService.get()).thenReturn(InstallationType.STANDALONE);
+ }
+
+ @Test
+ public void produceType() {
+ Assertions.assertEquals(CockpitCommandType.HELLO.name(), cut.supportType());
+ }
+
+ @Test
+ public void adapt() throws InterruptedException {
+ final InstallationEntity installationEntity = new InstallationEntity();
+ installationEntity.setId(INSTALLATION_ID);
+ installationEntity.getAdditionalInformation().put(CUSTOM_KEY, CUSTOM_VALUE);
+
+ when(node.hostname()).thenReturn(HOSTNAME);
+ when(installationService.getOrInitialize()).thenReturn(installationEntity);
+
+ final TestObserver obs = cut
+ .adapt(new io.gravitee.exchange.api.command.hello.HelloCommand(new HelloCommandPayload()))
+ .test();
+
+ obs.await();
+ obs.assertValue(helloCommand -> {
+ assertEquals(CUSTOM_VALUE, helloCommand.getPayload().getAdditionalInformation().get(CUSTOM_KEY));
+ assertTrue(helloCommand.getPayload().getAdditionalInformation().containsKey(AdditionalInfoConstants.AUTH_PATH));
+ assertTrue(helloCommand.getPayload().getAdditionalInformation().containsKey(AdditionalInfoConstants.AUTH_BASE_URL));
+ assertEquals(InstallationType.STANDALONE.getLabel(), helloCommand.getPayload().getInstallationType());
+
+ assertEquals(HOSTNAME, helloCommand.getPayload().getNode().hostname());
+ assertEquals(GraviteeContext.getDefaultOrganization(), helloCommand.getPayload().getDefaultOrganizationId());
+ assertEquals(GraviteeContext.getDefaultEnvironment(), helloCommand.getPayload().getDefaultEnvironmentId());
+ assertEquals(INSTALLATION_ID, helloCommand.getPayload().getNode().installationId());
+ assertEquals(HOSTNAME, helloCommand.getPayload().getNode().hostname());
+
+ return true;
+ });
+ }
+
+ @Test
+ public void adaptWithException() {
+ when(installationService.getOrInitialize()).thenThrow(new TechnicalManagementException());
+ cut
+ .adapt(new io.gravitee.exchange.api.command.hello.HelloCommand(new HelloCommandPayload()))
+ .test()
+ .assertError(TechnicalManagementException.class);
+ }
+}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/producer/HelloCommandProducerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/adapter/HelloReplyAdapterTest.java
similarity index 50%
rename from gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/producer/HelloCommandProducerTest.java
rename to gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/adapter/HelloReplyAdapterTest.java
index 87fa1578bc5..742427e5e9e 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/producer/HelloCommandProducerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/adapter/HelloReplyAdapterTest.java
@@ -13,10 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.gravitee.rest.api.service.cockpit.command.producer;
+package io.gravitee.rest.api.service.cockpit.command.adapter;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.times;
@@ -26,12 +25,9 @@
import io.gravitee.apim.core.cockpit.query_service.CockpitAccessService;
import io.gravitee.apim.core.installation.domain_service.InstallationTypeDomainService;
import io.gravitee.apim.core.installation.model.InstallationType;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.hello.HelloCommand;
-import io.gravitee.cockpit.api.command.hello.HelloPayload;
-import io.gravitee.cockpit.api.command.hello.HelloReply;
-import io.gravitee.cockpit.api.command.installation.AdditionalInfoConstants;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.hello.HelloReply;
+import io.gravitee.cockpit.api.command.v1.hello.HelloReplyPayload;
import io.gravitee.definition.model.FlowMode;
import io.gravitee.definition.model.flow.Flow;
import io.gravitee.node.api.Node;
@@ -41,9 +37,6 @@
import io.gravitee.rest.api.service.EnvironmentService;
import io.gravitee.rest.api.service.InstallationService;
import io.gravitee.rest.api.service.OrganizationService;
-import io.gravitee.rest.api.service.common.GraviteeContext;
-import io.gravitee.rest.api.service.exceptions.TechnicalManagementException;
-import io.reactivex.rxjava3.observers.TestObserver;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -58,12 +51,7 @@
* @author GraviteeSource Team
*/
@RunWith(MockitoJUnitRunner.class)
-public class HelloCommandProducerTest {
-
- private static final String HOSTNAME = "test.gravitee.io";
- private static final String CUSTOM_VALUE = "customValue";
- private static final String CUSTOM_KEY = "customKey";
- private static final String INSTALLATION_ID = "installation#1";
+public class HelloReplyAdapterTest {
@Mock
private InstallationService installationService;
@@ -74,79 +62,27 @@ public class HelloCommandProducerTest {
@Mock
private OrganizationService organizationService;
- @Mock
- private Node node;
-
@Mock
private InstallationTypeDomainService installationTypeDomainService;
- @Mock
- private CockpitAccessService cockpitAccessService;
-
- private HelloCommandProducer cut;
+ private HelloReplyAdapter cut;
@Before
public void before() {
- cut =
- new HelloCommandProducer(
- node,
- installationService,
- environmentService,
- organizationService,
- installationTypeDomainService,
- cockpitAccessService
- );
- when(installationTypeDomainService.get()).thenReturn(InstallationType.STANDALONE);
+ cut = new HelloReplyAdapter(installationService, environmentService, organizationService);
}
@Test
public void produceType() {
- assertEquals(Command.Type.HELLO_COMMAND, cut.produceType());
- }
-
- @Test
- public void produce() throws InterruptedException {
- final InstallationEntity installationEntity = new InstallationEntity();
- installationEntity.setId(INSTALLATION_ID);
- installationEntity.getAdditionalInformation().put(CUSTOM_KEY, CUSTOM_VALUE);
-
- when(node.hostname()).thenReturn(HOSTNAME);
- when(installationService.getOrInitialize()).thenReturn(installationEntity);
-
- final HelloCommand command = new HelloCommand();
- final HelloPayload payload = new HelloPayload();
- payload.setNode(new io.gravitee.cockpit.api.command.Node());
- command.setPayload(payload);
- final TestObserver obs = cut.prepare(command).test();
-
- obs.await();
- obs.assertValue(helloCommand -> {
- assertEquals(CUSTOM_VALUE, helloCommand.getPayload().getAdditionalInformation().get(CUSTOM_KEY));
- assertTrue(helloCommand.getPayload().getAdditionalInformation().containsKey(AdditionalInfoConstants.AUTH_PATH));
- assertTrue(helloCommand.getPayload().getAdditionalInformation().containsKey(AdditionalInfoConstants.AUTH_BASE_URL));
- assertEquals(InstallationType.STANDALONE.getLabel(), helloCommand.getPayload().getInstallationType());
-
- assertEquals(HOSTNAME, helloCommand.getPayload().getNode().getHostname());
- assertEquals(GraviteeContext.getDefaultOrganization(), helloCommand.getPayload().getDefaultOrganizationId());
- assertEquals(GraviteeContext.getDefaultEnvironment(), helloCommand.getPayload().getDefaultEnvironmentId());
- assertEquals(INSTALLATION_ID, helloCommand.getPayload().getNode().getInstallationId());
- assertEquals(HOSTNAME, helloCommand.getPayload().getNode().getHostname());
-
- return true;
- });
- }
-
- @Test(expected = TechnicalManagementException.class)
- public void produceWithException() {
- when(installationService.getOrInitialize()).thenThrow(new TechnicalManagementException());
- final TestObserver obs = cut.prepare(new HelloCommand()).test();
+ assertEquals(CockpitCommandType.HELLO.name(), cut.supportType());
}
@Test
- public void handleReply_shouldUpdateDefaultEnvironmentCockpitId() {
- HelloReply helloReply = new HelloReply();
- helloReply.setCommandStatus(CommandStatus.SUCCEEDED);
- helloReply.setDefaultEnvironmentCockpitId("env#cockpit-1");
+ public void handleReply_shouldUpdateDefaultEnvironmentCockpitId() throws InterruptedException {
+ HelloReply helloReply = new HelloReply(
+ "commandId",
+ HelloReplyPayload.builder().defaultEnvironmentCockpitId("env#cockpit-1").build()
+ );
String defaultEnvId = "DEFAULT";
EnvironmentEntity defaultEnvironment = new EnvironmentEntity();
@@ -156,7 +92,15 @@ public void handleReply_shouldUpdateDefaultEnvironmentCockpitId() {
when(installationService.getOrInitialize()).thenReturn(new InstallationEntity());
when(environmentService.getDefaultOrInitialize()).thenReturn(defaultEnvironment);
- cut.handleReply(helloReply);
+ cut
+ .adapt(helloReply)
+ .test()
+ .await()
+ .assertValue(helloReplyResponse -> {
+ assertEquals(helloReply.getCommandId(), helloReplyResponse.getCommandId());
+ assertEquals(helloReply.getPayload().getTargetId(), helloReplyResponse.getPayload().getTargetId());
+ return true;
+ });
verify(environmentService)
.createOrUpdate(
@@ -167,11 +111,11 @@ public void handleReply_shouldUpdateDefaultEnvironmentCockpitId() {
}
@Test
- public void handleReply_shouldUpdateDefaultOrganizationCockpitId() {
- HelloReply helloReply = new HelloReply();
- helloReply.setCommandStatus(CommandStatus.SUCCEEDED);
- helloReply.setDefaultOrganizationCockpitId("org#cockpit-1");
-
+ public void handleReply_shouldUpdateDefaultOrganizationCockpitId() throws InterruptedException {
+ HelloReply helloReply = new HelloReply(
+ "commandId",
+ HelloReplyPayload.builder().defaultOrganizationCockpitId("org#cockpit-1").build()
+ );
Flow flow = new Flow();
flow.setName("My-Flow");
@@ -184,7 +128,15 @@ public void handleReply_shouldUpdateDefaultOrganizationCockpitId() {
when(installationService.getOrInitialize()).thenReturn(new InstallationEntity());
when(organizationService.getDefaultOrInitialize()).thenReturn(defaultOrganization);
- cut.handleReply(helloReply);
+ cut
+ .adapt(helloReply)
+ .test()
+ .await()
+ .assertValue(helloReplyResponse -> {
+ assertEquals(helloReply.getCommandId(), helloReplyResponse.getCommandId());
+ assertEquals(helloReply.getPayload().getTargetId(), helloReplyResponse.getPayload().getTargetId());
+ return true;
+ });
verify(organizationService)
.updateOrganization(
@@ -200,11 +152,12 @@ public void handleReply_shouldUpdateDefaultOrganizationCockpitId() {
}
@Test
- public void handleReply_shouldUpdateCockpitInstallationStatusAndId_butKeepAlreadyExistingInstallationInformations() {
+ public void handleReply_shouldUpdateCockpitInstallationStatusAndId_butKeepAlreadyExistingInstallationInformations()
+ throws InterruptedException {
// mock already existing installation with informations
InstallationEntity installation = new InstallationEntity();
installation.setAdditionalInformation(
- new HashMap(
+ new HashMap<>(
Map.of(
"key1",
"value1",
@@ -219,26 +172,32 @@ public void handleReply_shouldUpdateCockpitInstallationStatusAndId_butKeepAlread
);
when(installationService.getOrInitialize()).thenReturn(installation);
- HelloReply helloReply = new HelloReply();
- helloReply.setInstallationId("new-installation-id");
- helloReply.setInstallationStatus("new-installation-status");
- helloReply.setCommandStatus(CommandStatus.SUCCEEDED);
+ HelloReply helloReply = new HelloReply(
+ "commandId",
+ HelloReplyPayload.builder().installationId("new-installation-id").installationStatus("new-installation-status").build()
+ );
- cut.handleReply(helloReply);
+ cut
+ .adapt(helloReply)
+ .test()
+ .await()
+ .assertValue(helloReplyResponse -> {
+ assertEquals(helloReply.getCommandId(), helloReplyResponse.getCommandId());
+ assertEquals(helloReply.getPayload().getTargetId(), helloReplyResponse.getPayload().getTargetId());
+ return true;
+ });
verify(installationService, times(1))
.setAdditionalInformation(
- eq(
- Map.of(
- "key1",
- "value1",
- "key2",
- "value2",
- "COCKPIT_INSTALLATION_STATUS",
- "new-installation-status",
- "COCKPIT_INSTALLATION_ID",
- "new-installation-id"
- )
+ Map.of(
+ "key1",
+ "value1",
+ "key2",
+ "value2",
+ "COCKPIT_INSTALLATION_STATUS",
+ "new-installation-status",
+ "COCKPIT_INSTALLATION_ID",
+ "new-installation-id"
)
);
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandFactoryTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandFactoryTest.java
index 42c31c61406..0618b266a0e 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandFactoryTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandFactoryTest.java
@@ -18,8 +18,8 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgeTarget;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommandPayload;
import io.gravitee.rest.api.model.InstallationEntity;
import io.gravitee.rest.api.model.promotion.PromotionEntity;
import io.gravitee.rest.api.service.InstallationService;
@@ -71,16 +71,16 @@ public void shouldCreateListEnvironmentsCommand() {
// Then
assertThat(listEnvironmentCommand).isNotNull();
- assertThat(listEnvironmentCommand.getEnvironmentId()).isEqualTo(ENVIRONMENT_ID);
- assertThat(listEnvironmentCommand.getOrganizationId()).isEqualTo(ORGANIZATION_ID);
- assertThat(listEnvironmentCommand.getInstallationId()).isEqualTo(INSTALLATION_ID);
- assertThat(listEnvironmentCommand.getOperation()).isEqualTo(BridgeOperation.LIST_ENVIRONMENT.name());
+ assertThat(listEnvironmentCommand.getPayload().environmentId()).isEqualTo(ENVIRONMENT_ID);
+ assertThat(listEnvironmentCommand.getPayload().organizationId()).isEqualTo(ORGANIZATION_ID);
+ assertThat(listEnvironmentCommand.getPayload().installationId()).isEqualTo(INSTALLATION_ID);
+ assertThat(listEnvironmentCommand.getPayload().operation()).isEqualTo(BridgeOperation.LIST_ENVIRONMENT.name());
- final BridgeTarget bridgeTarget = listEnvironmentCommand.getTarget();
+ final BridgeCommandPayload.BridgeTarget bridgeTarget = listEnvironmentCommand.getPayload().target();
assertThat(bridgeTarget).isNotNull();
- assertThat(bridgeTarget.getScopes()).isNotNull();
- assertThat(bridgeTarget.getScopes().size()).isEqualTo(1);
- assertThat(bridgeTarget.getScopes().get(0)).isEqualTo("APIM");
+ assertThat(bridgeTarget.scopes()).isNotNull();
+ assertThat(bridgeTarget.scopes().size()).isEqualTo(1);
+ assertThat(bridgeTarget.scopes().get(0)).isEqualTo("APIM");
}
@Test
@@ -96,13 +96,13 @@ public void shouldCreatePromoteApiCommand() {
);
assertThat(promoteApiCommand).isNotNull();
- assertThat(promoteApiCommand.getEnvironmentId()).isEqualTo(ENVIRONMENT_ID);
- assertThat(promoteApiCommand.getOrganizationId()).isEqualTo(ORGANIZATION_ID);
- assertThat(promoteApiCommand.getInstallationId()).isEqualTo(INSTALLATION_ID);
- assertThat(promoteApiCommand.getOperation()).isEqualTo(BridgeOperation.PROMOTE_API.name());
- assertThat(promoteApiCommand.getPayload().getContent()).isEqualTo("{ \"id\": \"test\"}");
-
- final BridgeTarget bridgeTarget = promoteApiCommand.getTarget();
- assertThat(bridgeTarget.getEnvironmentId()).isEqualTo("env#target");
+ assertThat(promoteApiCommand.getPayload().environmentId()).isEqualTo(ENVIRONMENT_ID);
+ assertThat(promoteApiCommand.getPayload().organizationId()).isEqualTo(ORGANIZATION_ID);
+ assertThat(promoteApiCommand.getPayload().installationId()).isEqualTo(INSTALLATION_ID);
+ assertThat(promoteApiCommand.getPayload().operation()).isEqualTo(BridgeOperation.PROMOTE_API.name());
+ assertThat(promoteApiCommand.getPayload().content()).isEqualTo("{ \"id\": \"test\"}");
+
+ final BridgeCommandPayload.BridgeTarget bridgeTarget = promoteApiCommand.getPayload().target();
+ assertThat(bridgeTarget.environmentId()).isEqualTo("env#target");
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandHandlerTest.java
index 41d36bc67b1..1314b336349 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/BridgeCommandHandlerTest.java
@@ -17,17 +17,20 @@
import static org.junit.Assert.assertEquals;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgeMultiReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeReply;
+import io.gravitee.cockpit.api.command.legacy.bridge.BridgeMultiReply;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommandPayload;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReplyPayload;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.service.cockpit.command.bridge.operation.BridgeOperation;
import io.gravitee.rest.api.service.cockpit.command.bridge.operation.BridgeOperationHandler;
import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.observers.TestObserver;
import java.util.Arrays;
import java.util.Collections;
+import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -48,14 +51,13 @@ public void before() {
}
@Test
- public void handleType() {
- assertEquals(Command.Type.BRIDGE_COMMAND, cut.handleType());
+ public void supportType() {
+ assertEquals(CockpitCommandType.BRIDGE.name(), cut.supportType());
}
@Test
public void shouldNotHandleUnknownOperation() throws InterruptedException {
- BridgeCommand command = new BridgeCommand();
- command.setOperation("UNKWOWN_OPERATION");
+ BridgeCommand command = new BridgeCommand(BridgeCommandPayload.builder().operation("UNKWOWN_OPERATION").build());
TestObserver obs = cut.handle(command).test();
@@ -63,15 +65,15 @@ public void shouldNotHandleUnknownOperation() throws InterruptedException {
obs.assertValue(reply ->
reply.getCommandId().equals(command.getId()) &&
reply.getCommandStatus().equals(CommandStatus.ERROR) &&
- reply.getMessage().equals("No handler found for this operation: UNKWOWN_OPERATION")
+ reply.getErrorDetails().equals("No handler found for this operation: UNKWOWN_OPERATION")
);
}
@Test
public void shouldHandleListEnvironmentsOperation() throws InterruptedException {
- BridgeCommand command = new BridgeCommand();
- command.setOperation(BridgeOperation.LIST_ENVIRONMENT.name());
- command.setId("command-id");
+ BridgeCommand command = new BridgeCommand(
+ BridgeCommandPayload.builder().operation(BridgeOperation.LIST_ENVIRONMENT.name()).build()
+ );
cut =
new BridgeCommandHandler(
@@ -81,11 +83,7 @@ public void shouldHandleListEnvironmentsOperation() throws InterruptedException
TestObserver obs = cut.handle(command).test();
obs.await();
- obs.assertValue(reply ->
- reply.getCommandId().equals(command.getId()) &&
- reply.getCommandStatus().equals(CommandStatus.SUCCEEDED) &&
- reply.getMessage().equals("Fake operation handler")
- );
+ obs.assertValue(reply -> reply.getCommandId().equals(command.getId()) && reply.getCommandStatus().equals(CommandStatus.SUCCEEDED));
}
static class TestingFakeListEnvironmentOperationHandler implements BridgeOperationHandler {
@@ -97,10 +95,7 @@ public boolean canHandle(String bridgeOperation) {
@Override
public Single handle(BridgeCommand bridgeCommand) {
- final BridgeMultiReply reply = new BridgeMultiReply();
- reply.setCommandId(bridgeCommand.getId());
- reply.setCommandStatus(CommandStatus.SUCCEEDED);
- reply.setMessage("Fake operation handler");
+ final BridgeReply reply = new BridgeReply(bridgeCommand.getId(), new BridgeReplyPayload(List.of()));
return Single.just(reply);
}
}
@@ -114,10 +109,7 @@ public boolean canHandle(String bridgeOperation) {
@Override
public Single handle(BridgeCommand bridgeCommand) {
- final BridgeMultiReply reply = new BridgeMultiReply();
- reply.setCommandId(bridgeCommand.getId());
- reply.setCommandStatus(CommandStatus.SUCCEEDED);
- reply.setMessage("Another fake operation handler");
+ final BridgeReply reply = new BridgeReply(bridgeCommand.getId(), new BridgeReplyPayload(List.of()));
return Single.just(reply);
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ListEnvironmentOperationHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ListEnvironmentOperationHandlerTest.java
index 8734cc31368..33c692f876d 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ListEnvironmentOperationHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ListEnvironmentOperationHandlerTest.java
@@ -15,16 +15,19 @@
*/
package io.gravitee.rest.api.service.cockpit.command.bridge.operation;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgeMultiReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeSimpleReply;
+import io.gravitee.cockpit.api.command.legacy.bridge.BridgeMultiReply;
+import io.gravitee.cockpit.api.command.legacy.bridge.BridgeSimpleReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommandPayload;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReplyPayload;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.EnvironmentEntity;
import io.gravitee.rest.api.model.InstallationEntity;
import io.gravitee.rest.api.service.EnvironmentService;
@@ -32,6 +35,7 @@
import io.gravitee.rest.api.service.exceptions.TechnicalManagementException;
import io.reactivex.rxjava3.observers.TestObserver;
import java.util.Arrays;
+import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -103,42 +107,28 @@ public void shouldListEnvironments() throws JsonProcessingException, Interrupted
when(installationService.get()).thenReturn(installationEntity);
- BridgeCommand command = new BridgeCommand();
- command.setOperation(BridgeOperation.LIST_ENVIRONMENT.name());
- command.setId(COMMAND_ID);
- command.setInstallationId(INSTALLATION_ID);
- command.setOrganizationId(ORGANIZATION_ID);
- command.setEnvironmentId(ENVIRONMENT_ID);
+ BridgeCommandPayload bridgeCommandPayload = BridgeCommandPayload
+ .builder()
+ .operation(BridgeOperation.LIST_ENVIRONMENT.name())
+ .installationId(INSTALLATION_ID)
+ .organizationId(ORGANIZATION_ID)
+ .environmentId(ENVIRONMENT_ID)
+ .build();
+ BridgeCommand command = new BridgeCommand(bridgeCommandPayload);
// When
TestObserver obs = cut.handle(command).test();
// Then
obs.await();
obs.assertValue(reply -> {
- if (
- reply.getCommandId().equals(command.getId()) &&
- reply.getCommandStatus().equals(CommandStatus.SUCCEEDED) &&
- BridgeMultiReply.class.isInstance(reply)
- ) {
- BridgeMultiReply multiReply = ((BridgeMultiReply) reply);
- if (multiReply.getReplies() != null && multiReply.getReplies().size() == 3) {
- for (BridgeSimpleReply simpleReply : multiReply.getReplies()) {
- if (simpleReply.getEnvironmentId().equals(envA.getId()) && simpleReply.getCommandStatus() == CommandStatus.ERROR) {
- return false;
- }
- if (simpleReply.getEnvironmentId().equals(envB.getId()) && simpleReply.getCommandStatus() == CommandStatus.ERROR) {
- return false;
- }
- if (
- simpleReply.getEnvironmentId().equals(envC_ERROR.getId()) &&
- simpleReply.getCommandStatus() == CommandStatus.SUCCEEDED
- ) {
- return false;
- }
- }
- return true;
- }
+ if (reply.getCommandId().equals(command.getId()) && reply.getCommandStatus().equals(CommandStatus.SUCCEEDED)) {
+ BridgeReplyPayload replyPayload = reply.getPayload();
+ List contents = replyPayload.contents();
+ assertEquals(2, contents.size());
+ assertTrue(contents.stream().anyMatch(bridgeReplyContent -> bridgeReplyContent.environmentId().equals(envA.getId())));
+ assertTrue(contents.stream().anyMatch(bridgeReplyContent -> bridgeReplyContent.environmentId().equals(envB.getId())));
+ return true;
}
return false;
});
@@ -149,8 +139,9 @@ public void shouldNotListEnvironments() throws InterruptedException {
// Given
when(environmentService.findByOrganization(ORGANIZATION_ID)).thenThrow(new TechnicalManagementException());
- BridgeCommand command = new BridgeCommand();
- command.setOrganizationId(ORGANIZATION_ID);
+ BridgeCommandPayload bridgeCommandPayload = BridgeCommandPayload.builder().organizationId(ORGANIZATION_ID).build();
+
+ BridgeCommand command = new BridgeCommand(bridgeCommandPayload);
// When
TestObserver obs = cut.handle(command).test();
@@ -160,7 +151,7 @@ public void shouldNotListEnvironments() throws InterruptedException {
obs.assertValue(reply ->
reply.getCommandId().equals(command.getId()) &&
reply.getCommandStatus().equals(CommandStatus.ERROR) &&
- reply.getMessage().equals("No environment available for organization: " + ORGANIZATION_ID)
+ reply.getErrorDetails().equals("No environment available for organization: " + ORGANIZATION_ID)
);
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ProcessPromotionOperationHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ProcessPromotionOperationHandlerTest.java
index ff48a195aac..9e301cb8bd5 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ProcessPromotionOperationHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/ProcessPromotionOperationHandlerTest.java
@@ -24,12 +24,11 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgePayload;
-import io.gravitee.cockpit.api.command.bridge.BridgeReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeSimpleReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeTarget;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommandPayload;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReplyPayload;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.InstallationEntity;
import io.gravitee.rest.api.model.promotion.PromotionEntity;
import io.gravitee.rest.api.model.promotion.PromotionEntityStatus;
@@ -79,20 +78,19 @@ public void handleOperation() {
@Test
public void shouldHandlePromotionRequest() throws JsonProcessingException, InterruptedException {
- BridgeCommand command = new BridgeCommand();
- command.setOperation(BridgeOperation.PROMOTE_API.name());
- command.setId(COMMAND_ID);
- command.setInstallationId(INSTALLATION_ID);
- command.setOrganizationId(ORGANIZATION_ID);
- command.setEnvironmentId(ENVIRONMENT_ID);
- command.setPayload(new BridgePayload());
- final BridgeTarget bridgeTarget = new BridgeTarget();
- bridgeTarget.setEnvironmentId("source");
- command.setTarget(bridgeTarget);
+ BridgeCommandPayload bridgeCommandPayload = BridgeCommandPayload
+ .builder()
+ .operation(BridgeOperation.PROMOTE_API.name())
+ .installationId(INSTALLATION_ID)
+ .organizationId(ORGANIZATION_ID)
+ .environmentId(ENVIRONMENT_ID)
+ .target(new BridgeCommandPayload.BridgeTarget(null, "source"))
+ .build();
+ BridgeCommand command = new BridgeCommand(bridgeCommandPayload);
ArgumentCaptor argument = ArgumentCaptor.forClass(PromotionEntity.class);
- when(objectMapper.readValue(command.getPayload().getContent(), PromotionEntity.class)).thenReturn(getAPromotionEntity());
+ when(objectMapper.readValue(command.getPayload().content(), PromotionEntity.class)).thenReturn(getAPromotionEntity());
InstallationEntity installationEntity = new InstallationEntity();
installationEntity.setId(INSTALLATION_ID);
when(installationService.get()).thenReturn(installationEntity);
@@ -105,31 +103,30 @@ public void shouldHandlePromotionRequest() throws JsonProcessingException, Inter
obs.await();
obs.assertValue(reply -> {
- BridgeSimpleReply simpleReply = (BridgeSimpleReply) reply;
+ BridgeReplyPayload.BridgeReplyContent bridgeReplyContent = reply.getPayload().contents().get(0);
return (
- simpleReply.getCommandStatus().equals(CommandStatus.SUCCEEDED) &&
- simpleReply.getOrganizationId().equals(ORGANIZATION_ID) &&
- simpleReply.getEnvironmentId().equals("source") &&
- simpleReply.getInstallationId().equals(INSTALLATION_ID) &&
- simpleReply.getCommandId().equals(COMMAND_ID)
+ reply.getCommandStatus().equals(CommandStatus.SUCCEEDED) &&
+ bridgeReplyContent.organizationId().equals(ORGANIZATION_ID) &&
+ bridgeReplyContent.environmentId().equals("source") &&
+ bridgeReplyContent.installationId().equals(INSTALLATION_ID) &&
+ reply.getCommandId().equals(command.getId())
);
});
}
@Test
public void shouldHandlePromotionRequestIfCannotReadPromotionEntity() throws JsonProcessingException, InterruptedException {
- BridgeCommand command = new BridgeCommand();
- command.setOperation(BridgeOperation.PROMOTE_API.name());
- command.setId(COMMAND_ID);
- command.setInstallationId(INSTALLATION_ID);
- command.setOrganizationId(ORGANIZATION_ID);
- command.setEnvironmentId(ENVIRONMENT_ID);
- command.setPayload(new BridgePayload());
- final BridgeTarget bridgeTarget = new BridgeTarget();
- bridgeTarget.setEnvironmentId("source");
- command.setTarget(bridgeTarget);
-
- when(objectMapper.readValue(command.getPayload().getContent(), PromotionEntity.class)).thenThrow(JsonMappingException.class);
+ BridgeCommandPayload payload = BridgeCommandPayload
+ .builder()
+ .operation(BridgeOperation.PROMOTE_API.name())
+ .installationId(INSTALLATION_ID)
+ .organizationId(ORGANIZATION_ID)
+ .environmentId(ENVIRONMENT_ID)
+ .target(new BridgeCommandPayload.BridgeTarget(null, "source"))
+ .build();
+ BridgeCommand command = new BridgeCommand(payload);
+
+ when(objectMapper.readValue(command.getPayload().content(), PromotionEntity.class)).thenThrow(JsonMappingException.class);
// When
TestObserver obs = cut.handle(command).test();
@@ -139,24 +136,23 @@ public void shouldHandlePromotionRequestIfCannotReadPromotionEntity() throws Jso
obs.assertValue(reply ->
reply.getCommandId().equals(command.getId()) &&
reply.getCommandStatus().equals(CommandStatus.ERROR) &&
- reply.getMessage().equals("Problem while deserializing promotion for environment [" + ENVIRONMENT_ID + "]")
+ reply.getErrorDetails().equals("Problem while deserializing promotion for environment [" + ENVIRONMENT_ID + "]")
);
}
@Test
public void shouldHandlePromotionRequestIfCannotWritePayload() throws JsonProcessingException, InterruptedException {
- BridgeCommand command = new BridgeCommand();
- command.setOperation(BridgeOperation.PROMOTE_API.name());
- command.setId(COMMAND_ID);
- command.setInstallationId(INSTALLATION_ID);
- command.setOrganizationId(ORGANIZATION_ID);
- command.setEnvironmentId(ENVIRONMENT_ID);
- command.setPayload(new BridgePayload());
- final BridgeTarget bridgeTarget = new BridgeTarget();
- bridgeTarget.setEnvironmentId("source");
- command.setTarget(bridgeTarget);
-
- when(objectMapper.readValue(command.getPayload().getContent(), PromotionEntity.class)).thenReturn(getAPromotionEntity());
+ BridgeCommandPayload bridgeCommandPayload = BridgeCommandPayload
+ .builder()
+ .operation(BridgeOperation.PROMOTE_API.name())
+ .installationId(INSTALLATION_ID)
+ .organizationId(ORGANIZATION_ID)
+ .environmentId(ENVIRONMENT_ID)
+ .target(new BridgeCommandPayload.BridgeTarget(null, "source"))
+ .build();
+ BridgeCommand command = new BridgeCommand(bridgeCommandPayload);
+
+ when(objectMapper.readValue(command.getPayload().content(), PromotionEntity.class)).thenReturn(getAPromotionEntity());
InstallationEntity installationEntity = new InstallationEntity();
installationEntity.setId(INSTALLATION_ID);
when(installationService.get()).thenReturn(installationEntity);
@@ -171,7 +167,7 @@ public void shouldHandlePromotionRequestIfCannotWritePayload() throws JsonProces
obs.assertValue(reply ->
reply.getCommandId().equals(command.getId()) &&
reply.getCommandStatus().equals(CommandStatus.ERROR) &&
- reply.getMessage().equals("Problem while serializing promotion for environment [" + ENVIRONMENT_ID + "]")
+ reply.getErrorDetails().equals("Problem while serializing promotion for environment [" + ENVIRONMENT_ID + "]")
);
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/PromoteApiOperationHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/PromoteApiOperationHandlerTest.java
index f662d1fcc64..7d0a948ad96 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/PromoteApiOperationHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/bridge/operation/PromoteApiOperationHandlerTest.java
@@ -24,12 +24,12 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.bridge.BridgeCommand;
-import io.gravitee.cockpit.api.command.bridge.BridgePayload;
-import io.gravitee.cockpit.api.command.bridge.BridgeReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeSimpleReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeTarget;
+import io.gravitee.cockpit.api.command.legacy.bridge.BridgePayload;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommand;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeCommandPayload;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReplyPayload;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.InstallationEntity;
import io.gravitee.rest.api.model.promotion.PromotionEntity;
import io.gravitee.rest.api.model.promotion.PromotionEntityStatus;
@@ -80,20 +80,18 @@ public void handleOperation() {
@Test
public void shouldHandlePromotionRequest() throws JsonProcessingException, InterruptedException {
- BridgeCommand command = new BridgeCommand();
- command.setOperation(BridgeOperation.PROMOTE_API.name());
- command.setId(COMMAND_ID);
- command.setInstallationId(INSTALLATION_ID);
- command.setOrganizationId(ORGANIZATION_ID);
- command.setEnvironmentId(ENVIRONMENT_ID);
- command.setPayload(new BridgePayload());
- final BridgeTarget bridgeTarget = new BridgeTarget();
- bridgeTarget.setEnvironmentId("target");
- command.setTarget(bridgeTarget);
-
+ BridgeCommandPayload bridgeCommandPayload = BridgeCommandPayload
+ .builder()
+ .operation(BridgeOperation.PROMOTE_API.name())
+ .installationId(INSTALLATION_ID)
+ .organizationId(ORGANIZATION_ID)
+ .environmentId(ENVIRONMENT_ID)
+ .target(new BridgeCommandPayload.BridgeTarget(null, "target"))
+ .build();
+ BridgeCommand command = new BridgeCommand(bridgeCommandPayload);
ArgumentCaptor argument = ArgumentCaptor.forClass(PromotionEntity.class);
- when(objectMapper.readValue(command.getPayload().getContent(), PromotionEntity.class)).thenReturn(getAPromotionEntity());
+ when(objectMapper.readValue(command.getPayload().content(), PromotionEntity.class)).thenReturn(getAPromotionEntity());
InstallationEntity installationEntity = new InstallationEntity();
installationEntity.setId(INSTALLATION_ID);
when(installationService.get()).thenReturn(installationEntity);
@@ -103,13 +101,13 @@ public void shouldHandlePromotionRequest() throws JsonProcessingException, Inter
obs.await();
obs.assertValue(reply -> {
- BridgeSimpleReply simpleReply = (BridgeSimpleReply) reply;
+ BridgeReplyPayload.BridgeReplyContent bridgeReplyContent = reply.getPayload().contents().get(0);
return (
- simpleReply.getCommandStatus().equals(CommandStatus.SUCCEEDED) &&
- simpleReply.getOrganizationId().equals(ORGANIZATION_ID) &&
- simpleReply.getEnvironmentId().equals("target") &&
- simpleReply.getInstallationId().equals(INSTALLATION_ID) &&
- simpleReply.getCommandId().equals(COMMAND_ID)
+ reply.getCommandStatus().equals(CommandStatus.SUCCEEDED) &&
+ bridgeReplyContent.organizationId().equals(ORGANIZATION_ID) &&
+ bridgeReplyContent.environmentId().equals("target") &&
+ bridgeReplyContent.installationId().equals(INSTALLATION_ID) &&
+ reply.getCommandId().equals(command.getId())
);
});
@@ -119,18 +117,17 @@ public void shouldHandlePromotionRequest() throws JsonProcessingException, Inter
@Test
public void shouldHandlePromotionRequestIfCannotReadPromotionEntity() throws JsonProcessingException, InterruptedException {
- BridgeCommand command = new BridgeCommand();
- command.setOperation(BridgeOperation.PROMOTE_API.name());
- command.setId(COMMAND_ID);
- command.setInstallationId(INSTALLATION_ID);
- command.setOrganizationId(ORGANIZATION_ID);
- command.setEnvironmentId(ENVIRONMENT_ID);
- command.setPayload(new BridgePayload());
- final BridgeTarget bridgeTarget = new BridgeTarget();
- bridgeTarget.setEnvironmentId("target");
- command.setTarget(bridgeTarget);
-
- when(objectMapper.readValue(command.getPayload().getContent(), PromotionEntity.class)).thenThrow(JsonMappingException.class);
+ BridgeCommandPayload bridgeCommandPayload = BridgeCommandPayload
+ .builder()
+ .operation(BridgeOperation.PROMOTE_API.name())
+ .installationId(INSTALLATION_ID)
+ .organizationId(ORGANIZATION_ID)
+ .environmentId(ENVIRONMENT_ID)
+ .target(new BridgeCommandPayload.BridgeTarget(null, "target"))
+ .build();
+ BridgeCommand command = new BridgeCommand(bridgeCommandPayload);
+
+ when(objectMapper.readValue(command.getPayload().content(), PromotionEntity.class)).thenThrow(JsonMappingException.class);
// When
TestObserver obs = cut.handle(command).test();
@@ -140,24 +137,23 @@ public void shouldHandlePromotionRequestIfCannotReadPromotionEntity() throws Jso
obs.assertValue(reply ->
reply.getCommandId().equals(command.getId()) &&
reply.getCommandStatus().equals(CommandStatus.ERROR) &&
- reply.getMessage().equals("Problem while deserializing promotion request for environment [" + ENVIRONMENT_ID + "]")
+ reply.getErrorDetails().equals("Problem while deserializing promotion request for environment [" + ENVIRONMENT_ID + "]")
);
}
@Test
public void shouldHandlePromotionRequestIfCannotWritePayload() throws JsonProcessingException, InterruptedException {
- BridgeCommand command = new BridgeCommand();
- command.setOperation(BridgeOperation.PROMOTE_API.name());
- command.setId(COMMAND_ID);
- command.setInstallationId(INSTALLATION_ID);
- command.setOrganizationId(ORGANIZATION_ID);
- command.setEnvironmentId(ENVIRONMENT_ID);
- command.setPayload(new BridgePayload());
- final BridgeTarget bridgeTarget = new BridgeTarget();
- bridgeTarget.setEnvironmentId("target");
- command.setTarget(bridgeTarget);
-
- when(objectMapper.readValue(command.getPayload().getContent(), PromotionEntity.class)).thenReturn(getAPromotionEntity());
+ BridgeCommandPayload bridgeCommandPayload = BridgeCommandPayload
+ .builder()
+ .operation(BridgeOperation.PROMOTE_API.name())
+ .installationId(INSTALLATION_ID)
+ .organizationId(ORGANIZATION_ID)
+ .environmentId(ENVIRONMENT_ID)
+ .target(new BridgeCommandPayload.BridgeTarget(null, "target"))
+ .build();
+ BridgeCommand command = new BridgeCommand(bridgeCommandPayload);
+
+ when(objectMapper.readValue(command.getPayload().content(), PromotionEntity.class)).thenReturn(getAPromotionEntity());
InstallationEntity installationEntity = new InstallationEntity();
installationEntity.setId(INSTALLATION_ID);
when(installationService.get()).thenReturn(installationEntity);
@@ -172,22 +168,21 @@ public void shouldHandlePromotionRequestIfCannotWritePayload() throws JsonProces
obs.assertValue(reply ->
reply.getCommandId().equals(command.getId()) &&
reply.getCommandStatus().equals(CommandStatus.ERROR) &&
- reply.getMessage().equals("Problem while serializing promotion request for environment [" + ENVIRONMENT_ID + "]")
+ reply.getErrorDetails().equals("Problem while serializing promotion request for environment [" + ENVIRONMENT_ID + "]")
);
}
@Test
public void shouldReturnErrorCommand() throws JsonProcessingException, InterruptedException {
when(promotionService.createOrUpdate(any())).thenThrow(new TechnicalManagementException("error"));
-
- BridgeCommand command = new BridgeCommand();
- command.setId(COMMAND_ID);
- command.setPayload(new BridgePayload());
- command.setInstallationId(INSTALLATION_ID);
- command.setOrganizationId(ORGANIZATION_ID);
- command.setEnvironmentId(ENVIRONMENT_ID);
-
- when(objectMapper.readValue(command.getPayload().getContent(), PromotionEntity.class)).thenReturn(getAPromotionEntity());
+ BridgeCommandPayload bridgeCommandPayload = BridgeCommandPayload
+ .builder()
+ .installationId(INSTALLATION_ID)
+ .organizationId(ORGANIZATION_ID)
+ .environmentId(ENVIRONMENT_ID)
+ .build();
+ BridgeCommand command = new BridgeCommand(bridgeCommandPayload);
+ when(objectMapper.readValue(command.getPayload().content(), PromotionEntity.class)).thenReturn(getAPromotionEntity());
TestObserver obs = cut.handle(command).test();
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/DeployModelCommandHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/DeployModelCommandHandlerTest.java
index 51a7993a9fd..82110131dee 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/DeployModelCommandHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/DeployModelCommandHandlerTest.java
@@ -23,11 +23,11 @@
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.withSettings;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.designer.DeployModelCommand;
-import io.gravitee.cockpit.api.command.designer.DeployModelPayload;
-import io.gravitee.cockpit.api.command.designer.DeployModelReply;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.designer.DeployModelCommand;
+import io.gravitee.cockpit.api.command.v1.designer.DeployModelCommandPayload;
+import io.gravitee.cockpit.api.command.v1.designer.DeployModelReply;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.EnvironmentEntity;
import io.gravitee.rest.api.model.UserEntity;
import io.gravitee.rest.api.model.api.ApiEntity;
@@ -91,25 +91,27 @@ public void setUp() throws Exception {
}
@Test
- public void handleType() {
- assertEquals(Command.Type.DEPLOY_MODEL_COMMAND, cut.handleType());
+ public void supportType() {
+ assertEquals(CockpitCommandType.DEPLOY_MODEL.name(), cut.supportType());
}
@Test
public void creates_an_API_DOCUMENTED() throws InterruptedException {
- DeployModelPayload payload = new DeployModelPayload();
- payload.setModelId("model#1");
- payload.setSwaggerDefinition("swagger-definition");
- payload.setUserId("cockpit_user#id");
- payload.setMode(DeployModelPayload.DeploymentMode.API_DOCUMENTED);
- payload.setLabels(List.of("label1", "label2"));
- payload.setEnvironmentId(COCKPIT_ENVIRONMENT_ID);
- payload.setOrganizationId(COCKPIT_ORGANIZATION_ID);
+ DeployModelCommandPayload payload = DeployModelCommandPayload
+ .builder()
+ .modelId("model#1")
+ .swaggerDefinition("swagger-definition")
+ .userId("cockpit_user#id")
+ .mode(DeployModelCommandPayload.DeploymentMode.API_DOCUMENTED)
+ .labels(List.of("label1", "label2"))
+ .environmentId(COCKPIT_ENVIRONMENT_ID)
+ .organizationId(COCKPIT_ORGANIZATION_ID)
+ .build();
DeployModelCommand command = new DeployModelCommand(payload);
UserEntity user = createUserEntity(payload);
- when(userService.findBySource(any(), eq("cockpit"), eq(payload.getUserId()), eq(true))).thenReturn(user);
+ when(userService.findBySource(any(), eq("cockpit"), eq(payload.userId()), eq(true))).thenReturn(user);
when(permissionChecker.checkCreatePermission(EXECUTION_CONTEXT, user.getId(), ENVIRONMENT_ID, DeploymentMode.API_DOCUMENTED))
.thenReturn(Optional.empty());
@@ -117,12 +119,12 @@ public void creates_an_API_DOCUMENTED() throws InterruptedException {
when(
cockpitApiService.createApi(
EXECUTION_CONTEXT,
- payload.getModelId(),
+ payload.modelId(),
user.getId(),
- payload.getSwaggerDefinition(),
+ payload.swaggerDefinition(),
ENVIRONMENT_ID,
DeploymentMode.API_DOCUMENTED,
- payload.getLabels()
+ payload.labels()
)
)
.thenAnswer(i -> {
@@ -139,12 +141,12 @@ public void creates_an_API_DOCUMENTED() throws InterruptedException {
@Test
public void creates_an_API_MOCKED_mode() throws InterruptedException {
- DeployModelPayload payload = createDeployPayload(DeployModelPayload.DeploymentMode.API_MOCKED);
+ DeployModelCommandPayload payload = createDeployPayload(DeployModelCommandPayload.DeploymentMode.API_MOCKED);
DeployModelCommand command = new DeployModelCommand(payload);
UserEntity user = createUserEntity(payload);
- when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.getUserId(), true)).thenReturn(user);
+ when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.userId(), true)).thenReturn(user);
when(permissionChecker.checkCreatePermission(EXECUTION_CONTEXT, user.getId(), ENVIRONMENT_ID, DeploymentMode.API_MOCKED))
.thenReturn(Optional.empty());
@@ -152,12 +154,12 @@ public void creates_an_API_MOCKED_mode() throws InterruptedException {
when(
cockpitApiService.createApi(
EXECUTION_CONTEXT,
- payload.getModelId(),
+ payload.modelId(),
user.getId(),
- payload.getSwaggerDefinition(),
+ payload.swaggerDefinition(),
ENVIRONMENT_ID,
DeploymentMode.API_MOCKED,
- payload.getLabels()
+ payload.labels()
)
)
.thenAnswer(i -> {
@@ -174,12 +176,12 @@ public void creates_an_API_MOCKED_mode() throws InterruptedException {
@Test
public void creates_an_API_PUBLISHED_mode() throws InterruptedException {
- DeployModelPayload payload = createDeployPayload(DeployModelPayload.DeploymentMode.API_PUBLISHED);
+ DeployModelCommandPayload payload = createDeployPayload(DeployModelCommandPayload.DeploymentMode.API_PUBLISHED);
DeployModelCommand command = new DeployModelCommand(payload);
UserEntity user = createUserEntity(payload);
- when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.getUserId(), true)).thenReturn(user);
+ when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.userId(), true)).thenReturn(user);
when(permissionChecker.checkCreatePermission(EXECUTION_CONTEXT, user.getId(), ENVIRONMENT_ID, DeploymentMode.API_PUBLISHED))
.thenReturn(Optional.empty());
@@ -187,12 +189,12 @@ public void creates_an_API_PUBLISHED_mode() throws InterruptedException {
when(
cockpitApiService.createApi(
EXECUTION_CONTEXT,
- payload.getModelId(),
+ payload.modelId(),
user.getId(),
- payload.getSwaggerDefinition(),
+ payload.swaggerDefinition(),
ENVIRONMENT_ID,
DeploymentMode.API_PUBLISHED,
- payload.getLabels()
+ payload.labels()
)
)
.thenAnswer(i -> {
@@ -209,15 +211,15 @@ public void creates_an_API_PUBLISHED_mode() throws InterruptedException {
@Test
public void updates_an_API_DOCUMENTED() throws InterruptedException {
- DeployModelPayload payload = createDeployPayload(DeployModelPayload.DeploymentMode.API_DOCUMENTED);
+ DeployModelCommandPayload payload = createDeployPayload(DeployModelCommandPayload.DeploymentMode.API_DOCUMENTED);
DeployModelCommand command = new DeployModelCommand(payload);
String apiId = "api#id";
- when(apiSearchService.findIdByEnvironmentIdAndCrossId(ENVIRONMENT_ID, payload.getModelId())).thenReturn(Optional.of(apiId));
+ when(apiSearchService.findIdByEnvironmentIdAndCrossId(ENVIRONMENT_ID, payload.modelId())).thenReturn(Optional.of(apiId));
UserEntity user = createUserEntity(payload);
- when(userService.findBySource(any(), eq("cockpit"), eq(payload.getUserId()), eq(true))).thenReturn(user);
+ when(userService.findBySource(any(), eq("cockpit"), eq(payload.userId()), eq(true))).thenReturn(user);
when(permissionChecker.checkUpdatePermission(EXECUTION_CONTEXT, user.getId(), ENVIRONMENT_ID, apiId, DeploymentMode.API_DOCUMENTED))
.thenReturn(Optional.empty());
@@ -227,10 +229,10 @@ public void updates_an_API_DOCUMENTED() throws InterruptedException {
EXECUTION_CONTEXT,
apiId,
user.getId(),
- payload.getSwaggerDefinition(),
+ payload.swaggerDefinition(),
ENVIRONMENT_ID,
DeploymentMode.API_DOCUMENTED,
- payload.getLabels()
+ payload.labels()
)
)
.thenAnswer(i -> {
@@ -247,15 +249,15 @@ public void updates_an_API_DOCUMENTED() throws InterruptedException {
@Test
public void updates_an_API_MOCKED_mode() throws InterruptedException {
- DeployModelPayload payload = createDeployPayload(DeployModelPayload.DeploymentMode.API_MOCKED);
+ DeployModelCommandPayload payload = createDeployPayload(DeployModelCommandPayload.DeploymentMode.API_MOCKED);
DeployModelCommand command = new DeployModelCommand(payload);
String apiId = "api#id";
- when(apiSearchService.findIdByEnvironmentIdAndCrossId(ENVIRONMENT_ID, payload.getModelId())).thenReturn(Optional.of(apiId));
+ when(apiSearchService.findIdByEnvironmentIdAndCrossId(ENVIRONMENT_ID, payload.modelId())).thenReturn(Optional.of(apiId));
UserEntity user = createUserEntity(payload);
- when(userService.findBySource(any(), eq("cockpit"), eq(payload.getUserId()), eq(true))).thenReturn(user);
+ when(userService.findBySource(any(), eq("cockpit"), eq(payload.userId()), eq(true))).thenReturn(user);
when(permissionChecker.checkUpdatePermission(EXECUTION_CONTEXT, user.getId(), ENVIRONMENT_ID, apiId, DeploymentMode.API_MOCKED))
.thenReturn(Optional.empty());
@@ -265,10 +267,10 @@ public void updates_an_API_MOCKED_mode() throws InterruptedException {
EXECUTION_CONTEXT,
apiId,
user.getId(),
- payload.getSwaggerDefinition(),
+ payload.swaggerDefinition(),
ENVIRONMENT_ID,
DeploymentMode.API_MOCKED,
- payload.getLabels()
+ payload.labels()
)
)
.thenAnswer(i -> {
@@ -285,15 +287,15 @@ public void updates_an_API_MOCKED_mode() throws InterruptedException {
@Test
public void updates_an_API_PUBLISHED_mode() throws InterruptedException {
- DeployModelPayload payload = createDeployPayload(DeployModelPayload.DeploymentMode.API_PUBLISHED);
+ DeployModelCommandPayload payload = createDeployPayload(DeployModelCommandPayload.DeploymentMode.API_PUBLISHED);
DeployModelCommand command = new DeployModelCommand(payload);
String apiId = "api#id";
- when(apiSearchService.findIdByEnvironmentIdAndCrossId(ENVIRONMENT_ID, payload.getModelId())).thenReturn(Optional.of(apiId));
+ when(apiSearchService.findIdByEnvironmentIdAndCrossId(ENVIRONMENT_ID, payload.modelId())).thenReturn(Optional.of(apiId));
UserEntity user = createUserEntity(payload);
- when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.getUserId(), true)).thenReturn(user);
+ when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.userId(), true)).thenReturn(user);
when(permissionChecker.checkUpdatePermission(EXECUTION_CONTEXT, user.getId(), ENVIRONMENT_ID, apiId, DeploymentMode.API_PUBLISHED))
.thenReturn(Optional.empty());
@@ -303,10 +305,10 @@ public void updates_an_API_PUBLISHED_mode() throws InterruptedException {
EXECUTION_CONTEXT,
apiId,
user.getId(),
- payload.getSwaggerDefinition(),
+ payload.swaggerDefinition(),
ENVIRONMENT_ID,
DeploymentMode.API_PUBLISHED,
- payload.getLabels()
+ payload.labels()
)
)
.thenAnswer(i -> {
@@ -323,12 +325,12 @@ public void updates_an_API_PUBLISHED_mode() throws InterruptedException {
@Test
public void handle_null_mode() throws InterruptedException {
- DeployModelPayload payload = createDeployPayload(null);
+ DeployModelCommandPayload payload = createDeployPayload(null);
DeployModelCommand command = new DeployModelCommand(payload);
UserEntity user = createUserEntity(payload);
- when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.getUserId(), true)).thenReturn(user);
+ when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.userId(), true)).thenReturn(user);
when(permissionChecker.checkCreatePermission(EXECUTION_CONTEXT, user.getId(), ENVIRONMENT_ID, DeploymentMode.API_DOCUMENTED))
.thenReturn(Optional.empty());
@@ -336,12 +338,12 @@ public void handle_null_mode() throws InterruptedException {
when(
cockpitApiService.createApi(
EXECUTION_CONTEXT,
- payload.getModelId(),
+ payload.modelId(),
user.getId(),
- payload.getSwaggerDefinition(),
+ payload.swaggerDefinition(),
ENVIRONMENT_ID,
DeploymentMode.API_DOCUMENTED,
- payload.getLabels()
+ payload.labels()
)
)
.thenAnswer(i -> {
@@ -358,12 +360,12 @@ public void handle_null_mode() throws InterruptedException {
@Test
public void handleWithException() throws InterruptedException {
- DeployModelPayload payload = createDeployPayload(DeployModelPayload.DeploymentMode.API_DOCUMENTED);
+ DeployModelCommandPayload payload = createDeployPayload(DeployModelCommandPayload.DeploymentMode.API_DOCUMENTED);
DeployModelCommand command = new DeployModelCommand(payload);
UserEntity user = createUserEntity(payload);
- when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.getUserId(), true)).thenReturn(user);
+ when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.userId(), true)).thenReturn(user);
when(permissionChecker.checkCreatePermission(EXECUTION_CONTEXT, user.getId(), ENVIRONMENT_ID, DeploymentMode.API_DOCUMENTED))
.thenReturn(Optional.empty());
@@ -371,12 +373,12 @@ public void handleWithException() throws InterruptedException {
when(
cockpitApiService.createApi(
EXECUTION_CONTEXT,
- payload.getModelId(),
+ payload.modelId(),
user.getId(),
- payload.getSwaggerDefinition(),
+ payload.swaggerDefinition(),
ENVIRONMENT_ID,
DeploymentMode.API_DOCUMENTED,
- payload.getLabels()
+ payload.labels()
)
)
.thenThrow(new RuntimeException("fake error"));
@@ -390,12 +392,12 @@ public void handleWithException() throws InterruptedException {
@Test
public void fails_to_create_due_to_permission_issues() throws InterruptedException {
- DeployModelPayload payload = createDeployPayload(DeployModelPayload.DeploymentMode.API_DOCUMENTED);
+ DeployModelCommandPayload payload = createDeployPayload(DeployModelCommandPayload.DeploymentMode.API_DOCUMENTED);
DeployModelCommand command = new DeployModelCommand(payload);
UserEntity user = createUserEntity(payload);
- when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.getUserId(), true)).thenReturn(user);
+ when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.userId(), true)).thenReturn(user);
when(permissionChecker.checkCreatePermission(EXECUTION_CONTEXT, user.getId(), ENVIRONMENT_ID, DeploymentMode.API_DOCUMENTED))
.thenReturn(Optional.of("You are not allowed to create APIs on this environment."));
@@ -407,23 +409,23 @@ public void fails_to_create_due_to_permission_issues() throws InterruptedExcepti
obs.assertValue(reply -> {
Assertions
.assertThat(reply)
- .extracting(DeployModelReply::getCommandId, DeployModelReply::getCommandStatus, DeployModelReply::getMessage)
- .containsExactly(command.getId(), CommandStatus.FAILED, "You are not allowed to create APIs on this environment.");
+ .extracting(DeployModelReply::getCommandId, DeployModelReply::getCommandStatus, DeployModelReply::getErrorDetails)
+ .containsExactly(command.getId(), CommandStatus.ERROR, "You are not allowed to create APIs on this environment.");
return true;
});
}
@Test
public void fails_to_update_due_to_permission_issues() throws InterruptedException {
- DeployModelPayload payload = createDeployPayload(DeployModelPayload.DeploymentMode.API_DOCUMENTED);
+ DeployModelCommandPayload payload = createDeployPayload(DeployModelCommandPayload.DeploymentMode.API_DOCUMENTED);
DeployModelCommand command = new DeployModelCommand(payload);
String apiId = "api#id";
- when(apiSearchService.findIdByEnvironmentIdAndCrossId(ENVIRONMENT_ID, payload.getModelId())).thenReturn(Optional.of(apiId));
+ when(apiSearchService.findIdByEnvironmentIdAndCrossId(ENVIRONMENT_ID, payload.modelId())).thenReturn(Optional.of(apiId));
UserEntity user = createUserEntity(payload);
- when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.getUserId(), true)).thenReturn(user);
+ when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.userId(), true)).thenReturn(user);
when(permissionChecker.checkUpdatePermission(EXECUTION_CONTEXT, user.getId(), ENVIRONMENT_ID, apiId, DeploymentMode.API_DOCUMENTED))
.thenReturn(Optional.of("You are not allowed to create APIs on this environment."));
@@ -435,20 +437,20 @@ public void fails_to_update_due_to_permission_issues() throws InterruptedExcepti
obs.assertValue(reply -> {
Assertions
.assertThat(reply)
- .extracting(DeployModelReply::getCommandId, DeployModelReply::getCommandStatus, DeployModelReply::getMessage)
- .containsExactly(command.getId(), CommandStatus.FAILED, "You are not allowed to create APIs on this environment.");
+ .extracting(DeployModelReply::getCommandId, DeployModelReply::getCommandStatus, DeployModelReply::getErrorDetails)
+ .containsExactly(command.getId(), CommandStatus.ERROR, "You are not allowed to create APIs on this environment.");
return true;
});
}
@Test
public void clean_gravitee_context_on_success() throws InterruptedException {
- DeployModelPayload payload = createDeployPayload(DeployModelPayload.DeploymentMode.API_DOCUMENTED);
+ DeployModelCommandPayload payload = createDeployPayload(DeployModelCommandPayload.DeploymentMode.API_DOCUMENTED);
DeployModelCommand command = new DeployModelCommand(payload);
UserEntity user = createUserEntity(payload);
- when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.getUserId(), true)).thenReturn(user);
+ when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.userId(), true)).thenReturn(user);
when(permissionChecker.checkCreatePermission(EXECUTION_CONTEXT, user.getId(), ENVIRONMENT_ID, DeploymentMode.API_DOCUMENTED))
.thenReturn(Optional.empty());
@@ -456,12 +458,12 @@ public void clean_gravitee_context_on_success() throws InterruptedException {
when(
cockpitApiService.createApi(
EXECUTION_CONTEXT,
- payload.getModelId(),
+ payload.modelId(),
user.getId(),
- payload.getSwaggerDefinition(),
+ payload.swaggerDefinition(),
ENVIRONMENT_ID,
DeploymentMode.API_DOCUMENTED,
- payload.getLabels()
+ payload.labels()
)
)
.thenAnswer(i -> {
@@ -477,12 +479,12 @@ public void clean_gravitee_context_on_success() throws InterruptedException {
@Test
public void clean_gravitee_context_on_error() throws InterruptedException {
- DeployModelPayload payload = createDeployPayload(DeployModelPayload.DeploymentMode.API_DOCUMENTED);
+ DeployModelCommandPayload payload = createDeployPayload(DeployModelCommandPayload.DeploymentMode.API_DOCUMENTED);
DeployModelCommand command = new DeployModelCommand(payload);
UserEntity user = createUserEntity(payload);
- when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.getUserId(), true)).thenReturn(user);
+ when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.userId(), true)).thenReturn(user);
when(permissionChecker.checkCreatePermission(EXECUTION_CONTEXT, user.getId(), ENVIRONMENT_ID, DeploymentMode.API_DOCUMENTED))
.thenReturn(Optional.of("You are not allowed to create APIs on this environment."));
@@ -495,12 +497,12 @@ public void clean_gravitee_context_on_error() throws InterruptedException {
@Test
public void fails_to_create_due_to_context_path_already_used() throws InterruptedException {
- DeployModelPayload payload = createDeployPayload(DeployModelPayload.DeploymentMode.API_DOCUMENTED);
+ DeployModelCommandPayload payload = createDeployPayload(DeployModelCommandPayload.DeploymentMode.API_DOCUMENTED);
DeployModelCommand command = new DeployModelCommand(payload);
UserEntity user = createUserEntity(payload);
- when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.getUserId(), true)).thenReturn(user);
+ when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.userId(), true)).thenReturn(user);
when(permissionChecker.checkCreatePermission(EXECUTION_CONTEXT, user.getId(), ENVIRONMENT_ID, DeploymentMode.API_DOCUMENTED))
.thenReturn(Optional.empty());
@@ -508,12 +510,12 @@ public void fails_to_create_due_to_context_path_already_used() throws Interrupte
when(
cockpitApiService.createApi(
EXECUTION_CONTEXT,
- payload.getModelId(),
+ payload.modelId(),
user.getId(),
- payload.getSwaggerDefinition(),
+ payload.swaggerDefinition(),
ENVIRONMENT_ID,
DeploymentMode.API_DOCUMENTED,
- payload.getLabels()
+ payload.labels()
)
)
.thenReturn(ApiEntityResult.failure("context path not available"));
@@ -525,40 +527,41 @@ public void fails_to_create_due_to_context_path_already_used() throws Interrupte
obs.assertValue(reply -> {
Assertions
.assertThat(reply)
- .extracting(DeployModelReply::getCommandId, DeployModelReply::getCommandStatus, DeployModelReply::getMessage)
- .containsExactly(command.getId(), CommandStatus.FAILED, "context path not available");
+ .extracting(DeployModelReply::getCommandId, DeployModelReply::getCommandStatus, DeployModelReply::getErrorDetails)
+ .containsExactly(command.getId(), CommandStatus.ERROR, "Failed to import API [context path not available].");
return true;
});
}
@Test
public void creates_an_API_PUBLISHED_mode_with_apim_ids() throws InterruptedException {
- DeployModelPayload payload = createDeployPayload(DeployModelPayload.DeploymentMode.API_PUBLISHED);
- payload.setOrganizationId(ORGANIZATION_ID);
- payload.setEnvironmentId(ENVIRONMENT_ID);
+ DeployModelCommandPayload payload = createDeployPayload(
+ DeployModelCommandPayload.DeploymentMode.API_PUBLISHED,
+ ENVIRONMENT_ID,
+ ORGANIZATION_ID
+ );
when(environmentService.findByCockpitId(ENVIRONMENT_ID)).thenThrow(new EnvironmentNotFoundException(ENVIRONMENT_ID));
when(environmentService.findById(ENVIRONMENT_ID))
.thenReturn(
EnvironmentEntity.builder().id(ENVIRONMENT_ID).organizationId(ORGANIZATION_ID).cockpitId(COCKPIT_ENVIRONMENT_ID).build()
);
-
DeployModelCommand command = new DeployModelCommand(payload);
UserEntity user = createUserEntity(payload);
- when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.getUserId(), true)).thenReturn(user);
+ when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.userId(), true)).thenReturn(user);
when(permissionChecker.checkCreatePermission(EXECUTION_CONTEXT, user.getId(), ENVIRONMENT_ID, DeploymentMode.API_PUBLISHED))
.thenReturn(Optional.empty());
when(
cockpitApiService.createApi(
EXECUTION_CONTEXT,
- payload.getModelId(),
+ payload.modelId(),
user.getId(),
- payload.getSwaggerDefinition(),
+ payload.swaggerDefinition(),
ENVIRONMENT_ID,
DeploymentMode.API_PUBLISHED,
- payload.getLabels()
+ payload.labels()
)
)
.thenAnswer(i -> {
@@ -570,25 +573,35 @@ public void creates_an_API_PUBLISHED_mode_with_apim_ids() throws InterruptedExce
TestObserver obs = cut.handle(command).test();
obs.await();
+
obs.assertValue(reply -> reply.getCommandId().equals(command.getId()) && reply.getCommandStatus().equals(CommandStatus.SUCCEEDED));
}
- private static DeployModelPayload createDeployPayload(final DeployModelPayload.DeploymentMode deploymentMode) {
- DeployModelPayload payload = new DeployModelPayload();
- payload.setModelId("model#1");
- payload.setSwaggerDefinition("swagger-definition");
- payload.setUserId("cockpit_user#id");
- payload.setMode(deploymentMode);
- payload.setLabels(List.of("label1", "label2"));
- payload.setEnvironmentId(COCKPIT_ENVIRONMENT_ID);
- payload.setOrganizationId(COCKPIT_ORGANIZATION_ID);
- return payload;
+ private static DeployModelCommandPayload createDeployPayload(
+ final DeployModelCommandPayload.DeploymentMode deploymentMode,
+ final String environmentId,
+ final String organizationId
+ ) {
+ return DeployModelCommandPayload
+ .builder()
+ .modelId("model#1")
+ .swaggerDefinition("swagger-definition")
+ .userId("cockpit_user#id")
+ .mode(deploymentMode)
+ .labels(List.of("label1", "label2"))
+ .environmentId(environmentId)
+ .organizationId(organizationId)
+ .build();
+ }
+
+ private static DeployModelCommandPayload createDeployPayload(final DeployModelCommandPayload.DeploymentMode deploymentMode) {
+ return createDeployPayload(deploymentMode, COCKPIT_ENVIRONMENT_ID, COCKPIT_ORGANIZATION_ID);
}
- private static UserEntity createUserEntity(final DeployModelPayload payload) {
+ private static UserEntity createUserEntity(final DeployModelCommandPayload payload) {
UserEntity user = new UserEntity();
user.setId("user#id");
- user.setSourceId(payload.getUserId());
+ user.setSourceId(payload.userId());
user.setOrganizationId(ORGANIZATION_ID);
return user;
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableEnvironmentCommandHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableEnvironmentCommandHandlerTest.java
index df4d46ab598..d8d163d3537 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableEnvironmentCommandHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableEnvironmentCommandHandlerTest.java
@@ -21,10 +21,10 @@
import io.gravitee.apim.core.access_point.crud_service.AccessPointCrudService;
import io.gravitee.apim.core.access_point.model.AccessPoint;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.environment.DisableEnvironmentCommand;
-import io.gravitee.cockpit.api.command.environment.DisableEnvironmentPayload;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.environment.DisableEnvironmentCommand;
+import io.gravitee.cockpit.api.command.v1.environment.DisableEnvironmentCommandPayload;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.repository.management.api.ApiRepository;
import io.gravitee.repository.management.api.search.ApiCriteria;
import io.gravitee.repository.management.api.search.ApiFieldFilter;
@@ -83,8 +83,8 @@ void setUp() {
}
@Test
- void handleType() {
- assertEquals(Command.Type.DISABLE_ENVIRONMENT_COMMAND, cut.handleType());
+ void supportType() {
+ assertEquals(CockpitCommandType.DISABLE_ENVIRONMENT.name(), cut.supportType());
}
@Test
@@ -127,9 +127,6 @@ void handleThrowsException() {
}
private DisableEnvironmentCommand aDisableEnvCommand() {
- var payload = new DisableEnvironmentPayload();
- payload.setCockpitId(ENV_COCKPIT_ID);
- payload.setUserId(USER_ID);
- return new DisableEnvironmentCommand(payload);
+ return new DisableEnvironmentCommand(DisableEnvironmentCommandPayload.builder().cockpitId(ENV_COCKPIT_ID).userId(USER_ID).build());
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableOrganizationCommandHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableOrganizationCommandHandlerTest.java
index 71b49f7b1cb..064f8e46611 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableOrganizationCommandHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/DisableOrganizationCommandHandlerTest.java
@@ -22,10 +22,10 @@
import io.gravitee.apim.core.access_point.crud_service.AccessPointCrudService;
import io.gravitee.apim.core.access_point.model.AccessPoint;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.organization.DisableOrganizationCommand;
-import io.gravitee.cockpit.api.command.organization.DisableOrganizationPayload;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.organization.DisableOrganizationCommand;
+import io.gravitee.cockpit.api.command.v1.organization.DisableOrganizationCommandPayload;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.OrganizationEntity;
import io.gravitee.rest.api.model.configuration.identity.IdentityProviderActivationReferenceType;
import io.gravitee.rest.api.service.OrganizationService;
@@ -63,8 +63,8 @@ void setUp() {
}
@Test
- void handleType() {
- assertEquals(Command.Type.DISABLE_ORGANIZATION_COMMAND, cut.handleType());
+ void supportType() {
+ assertEquals(CockpitCommandType.DISABLE_ORGANIZATION.name(), cut.supportType());
}
@Test
@@ -105,8 +105,6 @@ void handleThrowsException() {
}
private DisableOrganizationCommand aDisableOrgCommand() {
- var payload = new DisableOrganizationPayload();
- payload.setCockpitId(ORG_COCKPIT_ID);
- return new DisableOrganizationCommand(payload);
+ return new DisableOrganizationCommand(DisableOrganizationCommandPayload.builder().cockpitId(ORG_COCKPIT_ID).build());
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/EnvironmentCommandHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/EnvironmentCommandHandlerTest.java
index a389f3d1609..998877e5de0 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/EnvironmentCommandHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/EnvironmentCommandHandlerTest.java
@@ -23,12 +23,12 @@
import static org.mockito.Mockito.when;
import io.gravitee.apim.core.access_point.crud_service.AccessPointCrudService;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.accesspoint.AccessPoint;
-import io.gravitee.cockpit.api.command.environment.EnvironmentCommand;
-import io.gravitee.cockpit.api.command.environment.EnvironmentPayload;
-import io.gravitee.cockpit.api.command.environment.EnvironmentReply;
+import io.gravitee.cockpit.api.command.model.accesspoint.AccessPoint;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.environment.EnvironmentCommand;
+import io.gravitee.cockpit.api.command.v1.environment.EnvironmentCommandPayload;
+import io.gravitee.cockpit.api.command.v1.environment.EnvironmentReply;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.EnvironmentEntity;
import io.gravitee.rest.api.model.UpdateEnvironmentEntity;
import io.gravitee.rest.api.service.EnvironmentService;
@@ -63,37 +63,39 @@ public void before() {
}
@Test
- public void handleType() {
- assertEquals(Command.Type.ENVIRONMENT_COMMAND, cut.handleType());
+ public void supportType() {
+ assertEquals(CockpitCommandType.ENVIRONMENT.name(), cut.supportType());
}
@Test
public void handle() throws InterruptedException {
- EnvironmentPayload environmentPayload = new EnvironmentPayload();
+ EnvironmentCommandPayload environmentPayload = EnvironmentCommandPayload
+ .builder()
+ .id("env#1")
+ .cockpitId("env#cockpit-1")
+ .hrids(Collections.singletonList("env-1"))
+ .organizationId("orga#1")
+ .description("Environment description")
+ .name("Environment name")
+ .accessPoints(
+ List.of(
+ AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction1.io").build(),
+ AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction2.io").build()
+ )
+ )
+ .build();
EnvironmentCommand command = new EnvironmentCommand(environmentPayload);
- environmentPayload.setId("env#1");
- environmentPayload.setCockpitId("env#cockpit-1");
- environmentPayload.setHrids(Collections.singletonList("env-1"));
- environmentPayload.setOrganizationId("orga#1");
- environmentPayload.setDescription("Environment description");
- environmentPayload.setName("Environment name");
- environmentPayload.setAccessPoints(
- List.of(
- AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction1.io").build(),
- AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction2.io").build()
- )
- );
when(environmentService.findByCockpitId(any())).thenThrow(new EnvironmentNotFoundException("Env not found"));
when(
environmentService.createOrUpdate(
eq("orga#1"),
eq("env#1"),
argThat(newEnvironment ->
- newEnvironment.getCockpitId().equals(environmentPayload.getCockpitId()) &&
- newEnvironment.getHrids().equals(environmentPayload.getHrids()) &&
- newEnvironment.getDescription().equals(environmentPayload.getDescription()) &&
- newEnvironment.getName().equals(environmentPayload.getName())
+ newEnvironment.getCockpitId().equals(environmentPayload.cockpitId()) &&
+ newEnvironment.getHrids().equals(environmentPayload.hrids()) &&
+ newEnvironment.getDescription().equals(environmentPayload.description()) &&
+ newEnvironment.getName().equals(environmentPayload.name())
)
)
)
@@ -107,20 +109,22 @@ public void handle() throws InterruptedException {
@Test
public void handleWithException() throws InterruptedException {
- EnvironmentPayload environmentPayload = new EnvironmentPayload();
- EnvironmentCommand command = new EnvironmentCommand(environmentPayload);
-
- environmentPayload.setId("env#1");
- environmentPayload.setCockpitId("env#cockpit-1");
- environmentPayload.setOrganizationId("orga#1");
- environmentPayload.setDescription("Environment description");
- environmentPayload.setName("Environment name");
- environmentPayload.setAccessPoints(
- List.of(
- AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction1.io").build(),
- AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction2.io").build()
+ EnvironmentCommandPayload environmentPayload = EnvironmentCommandPayload
+ .builder()
+ .id("env#1")
+ .cockpitId("env#cockpit-1")
+ .hrids(Collections.singletonList("env-1"))
+ .organizationId("orga#1")
+ .description("Environment description")
+ .name("Environment name")
+ .accessPoints(
+ List.of(
+ AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction1.io").build(),
+ AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction2.io").build()
+ )
)
- );
+ .build();
+ EnvironmentCommand command = new EnvironmentCommand(environmentPayload);
when(environmentService.findByCockpitId(any())).thenThrow(new EnvironmentNotFoundException("Env not found"));
when(environmentService.createOrUpdate(eq("orga#1"), eq("env#1"), any(UpdateEnvironmentEntity.class)))
@@ -135,21 +139,22 @@ public void handleWithException() throws InterruptedException {
@Test
public void handleWithExistingCockpitId() throws InterruptedException {
- EnvironmentPayload environmentPayload = new EnvironmentPayload();
- EnvironmentCommand command = new EnvironmentCommand(environmentPayload);
-
- environmentPayload.setId("env#1");
- environmentPayload.setCockpitId("env#cockpit-1");
- environmentPayload.setHrids(Collections.singletonList("env-1"));
- environmentPayload.setOrganizationId("orga#1");
- environmentPayload.setDescription("Environment description");
- environmentPayload.setName("Environment name");
- environmentPayload.setAccessPoints(
- List.of(
- AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction1.io").build(),
- AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction2.io").build()
+ EnvironmentCommandPayload environmentPayload = EnvironmentCommandPayload
+ .builder()
+ .id("env#1")
+ .cockpitId("env#cockpit-1")
+ .hrids(Collections.singletonList("env-1"))
+ .organizationId("orga#1")
+ .description("Environment description")
+ .name("Environment name")
+ .accessPoints(
+ List.of(
+ AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction1.io").build(),
+ AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction2.io").build()
+ )
)
- );
+ .build();
+ EnvironmentCommand command = new EnvironmentCommand(environmentPayload);
EnvironmentEntity existingEnvironment = mock(EnvironmentEntity.class);
when(existingEnvironment.getId()).thenReturn("DEFAULT");
when(existingEnvironment.getOrganizationId()).thenReturn("DEFAULT");
@@ -159,10 +164,10 @@ public void handleWithExistingCockpitId() throws InterruptedException {
eq("DEFAULT"),
eq("DEFAULT"),
argThat(newEnvironment ->
- newEnvironment.getCockpitId().equals(environmentPayload.getCockpitId()) &&
- newEnvironment.getHrids().equals(environmentPayload.getHrids()) &&
- newEnvironment.getDescription().equals(environmentPayload.getDescription()) &&
- newEnvironment.getName().equals(environmentPayload.getName())
+ newEnvironment.getCockpitId().equals(environmentPayload.cockpitId()) &&
+ newEnvironment.getHrids().equals(environmentPayload.hrids()) &&
+ newEnvironment.getDescription().equals(environmentPayload.description()) &&
+ newEnvironment.getName().equals(environmentPayload.name())
)
)
)
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/GoodbyeCommandHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/GoodByeCommandHandlerTest.java
similarity index 88%
rename from gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/GoodbyeCommandHandlerTest.java
rename to gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/GoodByeCommandHandlerTest.java
index 44723251f3a..dee787e50e3 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/GoodbyeCommandHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/GoodByeCommandHandlerTest.java
@@ -15,20 +15,19 @@
*/
package io.gravitee.rest.api.service.cockpit.command.handler;
-import static io.gravitee.rest.api.service.cockpit.command.handler.GoodbyeCommandHandler.DELETED_STATUS;
+import static io.gravitee.rest.api.service.cockpit.command.handler.GoodByeCommandHandler.DELETED_STATUS;
import static java.util.Collections.emptyList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.groups.Tuple.tuple;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.*;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.goodbye.GoodbyeCommand;
-import io.gravitee.cockpit.api.command.goodbye.GoodbyeReply;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
import io.gravitee.common.data.domain.Page;
+import io.gravitee.exchange.api.command.CommandStatus;
+import io.gravitee.exchange.api.command.goodbye.GoodByeCommand;
+import io.gravitee.exchange.api.command.goodbye.GoodByeReply;
import io.gravitee.rest.api.model.InstallationEntity;
-import io.gravitee.rest.api.model.NewApplicationEntity;
import io.gravitee.rest.api.model.promotion.PromotionEntity;
import io.gravitee.rest.api.model.promotion.PromotionEntityAuthor;
import io.gravitee.rest.api.model.promotion.PromotionEntityStatus;
@@ -50,7 +49,7 @@
* @author GraviteeSource Team
*/
@RunWith(MockitoJUnitRunner.class)
-public class GoodbyeCommandHandlerTest {
+public class GoodByeCommandHandlerTest {
private static final String CUSTOM_VALUE = "customValue";
private static final String CUSTOM_KEY = "customKey";
@@ -62,16 +61,16 @@ public class GoodbyeCommandHandlerTest {
@Mock
private PromotionService promotionService;
- private GoodbyeCommandHandler cut;
+ private GoodByeCommandHandler cut;
@Before
public void before() {
- cut = new GoodbyeCommandHandler(installationService, promotionService);
+ cut = new GoodByeCommandHandler(installationService, promotionService);
}
@Test
- public void handleType() {
- assertEquals(Command.Type.GOODBYE_COMMAND, cut.handleType());
+ public void supportType() {
+ assertEquals(GoodByeCommand.COMMAND_TYPE, cut.supportType());
}
@Test
@@ -80,12 +79,12 @@ public void handle() throws InterruptedException {
installation.setId(INSTALLATION_ID);
installation.getAdditionalInformation().put(CUSTOM_KEY, CUSTOM_VALUE);
- GoodbyeCommand command = new GoodbyeCommand();
+ GoodByeCommand command = new GoodByeCommand();
when(installationService.getOrInitialize()).thenReturn(installation);
when(promotionService.search(any(), any(), any())).thenReturn(new Page<>(emptyList(), 0, 0, 0));
- TestObserver obs = cut.handle(command).test();
+ TestObserver obs = cut.handle(command).test();
obs.await();
obs.assertValue(reply -> reply.getCommandId().equals(command.getId()) && reply.getCommandStatus().equals(CommandStatus.SUCCEEDED));
@@ -102,13 +101,13 @@ public void handleWithException() throws InterruptedException {
installation.setId(INSTALLATION_ID);
installation.getAdditionalInformation().put(CUSTOM_KEY, CUSTOM_VALUE);
- GoodbyeCommand command = new GoodbyeCommand();
+ GoodByeCommand command = new GoodByeCommand();
when(installationService.getOrInitialize()).thenReturn(installation);
when(installationService.setAdditionalInformation(anyMap())).thenThrow(new TechnicalManagementException());
when(promotionService.search(any(), any(), any())).thenReturn(new Page<>(emptyList(), 0, 0, 0));
- TestObserver obs = cut.handle(command).test();
+ TestObserver obs = cut.handle(command).test();
obs.await();
obs.assertValue(reply -> reply.getCommandId().equals(command.getId()) && reply.getCommandStatus().equals(CommandStatus.ERROR));
@@ -120,7 +119,7 @@ public void handleRejectAllPromotionToValidate() throws InterruptedException {
installation.setId(INSTALLATION_ID);
installation.getAdditionalInformation().put(CUSTOM_KEY, CUSTOM_VALUE);
- GoodbyeCommand command = new GoodbyeCommand();
+ GoodByeCommand command = new GoodByeCommand();
when(installationService.getOrInitialize()).thenReturn(installation);
@@ -128,7 +127,7 @@ public void handleRejectAllPromotionToValidate() throws InterruptedException {
PromotionEntity promotionEntity2 = getAPromotionEntity("promotion#2");
when(promotionService.search(any(), any(), any())).thenReturn(new Page<>(List.of(promotionEntity1, promotionEntity2), 0, 0, 0));
- TestObserver obs = cut.handle(command).test();
+ TestObserver obs = cut.handle(command).test();
obs.await();
obs.assertValue(reply -> reply.getCommandId().equals(command.getId()) && reply.getCommandStatus().equals(CommandStatus.SUCCEEDED));
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/InstallationCommandHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/InstallationCommandHandlerTest.java
index 21fb3c1ed7b..3f13f0a4a06 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/InstallationCommandHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/InstallationCommandHandlerTest.java
@@ -16,13 +16,15 @@
package io.gravitee.rest.api.service.cockpit.command.handler;
import static org.mockito.ArgumentMatchers.anyMap;
-import static org.mockito.Mockito.*;
-
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.installation.InstallationCommand;
-import io.gravitee.cockpit.api.command.installation.InstallationPayload;
-import io.gravitee.cockpit.api.command.installation.InstallationReply;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.installation.InstallationCommand;
+import io.gravitee.cockpit.api.command.v1.installation.InstallationCommandPayload;
+import io.gravitee.cockpit.api.command.v1.installation.InstallationReply;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.InstallationEntity;
import io.gravitee.rest.api.service.InstallationService;
import io.gravitee.rest.api.service.exceptions.TechnicalManagementException;
@@ -57,8 +59,8 @@ public void before() {
}
@Test
- public void handleType() {
- assertEquals(Command.Type.INSTALLATION_COMMAND, cut.handleType());
+ public void supportType() {
+ assertEquals(CockpitCommandType.INSTALLATION.name(), cut.supportType());
}
@Test
@@ -67,10 +69,12 @@ public void handle() throws InterruptedException {
installation.setId(INSTALLATION_ID);
installation.getAdditionalInformation().put(CUSTOM_KEY, CUSTOM_VALUE);
- InstallationPayload installationPayload = new InstallationPayload();
+ InstallationCommandPayload installationPayload = InstallationCommandPayload
+ .builder()
+ .id(INSTALLATION_ID)
+ .status("ACCEPTED")
+ .build();
InstallationCommand command = new InstallationCommand(installationPayload);
- installationPayload.setId(INSTALLATION_ID);
- installationPayload.setStatus("ACCEPTED");
when(installationService.getOrInitialize()).thenReturn(installation);
@@ -91,10 +95,12 @@ public void handleWithException() throws InterruptedException {
installation.setId(INSTALLATION_ID);
installation.getAdditionalInformation().put(CUSTOM_KEY, CUSTOM_VALUE);
- InstallationPayload installationPayload = new InstallationPayload();
+ InstallationCommandPayload installationPayload = InstallationCommandPayload
+ .builder()
+ .id(INSTALLATION_ID)
+ .status("ACCEPTED")
+ .build();
InstallationCommand command = new InstallationCommand(installationPayload);
- installationPayload.setId(INSTALLATION_ID);
- installationPayload.setStatus("ACCEPTED");
when(installationService.getOrInitialize()).thenReturn(installation);
when(installationService.setAdditionalInformation(anyMap())).thenThrow(new TechnicalManagementException());
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/MembershipCommandHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/MembershipCommandHandlerTest.java
index 1abe78615d3..7e8761d3f10 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/MembershipCommandHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/MembershipCommandHandlerTest.java
@@ -18,14 +18,19 @@
import static io.gravitee.rest.api.service.cockpit.command.handler.UserCommandHandler.COCKPIT_SOURCE;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.*;
-
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.membership.MembershipCommand;
-import io.gravitee.cockpit.api.command.membership.MembershipPayload;
-import io.gravitee.cockpit.api.command.membership.MembershipReply;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.argThat;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoInteractions;
+import static org.mockito.Mockito.when;
+
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.membership.MembershipCommand;
+import io.gravitee.cockpit.api.command.v1.membership.MembershipCommandPayload;
+import io.gravitee.cockpit.api.command.v1.membership.MembershipReply;
import io.gravitee.common.utils.UUID;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.MembershipMemberType;
import io.gravitee.rest.api.model.MembershipReferenceType;
import io.gravitee.rest.api.model.RoleEntity;
@@ -69,18 +74,20 @@ public void before() {
}
@Test
- public void handleType() {
- assertEquals(Command.Type.MEMBERSHIP_COMMAND, cut.handleType());
+ public void supportType() {
+ assertEquals(CockpitCommandType.MEMBERSHIP.name(), cut.supportType());
}
@Test
public void handleWithAdminRole() throws InterruptedException {
- MembershipPayload membershipPayload = new MembershipPayload();
- membershipPayload.setUserId("user#1");
- membershipPayload.setOrganizationId("orga#1");
- membershipPayload.setReferenceType(MembershipReferenceType.ENVIRONMENT.name());
- membershipPayload.setReferenceId("env#1");
- membershipPayload.setRole("ENVIRONMENT_PRIMARY_OWNER");
+ MembershipCommandPayload membershipPayload = MembershipCommandPayload
+ .builder()
+ .userId("user#1")
+ .organizationId("orga#1")
+ .referenceType(MembershipReferenceType.ENVIRONMENT.name())
+ .referenceId("env#1")
+ .role("ENVIRONMENT_PRIMARY_OWNER")
+ .build();
MembershipCommand command = new MembershipCommand(membershipPayload);
@@ -92,7 +99,7 @@ public void handleWithAdminRole() throws InterruptedException {
role.setScope(RoleScope.ENVIRONMENT);
role.setName("ADMIN");
- when(userService.findBySource(any(), eq(COCKPIT_SOURCE), eq(membershipPayload.getUserId()), eq(false))).thenReturn(user);
+ when(userService.findBySource(any(), eq(COCKPIT_SOURCE), eq(membershipPayload.userId()), eq(false))).thenReturn(user);
when(roleService.findByScopeAndName(RoleScope.ENVIRONMENT, "ADMIN", "orga#1")).thenReturn(Optional.of(role));
TestObserver obs = cut.handle(command).test();
@@ -120,7 +127,7 @@ public void handleWithAdminRole() throws InterruptedException {
);
assertEquals(MembershipReferenceType.ENVIRONMENT, membershipReference.getValue().getType());
- assertEquals(membershipPayload.getReferenceId(), membershipReference.getValue().getId());
+ assertEquals(membershipPayload.referenceId(), membershipReference.getValue().getId());
assertEquals(MembershipMemberType.USER, membershipMember.getValue().getMemberType());
assertEquals(user.getId(), membershipMember.getValue().getMemberId());
assertTrue(
@@ -134,12 +141,14 @@ public void handleWithAdminRole() throws InterruptedException {
@Test
public void handleWithRole() throws InterruptedException {
- MembershipPayload membershipPayload = new MembershipPayload();
- membershipPayload.setUserId("user#1");
- membershipPayload.setOrganizationId("orga#1");
- membershipPayload.setReferenceType(MembershipReferenceType.ORGANIZATION.name());
- membershipPayload.setReferenceId("orga#1");
- membershipPayload.setRole("ORGANIZATION_OWNER");
+ MembershipCommandPayload membershipPayload = MembershipCommandPayload
+ .builder()
+ .userId("user#1")
+ .organizationId("orga#1")
+ .referenceType(MembershipReferenceType.ORGANIZATION.name())
+ .referenceId("orga#1")
+ .role("ORGANIZATION_OWNER")
+ .build();
MembershipCommand command = new MembershipCommand(membershipPayload);
@@ -151,7 +160,7 @@ public void handleWithRole() throws InterruptedException {
role.setScope(RoleScope.ORGANIZATION);
role.setName("ADMIN");
- when(userService.findBySource(any(), eq(COCKPIT_SOURCE), eq(membershipPayload.getUserId()), eq(false))).thenReturn(user);
+ when(userService.findBySource(any(), eq(COCKPIT_SOURCE), eq(membershipPayload.userId()), eq(false))).thenReturn(user);
when(roleService.findByScopeAndName(RoleScope.ORGANIZATION, "ADMIN", "orga#1")).thenReturn(Optional.of(role));
TestObserver obs = cut.handle(command).test();
@@ -179,7 +188,7 @@ public void handleWithRole() throws InterruptedException {
);
assertEquals(MembershipReferenceType.ORGANIZATION, membershipReference.getValue().getType());
- assertEquals(membershipPayload.getReferenceId(), membershipReference.getValue().getId());
+ assertEquals(membershipPayload.referenceId(), membershipReference.getValue().getId());
assertEquals(MembershipMemberType.USER, membershipMember.getValue().getMemberType());
assertEquals(user.getId(), membershipMember.getValue().getMemberId());
assertTrue(
@@ -193,12 +202,14 @@ public void handleWithRole() throws InterruptedException {
@Test
public void handleWithUserRole() throws InterruptedException {
- MembershipPayload membershipPayload = new MembershipPayload();
- membershipPayload.setUserId("user#1");
- membershipPayload.setOrganizationId("orga#1");
- membershipPayload.setReferenceType(MembershipReferenceType.ENVIRONMENT.name());
- membershipPayload.setReferenceId("env#1");
- membershipPayload.setRole("ENVIRONMENT_USER");
+ MembershipCommandPayload membershipPayload = MembershipCommandPayload
+ .builder()
+ .userId("user#1")
+ .organizationId("orga#1")
+ .referenceType(MembershipReferenceType.ENVIRONMENT.name())
+ .referenceId("env#1")
+ .role("ENVIRONMENT_USER")
+ .build();
MembershipCommand command = new MembershipCommand(membershipPayload);
@@ -210,7 +221,7 @@ public void handleWithUserRole() throws InterruptedException {
role.setScope(RoleScope.ENVIRONMENT);
role.setName("USER");
- when(userService.findBySource(any(), eq(COCKPIT_SOURCE), eq(membershipPayload.getUserId()), eq(false))).thenReturn(user);
+ when(userService.findBySource(any(), eq(COCKPIT_SOURCE), eq(membershipPayload.userId()), eq(false))).thenReturn(user);
when(roleService.findByScopeAndName(RoleScope.ENVIRONMENT, "USER", "orga#1")).thenReturn(Optional.of(role));
TestObserver obs = cut.handle(command).test();
@@ -238,7 +249,7 @@ public void handleWithUserRole() throws InterruptedException {
);
assertEquals(MembershipReferenceType.ENVIRONMENT, membershipReference.getValue().getType());
- assertEquals(membershipPayload.getReferenceId(), membershipReference.getValue().getId());
+ assertEquals(membershipPayload.referenceId(), membershipReference.getValue().getId());
assertEquals(MembershipMemberType.USER, membershipMember.getValue().getMemberType());
assertEquals(user.getId(), membershipMember.getValue().getMemberId());
assertTrue(
@@ -252,12 +263,14 @@ public void handleWithUserRole() throws InterruptedException {
@Test
public void handleWithUnknownRole() throws InterruptedException {
- MembershipPayload membershipPayload = new MembershipPayload();
- membershipPayload.setUserId("user#1");
- membershipPayload.setOrganizationId("orga#1");
- membershipPayload.setReferenceType(MembershipReferenceType.ENVIRONMENT.name());
- membershipPayload.setReferenceId("env#1");
- membershipPayload.setRole("UNKNOWN");
+ MembershipCommandPayload membershipPayload = MembershipCommandPayload
+ .builder()
+ .userId("user#1")
+ .organizationId("orga#1")
+ .referenceType(MembershipReferenceType.ENVIRONMENT.name())
+ .referenceId("env#1")
+ .role("UNKNOWN")
+ .build();
MembershipCommand command = new MembershipCommand(membershipPayload);
@@ -267,7 +280,7 @@ public void handleWithUnknownRole() throws InterruptedException {
RoleEntity role = new RoleEntity();
role.setId(UUID.random().toString());
- when(userService.findBySource(any(), eq(COCKPIT_SOURCE), eq(membershipPayload.getUserId()), eq(false))).thenReturn(user);
+ when(userService.findBySource(any(), eq(COCKPIT_SOURCE), eq(membershipPayload.userId()), eq(false))).thenReturn(user);
TestObserver obs = cut.handle(command).test();
@@ -280,17 +293,19 @@ public void handleWithUnknownRole() throws InterruptedException {
@Test
public void handleWithUnknownUser() throws InterruptedException {
- MembershipPayload membershipPayload = new MembershipPayload();
- membershipPayload.setUserId("user#1");
- membershipPayload.setOrganizationId("orga#1");
- membershipPayload.setReferenceType(MembershipReferenceType.ENVIRONMENT.name());
- membershipPayload.setReferenceId("env#1");
- membershipPayload.setRole("UNKNOWN");
+ MembershipCommandPayload membershipPayload = MembershipCommandPayload
+ .builder()
+ .userId("user#1")
+ .organizationId("orga#1")
+ .referenceType(MembershipReferenceType.ENVIRONMENT.name())
+ .referenceId("env#1")
+ .role("UNKNOWN")
+ .build();
MembershipCommand command = new MembershipCommand(membershipPayload);
- when(userService.findBySource(any(), eq(COCKPIT_SOURCE), eq(membershipPayload.getUserId()), eq(false)))
- .thenThrow(new UserNotFoundException(membershipPayload.getUserId()));
+ when(userService.findBySource(any(), eq(COCKPIT_SOURCE), eq(membershipPayload.userId()), eq(false)))
+ .thenThrow(new UserNotFoundException(membershipPayload.userId()));
TestObserver obs = cut.handle(command).test();
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/OrganizationCommandHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/OrganizationCommandHandlerTest.java
index 793842a28c7..fb96582c6db 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/OrganizationCommandHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/OrganizationCommandHandlerTest.java
@@ -23,16 +23,15 @@
import io.gravitee.apim.core.access_point.crud_service.AccessPointCrudService;
import io.gravitee.apim.core.license.domain_service.LicenseDomainService;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.accesspoint.AccessPoint;
-import io.gravitee.cockpit.api.command.organization.OrganizationCommand;
-import io.gravitee.cockpit.api.command.organization.OrganizationPayload;
-import io.gravitee.cockpit.api.command.organization.OrganizationReply;
+import io.gravitee.cockpit.api.command.model.accesspoint.AccessPoint;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.organization.OrganizationCommand;
+import io.gravitee.cockpit.api.command.v1.organization.OrganizationCommandPayload;
+import io.gravitee.cockpit.api.command.v1.organization.OrganizationReply;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.OrganizationEntity;
import io.gravitee.rest.api.model.UpdateOrganizationEntity;
import io.gravitee.rest.api.service.OrganizationService;
-import io.gravitee.rest.api.service.exceptions.EnvironmentNotFoundException;
import io.gravitee.rest.api.service.exceptions.OrganizationNotFoundException;
import io.reactivex.rxjava3.observers.TestObserver;
import java.util.Collections;
@@ -68,35 +67,37 @@ public void before() {
}
@Test
- public void handleType() {
- assertEquals(Command.Type.ORGANIZATION_COMMAND, cut.handleType());
+ public void supportType() {
+ assertEquals(CockpitCommandType.ORGANIZATION.name(), cut.supportType());
}
@Test
public void handle() throws InterruptedException {
- OrganizationPayload organizationPayload = new OrganizationPayload();
+ OrganizationCommandPayload organizationPayload = OrganizationCommandPayload
+ .builder()
+ .id("orga#1")
+ .cockpitId("org#cockpit-1")
+ .hrids(Collections.singletonList("orga-1"))
+ .description("Organization description")
+ .name("Organization name")
+ .accessPoints(
+ List.of(
+ AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction1.io").build(),
+ AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction2.io").build()
+ )
+ )
+ .build();
OrganizationCommand command = new OrganizationCommand(organizationPayload);
- organizationPayload.setId("orga#1");
- organizationPayload.setCockpitId("org#cockpit-1");
- organizationPayload.setHrids(Collections.singletonList("orga-1"));
- organizationPayload.setDescription("Organization description");
- organizationPayload.setName("Organization name");
- organizationPayload.setAccessPoints(
- List.of(
- AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction1.io").build(),
- AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction2.io").build()
- )
- );
when(organizationService.findByCockpitId(any())).thenThrow(new OrganizationNotFoundException("Org not found"));
when(
organizationService.createOrUpdate(
argThat(orgaId -> orgaId.equals("orga#1")),
argThat(newOrganization ->
- newOrganization.getCockpitId().equals(organizationPayload.getCockpitId()) &&
- newOrganization.getHrids().equals(organizationPayload.getHrids()) &&
- newOrganization.getDescription().equals(organizationPayload.getDescription()) &&
- newOrganization.getName().equals(organizationPayload.getName())
+ newOrganization.getCockpitId().equals(organizationPayload.cockpitId()) &&
+ newOrganization.getHrids().equals(organizationPayload.hrids()) &&
+ newOrganization.getDescription().equals(organizationPayload.description()) &&
+ newOrganization.getName().equals(organizationPayload.name())
)
)
)
@@ -110,18 +111,19 @@ public void handle() throws InterruptedException {
@Test
public void handleWithException() throws InterruptedException {
- OrganizationPayload organizationPayload = new OrganizationPayload();
- OrganizationCommand command = new OrganizationCommand(organizationPayload);
-
- organizationPayload.setId("orga#1");
- organizationPayload.setDescription("Organization description");
- organizationPayload.setName("Organization name");
- organizationPayload.setAccessPoints(
- List.of(
- AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction1.io").build(),
- AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction2.io").build()
+ OrganizationCommandPayload organizationPayload = OrganizationCommandPayload
+ .builder()
+ .id("orga#1")
+ .description("Organization description")
+ .name("Organization name")
+ .accessPoints(
+ List.of(
+ AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction1.io").build(),
+ AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction2.io").build()
+ )
)
- );
+ .build();
+ OrganizationCommand command = new OrganizationCommand(organizationPayload);
when(organizationService.findByCockpitId(any())).thenThrow(new OrganizationNotFoundException("Org not found"));
when(organizationService.createOrUpdate(argThat(orgaId -> orgaId.equals("orga#1")), any(UpdateOrganizationEntity.class)))
@@ -136,20 +138,22 @@ public void handleWithException() throws InterruptedException {
@Test
public void handleWithExistingCockpitId() throws InterruptedException {
- OrganizationPayload organizationPayload = new OrganizationPayload();
+ OrganizationCommandPayload organizationPayload = OrganizationCommandPayload
+ .builder()
+ .id("orga#1")
+ .cockpitId("org#cockpit-1")
+ .hrids(Collections.singletonList("orga-1"))
+ .description("Organization description")
+ .name("Organization name")
+ .accessPoints(
+ List.of(
+ AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction1.io").build(),
+ AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction2.io").build()
+ )
+ )
+ .build();
OrganizationCommand command = new OrganizationCommand(organizationPayload);
- organizationPayload.setId("orga#1");
- organizationPayload.setCockpitId("org#cockpit-1");
- organizationPayload.setHrids(Collections.singletonList("orga-1"));
- organizationPayload.setDescription("Organization description");
- organizationPayload.setName("Organization name");
- organizationPayload.setAccessPoints(
- List.of(
- AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction1.io").build(),
- AccessPoint.builder().target(AccessPoint.Target.CONSOLE).host("domain.restriction2.io").build()
- )
- );
OrganizationEntity existingOrganization = mock(OrganizationEntity.class);
when(existingOrganization.getId()).thenReturn("DEFAULT");
when(organizationService.findByCockpitId(any())).thenReturn(existingOrganization);
@@ -157,10 +161,10 @@ public void handleWithExistingCockpitId() throws InterruptedException {
organizationService.createOrUpdate(
argThat(orgaId -> orgaId.equals("DEFAULT")),
argThat(newOrganization ->
- newOrganization.getCockpitId().equals(organizationPayload.getCockpitId()) &&
- newOrganization.getHrids().equals(organizationPayload.getHrids()) &&
- newOrganization.getDescription().equals(organizationPayload.getDescription()) &&
- newOrganization.getName().equals(organizationPayload.getName())
+ newOrganization.getCockpitId().equals(organizationPayload.cockpitId()) &&
+ newOrganization.getHrids().equals(organizationPayload.hrids()) &&
+ newOrganization.getDescription().equals(organizationPayload.description()) &&
+ newOrganization.getName().equals(organizationPayload.name())
)
)
)
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/UnlinkInstallationCommandHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/UnlinkInstallationCommandHandlerTest.java
index 6e2bad9b1c9..45ebe677d5a 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/UnlinkInstallationCommandHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/UnlinkInstallationCommandHandlerTest.java
@@ -15,13 +15,18 @@
*/
package io.gravitee.rest.api.service.cockpit.command.handler;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import io.gravitee.apim.core.access_point.crud_service.AccessPointCrudService;
import io.gravitee.apim.core.access_point.model.AccessPoint;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.installation.*;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.installation.UnlinkInstallationCommand;
+import io.gravitee.cockpit.api.command.v1.installation.UnlinkInstallationCommandPayload;
+import io.gravitee.cockpit.api.command.v1.installation.UnlinkInstallationReply;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.EnvironmentEntity;
import io.gravitee.rest.api.model.OrganizationEntity;
import io.gravitee.rest.api.service.EnvironmentService;
@@ -57,15 +62,17 @@ public void before() {
}
@Test
- public void handleType() {
- assertEquals(Command.Type.UNLINK_INSTALLATION_COMMAND, cut.handleType());
+ public void supportType() {
+ assertEquals(CockpitCommandType.UNLINK_INSTALLATION.name(), cut.supportType());
}
@Test
public void handle() throws InterruptedException {
- final UnlinkInstallationPayload payload = new UnlinkInstallationPayload();
- payload.setEnvironmentCockpitId(COCKPIT_ENV_ID);
- payload.setOrganizationCockpitId(COCKPIT_ORG_ID);
+ final UnlinkInstallationCommandPayload payload = UnlinkInstallationCommandPayload
+ .builder()
+ .environmentCockpitId(COCKPIT_ENV_ID)
+ .organizationCockpitId(COCKPIT_ORG_ID)
+ .build();
EnvironmentEntity environment = mock(EnvironmentEntity.class);
String envId = "env#1";
@@ -90,8 +97,10 @@ public void handle() throws InterruptedException {
@Test
public void handleWithException() throws InterruptedException {
- final UnlinkInstallationPayload payload = new UnlinkInstallationPayload();
- payload.setEnvironmentCockpitId(COCKPIT_ENV_ID);
+ final UnlinkInstallationCommandPayload payload = UnlinkInstallationCommandPayload
+ .builder()
+ .environmentCockpitId(COCKPIT_ENV_ID)
+ .build();
UnlinkInstallationCommand command = new UnlinkInstallationCommand(payload);
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/UserCommandHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/UserCommandHandlerTest.java
index 8d6721b53af..c5c3c18f52d 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/UserCommandHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/UserCommandHandlerTest.java
@@ -18,14 +18,16 @@
import static io.gravitee.rest.api.model.configuration.identity.SocialIdentityProviderEntity.UserProfile.PICTURE;
import static io.gravitee.rest.api.model.configuration.identity.SocialIdentityProviderEntity.UserProfile.SUB;
import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
-import io.gravitee.cockpit.api.command.Command;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.user.UserCommand;
-import io.gravitee.cockpit.api.command.user.UserPayload;
-import io.gravitee.cockpit.api.command.user.UserReply;
+import io.gravitee.cockpit.api.command.v1.CockpitCommandType;
+import io.gravitee.cockpit.api.command.v1.user.UserCommand;
+import io.gravitee.cockpit.api.command.v1.user.UserCommandPayload;
+import io.gravitee.cockpit.api.command.v1.user.UserReply;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.NewExternalUserEntity;
import io.gravitee.rest.api.model.UpdateUserEntity;
import io.gravitee.rest.api.model.UserEntity;
@@ -57,28 +59,29 @@ public void before() {
}
@Test
- public void handleType() {
- assertEquals(Command.Type.USER_COMMAND, cut.handleType());
+ public void supportType() {
+ assertEquals(CockpitCommandType.USER.name(), cut.supportType());
}
@Test
public void handleCreation() throws InterruptedException {
- UserPayload userPayload = new UserPayload();
- UserCommand command = new UserCommand(userPayload);
-
final String sourceId = "user#1";
- userPayload.setId(sourceId);
- userPayload.setOrganizationId("orga#1");
- userPayload.setUsername("Username");
- userPayload.setFirstName("Firstname");
- userPayload.setLastName("Lastname");
- userPayload.setPicture("https://gravitee.io/my-picture");
- userPayload.setEmail("email@gravitee.io");
-
HashMap additionalInformation = new HashMap<>();
additionalInformation.put("info1", "value1");
additionalInformation.put("info2", "value2");
- userPayload.setAdditionalInformation(additionalInformation);
+ UserCommandPayload userPayload = UserCommandPayload
+ .builder()
+ .id(sourceId)
+ .organizationId("orga#1")
+ .username("Username")
+ .firstName("Firstname")
+ .lastName("Lastname")
+ .picture("https://gravitee.io/my-picture")
+ .email("email@gravitee.io")
+ .additionalInformation(additionalInformation)
+ .build();
+
+ UserCommand command = new UserCommand(userPayload);
when(userService.findBySource(any(), eq("cockpit"), eq(sourceId), eq(false))).thenThrow(new UserNotFoundException(sourceId));
@@ -86,16 +89,16 @@ public void handleCreation() throws InterruptedException {
userService.create(
any(),
argThat(newUser ->
- newUser.getSourceId().equals(userPayload.getId()) &&
+ newUser.getSourceId().equals(userPayload.id()) &&
newUser.getSource().equals("cockpit") &&
- newUser.getFirstname().equals(userPayload.getFirstName()) &&
- newUser.getLastname().equals(userPayload.getLastName()) &&
- newUser.getEmail().equals(userPayload.getEmail()) &&
- newUser.getPicture().equals(userPayload.getPicture()) &&
+ newUser.getFirstname().equals(userPayload.firstName()) &&
+ newUser.getLastname().equals(userPayload.lastName()) &&
+ newUser.getEmail().equals(userPayload.email()) &&
+ newUser.getPicture().equals(userPayload.picture()) &&
newUser.getCustomFields().get("info1").equals(additionalInformation.get("info1")) &&
newUser.getCustomFields().get("info2").equals(additionalInformation.get("info2")) &&
- newUser.getCustomFields().get(PICTURE).equals(userPayload.getPicture()) &&
- newUser.getCustomFields().get(SUB).equals(userPayload.getUsername())
+ newUser.getCustomFields().get(PICTURE).equals(userPayload.picture()) &&
+ newUser.getCustomFields().get(SUB).equals(userPayload.username())
),
eq(false)
)
@@ -110,22 +113,22 @@ public void handleCreation() throws InterruptedException {
@Test
public void handleUpdate() throws InterruptedException {
- UserPayload userPayload = new UserPayload();
- UserCommand command = new UserCommand(userPayload);
-
final String sourceId = "user#1";
- userPayload.setId(sourceId);
- userPayload.setOrganizationId("orga#1");
- userPayload.setUsername("New Username");
- userPayload.setFirstName("New Firstname");
- userPayload.setLastName("New Lastname");
- userPayload.setPicture("https://gravitee.io/my-new-picture");
- userPayload.setEmail("my-new-email@gravitee.io");
-
HashMap additionalInformation = new HashMap<>();
additionalInformation.put("info1", "new_value1");
additionalInformation.put("new_info3", "new_value3");
- userPayload.setAdditionalInformation(additionalInformation);
+ UserCommandPayload userPayload = UserCommandPayload
+ .builder()
+ .id(sourceId)
+ .organizationId("orga#1")
+ .username("New Username")
+ .firstName("New Firstname")
+ .lastName("New Lastname")
+ .picture("https://gravitee.io/my-new-picture")
+ .email("my-new-email@gravitee.io")
+ .additionalInformation(additionalInformation)
+ .build();
+ UserCommand command = new UserCommand(userPayload);
UserEntity existingCockpitUser = new UserEntity();
existingCockpitUser.setId("apim_user#1");
@@ -147,14 +150,14 @@ public void handleUpdate() throws InterruptedException {
any(),
eq("apim_user#1"),
argThat(updatedUser ->
- updatedUser.getFirstname().equals(userPayload.getFirstName()) &&
- updatedUser.getLastname().equals(userPayload.getLastName()) &&
- updatedUser.getEmail().equals(userPayload.getEmail()) &&
- updatedUser.getPicture().equals(userPayload.getPicture()) &&
+ updatedUser.getFirstname().equals(userPayload.firstName()) &&
+ updatedUser.getLastname().equals(userPayload.lastName()) &&
+ updatedUser.getEmail().equals(userPayload.email()) &&
+ updatedUser.getPicture().equals(userPayload.picture()) &&
updatedUser.getCustomFields().get("info1").equals(additionalInformation.get("info1")) &&
updatedUser.getCustomFields().get("new_info3").equals(additionalInformation.get("new_info3")) &&
- updatedUser.getCustomFields().get(PICTURE).equals(userPayload.getPicture()) &&
- updatedUser.getCustomFields().get(SUB).equals(userPayload.getUsername())
+ updatedUser.getCustomFields().get(PICTURE).equals(userPayload.picture()) &&
+ updatedUser.getCustomFields().get(SUB).equals(userPayload.username())
)
)
)
@@ -168,12 +171,9 @@ public void handleUpdate() throws InterruptedException {
@Test
public void handleWithCreateException() throws InterruptedException {
- UserPayload userPayload = new UserPayload();
- UserCommand command = new UserCommand(userPayload);
-
final String sourceId = "user#1";
- userPayload.setId(sourceId);
- userPayload.setOrganizationId("orga#1");
+ UserCommandPayload userPayload = UserCommandPayload.builder().id(sourceId).organizationId("orga#1").build();
+ UserCommand command = new UserCommand(userPayload);
when(userService.findBySource(any(), eq("cockpit"), eq(sourceId), eq(false))).thenThrow(new UserNotFoundException(sourceId));
when(userService.create(any(), any(NewExternalUserEntity.class), eq(false))).thenThrow(new RuntimeException("fake error"));
@@ -186,12 +186,9 @@ public void handleWithCreateException() throws InterruptedException {
@Test
public void handleWithUpdateException() throws InterruptedException {
- UserPayload userPayload = new UserPayload();
- UserCommand command = new UserCommand(userPayload);
-
final String sourceId = "user#1";
- userPayload.setId(sourceId);
- userPayload.setOrganizationId("orga#1");
+ UserCommandPayload userPayload = UserCommandPayload.builder().id(sourceId).organizationId("orga#1").build();
+ UserCommand command = new UserCommand(userPayload);
when(userService.findBySource(any(), eq("cockpit"), eq(sourceId), eq(false))).thenReturn(new UserEntity());
when(userService.update(any(), any(), any(UpdateUserEntity.class))).thenThrow(new RuntimeException("fake error"));
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/V4ApiCommandHandlerTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/V4ApiCommandHandlerTest.java
index 90d14348055..86d4c9275ee 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/V4ApiCommandHandlerTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/command/handler/V4ApiCommandHandlerTest.java
@@ -22,10 +22,10 @@
import static org.mockito.Mockito.when;
import com.fasterxml.jackson.core.JsonProcessingException;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.v4api.V4ApiCommand;
-import io.gravitee.cockpit.api.command.v4api.V4ApiPayload;
-import io.gravitee.cockpit.api.command.v4api.V4ApiReply;
+import io.gravitee.cockpit.api.command.v1.v4api.V4ApiCommand;
+import io.gravitee.cockpit.api.command.v1.v4api.V4ApiCommandPayload;
+import io.gravitee.cockpit.api.command.v1.v4api.V4ApiReply;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.UserEntity;
import io.gravitee.rest.api.model.v4.api.ApiEntity;
import io.gravitee.rest.api.service.UserService;
@@ -60,21 +60,21 @@ public class V4ApiCommandHandlerTest {
@BeforeEach
public void setUp() throws Exception {
- command = new V4ApiCommand();
- command.setId("test-id");
- final V4ApiPayload payload = new V4ApiPayload();
- payload.setUserId("123");
- payload.setApiDefinition("any-definition");
- payload.setEnvironmentId("environment-id");
- payload.setOrganizationId("organization-id");
- command.setPayload(payload);
+ final V4ApiCommandPayload payload = V4ApiCommandPayload
+ .builder()
+ .userId("123")
+ .apiDefinition("any-definition")
+ .environmentId("environment-id")
+ .organizationId("organization-id")
+ .build();
+ command = new V4ApiCommand(payload);
apiEntity = new ApiEntity();
apiEntity.setId("test-id");
apiEntity.setName("test-name");
apiEntity.setApiVersion("V4");
- when(userService.findBySource(eq("organization-id"), eq("cockpit"), eq(payload.getUserId()), eq(true))).thenReturn(userEntity);
+ when(userService.findBySource(eq("organization-id"), eq("cockpit"), eq(payload.userId()), eq(true))).thenReturn(userEntity);
when(userEntity.getId()).thenReturn("user-id");
commandHandler = new V4ApiCommandHandler(v4ApiServiceCockpit, userService);
@@ -90,9 +90,9 @@ public void handleSuccessfulCommand() throws InterruptedException, JsonProcessin
observer.assertValue(reply ->
reply.getCommandId().equals(command.getId()) &&
reply.getCommandStatus().equals(CommandStatus.SUCCEEDED) &&
- reply.getApiId().equals("test-id") &&
- reply.getApiName().equals("test-name") &&
- reply.getApiVersion().equals("V4")
+ reply.getPayload().apiId().equals("test-id") &&
+ reply.getPayload().apiName().equals("test-name") &&
+ reply.getPayload().apiVersion().equals("V4")
);
verify(v4ApiServiceCockpit, times(1)).createPublishApi(anyString(), anyString(), anyString(), anyString());
}
@@ -105,7 +105,6 @@ public void handleException() throws Exception {
TestObserver observer = commandHandler.handle(command).test();
observer.await();
- observer.assertValue(reply -> reply.getCommandId().equals(command.getId()) && reply.getCommandStatus().equals(CommandStatus.FAILED)
- );
+ observer.assertValue(reply -> reply.getCommandId().equals(command.getId()) && reply.getCommandStatus().equals(CommandStatus.ERROR));
}
}
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/services/CockpitPromotionServiceTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/services/CockpitPromotionServiceTest.java
index fb42eb451ef..02f298dad1f 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/services/CockpitPromotionServiceTest.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/cockpit/services/CockpitPromotionServiceTest.java
@@ -21,11 +21,12 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-import io.gravitee.cockpit.api.command.CommandStatus;
-import io.gravitee.cockpit.api.command.bridge.BridgeMultiReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeReply;
-import io.gravitee.cockpit.api.command.bridge.BridgeSimpleReply;
+import io.gravitee.cockpit.api.command.legacy.bridge.BridgeMultiReply;
+import io.gravitee.cockpit.api.command.legacy.bridge.BridgeSimpleReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReply;
+import io.gravitee.cockpit.api.command.v1.bridge.BridgeReplyPayload;
import io.gravitee.definition.jackson.datatype.GraviteeMapper;
+import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.EnvironmentEntity;
import io.gravitee.rest.api.model.promotion.PromotionEntity;
import io.gravitee.rest.api.model.promotion.PromotionTargetEntity;
@@ -64,10 +65,9 @@ public void setUp() {
@Test
public void shouldNotListEnvironments() {
// Given
- BridgeMultiReply environmentsMultiReply = new BridgeMultiReply();
- environmentsMultiReply.setCommandStatus(CommandStatus.ERROR);
+ BridgeReply bridgeReply = new BridgeReply("commandId", "error");
- when(cockpitCommandService.send(any())).thenReturn(environmentsMultiReply);
+ when(cockpitCommandService.send(any())).thenReturn(bridgeReply);
// When
final CockpitReply> listCockpitReply = cockpitPromotionService.listPromotionTargets(
@@ -91,40 +91,28 @@ public void shouldListEnvironmentsFromSuccessfulReplies() throws JsonProcessingE
envA.setOrganizationId(ORGANIZATION_ID);
envA.setName("ENV A");
- BridgeSimpleReply envASimpleReply = new BridgeSimpleReply();
- envASimpleReply.setCommandStatus(CommandStatus.SUCCEEDED);
- envASimpleReply.setInstallationId(INSTALLATION_ID);
- envASimpleReply.setOrganizationId(ORGANIZATION_ID);
- envASimpleReply.setEnvironmentId(envA.getId());
- envASimpleReply.setPayload(objectMapper.writeValueAsString(envA));
+ BridgeReplyPayload.BridgeReplyContent envAContent = BridgeReplyPayload.BridgeReplyContent
+ .builder()
+ .environmentId(envA.getId())
+ .installationId(INSTALLATION_ID)
+ .organizationId(ORGANIZATION_ID)
+ .content(objectMapper.writeValueAsString(envA))
+ .build();
EnvironmentEntity envB = new EnvironmentEntity();
envB.setId("my-env-B");
envB.setOrganizationId(ORGANIZATION_ID);
envB.setName("ENV B");
- BridgeSimpleReply envBSimpleReply = new BridgeSimpleReply();
- envBSimpleReply.setCommandStatus(CommandStatus.SUCCEEDED);
- envBSimpleReply.setInstallationId(INSTALLATION_ID);
- envBSimpleReply.setOrganizationId(ORGANIZATION_ID);
- envBSimpleReply.setEnvironmentId(envB.getId());
- envBSimpleReply.setPayload(objectMapper.writeValueAsString(envB));
-
- EnvironmentEntity envC_ERROR = new EnvironmentEntity();
- envC_ERROR.setId("my-env-C");
- envC_ERROR.setOrganizationId(ORGANIZATION_ID);
- envC_ERROR.setName("ENV C");
-
- BridgeSimpleReply envCSimpleReply = new BridgeSimpleReply();
- envCSimpleReply.setCommandStatus(CommandStatus.ERROR);
- envCSimpleReply.setInstallationId(INSTALLATION_ID);
- envCSimpleReply.setOrganizationId(ORGANIZATION_ID);
- envCSimpleReply.setEnvironmentId(envC_ERROR.getId());
- envCSimpleReply.setMessage("Problem while serializing environment: " + envC_ERROR.getId());
-
- BridgeMultiReply environmentsMultiReply = new BridgeMultiReply();
- environmentsMultiReply.setCommandStatus(CommandStatus.SUCCEEDED);
- environmentsMultiReply.setReplies(Arrays.asList(envASimpleReply, envBSimpleReply, envCSimpleReply));
+ BridgeReplyPayload.BridgeReplyContent envBContent = BridgeReplyPayload.BridgeReplyContent
+ .builder()
+ .environmentId(envB.getId())
+ .installationId(INSTALLATION_ID)
+ .organizationId(ORGANIZATION_ID)
+ .content(objectMapper.writeValueAsString(envB))
+ .build();
+
+ BridgeReply environmentsMultiReply = new BridgeReply("commandId", new BridgeReplyPayload(List.of(envAContent, envBContent)));
when(cockpitCommandService.send(any())).thenReturn(environmentsMultiReply);
@@ -145,9 +133,7 @@ public void shouldListEnvironmentsFromSuccessfulReplies() throws JsonProcessingE
@Test
public void shouldNotProcessPromotionCommandError() {
- BridgeReply reply = new BridgeSimpleReply();
- reply.setCommandStatus(CommandStatus.ERROR);
-
+ BridgeReply reply = new BridgeReply("commandId", "error");
when(cockpitCommandService.send(any())).thenReturn(reply);
final CockpitReply result = cockpitPromotionService.processPromotion(
@@ -163,9 +149,7 @@ public void shouldNotProcessPromotionCommandError() {
@Test
public void shouldProcessPromotion() {
- BridgeReply reply = new BridgeSimpleReply();
- reply.setCommandStatus(CommandStatus.SUCCEEDED);
-
+ BridgeReply reply = new BridgeReply("commandid", new BridgeReplyPayload(List.of()));
when(cockpitCommandService.send(any())).thenReturn(reply);
final PromotionEntity promotionEntity = new PromotionEntity();
diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-standalone/gravitee-apim-rest-api-standalone-container/src/main/java/io/gravitee/rest/api/standalone/GraviteeApisContainer.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-standalone/gravitee-apim-rest-api-standalone-container/src/main/java/io/gravitee/rest/api/standalone/GraviteeApisContainer.java
index bc24fefcfbd..feced9b0ad3 100644
--- a/gravitee-apim-rest-api/gravitee-apim-rest-api-standalone/gravitee-apim-rest-api-standalone-container/src/main/java/io/gravitee/rest/api/standalone/GraviteeApisContainer.java
+++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-standalone/gravitee-apim-rest-api-standalone-container/src/main/java/io/gravitee/rest/api/standalone/GraviteeApisContainer.java
@@ -16,7 +16,6 @@
package io.gravitee.rest.api.standalone;
import io.gravitee.node.container.spring.SpringBasedContainer;
-import io.gravitee.rest.api.standalone.node.GraviteeApisNode;
import io.gravitee.rest.api.standalone.spring.StandaloneConfiguration;
import java.util.List;
import org.slf4j.bridge.SLF4JBridgeHandler;
diff --git a/pom.xml b/pom.xml
index c17ae8c800d..f474f9c4892 100644
--- a/pom.xml
+++ b/pom.xml
@@ -59,7 +59,7 @@
7.0.12
1.9.1
- 2.6.2
+ 3.0.0
3.4.0
1.1.4
3.1.0
@@ -231,7 +231,7 @@
2.0.2
1.3.0
- 4.0.4
+ 5.0.0-SNAPSHOT
1.7.1
1.8.2
1.6.0