2121
2222%include indexes.i
2323%include inflation.i
24+ %include ored_xmlutils.i
2425
2526%{
2627// put c++ declarations here
@@ -52,6 +53,7 @@ using ore::data::FxOptionConvention;
5253using ore::data::FxOptionTimeWeightingConvention;
5354using ore::data::ZeroInflationIndexConvention;
5455using ore::data::BondYieldConvention;
56+ using ore::data::XMLSerializable;
5557
5658using QuantLib::DayCounter;
5759using QuantLib::Calendar;
@@ -68,20 +70,23 @@ using QuantExt::FutureExpiryCalculator;
6870%}
6971
7072%shared_ptr(Conventions)
71- class Conventions {
73+ class Conventions : public XMLSerializable {
7274 public:
7375 Conventions ();
7476 ext::shared_ptr<Convention> get (const std::string& id) const ;
77+ std::pair<bool , ext::shared_ptr<Convention>> get (const std::string& id, const Convention::Type& type) const ;
78+ std::set<ext::shared_ptr<Convention>> get (const Convention::Type& type) const ;
79+ ext::shared_ptr<Convention> getFxConvention (const std::string& ccy1, const std::string& ccy2) const ;
80+ bool has (const std::string& id) const ;
81+ bool has (const std::string& id, const Convention::Type& type) const ;
7582 void clear ();
7683 void add (const ext::shared_ptr<Convention>& convention);
77- void fromXMLString (const std::string& xmlString);
78- void fromFile (const std::string& xmlFileName);
79- std::string toXMLString () const ;
80- void toFile (const std::string& filename) const ;
84+ void fromXML (XMLNode* node) override ;
85+ XMLNode* toXML (XMLDocument& doc) const override ;
8186};
8287
8388%shared_ptr(Convention)
84- class Convention {
89+ class Convention : public XMLSerializable {
8590 public:
8691 enum class Type {
8792 Zero,
@@ -104,8 +109,6 @@ class Convention {
104109 };
105110 const std::string& id () const ;
106111 Convention::Type type () const ;
107- void fromXMLString (const std::string& xmlString);
108- std::string toXMLString ();
109112
110113 %extend {
111114 static const Convention::Type Zero = Convention::Type::Zero;
@@ -149,6 +152,9 @@ class ZeroRateConvention : public Convention {
149152 BusinessDayConvention rollConvention () const ;
150153 bool eom ();
151154 bool tenorBased ();
155+ void fromXML (XMLNode* node) override ;
156+ XMLNode* toXML (XMLDocument& doc) const override ;
157+ void build () override ;
152158 %extend {
153159 static const ext::shared_ptr<ZeroRateConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
154160 return ext::dynamic_pointer_cast<ore::data::ZeroRateConvention>(baseInput);
@@ -171,6 +177,9 @@ class DepositConvention : public Convention {
171177 const DayCounter& dayCounter () const ;
172178 const Size settlementDays () const ;
173179 bool indexBased ();
180+ void fromXML (XMLNode* node) override ;
181+ XMLNode* toXML (XMLDocument& doc) const override ;
182+ void build () override ;
174183 %extend {
175184 static const ext::shared_ptr<DepositConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
176185 return ext::dynamic_pointer_cast<ore::data::DepositConvention>(baseInput);
@@ -184,6 +193,9 @@ class FutureConvention : public Convention {
184193 FutureConvention ();
185194 FutureConvention (const std::string& id, const std::string& index);
186195 const ext::shared_ptr<IborIndex> index () const ;
196+ void fromXML (XMLNode* node) override ;
197+ XMLNode* toXML (XMLDocument& doc) const override ;
198+ void build () override ;
187199 %extend {
188200 static const ext::shared_ptr<FutureConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
189201 return ext::dynamic_pointer_cast<ore::data::FutureConvention>(baseInput);
@@ -197,6 +209,9 @@ class FraConvention : public Convention {
197209 FraConvention ();
198210 FraConvention (const std::string& id,const std::string& index);
199211 const ext::shared_ptr<IborIndex> index () const ;
212+ void fromXML (XMLNode* node) override ;
213+ XMLNode* toXML (XMLDocument& doc) const override ;
214+ void build () override ;
200215 %extend {
201216 static const ext::shared_ptr<FraConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
202217 return ext::dynamic_pointer_cast<ore::data::FraConvention>(baseInput);
@@ -223,6 +238,9 @@ class OisConvention : public Convention {
223238 BusinessDayConvention fixedConvention () const ;
224239 BusinessDayConvention fixedPaymentConvention () const ;
225240 DateGeneration::Rule rule () const ;
241+ void fromXML (XMLNode* node) override ;
242+ XMLNode* toXML (XMLDocument& doc) const override ;
243+ void build () override ;
226244 %extend {
227245 static const ext::shared_ptr<OisConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
228246 return ext::dynamic_pointer_cast<ore::data::OisConvention>(baseInput);
@@ -242,7 +260,9 @@ class IborIndexConvention : public Convention {
242260 const QuantLib::Size settlementDays () const ;
243261 const std::string& businessDayConvention () const ;
244262 const bool endOfMonth () const ;
245-
263+ void fromXML (XMLNode* node) override ;
264+ XMLNode* toXML (XMLDocument& doc) const override ;
265+ void build () override ;
246266 %extend {
247267 static const ext::shared_ptr<IborIndexConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
248268 return ext::dynamic_pointer_cast<ore::data::IborIndexConvention>(baseInput);
@@ -260,7 +280,9 @@ class OvernightIndexConvention : public Convention {
260280 const std::string& fixingCalendar () const ;
261281 const std::string& dayCounter () const ;
262282 const QuantLib::Size settlementDays () const ;
263-
283+ void fromXML (XMLNode* node) override ;
284+ XMLNode* toXML (XMLDocument& doc) const override ;
285+ void build () override ;
264286 %extend {
265287 static const ext::shared_ptr<OvernightIndexConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
266288 return ext::dynamic_pointer_cast<ore::data::OvernightIndexConvention>(baseInput);
@@ -274,6 +296,9 @@ class SwapIndexConvention : public Convention {
274296 SwapIndexConvention ();
275297 SwapIndexConvention (const std::string& id,const std::string& conventions);
276298 const std::string& conventions () const ;
299+ void fromXML (XMLNode* node) override ;
300+ XMLNode* toXML (XMLDocument& doc) const override ;
301+ void build () override ;
277302 %extend {
278303 static const ext::shared_ptr<SwapIndexConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
279304 return ext::dynamic_pointer_cast<ore::data::SwapIndexConvention>(baseInput);
@@ -298,6 +323,9 @@ class IRSwapConvention : public Convention {
298323 bool hasSubPeriod () const ;
299324 Frequency floatFrequency () const ;
300325 QuantExt::SubPeriodsCoupon1::Type subPeriodsCouponType () const ;
326+ void fromXML (XMLNode* node) override ;
327+ XMLNode* toXML (XMLDocument& doc) const override ;
328+ void build () override ;
301329 %extend {
302330 static const ext::shared_ptr<IRSwapConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
303331 return ext::dynamic_pointer_cast<ore::data::IRSwapConvention>(baseInput);
@@ -324,6 +352,9 @@ class AverageOisConvention : public Convention {
324352 const ext::shared_ptr<OvernightIndex> index () const ;
325353 const Period& onTenor () const ;
326354 Natural rateCutoff () const ;
355+ void fromXML (XMLNode* node) override ;
356+ XMLNode* toXML (XMLDocument& doc) const override ;
357+ void build () override ;
327358 %extend {
328359 static const ext::shared_ptr<AverageOisConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
329360 return ext::dynamic_pointer_cast<ore::data::AverageOisConvention>(baseInput);
@@ -347,6 +378,9 @@ class TenorBasisSwapConvention : public Convention {
347378 bool spreadOnRec () const ;
348379 bool includeSpread () const ;
349380 QuantExt::SubPeriodsCoupon1::Type subPeriodsCouponType () const ;
381+ void fromXML (XMLNode* node) override ;
382+ XMLNode* toXML (XMLDocument& doc) const override ;
383+ void build () override ;
350384 %extend {
351385 static const ext::shared_ptr<TenorBasisSwapConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
352386 return ext::dynamic_pointer_cast<ore::data::TenorBasisSwapConvention>(baseInput);
@@ -374,6 +408,9 @@ class TenorBasisTwoSwapConvention : public Convention {
374408 const DayCounter& shortFixedDayCounter () const ;
375409 const ext::shared_ptr<IborIndex> shortIndex () const ;
376410 bool longMinusShort () const ;
411+ void fromXML (XMLNode* node) override ;
412+ XMLNode* toXML (XMLDocument& doc) const override ;
413+ void build () override ;
377414 %extend {
378415 static const ext::shared_ptr<TenorBasisTwoSwapConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
379416 return ext::dynamic_pointer_cast<ore::data::TenorBasisTwoSwapConvention>(baseInput);
@@ -391,6 +428,9 @@ class BMABasisSwapConvention : public Convention {
391428 const ext::shared_ptr<BMAIndexWrapper> bmaIndex () const ;
392429 const std::string& indexName () const ;
393430 const std::string& bmaIndexName () const ;
431+ void fromXML (XMLNode* node) override ;
432+ XMLNode* toXML (XMLDocument& doc) const override ;
433+ void build () override ;
394434 %extend {
395435 static const ext::shared_ptr<BMABasisSwapConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
396436 return ext::dynamic_pointer_cast<ore::data::BMABasisSwapConvention>(baseInput);
@@ -412,6 +452,9 @@ class FXConvention : public Convention {
412452 Real pointsFactor () const ;
413453 const Calendar& advanceCalendar () const ;
414454 bool spotRelative () const ;
455+ void fromXML (XMLNode* node) override ;
456+ XMLNode* toXML (XMLDocument& doc) const override ;
457+ void build () override ;
415458 %extend {
416459 static const ext::shared_ptr<FXConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
417460 return ext::dynamic_pointer_cast<ore::data::FXConvention>(baseInput);
@@ -435,6 +478,9 @@ class CrossCcyBasisSwapConvention : public Convention {
435478 const std::string& flatIndexName () const ;
436479 const std::string& spreadIndexName () const ;
437480 bool eom () const ;
481+ void fromXML (XMLNode* node) override ;
482+ XMLNode* toXML (XMLDocument& doc) const override ;
483+ void build () override ;
438484 %extend {
439485 static const ext::shared_ptr<CrossCcyBasisSwapConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
440486 return ext::dynamic_pointer_cast<ore::data::CrossCcyBasisSwapConvention>(baseInput);
@@ -460,6 +506,9 @@ class CrossCcyFixFloatSwapConvention : public Convention {
460506 const DayCounter& fixedDayCounter () const ;
461507 const ext::shared_ptr<IborIndex> index () const ;
462508 bool eom () const ;
509+ void fromXML (XMLNode* node) override ;
510+ XMLNode* toXML (XMLDocument& doc) const override ;
511+ void build () override ;
463512 %extend {
464513 static const ext::shared_ptr<CrossCcyFixFloatSwapConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
465514 return ext::dynamic_pointer_cast<ore::data::CrossCcyFixFloatSwapConvention>(baseInput);
@@ -484,6 +533,9 @@ class CdsConvention : public Convention {
484533 const DayCounter& dayCounter () const ;
485534 bool settlesAccrual () const ;
486535 bool paysAtDefaultTime () const ;
536+ void fromXML (XMLNode* node) override ;
537+ XMLNode* toXML (XMLDocument& doc) const override ;
538+ void build () override ;
487539 %extend {
488540 static const ext::shared_ptr<CdsConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
489541 return ext::dynamic_pointer_cast<ore::data::CdsConvention>(baseInput);
@@ -510,6 +562,9 @@ class InflationSwapConvention : public Convention {
510562 bool adjustInfObsDates () const ;
511563 const Calendar& infCalendar () const ;
512564 BusinessDayConvention infConvention () const ;
565+ void fromXML (XMLNode* node) override ;
566+ XMLNode* toXML (XMLDocument& doc) const override ;
567+ void build () override ;
513568 %extend {
514569 static const ext::shared_ptr<InflationSwapConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
515570 return ext::dynamic_pointer_cast<ore::data::InflationSwapConvention>(baseInput);
@@ -534,6 +589,9 @@ class SecuritySpreadConvention : public Convention {
534589 const Calendar& spotCalendar () const ;
535590 BusinessDayConvention rollConvention () const ;
536591 bool eom ();
592+ void fromXML (XMLNode* node) override ;
593+ XMLNode* toXML (XMLDocument& doc) const override ;
594+ void build () override ;
537595 %extend {
538596 static const ext::shared_ptr<SecuritySpreadConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
539597 return ext::dynamic_pointer_cast<ore::data::SecuritySpreadConvention>(baseInput);
@@ -556,6 +614,9 @@ class CmsSpreadOptionConvention : public Convention {
556614 const QuantLib::Calendar& calendar () const ;
557615 const QuantLib::DayCounter& dayCounter () const ;
558616 QuantLib::BusinessDayConvention rollConvention () const ;
617+ void fromXML (XMLNode* node) override ;
618+ XMLNode* toXML (XMLDocument& doc) const override ;
619+ void build () override ;
559620 %extend {
560621 static const ext::shared_ptr<CmsSpreadOptionConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
561622 return ext::dynamic_pointer_cast<ore::data::CmsSpreadOptionConvention>(baseInput);
@@ -578,6 +639,9 @@ class CommodityForwardConvention : public Convention {
578639 bool spotRelative () const ;
579640 QuantLib::BusinessDayConvention bdc () const ;
580641 bool outright () const ;
642+ void fromXML (XMLNode* node) override ;
643+ XMLNode* toXML (XMLDocument& doc) const override ;
644+ void build () override ;
581645 %extend {
582646 static const ext::shared_ptr<CommodityForwardConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
583647 return ext::dynamic_pointer_cast<ore::data::CommodityForwardConvention>(baseInput);
@@ -868,6 +932,9 @@ class FxOptionConvention : public Convention {
868932 const QuantLib::DeltaVolQuote::DeltaType& longTermDeltaType () const ;
869933 const QuantLib::Option::Type& riskReversalInFavorOf () const ;
870934 const bool butterflyIsBrokerStyle () const ;
935+ void fromXML (XMLNode* node) override ;
936+ XMLNode* toXML (XMLDocument& doc) const override ;
937+ void build () override ;
871938
872939 %extend {
873940 static const ext::shared_ptr<FxOptionConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
@@ -898,6 +965,9 @@ class FxOptionTimeWeightingConvention : public Convention {
898965 const std::vector<double >& weekdayWeights () const ;
899966 const std::vector<TradingCenter>& tradingCenters () const ;
900967 const std::vector<Event>& events () const ;
968+ void fromXML (XMLNode* node) override ;
969+ XMLNode* toXML (XMLDocument& doc) const override ;
970+ void build () override ;
901971
902972 %extend {
903973 static const ext::shared_ptr<FxOptionTimeWeightingConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
@@ -923,6 +993,9 @@ class ZeroInflationIndexConvention : public Convention {
923993 QuantLib::Frequency frequency () const ;
924994 const QuantLib::Period& availabilityLag () const ;
925995 const QuantLib::Currency& currency () const ;
996+ void fromXML (XMLNode* node) override ;
997+ XMLNode* toXML (XMLDocument& doc) const override ;
998+ void build () override ;
926999
9271000 %extend {
9281001 static const ext::shared_ptr<ZeroInflationIndexConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
@@ -952,6 +1025,9 @@ class BondYieldConvention : public Convention {
9521025 QuantLib::Real accuracy () const ;
9531026 QuantLib::Size maxEvaluations () const ;
9541027 QuantLib::Real guess () const ;
1028+ void fromXML (XMLNode* node) override ;
1029+ XMLNode* toXML (XMLDocument& doc) const override ;
1030+ void build () override ;
9551031
9561032 %extend {
9571033 static const ext::shared_ptr<BondYieldConvention> getFullView (ext::shared_ptr<Convention> baseInput) {
0 commit comments