/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.calcnode.stats; import java.net.URI; import javax.ws.rs.GET; import javax.ws.rs.HEAD; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; 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.Instant; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.rest.AbstractDataResource; /** * RESTful resource for function costs. * <p> * This resource receives and processes RESTful calls to the function costs master. */ @Path("/fncMaster") public class DataFunctionCostsMasterResource extends AbstractDataResource { /** * The function costs master. */ private final FunctionCostsMaster _functionCostsMaster; /** * Creates the resource, exposing the underlying master over REST. * * @param functionCostsMaster the underlying master, not null */ public DataFunctionCostsMasterResource(final FunctionCostsMaster functionCostsMaster) { ArgumentChecker.notNull(functionCostsMaster, "functionCostsMaster"); _functionCostsMaster = functionCostsMaster; } //------------------------------------------------------------------------- /** * Gets the master. * * @return the master, not null */ public FunctionCostsMaster getFunctionCostsMaster() { return _functionCostsMaster; } //------------------------------------------------------------------------- @GET public Response getHateaos(@Context UriInfo uriInfo) { return hateoasResponse(uriInfo); } @HEAD @Path("functioncosts") public Response status() { // simple GET to quickly return as a ping return responseOk(); } @GET @Path("functioncosts") public Response search(@QueryParam("configurationName") String configurationName, @QueryParam("functionId") String functionId, @QueryParam("versionAsOf") String versionAsOfStr) { Instant versionAsOf = (versionAsOfStr != null ? Instant.parse(versionAsOfStr) : null); FunctionCostsDocument result = getFunctionCostsMaster().load(configurationName, functionId, versionAsOf); return responseOkObject(result); } @POST @Path("functioncosts") public Response store(@Context UriInfo uriInfo, FunctionCostsDocument request) { FunctionCostsDocument result = getFunctionCostsMaster().store(request); return responseOkObject(result); } //------------------------------------------------------------------------- /** * Builds a URI for the load. * * @param baseUri the base URI, not null * @param configurationName the configuration key, not null * @param functionId the function id, not null * @param versionAsOf the optional instant to retrieve data as of, null means latest * @return the URI, not null */ public static URI uriLoad(URI baseUri, String configurationName, String functionId, Instant versionAsOf) { UriBuilder bld = UriBuilder.fromUri(baseUri).path("/functioncosts"); if (configurationName != null) { bld.queryParam("configurationName", configurationName); } if (functionId != null) { bld.queryParam("functionId", functionId); } if (versionAsOf != null) { bld.queryParam("versionAsOf", versionAsOf.toString()); } return bld.build(); } /** * Builds a URI for the store. * * @param baseUri the base URI, not null * @return the URI, not null */ public static URI uriStore(URI baseUri) { UriBuilder bld = UriBuilder.fromUri(baseUri).path("/functioncosts"); return bld.build(); } }