/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.marketdata;
import org.fudgemsg.FudgeMsg;
import org.fudgemsg.FudgeMsgFactory;
import org.fudgemsg.MutableFudgeMsg;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.opengamma.engine.marketdata.OverrideOperation;
import com.opengamma.engine.value.ValueRequirement;
/**
* Market data override operation for multiplying a fixed amount to the underlying (e.g. x1.05 gives a 5% increase).
*/
public class MarketDataMultiplyOperation implements OverrideOperation {
private static final Logger s_logger = LoggerFactory.getLogger(MarketDataAddOperation.class);
private final double _amount;
public MarketDataMultiplyOperation(final double amount) {
_amount = amount;
}
public double getAmount() {
return _amount;
}
@Override
public Object apply(final ValueRequirement valueRequirement, final Object value) {
if (value instanceof Number) {
return ((Number) value).doubleValue() * getAmount();
} else {
s_logger.warn("Can't apply multiply operation to {} for {}", value, valueRequirement);
return value;
}
}
@Override
public boolean equals(final Object o) {
if (o == this) {
return true;
}
if (!(o instanceof MarketDataMultiplyOperation)) {
return false;
}
final MarketDataMultiplyOperation other = (MarketDataMultiplyOperation) o;
return getAmount() == other.getAmount();
}
@Override
public int hashCode() {
return getClass().hashCode() ^ (int) Double.doubleToLongBits(getAmount());
}
private static final String AMOUNT_KEY = "multiply";
public FudgeMsg toFudgeMsg(final FudgeMsgFactory factory) {
final MutableFudgeMsg msg = factory.newMessage();
msg.add(AMOUNT_KEY, getAmount());
return msg;
}
public static MarketDataMultiplyOperation fromFudgeMsg(final FudgeMsg msg) {
return new MarketDataMultiplyOperation(msg.getDouble(AMOUNT_KEY));
}
}