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 <rushdi@entgra.io>
Co-authored-by: Pahansith Gunathilake <pahansith@entgra.io>
Reviewed-on: community/device-mgt-core#48
Co-authored-by: Rushdi Mohamed <rushdi@entgra.io>
Co-committed-by: Rushdi Mohamed <rushdi@entgra.io>
logger-error
Rushdi Mohamed 2 years ago committed by Pahansith Gunathilake
parent d69619bf65
commit a7cf4fa86c

@ -44,6 +44,7 @@ public class PaginationRequest {
private Map<String, Object> property = new HashMap<>();
private List<String> statusList = new ArrayList<>();
private OperationLogFilters operationLogFilters = new OperationLogFilters();
private List<SortColumn> sortColumn = new ArrayList<>();
public OperationLogFilters getOperationLogFilters() {
return operationLogFilters;
}
@ -172,11 +173,38 @@ public class PaginationRequest {
this.filter = filter;
}
public void setSortColumn(List<SortColumn> sortColumn) { this.sortColumn = sortColumn; }
public List<SortColumn> 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<String> sortColumns) {
List<SortColumn> 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;
}
}

@ -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 ;
}
}
Loading…
Cancel
Save