/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.comparison;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import com.google.common.collect.Sets;
import com.opengamma.core.position.Position;
import com.opengamma.core.position.Trade;
/* package */final class PositionInfo extends PositionOrTradeInfo<Position> {
private final Set<TradeInfo> _trades;
private final Map<String, String> _attributes;
public PositionInfo(final ComparisonContext context, final Position position) {
super(context, position);
final Collection<Trade> trades = position.getTrades();
if (trades.isEmpty()) {
_trades = Collections.emptySet();
} else {
final Set<TradeInfo> tradeInfos = Sets.newHashSetWithExpectedSize(trades.size());
for (Trade trade : trades) {
tradeInfos.add(new TradeInfo(context, trade));
}
_trades = Collections.unmodifiableSet(tradeInfos);
}
_attributes = context.isIgnorePositionAttributes() ? Collections.<String, String>emptyMap() : position.getAttributes();
}
public Set<TradeInfo> getTrades() {
return _trades;
}
public Map<String, String> getAttributes() {
return _attributes;
}
@Override
public String toString() {
return "PositionInfo[quantity=" + getQuantity() + ", security=" + getSecurity() + ", trades=" + getTrades() + ", attributes=" + getAttributes() + "]";
}
@Override
public boolean equals(final Object o) {
if (o == this) {
return true;
}
if (!(o instanceof PositionInfo)) {
return false;
}
final PositionInfo other = (PositionInfo) o;
if (!equalsImpl(other)) {
return false;
}
return getTrades().equals(other.getTrades())
&& getAttributes().equals(other.getAttributes());
}
@Override
public int hashCode() {
int hc = hashCodeImpl();
hc += (hc << 4) + getTrades().hashCode();
hc += (hc << 4) + getAttributes().hashCode();
return hc;
}
}