/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.position;
import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import org.joda.beans.PropertyDefinition;
import com.google.common.collect.Maps;
import com.opengamma.id.UniqueId;
import com.opengamma.master.position.Deal;
import com.opengamma.master.position.ManageablePosition;
import com.opengamma.master.position.ManageableTrade;
import com.opengamma.util.ArgumentChecker;
/**
* Trade Attributes Model to help with freemarker rendering.
*/
public class TradeAttributesModel {
@PropertyDefinition
private Map<UniqueId, Map<String, Map<String, String>>> _attrMap = Maps.newHashMap();
/**
* Creates an instance
*
* @param position the position, not null
*/
public TradeAttributesModel(final ManageablePosition position) {
ArgumentChecker.notNull(position, "position");
initialize(position);
}
private void initialize(final ManageablePosition position) {
for (ManageableTrade trade : position.getTrades()) {
Map<String, String> dealAttr = new TreeMap<String, String>();
Map<String, String> userAttr = new TreeMap<String, String>();
for (Entry<String, String> entry : trade.getAttributes().entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
if (key.startsWith(Deal.DEAL_PREFIX)) {
dealAttr.put(key, value);
} else {
userAttr.put(key, value);
}
}
Map<String, Map<String, String>> tradeAttr = Maps.newHashMap();
tradeAttr.put("deal", dealAttr);
tradeAttr.put("user", userAttr);
_attrMap.put(trade.getUniqueId(), tradeAttr);
}
}
/**
* Gets the Deal attributes for a given trade uniqueId.
*
* @param tradeId the tradeId
* @return the deal attributes, not null
*/
public Map<String, String> getDealAttributes(UniqueId tradeId) {
Map<String, String> result = new TreeMap<String, String>();
Map<String, Map<String, String>> attributes = _attrMap.get(tradeId);
if (attributes != null) {
result = attributes.get("deal");
}
return Collections.unmodifiableMap(result);
}
/**
* Gets the User attributes for a given trade uniqueId.
*
* @param tradeId the trade uniqueId
* @return the user attributes, not null
*/
public Map<String, String> getUserAttributes(UniqueId tradeId) {
Map<String, String> result = new TreeMap<String, String>();
Map<String, Map<String, String>> attributes = _attrMap.get(tradeId);
if (attributes != null) {
result = attributes.get("user");
}
return Collections.unmodifiableMap(result);
}
}