Commit 5bb51892 by Amelin Konstantin

delete attrEmpty check from render, delete product type from RepoTemplate

parent 455fe23c
......@@ -4,15 +4,6 @@ import scala.util.Try
import scala.xml.Node
final class RepoTemplate(source: Node) extends TradeTemplate(source) {
trait ProductType
case object Equity extends ProductType
case object Bond extends ProductType
private[this] val productType = (source \ "trade" \ "repo" \ "productType").head.text.mkString match {
case "Equity:Repo:EquityRepo" => Equity
case "InterestRate:Repo:BondRepo" => Bond
}
protected[this] def templateTrade: Node = {
<fpml:trade>
<fpml:tradeHeader>
......@@ -124,26 +115,24 @@ final class RepoTemplate(source: Node) extends TradeTemplate(source) {
<fpmlext:repo xsi:type="rtsrep:Repo">
<fpml:productId>{ get(Try { (source \ "trade" \ "repo" \ "productType" ).head }) }</fpml:productId>
<fpml:productId productIdScheme={ get(Try { (source \ "trade" \ "repo" \ "productId" ).head }, "productIdScheme") }>{ get(Try { (source \ "trade" \ "repo" \ "productId" ).head }) }</fpml:productId>
{ if (productType == Equity)
<fpmlext:fixedRateSchedule>
<fpml:initialValue>{ get(Try { (source \ "trade" \ "repo" \ "fixedRateSchedule" \ "initialValue").head }) }</fpml:initialValue>
<step>
<stepDate>{ get(Try { (source \ "trade" \ "repo" \ "fixedRateSchedule" \\ "stepDate").head }) }</stepDate>
<stepValue>{ get(Try { (source \ "trade" \ "repo" \ "fixedRateSchedule" \\ "stepValue").head }) }</stepValue>
</step>
</fpmlext:fixedRateSchedule>
else if (productType == Bond)
<fpmlext:floatingRateCalculation>
<fpml:floatingRateIndex>{ get(Try { (source \ "trade" \ "repo" \ "floatingRateCalculation" \ "floatingRateIndex" ).head }) }</fpml:floatingRateIndex>
<indexTenor>
<periodMultiplier>{ get(Try { (source \ "trade" \ "repo" \ "floatingRateCalculation" \\ "periodMultiplier" ).head }) }</periodMultiplier>
<period>{ get(Try { (source \ "trade" \ "repo" \ "floatingRateCalculation" \\ "period" ).head }) }</period>
</indexTenor>
<spreadSchedule>
<initialValue>{ get(Try { (source \ "trade" \ "repo" \ "floatingRateCalculation" \\ "initialValue" ).head }) }</initialValue>
</spreadSchedule>
<initialRate>{ get(Try { (source \ "trade" \ "repo" \ "floatingRateCalculation" \\ "initialRate" ).head }) }</initialRate>
</fpmlext:floatingRateCalculation>
{ <fpmlext:fixedRateSchedule>
<fpml:initialValue>{ get(Try { (source \ "trade" \ "repo" \ "fixedRateSchedule" \ "initialValue").head }) }</fpml:initialValue>
<step>
<stepDate>{ get(Try { (source \ "trade" \ "repo" \ "fixedRateSchedule" \\ "stepDate").head }) }</stepDate>
<stepValue>{ get(Try { (source \ "trade" \ "repo" \ "fixedRateSchedule" \\ "stepValue").head }) }</stepValue>
</step>
</fpmlext:fixedRateSchedule>
<fpmlext:floatingRateCalculation>
<fpml:floatingRateIndex>{ get(Try { (source \ "trade" \ "repo" \ "floatingRateCalculation" \ "floatingRateIndex" ).head }) }</fpml:floatingRateIndex>
<indexTenor>
<periodMultiplier>{ get(Try { (source \ "trade" \ "repo" \ "floatingRateCalculation" \\ "periodMultiplier" ).head }) }</periodMultiplier>
<period>{ get(Try { (source \ "trade" \ "repo" \ "floatingRateCalculation" \\ "period" ).head }) }</period>
</indexTenor>
<spreadSchedule>
<initialValue>{ get(Try { (source \ "trade" \ "repo" \ "floatingRateCalculation" \\ "initialValue" ).head }) }</initialValue>
</spreadSchedule>
<initialRate>{ get(Try { (source \ "trade" \ "repo" \ "floatingRateCalculation" \\ "initialRate" ).head }) }</initialRate>
</fpmlext:floatingRateCalculation>
}
<fpmlext:dayCountFraction>{ get(Try { (source \ "trade" \ "repo" \ "dayCountFraction" ).head }) }</fpmlext:dayCountFraction>
<fpmlext:spotLeg xsi:type="rtsrep:RepoTransactionLeg">
......@@ -192,14 +181,12 @@ final class RepoTemplate(source: Node) extends TradeTemplate(source) {
</rtsrep:deliveryDate>
*/}
</fpmlext:forwardLeg>
{ if (productType == Equity)
<fpml:equity id={ get(Try { (source \ "trade" \ "repo" \ "equity").head }, "id") }>
<fpml:instrumentId instrumentIdScheme="">{ get(Try { (source \ "trade" \ "repo" \ "equity" \ "instrumentId").head }) }</fpml:instrumentId>
</fpml:equity>
else if (productType == Bond)
<fpml:bond id={ get(Try { (source \ "trade" \ "repo" \ "bond").head }, "id") }>
<fpml:instrumentId instrumentIdScheme="">{ get(Try { (source \ "trade" \ "repo" \ "bond" \ "instrumentId").head }) }</fpml:instrumentId>
</fpml:bond>
{ <fpml:equity id={ get(Try { (source \ "trade" \ "repo" \ "equity").head }, "id") }>
<fpml:instrumentId instrumentIdScheme="">{ get(Try { (source \ "trade" \ "repo" \ "equity" \ "instrumentId").head }) }</fpml:instrumentId>
</fpml:equity>
<fpml:bond id={ get(Try { (source \ "trade" \ "repo" \ "bond").head }, "id") }>
<fpml:instrumentId instrumentIdScheme="">{ get(Try { (source \ "trade" \ "repo" \ "bond" \ "instrumentId").head }) }</fpml:instrumentId>
</fpml:bond>
}
</fpmlext:repo>
<fpml:documentation>
......
......@@ -64,11 +64,6 @@ abstract class Template(protected[this] val source: Node) {
def template: Node
def render: Node = {
def attrIsEmpty(n: Node): Boolean = n match {
case v: Elem if v.child.isEmpty => v.attributes.isEmpty
case _ => n.attributes.isEmpty && n.child.forall(attrIsEmpty)
}
val rule1: RewriteRule = new RewriteRule {
override def transform(n: Node): NodeSeq = n match {
case v: Elem if v.attributes.nonEmpty && v.attributes.value.text.contains(msgNotFound) =>
......@@ -81,7 +76,7 @@ abstract class Template(protected[this] val source: Node) {
override def transform(n: Node): NodeSeq = n match {
case v if v.text == msgNotFound =>
NodeSeq.Empty
case v: Elem if attrIsEmpty(v) && v.text.filterNot(_.isWhitespace).isEmpty =>
case v: Elem if v.text.filterNot(_.isWhitespace).isEmpty =>
NodeSeq.Empty
case _ => n
}
......
......@@ -56,7 +56,7 @@ class TemplateSpec extends WordSpec {
{ get(Try { (source \\ "repo" \ "from").head }) }
</from>
<to href={ get(Try { (source \\ "repo" \ "to").head }, "href") }>
{ get(Try { (source \\ "repo" \ "notExist").head }) }
{ get(Try { (source \\ "repo" \ "to").head }) }
</to>
</repo>
<notFoundpart>{ get(Try { (source \\ "notFoundpart").head }) }</notFoundpart>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment