/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.analytics;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.opengamma.engine.value.ValueRequirementNames;
import com.opengamma.financial.analytics.LocalDateLabelledMatrix1D;
import com.opengamma.financial.analytics.TenorLabelledLocalDateDoubleTimeSeriesMatrix1D;
import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries;
/**
* TODO make this non-static
*/
/* package */ class Inliner {
// TODO this is crude and temporary
private static final Set<String> LOCAL_DATE_LABELLED_MATRIX_1D_VALUE_NAMES = ImmutableSet.of(
ValueRequirementNames.BUCKETED_CS01,
ValueRequirementNames.BUCKETED_GAMMA_CS01,
ValueRequirementNames.BUCKETED_IR01);
private static final Set<String> TENOR_LABELLED_TIME_SERIES_MATRIX_1D_VALUE_NAMES = ImmutableSet.of(
ValueRequirementNames.YIELD_CURVE_PNL_SERIES,
ValueRequirementNames.CURVE_PNL_SERIES,
ValueRequirementNames.YIELD_CURVE_RETURN_SERIES);
public static boolean isDisplayableInline(Class<?> type, ColumnSpecification spec) {
return type != null &&
((LocalDateLabelledMatrix1D.class.isAssignableFrom(type) &&
LOCAL_DATE_LABELLED_MATRIX_1D_VALUE_NAMES.contains(spec.getValueName())) ||
(TenorLabelledLocalDateDoubleTimeSeriesMatrix1D.class.isAssignableFrom(type) &&
TENOR_LABELLED_TIME_SERIES_MATRIX_1D_VALUE_NAMES.contains(spec.getValueName())));
}
public static List<ColumnMeta> columnMeta(Object value) {
if (value instanceof LocalDateLabelledMatrix1D) {
LocalDateLabelledMatrix1D matrix = (LocalDateLabelledMatrix1D) value;
return getLocalDateDoubleLabelledMatrix1DColumnMeta(matrix);
}
if (value instanceof TenorLabelledLocalDateDoubleTimeSeriesMatrix1D) {
TenorLabelledLocalDateDoubleTimeSeriesMatrix1D matrix = (TenorLabelledLocalDateDoubleTimeSeriesMatrix1D) value;
return getTenorLabelledLocalDateDoubleTimeSeriesMatrix1DColumnMeta(matrix);
}
return Collections.emptyList();
}
private static List<ColumnMeta> getLocalDateDoubleLabelledMatrix1DColumnMeta(LocalDateLabelledMatrix1D matrix) {
List<ColumnMeta> meta = Lists.newArrayListWithCapacity(matrix.size());
meta.add(new ColumnMeta(matrix.getKeys()[0], matrix.getKeys()[0].toString(), Double.class, LocalDateLabelledMatrix1D.class));
for (int i = 1; i < matrix.size(); i++) {
meta.add(new ColumnMeta(matrix.getKeys()[i], matrix.getKeys()[i].toString(), Double.class, null));
}
return meta;
}
private static List<ColumnMeta> getTenorLabelledLocalDateDoubleTimeSeriesMatrix1DColumnMeta(TenorLabelledLocalDateDoubleTimeSeriesMatrix1D matrix) {
List<ColumnMeta> meta = Lists.newArrayListWithCapacity(matrix.size());
meta.add(new ColumnMeta(matrix.getKeys()[0], matrix.getKeys()[0].toString(), LocalDateDoubleTimeSeries.class, TenorLabelledLocalDateDoubleTimeSeriesMatrix1D.class));
for (int i = 1; i < matrix.size(); i++) {
meta.add(new ColumnMeta(matrix.getKeys()[i], matrix.getKeys()[i].toString(), LocalDateDoubleTimeSeries.class, null));
}
return meta;
}
}
//-------------------------------------------------------------------------
/* package */ class ColumnMeta implements Comparable<ColumnMeta> {
private final Comparable<Object> _key;
private final String _header;
private final Class<?> _type;
private final Class<?> _underlyingType;
@SuppressWarnings("unchecked")
/* package */ <T> ColumnMeta(Comparable<? super T> key, String header, Class<?> type, Class<?> underlyingType) {
_key = (Comparable<Object>) key;
_header = header;
_type = type;
_underlyingType = underlyingType;
}
//-------------------------------------------------------------------------
/* package */ Comparable<Object> getKey() {
return _key;
}
/* package */ String getHeader() {
return _header;
}
/* package */ Class<?> getType() {
return _type;
}
/* package */ Class<?> getUnderlyingType() {
return _underlyingType;
}
//-------------------------------------------------------------------------
@Override
public int compareTo(ColumnMeta meta) {
if (!meta._key.getClass().equals(_key.getClass())) {
return 0;
} else {
return _key.compareTo(meta._key);
}
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ColumnMeta that = (ColumnMeta) o;
if (!_key.equals(that._key)) {
return false;
}
return true;
}
@Override
public int hashCode() {
return _key.hashCode();
}
}