/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.user.rest; import java.net.URI; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.core.UriBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.opengamma.financial.analytics.ircurve.rest.DataInterpolatedYieldCurveDefinitionMasterResource; import com.opengamma.financial.user.FinancialClient; import com.opengamma.master.config.impl.DataConfigMasterResource; import com.opengamma.master.marketdatasnapshot.impl.DataMarketDataSnapshotMasterResource; import com.opengamma.master.portfolio.impl.DataPortfolioMasterResource; import com.opengamma.master.position.impl.DataPositionMasterResource; import com.opengamma.master.security.impl.DataSecurityMasterResource; import com.opengamma.util.rest.AbstractDataResource; /** * RESTful resource for a single client of a single user. * <p> * This resource receives and processes RESTful calls. */ public class DataFinancialClientResource extends AbstractDataResource { /** Logger. */ private static final Logger s_logger = LoggerFactory.getLogger(DataFinancialClientResource.class); /** * The path used to retrieve user portfolios. */ public static final String PORTFOLIO_MASTER_PATH = "portfolioMaster"; /** * The path used to retrieve user positions. */ public static final String POSITION_MASTER_PATH = "positionMaster"; /** * The path used to retrieve user securities. */ public static final String SECURITY_MASTER_PATH = "securityMaster"; /** * The path used to retrieve user configurations. */ public static final String CONFIG_MASTER_PATH = "configMaster"; /** * The path used to retrieve yield curve definitions. */ public static final String INTERPOLATED_YIELD_CURVE_DEFINITION_MASTER_PATH = "interpolatedYieldCurveDefinitionMaster"; /** * The path used to retrieve user snapshots. */ public static final String MARKET_DATA_SNAPSHOT_MASTER_PATH = "snapshotMaster"; /** * The path used to signal a heartbeat if no actual transactions are being done. */ public static final String HEARTBEAT_PATH = "heartbeat"; /** * The client. */ private final FinancialClient _client; /** * Creates an instance. * * @param client the client, not null */ public DataFinancialClientResource(FinancialClient client) { _client = client; } //------------------------------------------------------------------------- /** * Gets the client. * * @return the client, not null */ public FinancialClient getClient() { return _client; } //------------------------------------------------------------------------- @Path(SECURITY_MASTER_PATH) public DataSecurityMasterResource getSecurityMaster() { s_logger.debug("Accessed UserSecurityMaster for {}", getClient()); return new DataSecurityMasterResource(getClient().getSecurityMaster()); } @Path(POSITION_MASTER_PATH) public DataPositionMasterResource getPositionMaster() { s_logger.debug("Accessed UserPositionMaster for {}", getClient()); return new DataPositionMasterResource(getClient().getPositionMaster()); } @Path(PORTFOLIO_MASTER_PATH) public DataPortfolioMasterResource getPortfolioMaster() { s_logger.debug("Accessed UserPortfolioMaster for {}", getClient()); return new DataPortfolioMasterResource(getClient().getPortfolioMaster()); } @Path(CONFIG_MASTER_PATH) public DataConfigMasterResource getConfigMaster() { s_logger.debug("Accessed UserViewDefinitionMaster for {}", getClient()); return new DataConfigMasterResource(getClient().getConfigMaster()); } @Path(INTERPOLATED_YIELD_CURVE_DEFINITION_MASTER_PATH) public DataInterpolatedYieldCurveDefinitionMasterResource getInterpolatedYieldCurveDefinitionMaster() { s_logger.debug("Accessed UserYieldCurveMaster for {}", getClient()); return new DataInterpolatedYieldCurveDefinitionMasterResource(getClient().getInterpolatedYieldCurveDefinitionMaster()); } @Path(MARKET_DATA_SNAPSHOT_MASTER_PATH) public DataMarketDataSnapshotMasterResource getSnapshotMaster() { s_logger.debug("Accessed UserSnapshotMaster for {}", getClient()); return new DataMarketDataSnapshotMasterResource(getClient().getSnapshotMaster()); } //------------------------------------------------------------------------- @POST @Path(HEARTBEAT_PATH) public void heartbeat() { s_logger.debug("Heartbeat received from {}", getClient()); getClient().updateLastAccessed(); } //------------------------------------------------------------------------- /** * Builds a URI. * * @param baseUri the base URI, not null * @param userName the user name, not null * @param clientName the client name, not null * @return the URI, not null */ public static URI uriSecurityMaster(URI baseUri, String userName, String clientName) { UriBuilder bld = UriBuilder.fromUri(DataFinancialClientManagerResource.uriClient(baseUri, userName, clientName)).path(SECURITY_MASTER_PATH); return bld.build(); } /** * Builds a URI. * * @param baseUri the base URI, not null * @param userName the user name, not null * @param clientName the client name, not null * @return the URI, not null */ public static URI uriPositionMaster(URI baseUri, String userName, String clientName) { UriBuilder bld = UriBuilder.fromUri(DataFinancialClientManagerResource.uriClient(baseUri, userName, clientName)).path(POSITION_MASTER_PATH); return bld.build(); } /** * Builds a URI. * * @param baseUri the base URI, not null * @param userName the user name, not null * @param clientName the client name, not null * @return the URI, not null */ public static URI uriPortfolioMaster(URI baseUri, String userName, String clientName) { UriBuilder bld = UriBuilder.fromUri(DataFinancialClientManagerResource.uriClient(baseUri, userName, clientName)).path(PORTFOLIO_MASTER_PATH); return bld.build(); } /** * Builds a URI. * * @param baseUri the base URI, not null * @param userName the user name, not null * @param clientName the client name, not null * @return the URI, not null */ public static URI uriConfigMaster(URI baseUri, String userName, String clientName) { UriBuilder bld = UriBuilder.fromUri(DataFinancialClientManagerResource.uriClient(baseUri, userName, clientName)).path(CONFIG_MASTER_PATH); return bld.build(); } /** * Builds a URI. * * @param baseUri the base URI, not null * @param userName the user name, not null * @param clientName the client name, not null * @return the URI, not null */ public static URI uriInterpolatedYieldCurveDefinitionMaster(URI baseUri, String userName, String clientName) { UriBuilder bld = UriBuilder.fromUri(DataFinancialClientManagerResource.uriClient(baseUri, userName, clientName)).path(INTERPOLATED_YIELD_CURVE_DEFINITION_MASTER_PATH); return bld.build(); } /** * Builds a URI. * * @param baseUri the base URI, not null * @param userName the user name, not null * @param clientName the client name, not null * @return the URI, not null */ public static URI uriSnapshotMaster(URI baseUri, String userName, String clientName) { UriBuilder bld = UriBuilder.fromUri(DataFinancialClientManagerResource.uriClient(baseUri, userName, clientName)).path(MARKET_DATA_SNAPSHOT_MASTER_PATH); return bld.build(); } /** * Builds a URI. * * @param baseUri the base URI, not null * @param userName the user name, not null * @param clientName the client name, not null * @return the URI, not null */ public static URI uriHeartbeat(URI baseUri, String userName, String clientName) { UriBuilder bld = UriBuilder.fromUri(DataFinancialClientManagerResource.uriClient(baseUri, userName, clientName)).path(HEARTBEAT_PATH); return bld.build(); } }