Implement Connectors sorting / backend (#2291)

Co-authored-by: Artem Kazlanzhy <akazlanzhy@provectus.com>
This commit is contained in:
Roman Zabaluev 2022-10-14 13:16:29 +04:00 committed by GitHub
parent 37f1d2254e
commit 2b5dd270e2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 1 deletions

View file

@ -3,13 +3,16 @@ package com.provectus.kafka.ui.controller;
import com.provectus.kafka.ui.api.KafkaConnectApi; import com.provectus.kafka.ui.api.KafkaConnectApi;
import com.provectus.kafka.ui.model.ConnectDTO; import com.provectus.kafka.ui.model.ConnectDTO;
import com.provectus.kafka.ui.model.ConnectorActionDTO; import com.provectus.kafka.ui.model.ConnectorActionDTO;
import com.provectus.kafka.ui.model.ConnectorColumnsToSortDTO;
import com.provectus.kafka.ui.model.ConnectorDTO; import com.provectus.kafka.ui.model.ConnectorDTO;
import com.provectus.kafka.ui.model.ConnectorPluginConfigValidationResponseDTO; import com.provectus.kafka.ui.model.ConnectorPluginConfigValidationResponseDTO;
import com.provectus.kafka.ui.model.ConnectorPluginDTO; import com.provectus.kafka.ui.model.ConnectorPluginDTO;
import com.provectus.kafka.ui.model.FullConnectorInfoDTO; import com.provectus.kafka.ui.model.FullConnectorInfoDTO;
import com.provectus.kafka.ui.model.NewConnectorDTO; import com.provectus.kafka.ui.model.NewConnectorDTO;
import com.provectus.kafka.ui.model.SortOrderDTO;
import com.provectus.kafka.ui.model.TaskDTO; import com.provectus.kafka.ui.model.TaskDTO;
import com.provectus.kafka.ui.service.KafkaConnectService; import com.provectus.kafka.ui.service.KafkaConnectService;
import java.util.Comparator;
import java.util.Map; import java.util.Map;
import javax.validation.Valid; import javax.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -68,10 +71,16 @@ public class KafkaConnectController extends AbstractController implements KafkaC
public Mono<ResponseEntity<Flux<FullConnectorInfoDTO>>> getAllConnectors( public Mono<ResponseEntity<Flux<FullConnectorInfoDTO>>> getAllConnectors(
String clusterName, String clusterName,
String search, String search,
ConnectorColumnsToSortDTO orderBy,
SortOrderDTO sortOrder,
ServerWebExchange exchange ServerWebExchange exchange
) { ) {
var comparator = sortOrder == null || sortOrder.equals(SortOrderDTO.ASC)
? getConnectorsComparator(orderBy)
: getConnectorsComparator(orderBy).reversed();
return Mono.just(ResponseEntity.ok( return Mono.just(ResponseEntity.ok(
kafkaConnectService.getAllConnectors(getCluster(clusterName), search))); kafkaConnectService.getAllConnectors(getCluster(clusterName), search).sort(comparator))
);
} }
@Override @Override
@ -142,4 +151,22 @@ public class KafkaConnectController extends AbstractController implements KafkaC
getCluster(clusterName), connectName, pluginName, requestBody) getCluster(clusterName), connectName, pluginName, requestBody)
.map(ResponseEntity::ok); .map(ResponseEntity::ok);
} }
private Comparator<FullConnectorInfoDTO> getConnectorsComparator(ConnectorColumnsToSortDTO orderBy) {
var defaultComparator = Comparator.comparing(FullConnectorInfoDTO::getName);
if (orderBy == null) {
return defaultComparator;
}
switch (orderBy) {
case CONNECT:
return Comparator.comparing(FullConnectorInfoDTO::getConnect);
case TYPE:
return Comparator.comparing(FullConnectorInfoDTO::getType);
case STATUS:
return Comparator.comparing(fullConnectorInfoDTO -> fullConnectorInfoDTO.getStatus().getState());
case NAME:
default:
return defaultComparator;
}
}
} }

View file

@ -1267,6 +1267,16 @@ paths:
required: false required: false
schema: schema:
type: string type: string
- name: orderBy
in: query
required: false
schema:
$ref: '#/components/schemas/ConnectorColumnsToSort'
- name: sortOrder
in: query
required: false
schema:
$ref: '#/components/schemas/SortOrder'
responses: responses:
200: 200:
description: OK description: OK
@ -2009,6 +2019,14 @@ components:
- REPLICATION_FACTOR - REPLICATION_FACTOR
- SIZE - SIZE
ConnectorColumnsToSort:
type: string
enum:
- NAME
- CONNECT
- TYPE
- STATUS
SortOrder: SortOrder:
type: string type: string
enum: enum: