/**
* 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.ExternalId;
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
*/
@SuppressWarnings("deprecation")
public class ExternalIdDisplayComparator implements Comparator<ExternalId> {
/**
* The map of scores.
*/
static final Map<ExternalScheme, Integer> s_scoreMap = Maps.newHashMap();
static {
s_scoreMap.put(ExternalSchemes.BLOOMBERG_TCM, 20); // beacuse if there's both ticker and tcm, you want to see tcm.
s_scoreMap.put(ExternalSchemes.BLOOMBERG_TICKER, 19);
s_scoreMap.put(ExternalSchemes.RIC, 17);
s_scoreMap.put(ExternalSchemes.BLOOMBERG_TICKER_WEAK, 16);
s_scoreMap.put(ExternalSchemes.ACTIVFEED_TICKER, 15);
s_scoreMap.put(ExternalSchemes.SURF, 14);
s_scoreMap.put(ExternalSchemes.ISIN, 13);
s_scoreMap.put(ExternalSchemes.CUSIP, 12);
s_scoreMap.put(ExternalSchemes.SEDOL1, 11);
s_scoreMap.put(ExternalSchemes.OG_SYNTHETIC_TICKER, 10);
s_scoreMap.put(ExternalSchemes.BLOOMBERG_BUID, 5);
s_scoreMap.put(ExternalSchemes.BLOOMBERG_BUID_WEAK, 4);
}
/**
* The map of scores.
*/
private Map<ExternalScheme, Integer> _scoreMap;
/**
* Uses hard-coded default information about scores.
*/
public ExternalIdDisplayComparator() {
_scoreMap = s_scoreMap;
}
/**
* Initialize comparator using configuration object stored in config database.
*
* @param orderConfig sourced from a ConfigSource
*/
public ExternalIdDisplayComparator(ExternalIdOrderConfig orderConfig) {
// TODO: code missing!
}
private int scoreExternalId(ExternalId id) {
if (_scoreMap.containsKey(id.getScheme())) {
return _scoreMap.get(id.getScheme());
} else {
return 0;
}
}
@Override
public int compare(ExternalId id0, ExternalId id1) {
int score0 = scoreExternalId(id0);
int score1 = scoreExternalId(id1);
if ((score1 - score0) != 0) {
return score1 - score0;
} else {
return id0.compareTo(id1);
}
}
}