/** * Copyright (C) 2012 - 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 org.threeten.bp.LocalDate; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.opengamma.engine.value.ValueSpecification; import com.opengamma.timeseries.date.localdate.LocalDateDoubleEntryIterator; import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries; /** * */ /* package */ class LocalDateDoubleTimeSeriesFormatter extends AbstractFormatter<LocalDateDoubleTimeSeries> { /** The number of milliseconds per day. */ private static final long MILLIS_PER_DAY = 86400L * 1000; /* package */ LocalDateDoubleTimeSeriesFormatter() { super(LocalDateDoubleTimeSeries.class); addFormatter(new Formatter<LocalDateDoubleTimeSeries>(Format.EXPANDED) { @Override Object format(LocalDateDoubleTimeSeries value, ValueSpecification valueSpec, Object inlineKey) { return formatExpanded(value); } }); } @Override public String formatCell(LocalDateDoubleTimeSeries timeSeries, ValueSpecification valueSpec, Object inlineKey) { String text = "Time-series "; text += timeSeries.isEmpty() ? "(empty)" : "(" + timeSeries.getEarliestTime() + " to " + timeSeries.getLatestTime() + ")"; return text; } public Map<String, Object> formatExpanded(LocalDateDoubleTimeSeries value) { List<Object[]> data = Lists.newArrayListWithCapacity(value.size()); for (LocalDateDoubleEntryIterator it = value.iterator(); it.hasNext(); ) { LocalDate date = it.nextTime(); long epochMillis = date.toEpochDay() * MILLIS_PER_DAY; data.add(new Object[]{epochMillis, it.currentValue()}); } Map<String, String> templateData = ImmutableMap.of("data_field", "Historical Time Series", "observation_time", "Historical Time Series"); Map<String, Object> timeSeries = ImmutableMap.of("fieldLabels", new String[]{"Time", "Value"}, "data", data); return ImmutableMap.<String, Object>of("template_data", templateData, "timeseries", timeSeries); } @Override public DataType getDataType() { return DataType.TIME_SERIES; } }