Package com.opengamma.master.historicaltimeseries.impl

Source Code of com.opengamma.master.historicaltimeseries.impl.DataHistoricalTimeSeriesResolverResource$Resolve

/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.master.historicaltimeseries.impl;

import java.util.List;
import java.util.Map;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;

import org.fudgemsg.FudgeContext;
import org.fudgemsg.MutableFudgeMsg;
import org.fudgemsg.mapping.FudgeSerializer;
import org.threeten.bp.LocalDate;

import com.google.common.collect.MapMaker;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesResolutionResult;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesResolver;
import com.opengamma.master.historicaltimeseries.ManageableHistoricalTimeSeriesInfo;
import com.opengamma.util.rest.AbstractDataResource;

/**
* RESTful resource for accessing a historical time-series resolver.
*/
public class DataHistoricalTimeSeriesResolverResource extends AbstractDataResource {

  private final HistoricalTimeSeriesResolver _underlying;
  private final FudgeContext _fudgeContext;
  private final Map<Resolve, HistoricalTimeSeriesResolutionResult> _cache = new MapMaker().weakValues().makeMap();

  public DataHistoricalTimeSeriesResolverResource(final HistoricalTimeSeriesResolver underlying, final FudgeContext fudgeContext) {
    _underlying = underlying;
    _fudgeContext = fudgeContext;
  }

  protected HistoricalTimeSeriesResolver getUnderlying() {
    return _underlying;
  }

  protected FudgeContext getFudgeContext() {
    return _fudgeContext;
  }

  /**
   * URL construction state.
   */
  public final class Resolve {

    private final ExternalIdBundle _identifierBundle;
    private final LocalDate _identifierValidityDate;
    private final String _dataSource;
    private final String _dataProvider;
    private final String _dataField;
    private final String _resolutionKey;

    private Resolve(final ExternalIdBundle identifierBundle, final LocalDate identifierValidityDate, final String dataSource, final String dataProvider, final String dataField,
        final String resolutionKey) {
      _identifierBundle = identifierBundle;
      _identifierValidityDate = identifierValidityDate;
      _dataSource = dataSource;
      _dataProvider = dataProvider;
      _dataField = dataField;
      _resolutionKey = resolutionKey;
    }

    @Path("id/{id}")
    public Resolve id(@PathParam("id") final String id) {
      if (_identifierBundle == null) {
        return new Resolve(ExternalIdBundle.of(ExternalId.parse(id)), _identifierValidityDate, _dataSource, _dataProvider, _dataField, _resolutionKey);
      } else {
        return new Resolve(_identifierBundle.withExternalId(ExternalId.parse(id)), _identifierValidityDate, _dataSource, _dataProvider, _dataField, _resolutionKey);
      }
    }

    @Path("identifierValidityDate/{date}")
    public Resolve identifierValidityDate(@PathParam("date") final String date) {
      return new Resolve(_identifierBundle, LocalDate.parse(date), _dataSource, _dataProvider, _dataField, _resolutionKey);
    }

    @Path("dataSource/{source}")
    public Resolve dataSource(@PathParam("source") final String source) {
      return new Resolve(_identifierBundle, _identifierValidityDate, source, _dataProvider, _dataField, _resolutionKey);
    }

    @Path("dataProvider/{provider}")
    public Resolve dataProvider(@PathParam("provider") final String provider) {
      return new Resolve(_identifierBundle, _identifierValidityDate, _dataSource, provider, _dataField, _resolutionKey);
    }

    @Path("dataField/{field}")
    public Resolve dataField(@PathParam("field") final String field) {
      return new Resolve(_identifierBundle, _identifierValidityDate, _dataSource, _dataProvider, field, _resolutionKey);
    }

    @Path("resolutionKey/{key}")
    public Resolve resolutionKey(@PathParam("key") final String key) {
      return new Resolve(_identifierBundle, _identifierValidityDate, _dataSource, _dataProvider, _dataField, key);
    }

    private HistoricalTimeSeriesResolutionResult resolve() {
      HistoricalTimeSeriesResolutionResult hts = _cache.get(this);
      if (hts == null) {
        hts = getUnderlying().resolve(_identifierBundle, _identifierValidityDate, _dataSource, _dataProvider, _dataField, _resolutionKey);
        if (hts == null) {
          return null;
        }
        _cache.put(this, hts);
      }
      return hts;
    }

    @GET
    public Response get() {
      final HistoricalTimeSeriesResolutionResult hts = resolve();
      if (hts == null) {
        throw new WebApplicationException(Response.Status.NOT_FOUND);
      }
      final FudgeSerializer fsc = new FudgeSerializer(getFudgeContext());
      final MutableFudgeMsg response = fsc.newMessage();
      fsc.addToMessageWithClassHeaders(response, "info", null, hts.getHistoricalTimeSeriesInfo(), ManageableHistoricalTimeSeriesInfo.class);
      if (hts.getAdjuster() != null) {
        response.add("adjustment", hts.getAdjuster().getAdjustment(_identifierBundle).toString());
      }
      return responseOk(response);
    }
   
    @GET
    @Path("adjustment")
    public Response adjustment(@QueryParam("id") List<String> idStrs) {
      final HistoricalTimeSeriesResolutionResult hts = resolve();
      if (hts == null) {
        throw new WebApplicationException(Response.Status.NOT_FOUND);
      }
      final ExternalIdBundle bundle = ExternalIdBundle.parse(idStrs);
      final MutableFudgeMsg response = getFudgeContext().newMessage();
      response.add("adjustment", hts.getAdjuster().getAdjustment(bundle).toString());
      return responseOk(response);
    }

  }

  @Path("resolve")
  public Resolve resolve() {
    return new Resolve(null, null, null, null, null, null);
  }
 
}
TOP

Related Classes of com.opengamma.master.historicaltimeseries.impl.DataHistoricalTimeSeriesResolverResource$Resolve

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.