/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.ircurve.rest;
import java.net.URI;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
import org.threeten.bp.LocalDate;
import com.opengamma.financial.analytics.ircurve.InterpolatedYieldCurveSpecification;
import com.opengamma.financial.analytics.ircurve.InterpolatedYieldCurveSpecificationBuilder;
import com.opengamma.financial.analytics.ircurve.YieldCurveDefinition;
import com.opengamma.id.VersionCorrection;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.rest.AbstractDataResource;
/**
* RESTful resource for the yield curve source.
* <p>
* This resource receives and processes RESTful calls to the source.
*/
@Path("yieldCurveSpecificationBuilder")
public class DataInterpolatedYieldCurveSpecificationBuilderResource extends AbstractDataResource {
/**
* The builder.
*/
private final InterpolatedYieldCurveSpecificationBuilder _builder;
/**
* Creates the resource, exposing the underlying source over REST.
*
* @param builder the underlying source, not null
*/
public DataInterpolatedYieldCurveSpecificationBuilderResource(final InterpolatedYieldCurveSpecificationBuilder builder) {
ArgumentChecker.notNull(builder, "builder");
_builder = builder;
}
//-------------------------------------------------------------------------
/**
* Gets the builder.
*
* @return the builder, not null
*/
public InterpolatedYieldCurveSpecificationBuilder getInterpolatedYieldCurveSpecificationBuilder() {
return _builder;
}
//-------------------------------------------------------------------------
@GET
public Response getHateaos(@Context UriInfo uriInfo) {
return hateoasResponse(uriInfo);
}
@POST
@Path("builder/{date}/{version}")
public Response buildCurve(@PathParam("date") String curveDateStr, @PathParam("version") String versionStr, YieldCurveDefinition definition) {
final LocalDate curveDate = LocalDate.parse(curveDateStr);
final VersionCorrection version = VersionCorrection.parse(versionStr);
InterpolatedYieldCurveSpecification result = getInterpolatedYieldCurveSpecificationBuilder().buildCurve(curveDate, definition, version);
return responseOkObject(result);
}
/**
* Builds a URI.
*
* @param baseUri the base URI, not null
* @param curveDate the curve date, not null
* @param version the configuration version, not null
* @return the URI, not null
*/
public static URI uriBuildCurve(URI baseUri, LocalDate curveDate, VersionCorrection version) {
UriBuilder bld = UriBuilder.fromUri(baseUri).path("/builder/{date}/{version}");
return bld.build(curveDate, version);
}
}