/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.livedata.normalization;
import java.util.Set;
import org.fudgemsg.MutableFudgeMsg;
import com.google.common.collect.ImmutableSet;
import com.opengamma.livedata.server.FieldHistoryStore;
import com.opengamma.util.ArgumentChecker;
/**
* Multiplies the value of a {@code Double} field by a constant.
*/
public class UnitChange implements NormalizationRule {
private final Set<String> _fields;
private final double _multiplier;
public UnitChange(String field, double multiplier) {
ArgumentChecker.notNull(field, "Field name");
_fields = ImmutableSet.of(field);
_multiplier = multiplier;
}
public UnitChange(Set<String> fields, double multiplier) {
ArgumentChecker.notNull(fields, "Field names");
_fields = fields;
_multiplier = multiplier;
}
public UnitChange(double multiplier, String... fields) {
ArgumentChecker.notNull(fields, "fields");
_fields = ImmutableSet.copyOf(fields);
_multiplier = multiplier;
}
@Override
public MutableFudgeMsg apply(MutableFudgeMsg msg, String securityUniqueId, FieldHistoryStore fieldHistory) {
return multiplyFields(msg, _fields, _multiplier);
}
private static MutableFudgeMsg multiplyFields(MutableFudgeMsg msg, Set<String> fields, double multiplier) {
for (String field : fields) {
Double value = msg.getDouble(field);
if (value != null) {
double newValue = value * multiplier;
msg.remove(field);
msg.add(field, newValue);
}
}
return msg;
}
}