TreeMap<Long, Object[]> mapOrder = new TreeMap<Long, Object[]>(
Collections.reverseOrder());
FeatureDetails[] featureDetails = featman.getFeatureDetails("dvdburn");
// if any of the feature details are still valid, we have a full
for (FeatureDetails fd : featureDetails) {
Licence licence = fd.getLicence();
int state = licence.getState();
if (state == Licence.LS_ACTIVATION_DENIED) {
mapOrder.put(-1L, new Object[] { licence, Long.valueOf(0) });
continue;
} else if (state == Licence.LS_CANCELLED) {
mapOrder.put(-2L, new Object[] { licence, Long.valueOf(0) });
continue;
} else if (state == Licence.LS_INVALID_KEY) {
mapOrder.put(-3L, new Object[] { licence, Long.valueOf(0) });
continue;
} else if (state == Licence.LS_REVOKED) {
mapOrder.put(-4L, new Object[] { licence, Long.valueOf(0) });
continue;
} else if (state == Licence.LS_PENDING_AUTHENTICATION) {
mapOrder.put(-6L, new Object[] { licence, Long.valueOf(0) });
continue;
}
long now = SystemTime.getCurrentTime();
Long lValidUntil = (Long) fd.getProperty(FeatureDetails.PR_VALID_UNTIL);
Long lValidOfflineUntil = (Long) fd.getProperty(FeatureDetails.PR_OFFLINE_VALID_UNTIL);
if (lValidUntil == null && lValidOfflineUntil == null) {
continue;
}
long minValidUntil = -1;
long maxValidUntil = -1;
if (lValidUntil != null) {
minValidUntil = maxValidUntil = lValidUntil.longValue();
if (minValidUntil < now) {
mapOrder.put(minValidUntil, new Object[] { licence, Long.valueOf(minValidUntil) });
continue;
}
}
if (lValidOfflineUntil != null) {
long validOfflineUntil = lValidOfflineUntil.longValue();
if (validOfflineUntil < now) {
mapOrder.put(validOfflineUntil, new Object[] { licence, Long.valueOf(maxValidUntil) });
continue;
}
if (maxValidUntil == -1 || validOfflineUntil > maxValidUntil) {
maxValidUntil = validOfflineUntil;
}
}
mapOrder.put(maxValidUntil, new Object[] { licence, minValidUntil });
}
if (mapOrder.size() == 0) {
return null;
}
Long firstKey = mapOrder.firstKey();
Object[] objects = mapOrder.get(firstKey);
Licence licence = (Licence) objects[0];
return new licenceDetails(firstKey.longValue(), ((Long) objects[1]).longValue(), licence);
}