All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.opengamma.sdk.margin.MarginCalcRequest Maven / Gradle / Ivy

There is a newer version: 3.6.4
Show newest version
/*
 * Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies
 *
 * Please see distribution for license.
 */
package com.opengamma.sdk.margin;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Optional;
import java.util.Set;

import org.joda.beans.Bean;
import org.joda.beans.ImmutableBean;
import org.joda.beans.JodaBeanUtils;
import org.joda.beans.MetaBean;
import org.joda.beans.MetaProperty;
import org.joda.beans.gen.BeanDefinition;
import org.joda.beans.gen.ImmutableConstructor;
import org.joda.beans.gen.ImmutableDefaults;
import org.joda.beans.gen.PropertyDefinition;
import org.joda.beans.impl.direct.DirectFieldsBeanBuilder;
import org.joda.beans.impl.direct.DirectMetaBean;
import org.joda.beans.impl.direct.DirectMetaProperty;
import org.joda.beans.impl.direct.DirectMetaPropertyMap;
import org.joda.beans.ser.JodaBeanSer;

/**
 * Request to pass to the service.
 */
@BeanDefinition(metaScope = "private")
@SuppressWarnings("deprecation")
public final class MarginCalcRequest implements ImmutableBean {

  /**
   * The type of calculation to perform.
   * 

* This has been replaced by {@link #getCalculationTypes()}, which provides * more control and more features. * If {@code PARSE_INPUTS} or {@code FULL} is set, the calculation types will include {@code PORTFOLIO_SUMMARY}. * If {@code STANDARD} or {@code FULL} is set, the calculation types will include {@code MARGIN}. * * @deprecated Use {@link #getCalculationTypes()} instead */ @Deprecated @PropertyDefinition(get = "field", toStringStyle = "omit") private final MarginCalcRequestType type; /** * The types of information to include in the output. *

* If an empty set is passed in, the output type {@link MarginCalcType#MARGIN MARGIN} will be used. */ @PropertyDefinition(validate = "notNull") private final Set calculationTypes; /** * The mode of the calculation, defaulted to {@code SPOT}. */ @PropertyDefinition(validate = "notNull") private final MarginCalcMode mode; /** * The valuation date for which the portfolio will be processed. */ @PropertyDefinition(validate = "notNull") private final LocalDate valuationDate; /** * Whether to apply the client multiplier, default false. */ @PropertyDefinition private final boolean applyClientMultiplier; /** * The currency that the result is reported in, as an ISO 4217 three letter currency code. */ @PropertyDefinition(validate = "notNull") private final String reportingCurrency; /** * The optional currency that the calculation is performed in, as an ISO 4217 three letter currency code. * If omitted, the calculation currency will be inferred from the reportingCurrency. */ @PropertyDefinition(get = "optional") private final String calculationCurrency; /** * The portfolio data, where each entry typically represents a CSV, TSV or XML file. */ @PropertyDefinition(validate = "notNull") private final List portfolioData; /** * The regular expression used to select the party in any FpML input. * The regular expression is matched against the content of the {@code partyId} elements. * If this is not specified, FpML cannot be parsed. */ @PropertyDefinition(get = "optional") private final String fpmlPartySelectionRegex; //------------------------------------------------------------------------- /** * Obtains an instance that requests a standard margin calculation. *

* The list of portfolio data should be either {@link PortfolioDataFile} instances * or Strata {@code CalculationTarget} instances, such as trades or positions. * Defaults the {@link MarginCalcMode} to MarginCalcMode.SPOT. * * @param valuationDate the valuation date * @param reportingCurrency the reporting currency * @param portfolioData the portfolio data, which can be {@link PortfolioDataFile} or Strata trades * @param fpmlPartySelectionRegex the regular expression used to select the party in any FpML input * @return the request */ public static MarginCalcRequest of( LocalDate valuationDate, String reportingCurrency, List portfolioData, String fpmlPartySelectionRegex) { List files = convertPortfolioData(portfolioData); return new MarginCalcRequest( MarginCalcRequestType.STANDARD, new HashSet<>(), MarginCalcMode.SPOT, valuationDate, false, reportingCurrency, null, files, fpmlPartySelectionRegex); } /** * Obtains an instance that requests a standard margin calculation. *

* The list of portfolio data should be either {@link PortfolioDataFile} instances * or Strata {@code CalculationTarget} instances, such as trades or positions. * * @param valuationDate the valuation date * @param reportingCurrency the reporting currency * @param mode the mode of the calculation * @param portfolioData the portfolio data, which can be {@link PortfolioDataFile} or Strata trades * @param fpmlPartySelectionRegex the regular expression used to select the party in any FpML input * @return the request */ public static MarginCalcRequest of( LocalDate valuationDate, String reportingCurrency, MarginCalcMode mode, List portfolioData, String fpmlPartySelectionRegex) { List files = convertPortfolioData(portfolioData); return new MarginCalcRequest( MarginCalcRequestType.STANDARD, new HashSet<>(), mode, valuationDate, false, reportingCurrency, null, files, fpmlPartySelectionRegex); } /** * Obtains an instance that requests a standard margin calculation. *

* The list of portfolio data should be either {@link PortfolioDataFile} instances * or Strata {@code CalculationTarget} instances, such as trades or positions. * Defaults the {@link MarginCalcMode} to MarginCalcMode.SPOT. * * @param valuationDate the valuation date * @param reportingCurrency the reporting currency * @param portfolioData the portfolio data, which can be {@link PortfolioDataFile} or Strata trades * @return the request */ public static MarginCalcRequest of( LocalDate valuationDate, String reportingCurrency, List portfolioData) { List files = convertPortfolioData(portfolioData); return new MarginCalcRequest( MarginCalcRequestType.STANDARD, new HashSet<>(), MarginCalcMode.SPOT, valuationDate, false, reportingCurrency, null, files, null); } //------------------------------------------------------------------------- /** * Obtains an instance that requests a margin calculation. *

* The list of portfolio data should be either {@link PortfolioDataFile} instances * or Strata {@code CalculationTarget} instances, such as trades or positions. * * @param valuationDate the valuation date * @param reportingCurrency the reporting currency * @param mode the mode of the calculation * @param portfolioData the portfolio data, which can be {@link PortfolioDataFile} or Strata trades * @param type the type of request to perform * @param applyClientModifier whether to apply the client modifier * @return the request * @deprecated Use the builder */ @Deprecated public static MarginCalcRequest of( LocalDate valuationDate, String reportingCurrency, MarginCalcMode mode, List portfolioData, MarginCalcRequestType type, boolean applyClientModifier) { List files = convertPortfolioData(portfolioData); return new MarginCalcRequest( type, new HashSet<>(), mode, valuationDate, applyClientModifier, reportingCurrency, null, files, null); } /** * Obtains an instance that requests a margin calculation. *

* The list of portfolio data should be either {@link PortfolioDataFile} instances * or Strata {@code CalculationTarget} instances, such as trades or positions. * Defaults the {@link MarginCalcMode} to MarginCalcMode.SPOT. * * @param valuationDate the valuation date * @param reportingCurrency the reporting currency * @param portfolioData the portfolio data, which can be {@link PortfolioDataFile} or Strata trades * @param type the type of request to perform * @param applyClientModifier whether to apply the client modifier * @return the request * @deprecated Use the builder */ @Deprecated public static MarginCalcRequest of( LocalDate valuationDate, String reportingCurrency, List portfolioData, MarginCalcRequestType type, boolean applyClientModifier) { List files = convertPortfolioData(portfolioData); return new MarginCalcRequest( type, new HashSet<>(), MarginCalcMode.SPOT, valuationDate, applyClientModifier, reportingCurrency, null, files, null); } private static List convertPortfolioData(List portfolioData) { List files = new ArrayList<>(); for (Bean bean : portfolioData) { if (bean instanceof PortfolioDataFile) { files.add((PortfolioDataFile) bean); } else { String xml = JodaBeanSer.COMPACT.xmlWriter().write(bean); files.add(PortfolioDataFile.of(bean.getClass().getSimpleName() + ".xml", xml)); } } return files; } @ImmutableDefaults private static void applyDefaults(Builder builder) { builder.mode = MarginCalcMode.SPOT; } @ImmutableConstructor private MarginCalcRequest( MarginCalcRequestType type, Set calculationTypes, MarginCalcMode mode, LocalDate valuationDate, boolean applyClientMultiplier, String reportingCurrency, String calculationCurrency, List portfolioData, String fpmlPartySelectionRegex) { JodaBeanUtils.notNull(calculationTypes, "calculationTypes"); JodaBeanUtils.notNull(mode, "mode"); JodaBeanUtils.notNull(valuationDate, "valuationDate"); JodaBeanUtils.notNull(reportingCurrency, "reportingCurrency"); JodaBeanUtils.notNull(portfolioData, "portfolioData"); // ensure that the type field is always null, this approach means that it will still have // a builder method, but the value of the field will not be sent to the server this.type = null; // build set of calculation types, allowing that old type might be null HashSet types = new HashSet<>(calculationTypes); if (type != null) { types.addAll(type.toCalculationTypes()); } this.calculationTypes = Collections.unmodifiableSet(types); this.mode = mode; this.valuationDate = valuationDate; this.applyClientMultiplier = applyClientMultiplier; this.reportingCurrency = reportingCurrency; this.calculationCurrency = calculationCurrency; this.portfolioData = Collections.unmodifiableList(new ArrayList<>(portfolioData)); this.fpmlPartySelectionRegex = fpmlPartySelectionRegex; } //------------------------------------------------------------------------- /** * Gets the type of calculation to perform. *

* This has been replaced by {@link #getCalculationTypes()}, which provides * more control and more features. * If {@code PARSE_INPUTS} or {@code FULL} is set, the calculation types will include {@code PORTFOLIO_SUMMARY}. * If {@code STANDARD} or {@code FULL} is set, the calculation types will include {@code MARGIN}. * * @return the type * @deprecated Use {@link #getCalculationTypes()} instead */ @Deprecated public MarginCalcRequestType getType() { // this is provided to retain backwards compatibility of the client library // if the types contains neither MARGIN nor PORTFOLIO_SUMMARY then the caller // must be using the newer form of the API, but we have to return a value to avoid NPE boolean margin = calculationTypes.contains(MarginCalcType.MARGIN); boolean summary = calculationTypes.contains(MarginCalcType.PORTFOLIO_SUMMARY); if (margin) { return summary ? MarginCalcRequestType.FULL : MarginCalcRequestType.STANDARD; } else { return summary ? MarginCalcRequestType.PARSE_INPUTS : MarginCalcRequestType.STANDARD; } } //------------------------- AUTOGENERATED START ------------------------- /** * The meta-bean for {@code MarginCalcRequest}. * @return the meta-bean, not null */ public static MetaBean meta() { return MarginCalcRequest.Meta.INSTANCE; } static { MetaBean.register(MarginCalcRequest.Meta.INSTANCE); } /** * Returns a builder used to create an instance of the bean. * @return the builder, not null */ public static MarginCalcRequest.Builder builder() { return new MarginCalcRequest.Builder(); } @Override public MetaBean metaBean() { return MarginCalcRequest.Meta.INSTANCE; } //----------------------------------------------------------------------- /** * Gets the types of information to include in the output. *

* If an empty set is passed in, the output type {@link MarginCalcType#MARGIN MARGIN} will be used. * @return the value of the property, not null */ public Set getCalculationTypes() { return calculationTypes; } //----------------------------------------------------------------------- /** * Gets the mode of the calculation, defaulted to {@code SPOT}. * @return the value of the property, not null */ public MarginCalcMode getMode() { return mode; } //----------------------------------------------------------------------- /** * Gets the valuation date for which the portfolio will be processed. * @return the value of the property, not null */ public LocalDate getValuationDate() { return valuationDate; } //----------------------------------------------------------------------- /** * Gets whether to apply the client multiplier, default false. * @return the value of the property */ public boolean isApplyClientMultiplier() { return applyClientMultiplier; } //----------------------------------------------------------------------- /** * Gets the currency that the result is reported in, as an ISO 4217 three letter currency code. * @return the value of the property, not null */ public String getReportingCurrency() { return reportingCurrency; } //----------------------------------------------------------------------- /** * Gets the optional currency that the calculation is performed in, as an ISO 4217 three letter currency code. * If omitted, the calculation currency will be inferred from the reportingCurrency. * @return the optional value of the property, not null */ public Optional getCalculationCurrency() { return Optional.ofNullable(calculationCurrency); } //----------------------------------------------------------------------- /** * Gets the portfolio data, where each entry typically represents a CSV, TSV or XML file. * @return the value of the property, not null */ public List getPortfolioData() { return portfolioData; } //----------------------------------------------------------------------- /** * Gets the regular expression used to select the party in any FpML input. * The regular expression is matched against the content of the {@code partyId} elements. * If this is not specified, FpML cannot be parsed. * @return the optional value of the property, not null */ public Optional getFpmlPartySelectionRegex() { return Optional.ofNullable(fpmlPartySelectionRegex); } //----------------------------------------------------------------------- /** * Returns a builder that allows this bean to be mutated. * @return the mutable builder, not null */ public Builder toBuilder() { return new Builder(this); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj != null && obj.getClass() == this.getClass()) { MarginCalcRequest other = (MarginCalcRequest) obj; return JodaBeanUtils.equal(type, other.type) && JodaBeanUtils.equal(calculationTypes, other.calculationTypes) && JodaBeanUtils.equal(mode, other.mode) && JodaBeanUtils.equal(valuationDate, other.valuationDate) && (applyClientMultiplier == other.applyClientMultiplier) && JodaBeanUtils.equal(reportingCurrency, other.reportingCurrency) && JodaBeanUtils.equal(calculationCurrency, other.calculationCurrency) && JodaBeanUtils.equal(portfolioData, other.portfolioData) && JodaBeanUtils.equal(fpmlPartySelectionRegex, other.fpmlPartySelectionRegex); } return false; } @Override public int hashCode() { int hash = getClass().hashCode(); hash = hash * 31 + JodaBeanUtils.hashCode(type); hash = hash * 31 + JodaBeanUtils.hashCode(calculationTypes); hash = hash * 31 + JodaBeanUtils.hashCode(mode); hash = hash * 31 + JodaBeanUtils.hashCode(valuationDate); hash = hash * 31 + JodaBeanUtils.hashCode(applyClientMultiplier); hash = hash * 31 + JodaBeanUtils.hashCode(reportingCurrency); hash = hash * 31 + JodaBeanUtils.hashCode(calculationCurrency); hash = hash * 31 + JodaBeanUtils.hashCode(portfolioData); hash = hash * 31 + JodaBeanUtils.hashCode(fpmlPartySelectionRegex); return hash; } @Override public String toString() { StringBuilder buf = new StringBuilder(288); buf.append("MarginCalcRequest{"); buf.append("calculationTypes").append('=').append(calculationTypes).append(',').append(' '); buf.append("mode").append('=').append(mode).append(',').append(' '); buf.append("valuationDate").append('=').append(valuationDate).append(',').append(' '); buf.append("applyClientMultiplier").append('=').append(applyClientMultiplier).append(',').append(' '); buf.append("reportingCurrency").append('=').append(reportingCurrency).append(',').append(' '); buf.append("calculationCurrency").append('=').append(calculationCurrency).append(',').append(' '); buf.append("portfolioData").append('=').append(portfolioData).append(',').append(' '); buf.append("fpmlPartySelectionRegex").append('=').append(JodaBeanUtils.toString(fpmlPartySelectionRegex)); buf.append('}'); return buf.toString(); } //----------------------------------------------------------------------- /** * The meta-bean for {@code MarginCalcRequest}. */ private static final class Meta extends DirectMetaBean { /** * The singleton instance of the meta-bean. */ static final Meta INSTANCE = new Meta(); /** * The meta-property for the {@code type} property. */ private final MetaProperty type = DirectMetaProperty.ofImmutable( this, "type", MarginCalcRequest.class, MarginCalcRequestType.class); /** * The meta-property for the {@code calculationTypes} property. */ @SuppressWarnings({"unchecked", "rawtypes" }) private final MetaProperty> calculationTypes = DirectMetaProperty.ofImmutable( this, "calculationTypes", MarginCalcRequest.class, (Class) Set.class); /** * The meta-property for the {@code mode} property. */ private final MetaProperty mode = DirectMetaProperty.ofImmutable( this, "mode", MarginCalcRequest.class, MarginCalcMode.class); /** * The meta-property for the {@code valuationDate} property. */ private final MetaProperty valuationDate = DirectMetaProperty.ofImmutable( this, "valuationDate", MarginCalcRequest.class, LocalDate.class); /** * The meta-property for the {@code applyClientMultiplier} property. */ private final MetaProperty applyClientMultiplier = DirectMetaProperty.ofImmutable( this, "applyClientMultiplier", MarginCalcRequest.class, Boolean.TYPE); /** * The meta-property for the {@code reportingCurrency} property. */ private final MetaProperty reportingCurrency = DirectMetaProperty.ofImmutable( this, "reportingCurrency", MarginCalcRequest.class, String.class); /** * The meta-property for the {@code calculationCurrency} property. */ private final MetaProperty calculationCurrency = DirectMetaProperty.ofImmutable( this, "calculationCurrency", MarginCalcRequest.class, String.class); /** * The meta-property for the {@code portfolioData} property. */ @SuppressWarnings({"unchecked", "rawtypes" }) private final MetaProperty> portfolioData = DirectMetaProperty.ofImmutable( this, "portfolioData", MarginCalcRequest.class, (Class) List.class); /** * The meta-property for the {@code fpmlPartySelectionRegex} property. */ private final MetaProperty fpmlPartySelectionRegex = DirectMetaProperty.ofImmutable( this, "fpmlPartySelectionRegex", MarginCalcRequest.class, String.class); /** * The meta-properties. */ private final Map> metaPropertyMap$ = new DirectMetaPropertyMap( this, null, "type", "calculationTypes", "mode", "valuationDate", "applyClientMultiplier", "reportingCurrency", "calculationCurrency", "portfolioData", "fpmlPartySelectionRegex"); /** * Restricted constructor. */ private Meta() { } @Override protected MetaProperty metaPropertyGet(String propertyName) { switch (propertyName.hashCode()) { case 3575610: // type return type; case 755457840: // calculationTypes return calculationTypes; case 3357091: // mode return mode; case 113107279: // valuationDate return valuationDate; case 1555658618: // applyClientMultiplier return applyClientMultiplier; case -1287844769: // reportingCurrency return reportingCurrency; case 1466784250: // calculationCurrency return calculationCurrency; case -689339118: // portfolioData return portfolioData; case 527038456: // fpmlPartySelectionRegex return fpmlPartySelectionRegex; } return super.metaPropertyGet(propertyName); } @Override public MarginCalcRequest.Builder builder() { return new MarginCalcRequest.Builder(); } @Override public Class beanType() { return MarginCalcRequest.class; } @Override public Map> metaPropertyMap() { return metaPropertyMap$; } //----------------------------------------------------------------------- @Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 3575610: // type return ((MarginCalcRequest) bean).type; case 755457840: // calculationTypes return ((MarginCalcRequest) bean).getCalculationTypes(); case 3357091: // mode return ((MarginCalcRequest) bean).getMode(); case 113107279: // valuationDate return ((MarginCalcRequest) bean).getValuationDate(); case 1555658618: // applyClientMultiplier return ((MarginCalcRequest) bean).isApplyClientMultiplier(); case -1287844769: // reportingCurrency return ((MarginCalcRequest) bean).getReportingCurrency(); case 1466784250: // calculationCurrency return ((MarginCalcRequest) bean).calculationCurrency; case -689339118: // portfolioData return ((MarginCalcRequest) bean).getPortfolioData(); case 527038456: // fpmlPartySelectionRegex return ((MarginCalcRequest) bean).fpmlPartySelectionRegex; } return super.propertyGet(bean, propertyName, quiet); } @Override protected void propertySet(Bean bean, String propertyName, Object newValue, boolean quiet) { metaProperty(propertyName); if (quiet) { return; } throw new UnsupportedOperationException("Property cannot be written: " + propertyName); } } //----------------------------------------------------------------------- /** * The bean-builder for {@code MarginCalcRequest}. */ public static final class Builder extends DirectFieldsBeanBuilder { private MarginCalcRequestType type; private Set calculationTypes = Collections.emptySet(); private MarginCalcMode mode; private LocalDate valuationDate; private boolean applyClientMultiplier; private String reportingCurrency; private String calculationCurrency; private List portfolioData = Collections.emptyList(); private String fpmlPartySelectionRegex; /** * Restricted constructor. */ private Builder() { applyDefaults(this); } /** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(MarginCalcRequest beanToCopy) { this.type = beanToCopy.type; this.calculationTypes = new HashSet<>(beanToCopy.getCalculationTypes()); this.mode = beanToCopy.getMode(); this.valuationDate = beanToCopy.getValuationDate(); this.applyClientMultiplier = beanToCopy.isApplyClientMultiplier(); this.reportingCurrency = beanToCopy.getReportingCurrency(); this.calculationCurrency = beanToCopy.calculationCurrency; this.portfolioData = new ArrayList<>(beanToCopy.getPortfolioData()); this.fpmlPartySelectionRegex = beanToCopy.fpmlPartySelectionRegex; } //----------------------------------------------------------------------- @Override public Object get(String propertyName) { switch (propertyName.hashCode()) { case 3575610: // type return type; case 755457840: // calculationTypes return calculationTypes; case 3357091: // mode return mode; case 113107279: // valuationDate return valuationDate; case 1555658618: // applyClientMultiplier return applyClientMultiplier; case -1287844769: // reportingCurrency return reportingCurrency; case 1466784250: // calculationCurrency return calculationCurrency; case -689339118: // portfolioData return portfolioData; case 527038456: // fpmlPartySelectionRegex return fpmlPartySelectionRegex; default: throw new NoSuchElementException("Unknown property: " + propertyName); } } @SuppressWarnings("unchecked") @Override public Builder set(String propertyName, Object newValue) { switch (propertyName.hashCode()) { case 3575610: // type this.type = (MarginCalcRequestType) newValue; break; case 755457840: // calculationTypes this.calculationTypes = (Set) newValue; break; case 3357091: // mode this.mode = (MarginCalcMode) newValue; break; case 113107279: // valuationDate this.valuationDate = (LocalDate) newValue; break; case 1555658618: // applyClientMultiplier this.applyClientMultiplier = (Boolean) newValue; break; case -1287844769: // reportingCurrency this.reportingCurrency = (String) newValue; break; case 1466784250: // calculationCurrency this.calculationCurrency = (String) newValue; break; case -689339118: // portfolioData this.portfolioData = (List) newValue; break; case 527038456: // fpmlPartySelectionRegex this.fpmlPartySelectionRegex = (String) newValue; break; default: throw new NoSuchElementException("Unknown property: " + propertyName); } return this; } @Override public Builder set(MetaProperty property, Object value) { super.set(property, value); return this; } @Override public MarginCalcRequest build() { return new MarginCalcRequest( type, calculationTypes, mode, valuationDate, applyClientMultiplier, reportingCurrency, calculationCurrency, portfolioData, fpmlPartySelectionRegex); } //----------------------------------------------------------------------- /** * Sets the type of calculation to perform. *

* This has been replaced by {@link #getCalculationTypes()}, which provides * more control and more features. * If {@code PARSE_INPUTS} or {@code FULL} is set, the calculation types will include {@code PORTFOLIO_SUMMARY}. * If {@code STANDARD} or {@code FULL} is set, the calculation types will include {@code MARGIN}. * * @deprecated Use {@link #getCalculationTypes()} instead * @param type the new value * @return this, for chaining, not null * @deprecated Use {@link #getCalculationTypes()} instead */ @Deprecated public Builder type(MarginCalcRequestType type) { this.type = type; return this; } /** * Sets the types of information to include in the output. *

* If an empty set is passed in, the output type {@link MarginCalcType#MARGIN MARGIN} will be used. * @param calculationTypes the new value, not null * @return this, for chaining, not null */ public Builder calculationTypes(Set calculationTypes) { JodaBeanUtils.notNull(calculationTypes, "calculationTypes"); this.calculationTypes = calculationTypes; return this; } /** * Sets the {@code calculationTypes} property in the builder * from an array of objects. * @param calculationTypes the new value, not null * @return this, for chaining, not null */ public Builder calculationTypes(MarginCalcType... calculationTypes) { return calculationTypes(new LinkedHashSet(Arrays.asList(calculationTypes))); } /** * Sets the mode of the calculation, defaulted to {@code SPOT}. * @param mode the new value, not null * @return this, for chaining, not null */ public Builder mode(MarginCalcMode mode) { JodaBeanUtils.notNull(mode, "mode"); this.mode = mode; return this; } /** * Sets the valuation date for which the portfolio will be processed. * @param valuationDate the new value, not null * @return this, for chaining, not null */ public Builder valuationDate(LocalDate valuationDate) { JodaBeanUtils.notNull(valuationDate, "valuationDate"); this.valuationDate = valuationDate; return this; } /** * Sets whether to apply the client multiplier, default false. * @param applyClientMultiplier the new value * @return this, for chaining, not null */ public Builder applyClientMultiplier(boolean applyClientMultiplier) { this.applyClientMultiplier = applyClientMultiplier; return this; } /** * Sets the currency that the result is reported in, as an ISO 4217 three letter currency code. * @param reportingCurrency the new value, not null * @return this, for chaining, not null */ public Builder reportingCurrency(String reportingCurrency) { JodaBeanUtils.notNull(reportingCurrency, "reportingCurrency"); this.reportingCurrency = reportingCurrency; return this; } /** * Sets the optional currency that the calculation is performed in, as an ISO 4217 three letter currency code. * If omitted, the calculation currency will be inferred from the reportingCurrency. * @param calculationCurrency the new value * @return this, for chaining, not null */ public Builder calculationCurrency(String calculationCurrency) { this.calculationCurrency = calculationCurrency; return this; } /** * Sets the portfolio data, where each entry typically represents a CSV, TSV or XML file. * @param portfolioData the new value, not null * @return this, for chaining, not null */ public Builder portfolioData(List portfolioData) { JodaBeanUtils.notNull(portfolioData, "portfolioData"); this.portfolioData = portfolioData; return this; } /** * Sets the {@code portfolioData} property in the builder * from an array of objects. * @param portfolioData the new value, not null * @return this, for chaining, not null */ public Builder portfolioData(PortfolioDataFile... portfolioData) { return portfolioData(Arrays.asList(portfolioData)); } /** * Sets the regular expression used to select the party in any FpML input. * The regular expression is matched against the content of the {@code partyId} elements. * If this is not specified, FpML cannot be parsed. * @param fpmlPartySelectionRegex the new value * @return this, for chaining, not null */ public Builder fpmlPartySelectionRegex(String fpmlPartySelectionRegex) { this.fpmlPartySelectionRegex = fpmlPartySelectionRegex; return this; } //----------------------------------------------------------------------- @Override public String toString() { StringBuilder buf = new StringBuilder(288); buf.append("MarginCalcRequest.Builder{"); buf.append("calculationTypes").append('=').append(JodaBeanUtils.toString(calculationTypes)).append(',').append(' '); buf.append("mode").append('=').append(JodaBeanUtils.toString(mode)).append(',').append(' '); buf.append("valuationDate").append('=').append(JodaBeanUtils.toString(valuationDate)).append(',').append(' '); buf.append("applyClientMultiplier").append('=').append(JodaBeanUtils.toString(applyClientMultiplier)).append(',').append(' '); buf.append("reportingCurrency").append('=').append(JodaBeanUtils.toString(reportingCurrency)).append(',').append(' '); buf.append("calculationCurrency").append('=').append(JodaBeanUtils.toString(calculationCurrency)).append(',').append(' '); buf.append("portfolioData").append('=').append(JodaBeanUtils.toString(portfolioData)).append(',').append(' '); buf.append("fpmlPartySelectionRegex").append('=').append(JodaBeanUtils.toString(fpmlPartySelectionRegex)); buf.append('}'); return buf.toString(); } } //-------------------------- AUTOGENERATED END -------------------------- }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy