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