Package com.opengamma.engine.target.resolver

Source Code of com.opengamma.engine.target.resolver.PositionSourceResolver$PortfolioNodeResolver

/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.target.resolver;

import java.util.Collection;
import java.util.Collections;
import java.util.Map;

import com.opengamma.DataNotFoundException;
import com.opengamma.core.change.ChangeManager;
import com.opengamma.core.position.Portfolio;
import com.opengamma.core.position.PortfolioNode;
import com.opengamma.core.position.Position;
import com.opengamma.core.position.PositionSource;
import com.opengamma.core.position.Trade;
import com.opengamma.core.security.SecuritySource;
import com.opengamma.engine.target.logger.LoggedResolutionPortfolio;
import com.opengamma.engine.target.logger.LoggedResolutionPortfolioNode;
import com.opengamma.engine.target.logger.ResolutionLogger;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.ObjectId;
import com.opengamma.id.UniqueId;
import com.opengamma.id.UniqueIdentifiable;
import com.opengamma.id.VersionCorrection;
import com.opengamma.util.ArgumentChecker;

/**
* A {@link ObjectResolver} built on a {@link PositionSource}.
* <p>
* Note that these resolvers only access the position source for shallow resolution of trades and positions. More specialized forms will combine these instances with {@link SecuritySource} based
* resolvers to provide the deep-resolution required by a full system.
*/
public class PositionSourceResolver {

  private final PositionSource _underlying;

  private static class TradeResolver extends PositionSourceResolver implements Resolver<Trade> {

    public TradeResolver(final PositionSource underlying) {
      super(underlying);
    }

    // ObjectResolver

    @Override
    public Trade resolveObject(final UniqueId uniqueId, final VersionCorrection versionCorrection) {
      try {
        return getUnderlying().getTrade(uniqueId);
      } catch (DataNotFoundException e) {
        return null;
      }
    }

    @Override
    public DeepResolver deepResolver() {
      return null;
    }

    // IdentifierResolver

    @Override
    public UniqueId resolveExternalId(final ExternalIdBundle identifiers, final VersionCorrection versionCorrection) {
      return null;
    }

    @Override
    public Map<ExternalIdBundle, UniqueId> resolveExternalIds(final Collection<ExternalIdBundle> identifiers, final VersionCorrection versionCorrection) {
      return Collections.emptyMap();
    }

    @Override
    public UniqueId resolveObjectId(final ObjectId identifier, final VersionCorrection versionCorrection) {
      try {
        // [PLAT-4491] TODO: PositionSource doesn't have a trade by OID lookup. This is probably wrong, but no worse than treating the identifier as v/c resolved
        return getUnderlying().getTrade(identifier.atLatestVersion()).getUniqueId();
      } catch (DataNotFoundException e) {
        return null;
      }
    }

    @Override
    public Map<ObjectId, UniqueId> resolveObjectIds(final Collection<ObjectId> identifiers, final VersionCorrection versionCorrection) {
      return AbstractIdentifierResolver.resolveObjectIds(this, identifiers, versionCorrection);
    }

  }

  private static class PositionResolver extends PositionSourceResolver implements Resolver<Position> {

    public PositionResolver(final PositionSource underlying) {
      super(underlying);
    }

    // ObjectResolver

    @Override
    public Position resolveObject(final UniqueId uniqueId, final VersionCorrection versionCorrection) {
      try {
        return getUnderlying().getPosition(uniqueId);
      } catch (DataNotFoundException e) {
        return null;
      }
    }

    @Override
    public DeepResolver deepResolver() {
      return null;
    }

    // IdentifierResolver

    @Override
    public UniqueId resolveExternalId(final ExternalIdBundle identifiers, final VersionCorrection versionCorrection) {
      return null;
    }

    @Override
    public Map<ExternalIdBundle, UniqueId> resolveExternalIds(final Collection<ExternalIdBundle> identifiers, final VersionCorrection versionCorrection) {
      return Collections.emptyMap();
    }

    @Override
    public UniqueId resolveObjectId(final ObjectId identifier, final VersionCorrection versionCorrection) {
      try {
        return getUnderlying().getPosition(identifier, versionCorrection).getUniqueId();
      } catch (DataNotFoundException e) {
        return null;
      }
    }

    @Override
    public Map<ObjectId, UniqueId> resolveObjectIds(final Collection<ObjectId> identifiers, final VersionCorrection versionCorrection) {
      return AbstractIdentifierResolver.resolveObjectIds(this, identifiers, versionCorrection);
    }

  }

  private static class PortfolioResolver extends PositionSourceResolver implements Resolver<Portfolio>, DeepResolver {

