/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.view.rest; import java.net.URI; import java.util.Map; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriBuilder; import com.opengamma.core.marketdatasnapshot.StructuredMarketDataSnapshot; import com.opengamma.core.marketdatasnapshot.YieldCurveKey; import com.opengamma.engine.marketdata.snapshot.MarketDataSnapshotter; import com.opengamma.engine.resource.EngineResourceReference; import com.opengamma.engine.value.ValueRequirement; import com.opengamma.engine.view.ViewProcessor; import com.opengamma.engine.view.client.ViewClient; import com.opengamma.engine.view.cycle.ViewCycle; import com.opengamma.id.UniqueId; import com.opengamma.util.rest.AbstractDataResource; /** * RESTful resource for a {@link MarketDataSnapshotter}. */ public class DataMarketDataSnapshotterResource extends AbstractDataResource { //CSOFF: just constants public static final String PATH_CREATE_SNAPSHOT = "create"; public static final String PATH_YIELD_CURVE_SPECS = "yieldCurveSpecs"; //CSON: just constants private final ViewProcessor _viewProcessor; private final MarketDataSnapshotter _snapshotter; public DataMarketDataSnapshotterResource(ViewProcessor viewProcessor, MarketDataSnapshotter snapshotter) { _viewProcessor = viewProcessor; _snapshotter = snapshotter; } //------------------------------------------------------------------------- @GET @Path(PATH_CREATE_SNAPSHOT + "/{viewClientId}" + "/{viewCycleId}") public Response createSnapshot(@PathParam("viewClientId") String viewClientIdString, @PathParam("viewCycleId") String viewCycleIdString) { UniqueId viewClientId = UniqueId.parse(viewClientIdString); UniqueId viewCycleId = UniqueId.parse(viewCycleIdString); ViewClient client = _viewProcessor.getViewClient(viewClientId); EngineResourceReference<? extends ViewCycle> cycleReference = client.createCycleReference(viewCycleId); if (cycleReference == null) { throw new IllegalArgumentException("Cycle is not available"); } try { StructuredMarketDataSnapshot result = _snapshotter.createSnapshot(client, cycleReference.get()); return responseOkObject(result); } finally { cycleReference.release(); } } @GET @Path(PATH_YIELD_CURVE_SPECS + "/{viewClientId}" + "/{viewCycleId}") public Response getYieldCurveSpecs(@PathParam("viewClientId") String viewClientIdString, @PathParam("viewCycleId") String viewCycleIdString) { UniqueId viewClientId = UniqueId.parse(viewClientIdString); UniqueId viewCycleId = UniqueId.parse(viewCycleIdString); ViewClient client = _viewProcessor.getViewClient(viewClientId); EngineResourceReference<? extends ViewCycle> cycleReference = client.createCycleReference(viewCycleId); if (cycleReference == null) { throw new IllegalArgumentException("Cycle is not available"); } try { Map<YieldCurveKey, Map<String, ValueRequirement>> result = _snapshotter.getYieldCurveSpecifications(client, cycleReference.get()); return responseOkObject(result); } finally { cycleReference.release(); } } @GET public Response get() { return responseOk("Snapshotter"); } /** * Builds a URI. * * @param baseUri the base URI, not null * @return the URI, not null */ public static URI uriCreateSnapshot(URI baseUri, UniqueId viewClientId, UniqueId viewCycleId) { UriBuilder bld = UriBuilder.fromUri(baseUri).path(PATH_CREATE_SNAPSHOT + "/" + viewClientId + "/" + viewCycleId); return bld.build(); } /** * Builds a URI. * * @param baseUri the base URI, not null * @return the URI, not null */ public static URI uriGetYieldCurveSpecs(URI baseUri, UniqueId viewClientId, UniqueId viewCycleId) { UriBuilder bld = UriBuilder.fromUri(baseUri).path(PATH_YIELD_CURVE_SPECS + "/" + viewClientId + "/" + viewCycleId); return bld.build(); } }