X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.api%2Fsrc%2Forg%2Fargeo%2Fapp%2Fapi%2FRankedObject.java;fp=org.argeo.app.api%2Fsrc%2Forg%2Fargeo%2Fapp%2Fapi%2FRankedObject.java;h=371cdaec3096a15c0c406373964ab93ca4e58e72;hb=e43d6397b40323e6d23ac52500d022cc2dc622f1;hp=31c43a781770a62b059fccf8be21c976201854a5;hpb=e7e520aeec2aad034b86789f1bc1b14beba51060;p=gpl%2Fargeo-suite.git diff --git a/org.argeo.app.api/src/org/argeo/app/api/RankedObject.java b/org.argeo.app.api/src/org/argeo/app/api/RankedObject.java index 31c43a7..371cdae 100644 --- a/org.argeo.app.api/src/org/argeo/app/api/RankedObject.java +++ b/org.argeo.app.api/src/org/argeo/app/api/RankedObject.java @@ -70,6 +70,18 @@ public class RankedObject { return object.getClass().getName() + " with rank " + rank; } + public static boolean hasHigherRank(Map> map, K key, Map properties) { + if (!map.containsKey(key)) + return true; + RankedObject rankedObject = new RankedObject<>(null, properties); + RankedObject current = map.get(key); + return current.getRank() < rankedObject.getRank(); + } + + /** + * @return the {@link RankedObject}, or null if the current one was + * kept + */ public static RankedObject putIfHigherRank(Map> map, K key, T object, Map properties) { RankedObject rankedObject = new RankedObject<>(object, properties); @@ -81,14 +93,18 @@ public class RankedObject { return rankedObject; } else { RankedObject current = map.get(key); - if (current.getRank() <= rankedObject.getRank()) { + if (current.getRank() < rankedObject.getRank()) { map.put(key, rankedObject); - if (log.isTraceEnabled()) - log.trace("Replaced " + key + " by " + object.getClass().getName() + " with rank " + if (log.isDebugEnabled()) + log.debug("Replaced " + key + " by " + object.getClass().getName() + " with rank " + rankedObject.getRank()); return rankedObject; + } else if (current.getRank() == rankedObject.getRank()) { + log.error("Already " + key + " by " + current.get().getClass().getName() + " with rank " + + rankedObject.getRank() + ", ignoring " + rankedObject.getClass().getName()); + return null; } else { - return current; + return null; } }