com.opengamma.web.analytics.formatting.LocalDateDoubleTimeSeriesFormatter.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.web.analytics.formatting.LocalDateDoubleTimeSeriesFormatter.java

Source

/**
 * 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;
    }
}