/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.bbg.historical.normalization;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.opengamma.bbg.normalization.BloombergRateClassifier;
import com.opengamma.core.historicaltimeseries.HistoricalTimeSeries;
import com.opengamma.core.historicaltimeseries.HistoricalTimeSeriesAdjuster;
import com.opengamma.core.historicaltimeseries.HistoricalTimeSeriesAdjustment;
import com.opengamma.core.historicaltimeseries.impl.SimpleHistoricalTimeSeries;
import com.opengamma.core.id.ExternalSchemes;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries;
/**
* Implementation of {@link HistoricalTimeSeriesAdjuster} for normalizing time-series consisting of Bloomberg market
* data.
*/
public class BloombergRateHistoricalTimeSeriesNormalizer implements HistoricalTimeSeriesAdjuster {
/** Logger. */
private static final Logger s_logger = LoggerFactory.getLogger(BloombergRateHistoricalTimeSeriesNormalizer.class);
private final BloombergRateClassifier _classifier;
public BloombergRateHistoricalTimeSeriesNormalizer(BloombergRateClassifier classifier) {
_classifier = classifier;
}
protected BloombergRateClassifier getClassifier() {
return _classifier;
}
protected Integer getNormalizationFactor(final ExternalIdBundle securityIdBundle) {
String buid = securityIdBundle.getValue(ExternalSchemes.BLOOMBERG_BUID);
if (buid == null) {
s_logger.warn("Unable to classify security for Bloomberg time-series normalization as no BUID found in bundle: {}. The time-series will be unnormalized.", securityIdBundle);
return null;
}
Integer normalizationFactor = getClassifier().getNormalizationFactor(buid);
if (normalizationFactor == null) {
s_logger.warn("Unable to classify security for Bloomberg time-series normalization: {}. The time-series will be unnormalized.", securityIdBundle);
return null;
}
if (normalizationFactor == 1) {
return null;
}
return normalizationFactor;
}
@Override
public HistoricalTimeSeries adjust(ExternalIdBundle securityIdBundle, HistoricalTimeSeries timeSeries) {
final Integer normalizationFactor = getNormalizationFactor(securityIdBundle);
if (normalizationFactor == null) {
return timeSeries;
}
LocalDateDoubleTimeSeries normalizedTimeSeries = (LocalDateDoubleTimeSeries) timeSeries.getTimeSeries().divide(normalizationFactor);
return new SimpleHistoricalTimeSeries(timeSeries.getUniqueId(), normalizedTimeSeries);
}
@Override
public HistoricalTimeSeriesAdjustment getAdjustment(final ExternalIdBundle securityIdBundle) {
Integer normalizationFactor = getNormalizationFactor(securityIdBundle);
if (normalizationFactor == null) {
return HistoricalTimeSeriesAdjustment.NoOp.INSTANCE;
}
return new HistoricalTimeSeriesAdjustment.DivideBy(normalizationFactor);
}
}