details:   https://code.openbravo.com/erp/devel/pi/rev/1db6083af55b
changeset: 32623:1db6083af55b
user:      Carlos Aristu <carlos.aristu <at> openbravo.com>
date:      Wed Sep 06 08:58:05 2017 +0200
summary:   fixes bug 36762: The comparator to sort window personalizations 
wasn't complete

  Since Java 7 Collections.sort uses TimSort. Using a non-transitive comparator 
for sorting in Java >= 7 can throw the following exception: 
"java.lang.IllegalArgumentException: Comparison method violates its general 
contract!" depending on the comparisons performed by the comparator.

  The PersonalizationComparator violated the Comparable contract when checking 
the priority by client between two window personalizations to calculate their 
position. Now this problem has been solved.

diffstat:

 
modules/org.openbravo.client.application/src/org/openbravo/client/application/personalization/PersonalizationHandler.java
 |  16 ++++++++-
 1 files changed, 14 insertions(+), 2 deletions(-)

diffs (33 lines):

diff -r 704736d841a9 -r 1db6083af55b 
modules/org.openbravo.client.application/src/org/openbravo/client/application/personalization/PersonalizationHandler.java
--- 
a/modules/org.openbravo.client.application/src/org/openbravo/client/application/personalization/PersonalizationHandler.java
 Tue Sep 05 18:46:27 2017 +0200
+++ 
b/modules/org.openbravo.client.application/src/org/openbravo/client/application/personalization/PersonalizationHandler.java
 Wed Sep 06 08:58:05 2017 +0200
@@ -598,10 +598,14 @@
   private static int isHigherPriority(UIPersonalization pers1, 
UIPersonalization pers2,
       List<String> parentTree) {
     // Check priority by client
-    if ((pers2.getVisibleAtClient() == null || 
pers2.getVisibleAtClient().getId().equals("0"))
-        && pers1.getVisibleAtClient() != null && 
!pers1.getVisibleAtClient().getId().equals("0")) {
+    boolean firstIsClientVisible = visibleAtNonSystemClient(pers1);
+    boolean secondIsClientVisible = visibleAtNonSystemClient(pers2);
+    if (firstIsClientVisible && !secondIsClientVisible) {
       return 1;
     }
+    if (!firstIsClientVisible && secondIsClientVisible) {
+      return 2;
+    }
 
     // Check priority by organization
     Organization org1 = pers1.getVisibleAtOrganization();
@@ -646,4 +650,12 @@
     // Actual conflict
     return 0;
   }
+
+  private static boolean visibleAtNonSystemClient(UIPersonalization 
personalization) {
+    Client client = personalization.getVisibleAtClient();
+    if (client == null) {
+      return false;
+    }
+    return !"0".equals(client.getId());
+  }
 }

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to