/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.core.id;
import java.util.Comparator;
import java.util.Map;
import com.google.common.collect.Maps;
import com.opengamma.id.ExternalIdWithDates;
import com.opengamma.id.ExternalScheme;
/**
* Comparator to define order in which schemes are sorted in ExternalIdBundles that work best for display purposes.
* Here we're defining a table of scores for each scheme
*/
public class ExternalIdWithDatesDisplayComparator implements Comparator<ExternalIdWithDates> {
static final Map<ExternalScheme, Integer> s_scoreMap = Maps.newHashMap();
private Map<ExternalScheme, Integer> _scoreMap;
private ExternalIdOrderConfig _orderConfig;
/**
* Uses hard-coded default information about scores.
*/
public ExternalIdWithDatesDisplayComparator() {
_orderConfig = ExternalIdOrderConfig.DEFAULT_CONFIG;
}
/**
* Initialize comparator using configuration object stored in config database
* @param orderConfig sourced from a ConfigSource
*/
public ExternalIdWithDatesDisplayComparator(ExternalIdOrderConfig orderConfig) {
_orderConfig = orderConfig;
_scoreMap = _orderConfig.getRateMap();
}
private int scoreExternalId(ExternalIdWithDates id) {
if (_scoreMap.containsKey(id.getExternalId().getScheme())) {
return _scoreMap.get(id.getExternalId().getScheme());
} else {
return 0;
}
}
@Override
public int compare(ExternalIdWithDates id0, ExternalIdWithDates id1) {
int score0 = scoreExternalId(id0);
int score1 = scoreExternalId(id1);
if ((score1 - score0) != 0) {
return score1 - score0;
} else {
return id0.compareTo(id1);
}
}
}