]>
git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.app.api/src/org/argeo/app/api/RankedObject.java
1 package org
.argeo
.app
.api
;
5 import org
.argeo
.api
.cms
.CmsLog
;
8 * A container for an object whose relevance can be ranked. Typically used in an
9 * OSGi context with the service.ranking property.
11 public class RankedObject
<T
> {
12 private final static CmsLog log
= CmsLog
.getLog(RankedObject
.class);
14 private final static String SERVICE_RANKING
= "service.ranking";
15 // private final static String SERVICE_ID = "service.id";
18 private Map
<String
, Object
> properties
;
19 private final Long rank
;
21 public RankedObject(T object
, Map
<String
, Object
> properties
) {
22 this(object
, properties
, extractRanking(properties
));
25 public RankedObject(T object
, Map
<String
, Object
> properties
, Long rank
) {
28 this.properties
= properties
;
32 private static Long
extractRanking(Map
<String
, Object
> properties
) {
33 if (properties
== null)
35 if (properties
.containsKey(SERVICE_RANKING
))
36 return Long
.valueOf(properties
.get(SERVICE_RANKING
).toString());
37 // else if (properties.containsKey(SERVICE_ID))
38 // return (Long) properties.get(SERVICE_ID);
47 public Map
<String
, Object
> getProperties() {
51 public Long
getRank() {
56 public int hashCode() {
57 return object
.hashCode();
61 public boolean equals(Object obj
) {
62 if (!(obj
instanceof RankedObject
))
64 RankedObject
<?
> other
= (RankedObject
<?
>) obj
;
65 return rank
.equals(other
.rank
) && object
.equals(other
.object
);
69 public String
toString() {
70 return object
.getClass().getName() + " with rank " + rank
;
73 public static <K
, T
> RankedObject
<T
> putIfHigherRank(Map
<K
, RankedObject
<T
>> map
, K key
, T object
,
74 Map
<String
, Object
> properties
) {
75 RankedObject
<T
> rankedObject
= new RankedObject
<>(object
, properties
);
76 if (!map
.containsKey(key
)) {
77 map
.put(key
, rankedObject
);
78 if (log
.isTraceEnabled())
80 "Added " + key
+ " as " + object
.getClass().getName() + " with rank " + rankedObject
.getRank());
83 RankedObject
<T
> current
= map
.get(key
);
84 if (current
.getRank() <= rankedObject
.getRank()) {
85 map
.put(key
, rankedObject
);
86 if (log
.isTraceEnabled())
87 log
.trace("Replaced " + key
+ " by " + object
.getClass().getName() + " with rank "
88 + rankedObject
.getRank());