/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.target.logger;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import com.opengamma.core.position.Position;
import com.opengamma.core.position.Trade;
import com.opengamma.core.security.Security;
import com.opengamma.core.security.SecurityLink;
import com.opengamma.engine.target.ComputationTargetRequirement;
import com.opengamma.engine.target.ComputationTargetType;
/**
* Wrapper around a {@link Position} instance that will log any deep resolution calls.
*/
public class LoggedResolutionPosition extends AbstractLoggedResolution<Position> implements Position {
public LoggedResolutionPosition(final Position underlying, final ResolutionLogger logger) {
super(underlying, logger);
}
// Position
@Override
public BigDecimal getQuantity() {
return getUnderlying().getQuantity();
}
@Override
public SecurityLink getSecurityLink() {
return getUnderlying().getSecurityLink();
}
@Override
public Security getSecurity() {
final Security security = getUnderlying().getSecurity();
final SecurityLink link = getSecurityLink();
if ((link.getExternalId() != null) && !link.getExternalId().isEmpty()) {
log(new ComputationTargetRequirement(ComputationTargetType.SECURITY, link.getExternalId()), security.getUniqueId());
}
if (link.getObjectId() != null) {
log(ComputationTargetType.SECURITY, security);
}
return security;
}
@Override
public Collection<Trade> getTrades() {
final Collection<Trade> trades = getUnderlying().getTrades();
final Collection<Trade> result = new ArrayList<Trade>(trades.size());
for (Trade trade : trades) {
// log(ComputationTargetType.TRADE, trade); // [PLAT-4491] Trades are linked to positions by UID, not OID
result.add(new LoggedResolutionTrade(trade, getLogger()));
}
return result;
}
@Override
public Map<String, String> getAttributes() {
return getUnderlying().getAttributes();
}
}