/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.viewer.status.impl;
import static com.opengamma.integration.viewer.status.impl.ViewStatusResultAggregatorImpl.CURRENCY_HEADER;
import static com.opengamma.integration.viewer.status.impl.ViewStatusResultAggregatorImpl.SECURITY_HEADER;
import static com.opengamma.integration.viewer.status.impl.ViewStatusResultAggregatorImpl.STATUS;
import static com.opengamma.integration.viewer.status.impl.ViewStatusResultAggregatorImpl.TARGET_TYPE_HEADER;
import static com.opengamma.integration.viewer.status.impl.ViewStatusResultAggregatorImpl.VALUE_REQUIREMENT_NAME_HEADER;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import org.apache.commons.lang.StringUtils;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.opengamma.engine.target.ComputationTargetType;
import com.opengamma.integration.viewer.status.AggregateType;
import com.opengamma.integration.viewer.status.ViewStatus;
import com.opengamma.integration.viewer.status.ViewStatusModel;
import com.opengamma.integration.viewer.status.ViewStatusResultAggregator;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
/**
* Tests {@link ViewStatusResultAggregatorImpl}
*/
@Test(groups = TestGroup.UNIT)
public class ViewStatusResultAggregatorImplTest {
private static final ViewStatus NO_VALUE = ViewStatus.NO_VALUE;
private static final ViewStatus VALUE = ViewStatus.VALUE;
private static final String SWAP = "SWAP";
private static final String SWAPTION = "SWAPTION";
private static final String PV = "PV";
private static final String YIELD_CURVE = "YIELD_CURVE";
private static final String VALUERHO = "VALUERHO";
private static final String CREDIT_SPREAD_CURVE = "CREDIT_SPREAD_CURVE";
private static final String HAZARD_RATE_CURVE = "HAZARD_RATE_CURVE";
private static final String QUANTITY = "QUANTITY";
private static final String FAIR_VALUE = "FAIR_VALUE";
private static final String PRESENT_VALUE = "PRESENT_VALUE";
private static final String MIXED_SEC = "Mixed_SEC";
private static final String MIXED_CUR = "Mixed_CUR";
private static final String EMPTY_STR = StringUtils.EMPTY;
private static final String USD = Currency.USD.getCode();
private static final String GBP = Currency.GBP.getCode();
private static final String EUR = Currency.EUR.getCode();
private static final String POSITION_TARGET = ComputationTargetType.POSITION.getName();
private static final String NODE_TARGET = ComputationTargetType.PORTFOLIO_NODE.getName();
private ViewStatusResultAggregator _aggregator;
@BeforeMethod
public void setUp() {
_aggregator = new ViewStatusResultAggregatorImpl();
_aggregator.putStatus(new ViewStatusKeyBean(SWAP, PV, USD, POSITION_TARGET), VALUE);
_aggregator.putStatus(new ViewStatusKeyBean(SWAP, PV, GBP, POSITION_TARGET), VALUE);
_aggregator.putStatus(new ViewStatusKeyBean(SWAP, PV, EUR, POSITION_TARGET), VALUE);
_aggregator.putStatus(new ViewStatusKeyBean(SWAP, YIELD_CURVE, USD, POSITION_TARGET), NO_VALUE);
_aggregator.putStatus(new ViewStatusKeyBean(SWAP, YIELD_CURVE, GBP, POSITION_TARGET), VALUE);
_aggregator.putStatus(new ViewStatusKeyBean(SWAP, VALUERHO, USD, POSITION_TARGET), VALUE);
_aggregator.putStatus(new ViewStatusKeyBean(SWAP, VALUERHO, GBP, POSITION_TARGET), VALUE);
_aggregator.putStatus(new ViewStatusKeyBean(SWAPTION, CREDIT_SPREAD_CURVE, USD, POSITION_TARGET), VALUE);
_aggregator.putStatus(new ViewStatusKeyBean(SWAPTION, CREDIT_SPREAD_CURVE, GBP, POSITION_TARGET), NO_VALUE);
_aggregator.putStatus(new ViewStatusKeyBean(SWAPTION, HAZARD_RATE_CURVE, USD, POSITION_TARGET), NO_VALUE);
_aggregator.putStatus(new ViewStatusKeyBean(SWAPTION, HAZARD_RATE_CURVE, GBP, POSITION_TARGET), NO_VALUE);
_aggregator.putStatus(new ViewStatusKeyBean(MIXED_SEC, QUANTITY, MIXED_CUR, NODE_TARGET), NO_VALUE);
_aggregator.putStatus(new ViewStatusKeyBean(MIXED_SEC, FAIR_VALUE, MIXED_CUR, NODE_TARGET), NO_VALUE);
_aggregator.putStatus(new ViewStatusKeyBean(MIXED_SEC, PRESENT_VALUE, MIXED_CUR, NODE_TARGET), NO_VALUE);
}
public void aggregateByTargetTypeSecurityValueNameCurrency() {
ViewStatusModel statusModel = _aggregator.aggregate(AggregateType.of("TSVC"));
assertNotNull(statusModel);
//check header
assertEquals(2, statusModel.getHeaderRowCount());
assertEquals(7, statusModel.getColumnCount());
assertEquals(TARGET_TYPE_HEADER, statusModel.getColumnNameAt(0, 0));
assertEquals(SECURITY_HEADER, statusModel.getColumnNameAt(0, 1));
assertEquals(VALUE_REQUIREMENT_NAME_HEADER, statusModel.getColumnNameAt(0, 2));
assertEquals(CURRENCY_HEADER, statusModel.getColumnNameAt(0, 3));
assertEmptyString(statusModel.getColumnNameAt(0, 4));
assertEmptyString(statusModel.getColumnNameAt(0, 5));
assertEmptyString(statusModel.getColumnNameAt(0, 6));
assertEmptyString(statusModel.getColumnNameAt(1, 0));
assertEmptyString(statusModel.getColumnNameAt(1, 1));
assertEmptyString(statusModel.getColumnNameAt(1, 2));
assertEquals(EUR, statusModel.getColumnNameAt(1, 3));
assertEquals(GBP, statusModel.getColumnNameAt(1, 4));
assertEquals(MIXED_CUR, statusModel.getColumnNameAt(1, 5));
assertEquals(USD, statusModel.getColumnNameAt(1, 6));
//check rows
assertEquals(8, statusModel.getRowCount());
//check row1
assertEquals(NODE_TARGET, statusModel.getRowValueAt(0, 0));
assertEquals(MIXED_SEC, statusModel.getRowValueAt(0, 1));
assertEquals(FAIR_VALUE, String.valueOf(statusModel.getRowValueAt(0, 2)));
assertEmptyString(statusModel.getRowValueAt(0, 3));
assertEmptyString(statusModel.getRowValueAt(0, 4));
assertEquals(NO_VALUE, statusModel.getRowValueAt(0, 5));
assertEmptyString(statusModel.getRowValueAt(0, 6));
//check row2
assertEmptyString(statusModel.getRowValueAt(1, 0));
assertEmptyString(statusModel.getRowValueAt(1, 1));
assertEquals(PRESENT_VALUE, statusModel.getRowValueAt(1, 2));
assertEmptyString(statusModel.getRowValueAt(1, 3));
assertEmptyString(statusModel.getRowValueAt(1, 4));
assertEquals(NO_VALUE, statusModel.getRowValueAt(1, 5));
assertEmptyString(statusModel.getRowValueAt(1, 6));
//check row3
assertEmptyString(statusModel.getRowValueAt(2, 0));
assertEmptyString(statusModel.getRowValueAt(2, 1));
assertEquals(QUANTITY, statusModel.getRowValueAt(2, 2));
assertEmptyString(statusModel.getRowValueAt(2, 3));
assertEmptyString(statusModel.getRowValueAt(2, 4));
assertEquals(NO_VALUE, statusModel.getRowValueAt(2, 5));
assertEmptyString(statusModel.getRowValueAt(2, 6));
//check row4
assertEquals(POSITION_TARGET, statusModel.getRowValueAt(3, 0));
assertEquals(SWAP, statusModel.getRowValueAt(3, 1));
assertEquals(PV, statusModel.getRowValueAt(3, 2));
assertEquals(VALUE, statusModel.getRowValueAt(3, 3));
assertEquals(VALUE, statusModel.getRowValueAt(3, 4));
assertEmptyString(statusModel.getRowValueAt(3, 5));
assertEquals(VALUE, statusModel.getRowValueAt(3, 6));
//check row5
assertEmptyString(statusModel.getRowValueAt(4, 0));
assertEmptyString(statusModel.getRowValueAt(4, 1));
assertEquals(VALUERHO, statusModel.getRowValueAt(4, 2));
assertEmptyString(statusModel.getRowValueAt(4, 3));
assertEquals(VALUE, statusModel.getRowValueAt(4, 4));
assertEmptyString(statusModel.getRowValueAt(4, 5));
assertEquals(VALUE, statusModel.getRowValueAt(4, 6));
//check row6
assertEmptyString(statusModel.getRowValueAt(5, 0));
assertEmptyString(statusModel.getRowValueAt(5, 1));
assertEquals(YIELD_CURVE, statusModel.getRowValueAt(5, 2));
assertEmptyString(statusModel.getRowValueAt(5, 3));
assertEquals(VALUE, statusModel.getRowValueAt(5, 4));
assertEmptyString(statusModel.getRowValueAt(5, 5));
assertEquals(NO_VALUE, statusModel.getRowValueAt(5, 6));
//check row7
assertEmptyString(statusModel.getRowValueAt(6, 0));
assertEquals(SWAPTION, statusModel.getRowValueAt(6, 1));
assertEquals(CREDIT_SPREAD_CURVE, statusModel.getRowValueAt(6, 2));
assertEmptyString(statusModel.getRowValueAt(6, 3));
assertEquals(NO_VALUE, statusModel.getRowValueAt(6, 4));
assertEmptyString(statusModel.getRowValueAt(6, 5));
assertEquals(VALUE, statusModel.getRowValueAt(6, 6));
//check row8
assertEmptyString(statusModel.getRowValueAt(7, 0));
assertEmptyString(statusModel.getRowValueAt(7, 1));
assertEquals(HAZARD_RATE_CURVE, statusModel.getRowValueAt(7, 2));
assertEmptyString(statusModel.getRowValueAt(7, 3));
assertEquals(NO_VALUE, statusModel.getRowValueAt(7, 4));
assertEmptyString(statusModel.getRowValueAt(7, 5));
assertEquals(NO_VALUE, statusModel.getRowValueAt(7, 6));
}
public void aggregateBySecurityCurrencyValueNameTargetType() {
ViewStatusModel statusModel = _aggregator.aggregate(AggregateType.of("SCVT"));
assertNotNull(statusModel);
//check header
assertEquals(2, statusModel.getHeaderRowCount());
assertEquals(5, statusModel.getColumnCount());
assertEquals(SECURITY_HEADER, statusModel.getColumnNameAt(0, 0));
assertEquals(CURRENCY_HEADER, statusModel.getColumnNameAt(0, 1));
assertEquals(VALUE_REQUIREMENT_NAME_HEADER, statusModel.getColumnNameAt(0, 2));
assertEquals(TARGET_TYPE_HEADER, statusModel.getColumnNameAt(0, 3));
assertEmptyString(statusModel.getColumnNameAt(0, 4));
assertEmptyString(statusModel.getColumnNameAt(1, 0));
assertEmptyString(statusModel.getColumnNameAt(1, 1));
assertEmptyString(statusModel.getColumnNameAt(1, 2));
assertEquals(NODE_TARGET, statusModel.getColumnNameAt(1, 3));
assertEquals(POSITION_TARGET, statusModel.getColumnNameAt(1, 4));
//check rows
assertEquals(14, statusModel.getRowCount());
//check row1
assertEmptyString(statusModel.getRowValueAt(6, 0));
assertEmptyString(statusModel.getRowValueAt(6, 1));
assertEquals(YIELD_CURVE, String.valueOf(statusModel.getRowValueAt(6, 2)));
assertEmptyString(statusModel.getRowValueAt(6, 3));
assertEquals(VALUE, statusModel.getRowValueAt(6, 4));
//check row7
assertEquals(MIXED_SEC, statusModel.getRowValueAt(0, 0));
assertEquals(MIXED_CUR, statusModel.getRowValueAt(0, 1));
assertEquals(FAIR_VALUE, String.valueOf(statusModel.getRowValueAt(0, 2)));
assertEquals(NO_VALUE, statusModel.getRowValueAt(0, 3));
assertEmptyString(statusModel.getRowValueAt(0, 4));
//check row14
assertEmptyString(statusModel.getRowValueAt(13, 0));
assertEmptyString(statusModel.getRowValueAt(13, 1));
assertEquals(HAZARD_RATE_CURVE, statusModel.getRowValueAt(13, 2));
assertEmptyString(statusModel.getRowValueAt(13, 3));
assertEquals(NO_VALUE, statusModel.getRowValueAt(13, 4));
}
public void targetSecurityValueCurrencyHeaders() {
ViewStatusModel model = _aggregator.aggregate(AggregateType.of("TSVC"));
assertNotNull(model);
assertEquals(2, model.getHeaderRowCount());
assertEquals(7, model.getColumnCount());
//check top header
assertEquals(ViewStatusResultAggregatorImpl.TARGET_TYPE_HEADER, model.getColumnNameAt(0, 0));
assertEquals(ViewStatusResultAggregatorImpl.SECURITY_HEADER, model.getColumnNameAt(0, 1));
assertEquals(ViewStatusResultAggregatorImpl.VALUE_REQUIREMENT_NAME_HEADER, model.getColumnNameAt(0, 2));
assertEquals(ViewStatusResultAggregatorImpl.CURRENCY_HEADER, model.getColumnNameAt(0, 3));
assertEmptyString(model.getColumnNameAt(0, 4));
assertEmptyString(model.getColumnNameAt(0, 5));
assertEmptyString(model.getColumnNameAt(0, 6));
//check sub header
assertEmptyString(model.getColumnNameAt(1, 0));
assertEmptyString(model.getColumnNameAt(1, 1));
assertEmptyString(model.getColumnNameAt(1, 2));
assertEquals(EUR, model.getColumnNameAt(1, 3));
assertEquals(GBP, model.getColumnNameAt(1, 4));
assertEquals(MIXED_CUR, model.getColumnNameAt(1, 5));
assertEquals(USD, model.getColumnNameAt(1, 6));
}
public void targetSecurityCurrencyValueHeaders() {
ViewStatusModel model = _aggregator.aggregate(AggregateType.of("TSCV"));
assertNotNull(model);
assertEquals(2, model.getHeaderRowCount());
assertEquals(11, model.getColumnCount());
//check top header
assertEquals(ViewStatusResultAggregatorImpl.TARGET_TYPE_HEADER, model.getColumnNameAt(0, 0));
assertEquals(ViewStatusResultAggregatorImpl.SECURITY_HEADER, model.getColumnNameAt(0, 1));
assertEquals(ViewStatusResultAggregatorImpl.CURRENCY_HEADER, model.getColumnNameAt(0, 2));
assertEquals(ViewStatusResultAggregatorImpl.VALUE_REQUIREMENT_NAME_HEADER, model.getColumnNameAt(0, 3));
assertEmptyString(model.getColumnNameAt(0, 4));
assertEmptyString(model.getColumnNameAt(0, 5));
assertEmptyString(model.getColumnNameAt(0, 6));
assertEmptyString(model.getColumnNameAt(0, 7));
assertEmptyString(model.getColumnNameAt(0, 8));
assertEmptyString(model.getColumnNameAt(0, 9));
assertEmptyString(model.getColumnNameAt(0, 10));
//check sub header
assertEmptyString(model.getColumnNameAt(1, 0));
assertEmptyString(model.getColumnNameAt(1, 1));
assertEmptyString(model.getColumnNameAt(1, 2));
assertEquals(CREDIT_SPREAD_CURVE, model.getColumnNameAt(1, 3));
assertEquals(FAIR_VALUE, model.getColumnNameAt(1, 4));
assertEquals(HAZARD_RATE_CURVE, model.getColumnNameAt(1, 5));
assertEquals(PRESENT_VALUE, model.getColumnNameAt(1, 6));
assertEquals(PV, model.getColumnNameAt(1, 7));
assertEquals(QUANTITY, model.getColumnNameAt(1, 8));
assertEquals(VALUERHO, model.getColumnNameAt(1, 9));
assertEquals(YIELD_CURVE, model.getColumnNameAt(1, 10));
}
public void defaultHeaders() {
ViewStatusModel model = _aggregator.aggregate(AggregateType.NO_AGGREGATION);
assertNotNull(model);
assertEquals(1, model.getHeaderRowCount());
assertEquals(5, model.getColumnCount());
assertEquals(TARGET_TYPE_HEADER, model.getColumnNameAt(0, 0));
assertEquals(SECURITY_HEADER, model.getColumnNameAt(0, 1));
assertEquals(VALUE_REQUIREMENT_NAME_HEADER, model.getColumnNameAt(0, 2));
assertEquals(CURRENCY_HEADER, model.getColumnNameAt(0, 3));
assertEquals(STATUS, model.getColumnNameAt(0, 4));
}
private void assertEmptyString(final Object content) {
assertEquals(EMPTY_STR, String.valueOf(content));
}
}