@PUT
@Produces(MediaType.APPLICATION_JSON)
@Path("/{id}/deployments")
public IntegrationDeployment putDeployment(@Context SecurityContext sec, @NotNull @PathParam("id") @ApiParam(required = true) String id) {
Integration integration = Getter.super.get(id);
int nextDeploymentVersion = 1;
Set<String> deploymentIds = getDataManager().fetchIdsByPropertyValue(IntegrationDeployment.class, "integrationId", id);
if (deploymentIds != null && !deploymentIds.isEmpty()) {
Stream<IntegrationDeployment> deployments = deploymentIds.stream()
.map(i -> getDataManager().fetch(IntegrationDeployment.class, i))
.filter(r -> r != null);
for (IntegrationDeployment d : deployments.toArray(IntegrationDeployment[]::new)) {
nextDeploymentVersion = Math.max(nextDeploymentVersion, d.getVersion()+1);
getDataManager().update(d.withTargetState(IntegrationDeploymentState.Unpublished));
}
}
IntegrationDeployment deployment = new IntegrationDeployment.Builder()
.id(IntegrationDeployment.compositeId(id, nextDeploymentVersion))
.spec(integration)
.version(nextDeploymentVersion)
.userId(sec.getUserPrincipal().getName())
.build();
deployment = getDataManager().create(deployment);
return deployment;
}