/// <summary> /// Creates a curve as the sum of a base curve and a spread curve. /// <para> /// The metadata of the combined curve will be created form the base curve and spread curve. /// /// </para> /// </summary> /// <param name="baseCurve"> the base curve </param> /// <param name="spreadCurve"> the spread curve </param> /// <returns> the combined curve </returns> public static CombinedCurve of(Curve baseCurve, Curve spreadCurve) { CurveMetadata baseMetadata = baseCurve.Metadata; CurveMetadata spreadMetadata = spreadCurve.Metadata; IList <ParameterMetadata> paramMeta = Stream.concat(IntStream.range(0, baseCurve.ParameterCount).mapToObj(i => baseCurve.getParameterMetadata(i)), IntStream.range(0, spreadCurve.ParameterCount).mapToObj(i => spreadCurve.getParameterMetadata(i))).collect(toImmutableList()); DefaultCurveMetadataBuilder metadataBuilder = DefaultCurveMetadata.builder().curveName(baseCurve.Name.Name + "+" + spreadMetadata.CurveName.Name).xValueType(baseMetadata.XValueType).yValueType(baseMetadata.YValueType).parameterMetadata(paramMeta); if (baseMetadata.findInfo(CurveInfoType.DAY_COUNT).Present) { metadataBuilder.addInfo(CurveInfoType.DAY_COUNT, baseMetadata.getInfo(CurveInfoType.DAY_COUNT)); } return(of(baseCurve, spreadCurve, metadataBuilder.build())); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @ImmutableConstructor private CombinedCurve(Curve baseCurve, Curve spreadCurve, CurveMetadata metadata) private CombinedCurve(Curve baseCurve, Curve spreadCurve, CurveMetadata metadata) { JodaBeanUtils.notNull(baseCurve, "baseCurve"); JodaBeanUtils.notNull(spreadCurve, "spreadCurve"); JodaBeanUtils.notNull(metadata, "metadata"); CurveMetadata baseMetadata = baseCurve.Metadata; CurveMetadata spreadMetadata = spreadCurve.Metadata; // check value type if (!baseMetadata.XValueType.Equals(metadata.XValueType)) { throw new System.ArgumentException(Messages.format("xValueType is {} in baseCurve, but {} in CombinedCurve", baseMetadata.XValueType, metadata.XValueType)); } if (!spreadMetadata.XValueType.Equals(metadata.XValueType)) { throw new System.ArgumentException(Messages.format("xValueType is {} in spreadCurve, but {} in CombinedCurve", spreadMetadata.XValueType, metadata.XValueType)); } if (!baseMetadata.YValueType.Equals(metadata.YValueType)) { throw new System.ArgumentException(Messages.format("yValueType is {} in baseCurve, but {} in CombinedCurve", baseMetadata.YValueType, metadata.YValueType)); } if (!spreadMetadata.YValueType.Equals(metadata.YValueType)) { throw new System.ArgumentException(Messages.format("yValueType is {} in spreadCurve, but {} in CombinedCurve", spreadMetadata.YValueType, metadata.YValueType)); } // check day count Optional <DayCount> dccOpt = metadata.findInfo(CurveInfoType.DAY_COUNT); if (dccOpt.Present) { DayCount dcc = dccOpt.get(); if (!baseMetadata.findInfo(CurveInfoType.DAY_COUNT).Present || !baseMetadata.getInfo(CurveInfoType.DAY_COUNT).Equals(dcc)) { throw new System.ArgumentException(Messages.format("DayCount in baseCurve should be {}", dcc)); } if (!spreadMetadata.findInfo(CurveInfoType.DAY_COUNT).Present || !spreadMetadata.getInfo(CurveInfoType.DAY_COUNT).Equals(dcc)) { throw new System.ArgumentException(Messages.format("DayCount in spreadCurve should be {}", dcc)); } } this.metadata = metadata; this.baseCurve = baseCurve; this.spreadCurve = spreadCurve; }