/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.generator; import com.opengamma.core.position.Position; import com.opengamma.core.position.impl.SimplePosition; import com.opengamma.master.position.ManageableTrade; import com.opengamma.master.security.ManageableSecurity; import com.opengamma.util.ArgumentChecker; /** * Utility class for creating a position as a quantity/security pair. * * @param <T> the security type or a common super-type of the securities */ public class SimplePositionGenerator<T extends ManageableSecurity> implements PositionGenerator { private static final String DEFAULT_COUNTER_PARTY = "COUNTERPARTY"; private final QuantityGenerator _quantityGenerator; private final SecurityGenerator<? extends T> _securityGenerator; private final SecurityPersister _securityPersister; private final NameGenerator _counterPartyGenerator; public SimplePositionGenerator(final QuantityGenerator quantityGenerator, final SecurityGenerator<? extends T> securityGenerator, final SecurityPersister securityPersister, final NameGenerator counterPartyGenerator) { ArgumentChecker.notNull(quantityGenerator, "quantityGenerator"); ArgumentChecker.notNull(securityGenerator, "securityGenerator"); ArgumentChecker.notNull(securityPersister, "securityPersister"); ArgumentChecker.notNull(counterPartyGenerator, "counterPartyGenerator"); _quantityGenerator = quantityGenerator; _securityGenerator = securityGenerator; _securityPersister = securityPersister; _counterPartyGenerator = counterPartyGenerator; } public SimplePositionGenerator(final SecurityGenerator<? extends T> securityGenerator, final SecurityPersister securityPersister, final NameGenerator counterPartyGenerator) { this(new StaticQuantityGenerator(1), securityGenerator, securityPersister, counterPartyGenerator); } public SimplePositionGenerator(final SecurityGenerator<? extends T> securityGenerator, final SecurityPersister securityPersister) { this(new StaticQuantityGenerator(1), securityGenerator, securityPersister); } public SimplePositionGenerator(final QuantityGenerator quantityGenerator, final SecurityGenerator<? extends T> securityGenerator, final SecurityPersister securityPersister) { this(quantityGenerator, securityGenerator, securityPersister, new StaticNameGenerator(DEFAULT_COUNTER_PARTY)); } protected QuantityGenerator getQuantityGenerator() { return _quantityGenerator; } protected SecurityGenerator<? extends T> getSecurityGenerator() { return _securityGenerator; } protected SecurityPersister getSecurityPersister() { return _securityPersister; } protected NameGenerator getCounterPartyGenerator() { return _counterPartyGenerator; } public static Position createPositionFromTrade(final ManageableTrade trade) { if (trade != null) { final SimplePosition position = new SimplePosition(trade.getQuantity(), trade.getSecurityLink().getExternalId()); position.addTrade(trade); return position; } else { return null; } } @Override public Position createPosition() { // final ManageableTrade trade = getSecurityGenerator().createSecurityTrade(getQuantityGenerator(), getSecurityPersister(), getCounterPartyGenerator()); // if (trade == null) { // final BigDecimal quantity = getQuantityGenerator().createQuantity(); // if (quantity == null) { // return null; // } // final T security = getSecurityGenerator().createSecurity(); // if (security == null) { // return null; // } // return new SimplePosition(quantity, getSecurityPersister().storeSecurity(security)); // } else { // return createPositionFromTrade(trade); // } Position position = null; final ManageableTrade trade = getSecurityGenerator().createSecurityTrade(getQuantityGenerator(), getSecurityPersister(), getCounterPartyGenerator()); if (trade != null) { position = createPositionFromTrade(trade); } return position; } }