From a7cf4fa86c2b829a4bf8e6757e29979cb15b0fe7 Mon Sep 17 00:00:00 2001 From: Rushdi Mohamed Date: Thu, 26 Jan 2023 14:34:24 +0000 Subject: [PATCH] Add pagination sort by column (#48) ## Purpose Fixes [issues/9743](https://roadmap.entgra.net/issues/9743) ## Improvement Sort in ASC OR DESC on pagination requested by column name Co-authored-by: Rushdi Co-authored-by: Pahansith Gunathilake Reviewed-on: https://repository.entgra.net/community/device-mgt-core/pulls/48 Co-authored-by: Rushdi Mohamed Co-committed-by: Rushdi Mohamed --- .../device/mgt/common/PaginationRequest.java | 30 ++++++++- .../carbon/device/mgt/common/SortColumn.java | 62 +++++++++++++++++++ 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/SortColumn.java diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/PaginationRequest.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/PaginationRequest.java index 29bb7922e9..9a24b5c7f3 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/PaginationRequest.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/PaginationRequest.java @@ -44,6 +44,7 @@ public class PaginationRequest { private Map property = new HashMap<>(); private List statusList = new ArrayList<>(); private OperationLogFilters operationLogFilters = new OperationLogFilters(); + private List sortColumn = new ArrayList<>(); public OperationLogFilters getOperationLogFilters() { return operationLogFilters; } @@ -172,11 +173,38 @@ public class PaginationRequest { this.filter = filter; } + public void setSortColumn(List sortColumn) { this.sortColumn = sortColumn; } + + public List getSortColumn() { return sortColumn; } + + /** + * Convert SortColumns field parameter and splitting string into columnName and sortType + * + * @param sortColumns which is separated by a colon(:) and first will be the columnNane and the second will be type ASC or DESC, + * if there is no colon(:) detected, ASC will be default + * (Ex: sort=col1:ASC&sort=col2:DESC, sort=col1&sort=col2:DESC) + * @return sortColumnList as a list of sortColumn + */ + public void setSortColumns(List sortColumns) { + List sortColumnList = new ArrayList<>(); + SortColumn sortColumn; + String[] sorting; + for (String sortBy: sortColumns) { + sortColumn = new SortColumn(); + sorting = sortBy.split(":"); + sortColumn.setName(sorting[0]); + sortColumn.setType(sorting.length >= 2 && (sorting[1].equalsIgnoreCase("desc")) + ? SortColumn.types.DESC : SortColumn.types.ASC); + sortColumnList.add(sortColumn); + } + setSortColumn(sortColumnList); + } + @Override public String toString() { return "Device type '" + this.deviceType + "' Device Name '" + this.deviceName + "' row count: " + this.rowCount + " Owner role '" + this.ownerRole + "' owner pattern '" + this.ownerPattern + "' ownership " + this.ownership + "' Status '" + this.statusList + "' owner '" + this.owner + "' groupId: " + this.groupId - + " start index: " + this.startIndex; + + " start index: " + this.startIndex + ", SortColumns: " + this.sortColumn; } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/SortColumn.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/SortColumn.java new file mode 100644 index 0000000000..8e6d4915ea --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/SortColumn.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023, Entgra (pvt) Ltd. (https://entgra.io) All Rights Reserved. + * + * Entgra (Pvt) Ltd. licenses this file to you 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 org.wso2.carbon.device.mgt.common; + +/** + * This class holds required parameters for a querying a sort by column in pagination. + * + */ +public class SortColumn { + String name; + SortColumn.types type; + + public enum types { + ASC, DESC + } + + /** + * ColumnName setter method + * @param name of the column + */ + public void setName(String name) { this.name = name; } + + /** + * get the name of the column + * @return name + */ + public String getName() { return name; } + + /** + * Column sort type + * @param type of sort as ASC or DESC + */ + public void setType(SortColumn.types type) { this.type = type; } + + /** + * get column sort type + * @return type of sort + */ + public SortColumn.types getType() { return type; } + + @Override + public String toString() { + return "Column Name - " + this.name + ", Type - " + this.type ; + } + +}