/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.web.analytics.formatting; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.opengamma.engine.value.ValueProperties; import com.opengamma.engine.value.ValueSpecification; /** * Formats {@link ValueProperties} as a grid with 3 columns: Property name, property values (comma separated) and * whether the property is optional. */ /* package */ class ValuePropertiesFormatter extends AbstractFormatter<ValueProperties> { /* package */ ValuePropertiesFormatter() { super(ValueProperties.class); addFormatter(new Formatter<ValueProperties>(Format.EXPANDED) { @Override Map<String, Object> format(ValueProperties properties, ValueSpecification valueSpec, Object inlineKey) { Set<String> names = properties.getProperties(); List<List<String>> matrix = Lists.newArrayListWithCapacity(names.size()); List<String> yLabels = Lists.newArrayListWithCapacity(names.size()); for (String name : names) { Set<String> values = properties.getValues(name); boolean optional = properties.isOptional(name); List<String> row = Lists.newArrayListWithCapacity(2); row.add(StringUtils.join(values, ", ")); row.add(optional ? "true" : "false"); matrix.add(row); yLabels.add(name); } Map<String, Object> output = Maps.newHashMap(); output.put(LabelledMatrix2DFormatter.MATRIX, matrix); // TODO it would be good if the UI could handle a label for the first column: "Property" output.put(LabelledMatrix2DFormatter.X_LABELS, Lists.newArrayList("Property", "Value", "Optional")); output.put(LabelledMatrix2DFormatter.Y_LABELS, yLabels); return output; } }); } @Override public Object formatCell(ValueProperties properties, ValueSpecification valueSpec, Object inlineKey) { return "Value Properties (" + properties.getProperties().size() + ")"; } @Override public DataType getDataType() { return DataType.LABELLED_MATRIX_2D; } }