    public PortfolioResolver(final PositionSource underlying) {
      super(underlying);
    }

    // ObjectResolver

    @Override
    public Portfolio resolveObject(final UniqueId uniqueId, final VersionCorrection versionCorrection) {
      try {
        return getUnderlying().getPortfolio(uniqueId, versionCorrection);
      } catch (DataNotFoundException e) {
        return null;
      }
    }

    @Override
    public DeepResolver deepResolver() {
      return this;
    }

    // IdentifierResolver

    @Override
    public UniqueId resolveExternalId(final ExternalIdBundle identifiers, final VersionCorrection versionCorrection) {
      return null;
    }

    @Override
    public Map<ExternalIdBundle, UniqueId> resolveExternalIds(final Collection<ExternalIdBundle> identifiers, final VersionCorrection versionCorrection) {
      return Collections.emptyMap();
    }

    @Override
    public UniqueId resolveObjectId(final ObjectId identifier, final VersionCorrection versionCorrection) {
      try {
        return getUnderlying().getPortfolio(identifier, versionCorrection).getUniqueId();
      } catch (DataNotFoundException e) {
        return null;
      }
    }

    @Override
    public Map<ObjectId, UniqueId> resolveObjectIds(final Collection<ObjectId> identifiers, final VersionCorrection versionCorrection) {
      return AbstractIdentifierResolver.resolveObjectIds(this, identifiers, versionCorrection);
    }

    // DeepResolver

    @Override
    public UniqueIdentifiable withLogger(final UniqueIdentifiable resolved, final ResolutionLogger logger) {
      if (resolved instanceof Portfolio) {
        return new LoggedResolutionPortfolio((Portfolio) resolved, logger);
      } else {
        return null;
      }
    }

  }

  private static class PortfolioNodeResolver extends PositionSourceResolver implements Resolver<PortfolioNode>, DeepResolver {

    public PortfolioNodeResolver(final PositionSource underlying) {
      super(underlying);
    }

    // ObjectResolver

    @Override
    public PortfolioNode resolveObject(final UniqueId uniqueId, final VersionCorrection versionCorrection) {
      try {
        return getUnderlying().getPortfolioNode(uniqueId, versionCorrection);
      } catch (DataNotFoundException e) {
        return null;
      }
    }

    @Override
    public DeepResolver deepResolver() {
      return this;
    }

    // DeepResolver

    @Override
    public UniqueIdentifiable withLogger(final UniqueIdentifiable resolved, final ResolutionLogger logger) {
      if (resolved instanceof PortfolioNode) {
        return new LoggedResolutionPortfolioNode((PortfolioNode) resolved, logger);
      } else {
        return null;
      }
    }

    // IdentifierResolver

    @Override
    public UniqueId resolveExternalId(final ExternalIdBundle identifiers, final VersionCorrection versionCorrection) {
      return null;
    }

    @Override
    public Map<ExternalIdBundle, UniqueId> resolveExternalIds(final Collection<ExternalIdBundle> identifiers, final VersionCorrection versionCorrection) {
      return Collections.emptyMap();
    }

    @Override
    public UniqueId resolveObjectId(final ObjectId identifier, final VersionCorrection versionCorrection) {
      try {
        // [PLAT-4491] TODO: PositionSource doesn't have a node by OID lookup. This is probably wrong, but no worse than treating the identifier as v/c resolved
        return getUnderlying().getPortfolioNode(identifier.atLatestVersion(), versionCorrection).getUniqueId();
      } catch (DataNotFoundException e) {
        return null;
      }
    }

    @Override
    public Map<ObjectId, UniqueId> resolveObjectIds(final Collection<ObjectId> identifiers, final VersionCorrection versionCorrection) {
      return AbstractIdentifierResolver.resolveObjectIds(this, identifiers, versionCorrection);
    }

  }

  public PositionSourceResolver(final PositionSource underlying) {
    ArgumentChecker.notNull(underlying, "underlying");
    _underlying = underlying;
  }

  protected PositionSource getUnderlying() {
    return _underlying;
  }

  public Resolver<Trade> trade() {
    return new TradeResolver(getUnderlying());
  }

  public Resolver<Position> position() {
    return new PositionResolver(getUnderlying());
  }

  public Resolver<PortfolioNode> portfolioNode() {
    return new PortfolioNodeResolver(getUnderlying());
  }

  public Resolver<Portfolio> portfolio() {
    return new PortfolioResolver(getUnderlying());
  }

  public ChangeManager changeManager() {
    return getUnderlying().changeManager();
  }

}
TOP

Related Classes of com.opengamma.engine.target.resolver.PositionSourceResolver$PortfolioNodeResolver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.