]>
git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.suite.core/src/org/argeo/suite/RankedObject.java
1 package org
.argeo
.suite
;
5 import org
.apache
.commons
.logging
.Log
;
6 import org
.apache
.commons
.logging
.LogFactory
;
9 * A container for an object whose relevance can be ranked. Typically used in an
10 * OSGi context with the service.ranking property.
12 public class RankedObject
<T
> {
13 private final static Log log
= LogFactory
.getLog(RankedObject
.class);
15 private final static String SERVICE_RANKING
= "service.ranking";
16 // private final static String SERVICE_ID = "service.id";
19 private Map
<String
, Object
> properties
;
20 private final Long rank
;
22 public RankedObject(T object
, Map
<String
, Object
> properties
) {
23 this(object
, properties
, extractRanking(properties
));
26 public RankedObject(T object
, Map
<String
, Object
> properties
, Long rank
) {
29 this.properties
= properties
;
33 private static Long
extractRanking(Map
<String
, Object
> properties
) {
34 if (properties
== null)
36 if (properties
.containsKey(SERVICE_RANKING
))
37 return Long
.valueOf(properties
.get(SERVICE_RANKING
).toString());
38 // else if (properties.containsKey(SERVICE_ID))
39 // return (Long) properties.get(SERVICE_ID);
48 public Map
<String
, Object
> getProperties() {
52 public Long
getRank() {
57 public int hashCode() {
58 return object
.hashCode();
62 public boolean equals(Object obj
) {
63 if (!(obj
instanceof RankedObject
))
65 RankedObject
<?
> other
= (RankedObject
<?
>) obj
;
66 return rank
.equals(other
.rank
) && object
.equals(other
.object
);
70 public String
toString() {
71 return object
.getClass().getName() + " with rank " + rank
;
74 public static <K
, T
> RankedObject
<T
> putIfHigherRank(Map
<K
, RankedObject
<T
>> map
, K key
, T object
,
75 Map
<String
, Object
> properties
) {
76 RankedObject
<T
> rankedObject
= new RankedObject
<>(object
, properties
);
77 if (!map
.containsKey(key
)) {
78 map
.put(key
, rankedObject
);
79 if (log
.isTraceEnabled())
81 "Added " + key
+ " as " + object
.getClass().getName() + " with rank " + rankedObject
.getRank());
84 RankedObject
<T
> current
= map
.get(key
);
85 if (current
.getRank() <= rankedObject
.getRank()) {
86 map
.put(key
, rankedObject
);
87 if (log
.isTraceEnabled())
88 log
.trace("Replaced " + key
+ " by " + object
.getClass().getName() + " with rank "
89 + rankedObject
.getRank());