com.opengamma.livedata.normalization.UnitChange.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.livedata.normalization.UnitChange.java

Source

/**
 * 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;
    }

}