/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.viewer;
import java.util.ArrayList;
import java.util.List;
import com.opengamma.engine.value.ValueProperties;
import com.opengamma.engine.view.ViewCalculationConfiguration;
import com.opengamma.engine.view.ViewDefinition;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.tuple.Pair;
/**
* Maps particular columns to and from the combination of parameters
* that make up the appropriate lookup components for that model.
* <p/>
* Columns are:
* <dl>
* <dt>0</dt>
* <dd>The trade definition column</dd>
* <dt>[1..n1]</dt>
* <dd>The columns in order for the first calculation configuration.</dd>
* <dt>(n1..n2]</dt>
* <dd>The columns in order for the second calculation configuration.</dd>
* </dl>
* And the pattern continues.
*
* @author kirk
*/
public class ViewerColumnModel {
private final List<CalculationConfigurationRange> _calcConfigRanges = new ArrayList<CalculationConfigurationRange>();
private int _columnCount;
public ViewerColumnModel() {
}
/**
* @param viewDefinition the view definition
*/
public void init(ViewDefinition viewDefinition) {
ArgumentChecker.notNull(viewDefinition, "View definition");
// 0th column is for the trade definition.
int currColumn = 1;
for (ViewCalculationConfiguration calcConfiguration : viewDefinition.getAllCalculationConfigurations()) {
CalculationConfigurationRange range = new CalculationConfigurationRange();
_calcConfigRanges.add(range);
range.setConfigName(calcConfiguration.getName());
range.setStartColumn(currColumn);
for (Pair<String, ValueProperties> requirementName : calcConfiguration.getAllPortfolioRequirements()) {
range.getColumnRequirementNames().add(requirementName.getFirst());
currColumn++;
}
}
_columnCount = currColumn;
}
private CalculationConfigurationRange getRange(int column) {
if (column <= 0) {
return null;
}
for (CalculationConfigurationRange range : _calcConfigRanges) {
if (column >= (range.getStartColumn() + range.getColumnRequirementNames().size())) {
continue;
}
return range;
}
return null;
}
public String getCalculationConfigurationName(int column) {
CalculationConfigurationRange range = getRange(column);
if (range == null) {
return null;
}
return range.getConfigName();
}
public String getRequirementName(int column) {
CalculationConfigurationRange range = getRange(column);
if (range == null) {
return null;
}
int index = column - range.getStartColumn();
return range.getColumnRequirementNames().get(index);
}
public int getColumnCount() {
return _columnCount;
}
private static class CalculationConfigurationRange {
private String _configName;
private int _startColumn;
private final List<String> _columnRequirementNames = new ArrayList<String>();
public String getConfigName() {
return _configName;
}
public void setConfigName(final String configName) {
_configName = configName;
}
public int getStartColumn() {
return _startColumn;
}
public void setStartColumn(final int startColumn) {
_startColumn = startColumn;
}
public List<String> getColumnRequirementNames() {
return _columnRequirementNames;
}
}
}