X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.api%2Fsrc%2Forg%2Fargeo%2Fapp%2Fapi%2FRankedObject.java;h=fab42d7ea6401ad878eec8ee255ed7eae37b8d72;hb=d03e38085381f025093fba112e290acd16d272d2;hp=31c43a781770a62b059fccf8be21c976201854a5;hpb=942fd932e1f6ed3319575c4c1d944912dfca9fa5;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..fab42d7 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 @@ -16,28 +16,28 @@ public class RankedObject { private T object; private Map properties; - private final Long rank; + private final int rank; public RankedObject(T object, Map properties) { this(object, properties, extractRanking(properties)); } - public RankedObject(T object, Map properties, Long rank) { + public RankedObject(T object, Map properties, int rank) { super(); this.object = object; this.properties = properties; this.rank = rank; } - private static Long extractRanking(Map properties) { + private static int extractRanking(Map properties) { if (properties == null) - return 0l; + return 0; if (properties.containsKey(SERVICE_RANKING)) - return Long.valueOf(properties.get(SERVICE_RANKING).toString()); + return (Integer) properties.get(SERVICE_RANKING); // else if (properties.containsKey(SERVICE_ID)) // return (Long) properties.get(SERVICE_ID); else - return 0l; + return 0; } public T get() { @@ -48,7 +48,7 @@ public class RankedObject { return properties; } - public Long getRank() { + public int getRank() { return rank; } @@ -62,7 +62,7 @@ public class RankedObject { if (!(obj instanceof RankedObject)) return false; RankedObject other = (RankedObject) obj; - return rank.equals(other.rank) && object.equals(other.object); + return rank == other.rank && object.equals(other.object); } @Override @@ -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.get().getClass().getName()); + return null; } else { - return current; + return null; } }