Package com.opengamma.web.analytics.blotter

Source Code of com.opengamma.web.analytics.blotter.ExternalIdVisitor

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

import com.opengamma.financial.security.FinancialSecurityVisitorSameValueAdapter;
import com.opengamma.financial.security.cds.AbstractCreditDefaultSwapSecurity;
import com.opengamma.financial.security.cds.CreditDefaultSwapIndexSecurity;
import com.opengamma.financial.security.cds.LegacyFixedRecoveryCDSSecurity;
import com.opengamma.financial.security.cds.LegacyRecoveryLockCDSSecurity;
import com.opengamma.financial.security.cds.LegacyVanillaCDSSecurity;
import com.opengamma.financial.security.cds.StandardFixedRecoveryCDSSecurity;
import com.opengamma.financial.security.cds.StandardRecoveryLockCDSSecurity;
import com.opengamma.financial.security.cds.StandardVanillaCDSSecurity;
import com.opengamma.financial.security.swap.SwapSecurity;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ObjectId;
import com.opengamma.id.UniqueId;
import com.opengamma.master.security.SecurityDocument;
import com.opengamma.master.security.SecurityMaster;
import com.opengamma.util.ArgumentChecker;

/**
* Returns an {@link ExternalId} with the scheme {@link UniqueId#EXTERNAL_SCHEME} for on OTC security which can be
* used as the underlying ID in another security. Currently only supports {@link SwapSecurity}, returns null for all
* other security types. If the security doesn't have an existing ID then one is created from its unique ID. So
* this can only be used on a security which have been saved and has an ID.
* TODO this isn't nice as the security has to be saved twice, once to get the unique ID and once to add the external ID
* it would be better if SwaptionSecurity referred to its underlying with a SecurityLink. but it doesn't (yet?)
* TODO update this once Swaption has been updated to use a link to refer to its underlying
*/
/* package */ class ExternalIdVisitor extends FinancialSecurityVisitorSameValueAdapter<ExternalId> {

  private final SecurityMaster _securityMaster;

  /* package */  ExternalIdVisitor(SecurityMaster securityMaster) {
    super(null);
    ArgumentChecker.notNull(securityMaster, "securityMaster");
    _securityMaster = securityMaster;
  }

  @Override
  public ExternalId visitSwapSecurity(SwapSecurity security) {
    ExternalId id = security.getExternalIdBundle().getExternalId(UniqueId.EXTERNAL_SCHEME);
    if (id != null) {
      return id;
    }
    UniqueId uniqueId = security.getUniqueId();
    if (uniqueId == null) {
      throw new IllegalStateException("Security must have a unique ID");
    }
    ObjectId objectId = uniqueId.getObjectId();
    ExternalId externalId = ExternalId.of(ObjectId.EXTERNAL_SCHEME, objectId.toString());
    security.addExternalId(externalId);
    _securityMaster.update(new SecurityDocument(security));
    return externalId;
  }

  @Override
  public ExternalId visitCreditDefaultSwapIndexSecurity(CreditDefaultSwapIndexSecurity security) {
    return commonCDSSecurityExternalId(security);
  }

  @Override
  public ExternalId visitLegacyFixedRecoveryCDSSecurity(LegacyFixedRecoveryCDSSecurity security) {
    return commonCDSSecurityExternalId(security);
  }

  @Override
  public ExternalId visitLegacyRecoveryLockCDSSecurity(LegacyRecoveryLockCDSSecurity security) {
    return commonCDSSecurityExternalId(security);
  }

  @Override
  public ExternalId visitStandardFixedRecoveryCDSSecurity(StandardFixedRecoveryCDSSecurity security) {
    return commonCDSSecurityExternalId(security);
  }

  @Override
  public ExternalId visitStandardRecoveryLockCDSSecurity(StandardRecoveryLockCDSSecurity security) {
    return commonCDSSecurityExternalId(security);
  }

  @Override
  public ExternalId visitStandardVanillaCDSSecurity(StandardVanillaCDSSecurity security) {
    return commonCDSSecurityExternalId(security);
  }

  @Override
  public ExternalId visitLegacyVanillaCDSSecurity(LegacyVanillaCDSSecurity security) {
    return commonCDSSecurityExternalId(security);
  }

  private ExternalId commonCDSSecurityExternalId(AbstractCreditDefaultSwapSecurity security) {
    if (!security.getExternalIdBundle().isEmpty()) {
      return security.getExternalIdBundle().getExternalIds().iterator().next();
    }
    UniqueId uniqueId = security.getUniqueId();
    if (uniqueId == null) {
      throw new IllegalStateException("Security must have a unique ID");
    }
    ObjectId objectId = uniqueId.getObjectId();
    ExternalId externalId = ExternalId.of(ObjectId.EXTERNAL_SCHEME, objectId.toString());
    security.addExternalId(externalId);
    _securityMaster.update(new SecurityDocument(security));
    return externalId;
  }
}
TOP

Related Classes of com.opengamma.web.analytics.blotter.ExternalIdVisitor

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.