/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.function.rest; import java.net.URI; import java.util.Collection; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriBuilder; import org.fudgemsg.FudgeMsgEnvelope; import org.fudgemsg.MutableFudgeMsg; import org.fudgemsg.mapping.FudgeSerializer; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; import com.opengamma.engine.function.FunctionDefinition; import com.opengamma.engine.function.FunctionParameters; import com.opengamma.engine.function.FunctionRepository; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.fudgemsg.OpenGammaFudgeContext; import com.opengamma.util.rest.AbstractDataResource; /** * RESTful resource for the function repository intended for debugging. * <p> * This resource receives and processes RESTful calls to the source. */ @Path("functionRepository") public class DataFunctionRepositoryResource extends AbstractDataResource { /** * The repository. */ private final Supplier<FunctionRepository> _underlying; /** * Creates the resource, exposing the underlying repository over REST. * * @param functionRepo the underlying repository, not null */ public DataFunctionRepositoryResource(final FunctionRepository functionRepo) { ArgumentChecker.notNull(functionRepo, "functionRepo"); _underlying = Suppliers.ofInstance(functionRepo); } public DataFunctionRepositoryResource(final Supplier<FunctionRepository> functionRepo) { ArgumentChecker.notNull(functionRepo, "functionRepo"); _underlying = functionRepo; } //------------------------------------------------------------------------- /** * Gets the repository. * * @return the repository, not null */ public FunctionRepository getFunctionRepository() { return _underlying.get(); } //------------------------------------------------------------------------- @GET @Path("functionsByUniqueId") public Response getFunctionsByUniqueId() { final Collection<FunctionDefinition> allFunctions = getFunctionRepository().getAllFunctions(); final FudgeSerializer serializer = new FudgeSerializer(OpenGammaFudgeContext.getInstance()); final MutableFudgeMsg msg = serializer.newMessage(); for (FunctionDefinition function : allFunctions) { final MutableFudgeMsg submsg = serializer.newMessage(); submsg.add("shortName", function.getShortName()); serializer.addToMessageWithClassHeaders(submsg, "defaultParameters", null, function.getDefaultParameters(), FunctionParameters.class); msg.add(function.getUniqueId(), submsg); } return responseOk(new FudgeMsgEnvelope(msg)); } @GET @Path("functionsByShortName") public Response getFunctionsByShortName() { final Collection<FunctionDefinition> allFunctions = getFunctionRepository().getAllFunctions(); final FudgeSerializer serializer = new FudgeSerializer(OpenGammaFudgeContext.getInstance()); final MutableFudgeMsg msg = serializer.newMessage(); for (FunctionDefinition function : allFunctions) { final MutableFudgeMsg submsg = serializer.newMessage(); submsg.add("uniqueId", function.getUniqueId()); serializer.addToMessageWithClassHeaders(submsg, "defaultParameters", null, function.getDefaultParameters(), FunctionParameters.class); msg.add(function.getShortName(), submsg); } return responseOk(new FudgeMsgEnvelope(msg)); } //------------------------------------------------------------------------- /** * Builds a URI. * * @param baseUri the base URI, not null * @return the URI, not null */ public static URI uriGetFunctionsByUniqueId(URI baseUri) { UriBuilder bld = UriBuilder.fromUri(baseUri).path("/functionsByUniqueId"); return bld.build(); } /** * Builds a URI. * * @param baseUri the base URI, not null * @return the URI, not null */ public static URI uriGetFunctionsByShortName(URI baseUri) { UriBuilder bld = UriBuilder.fromUri(baseUri).path("/functionsByShortName"); return bld.build(); } }