From cdb7a9288c95065614e9b0a9d9f02f17b1a4e659 Mon Sep 17 00:00:00 2001 From: Stanislav Usenkov Date: Thu, 4 Aug 2016 17:37:30 +0700 Subject: [PATCH] Better comparators for RowEntity, RowPermission and RowInheritance. --- .../simsonic/rscPermissions/API/RowEntity.java | 12 ++++++++++-- .../rscPermissions/API/RowInheritance.java | 16 +++++++++++++--- .../rscPermissions/API/RowPermission.java | 16 +++++++++++++++- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java b/src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java index 372c090..f7c9332 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java @@ -22,7 +22,15 @@ public class RowEntity implements Cloneable, Comparable @Override public int compareTo(RowEntity other) { - final int deltaId = id - other.id; - return deltaId != 0 ? deltaId : entity.compareTo(other.entity); + if(entityType.equals(EntityType.PLAYER)) + { + final int compareByPlayerType = playerType.compareTo(other.playerType); + if(compareByPlayerType != 0) + return 0 - compareByPlayerType; + } + final int compareById = Integer.compare(id, other.id); + if(compareById != 0) + return compareById; + return entity.compareTo(other.entity); } } diff --git a/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java index 96eaf95..381ccd5 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java @@ -46,8 +46,18 @@ public class RowInheritance implements Cloneable, Comparable @Override public int compareTo(RowInheritance other) { - return (priority != other.priority) - ? priority - other.priority - : parent.compareTo(other.parent); + final int compareByPriority = Integer.compare(priority, other.priority); + if(compareByPriority != 0) + return compareByPriority; + final int compareByParent = parent.toLowerCase().compareTo(other.parent.toLowerCase()); + if(compareByParent != 0) + return compareByParent; + if(splittedId != null && other.splittedId != null) + { + final int compareBySplittedId = splittedId.compareTo(other.splittedId); + if(compareBySplittedId != 0) + return compareBySplittedId; + } + return Integer.compare(id, other.id); } } diff --git a/src/main/java/ru/simsonic/rscPermissions/API/RowPermission.java b/src/main/java/ru/simsonic/rscPermissions/API/RowPermission.java index dc24136..5fd32b5 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/RowPermission.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/RowPermission.java @@ -2,7 +2,7 @@ package ru.simsonic.rscPermissions.API; import java.sql.Timestamp; -public class RowPermission implements Cloneable +public class RowPermission implements Cloneable, Comparable { public int id; public String entity; @@ -21,4 +21,18 @@ public class RowPermission implements Cloneable { return (RowPermission)super.clone(); } + @Override + public int compareTo(RowPermission other) + { + final int compareByPermission = permission.toLowerCase().compareTo(other.permission.toLowerCase()); + if(compareByPermission != 0) + return compareByPermission; + if(splittedId != null && other.splittedId != null) + { + final int compareBySplittedId = splittedId.compareTo(other.splittedId); + if(compareBySplittedId != 0) + return compareBySplittedId; + } + return Integer.compare(id, other.id); + } }