Package com.opengamma.financial.aggregation

Source Code of com.opengamma.financial.aggregation.StrikeAggregationFunction

/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.aggregation;

import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;

import com.opengamma.core.position.Position;
import com.opengamma.core.position.impl.SimplePositionComparator;
import com.opengamma.core.security.SecuritySource;
import com.opengamma.financial.security.FinancialSecurity;
import com.opengamma.financial.security.FinancialSecurityVisitor;
import com.opengamma.financial.security.FinancialSecurityVisitorSameValueAdapter;
import com.opengamma.financial.security.capfloor.CapFloorCMSSpreadSecurity;
import com.opengamma.financial.security.capfloor.CapFloorSecurity;
import com.opengamma.financial.security.option.BondFutureOptionSecurity;
import com.opengamma.financial.security.option.CommodityFutureOptionSecurity;
import com.opengamma.financial.security.option.CreditDefaultSwapOptionSecurity;
import com.opengamma.financial.security.option.EquityBarrierOptionSecurity;
import com.opengamma.financial.security.option.EquityIndexDividendFutureOptionSecurity;
import com.opengamma.financial.security.option.EquityIndexFutureOptionSecurity;
import com.opengamma.financial.security.option.EquityIndexOptionSecurity;
import com.opengamma.financial.security.option.EquityOptionSecurity;
import com.opengamma.financial.security.option.FXBarrierOptionSecurity;
import com.opengamma.financial.security.option.FXDigitalOptionSecurity;
import com.opengamma.financial.security.option.FXOptionSecurity;
import com.opengamma.financial.security.option.FxFutureOptionSecurity;
import com.opengamma.financial.security.option.IRFutureOptionSecurity;
import com.opengamma.financial.security.option.NonDeliverableFXDigitalOptionSecurity;
import com.opengamma.financial.security.option.NonDeliverableFXOptionSecurity;
import com.opengamma.financial.security.option.SwaptionSecurity;
import com.opengamma.util.ArgumentChecker;

/**
* Function that aggregates by option strike.
*/
public class StrikeAggregationFunction implements AggregationFunction<String> {
  /** The name of the aggregator */
  private static final String NAME = "Strike";
  /** Label for trades to which this aggregator does not apply */
  private static final String NA = "N/A";
  /** The comparator */
  private static final Comparator<Position> COMPARATOR = new SimplePositionComparator();
  /** The security source */
  private final SecuritySource _securitySource;

  /**
   * @param securitySource The security source, not null
   */
  public StrikeAggregationFunction(final SecuritySource securitySource) {
    ArgumentChecker.notNull(securitySource, "security source");
    _securitySource = securitySource;
  }

  @Override
  public int compare(final String arg0, final String arg1) {
    try {
      final Double d0 = Double.parseDouble(arg0);
      final Double d1 = Double.parseDouble(arg1);
      return Double.compare(d0, d1);
    } catch (final NumberFormatException e) {
      return arg0.compareTo(arg1);
    }
  }

  @Override
  public Collection<String> getRequiredEntries() {
    return Collections.emptySet();
  }

  @Override
  public String classifyPosition(final Position position) {
    position.getSecurityLink().resolve(_securitySource);
    final FinancialSecurityVisitor<String> visitor = new FinancialSecurityVisitorSameValueAdapter<String>(NA) {

      @Override
      public String visitCreditDefaultSwapOptionSecurity(final CreditDefaultSwapOptionSecurity security) {
        return security.getStrike().toString();
      }

      @Override
      public String visitCapFloorCMSSpreadSecurity(final CapFloorCMSSpreadSecurity security) {
        return Double.toString(security.getStrike());
      }

      @Override
      public String visitCapFloorSecurity(final CapFloorSecurity security) {
        return Double.toString(security.getStrike());
      }

      @Override
      public String visitCommodityFutureOptionSecurity(final CommodityFutureOptionSecurity security) {
        return Double.toString(security.getStrike());
      }

      @Override
      public String visitFxFutureOptionSecurity(final FxFutureOptionSecurity security) {
        return Double.toString(security.getStrike());
      }

      @Override
      public String visitBondFutureOptionSecurity(final BondFutureOptionSecurity security) {
        return Double.toString(security.getStrike());
      }

      @Override
      public String visitEquityBarrierOptionSecurity(final EquityBarrierOptionSecurity security) {
        return Double.toString(security.getStrike());
      }

      @Override
      public String visitEquityIndexDividendFutureOptionSecurity(final EquityIndexDividendFutureOptionSecurity security) {
        return Double.toString(security.getStrike());
      }

      @Override
      public String visitEquityIndexFutureOptionSecurity(final EquityIndexFutureOptionSecurity security) {
        return Double.toString(security.getStrike());
      }

      @Override
      public String visitEquityIndexOptionSecurity(final EquityIndexOptionSecurity security) {
        return Double.toString(security.getStrike());
      }

      @Override
      public String visitEquityOptionSecurity(final EquityOptionSecurity security) {
        return Double.toString(security.getStrike());
      }

      @Override
      public String visitFXBarrierOptionSecurity(final FXBarrierOptionSecurity security) {
        return NA; //TODO
      }

      @Override
      public String visitFXDigitalOptionSecurity(final FXDigitalOptionSecurity security) {
        return NA; //TODO
      }

      @Override
      public String visitFXOptionSecurity(final FXOptionSecurity security) {
        return NA; //TODO
      }

      @Override
      public String visitIRFutureOptionSecurity(final IRFutureOptionSecurity security) {
        return Double.toString(security.getStrike());
      }

      @Override
      public String visitNonDeliverableFXDigitalOptionSecurity(final NonDeliverableFXDigitalOptionSecurity security) {
        return NA; //TODO
      }

      @Override
      public String visitNonDeliverableFXOptionSecurity(final NonDeliverableFXOptionSecurity security) {
        return NA; //TODO
      }

      @Override
      public String visitSwaptionSecurity(final SwaptionSecurity security) {
        return NA; //TODO
      }

    };
    if (position.getSecurity() instanceof FinancialSecurity) {
      final FinancialSecurity security = (FinancialSecurity) position.getSecurity();
      return security.accept(visitor);
    }
    return NA;
  }

  @Override
  public Comparator<Position> getPositionComparator() {
    return COMPARATOR;
  }

  @Override
  public String getName() {
    return NAME;
  }

}
TOP

Related Classes of com.opengamma.financial.aggregation.StrikeAggregationFunction

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.