package Ġcom . market data . contracts Ċ Ċ import Ġcom . market data . states . DataSet State Ċ import Ġcom . market data . states . Terms And Conditions State Ċ import Ġnet . cord a . core . contracts . Command Data Ċ import Ġnet . cord a . core . contracts . Contract Ċ import Ġnet . cord a . core . contracts . Requirements . using Ċ import Ġnet . cord a . core . contracts . require Single Command Ċ import Ġnet . cord a . core . node . services . Attachment Id Ċ import Ġnet . cord a . core . transactions . Ledger Transaction Ċ Ċ class ĠTerms And Conditions Contract Ġ: ĠContract Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠID Ġ= Ġ" com . market data . contracts . Terms And Conditions Contract " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠCommands Ġ: ĠCommand Data Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠIssue ( attachment Id : ĠAttachment Id ) Ġ: ĠCommand With Attachment Id ( attachment Id ), ĠCommands ĊĠĠĠĠĠĠĠ Ġclass ĠRe voke () Ġ: Commands ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġclass ĠCommand With Attachment Id ( val Ġattachment Id : ĠAttachment Id ) Ġ: ĠCommand Data Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= Ġother ?. java Class Ġ== Ġjava Class ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġjava Class . name . hashCode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġverify ( tx : ĠLed ger Transaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcmd Ġ= Ġtx . commands . require Single Command < Commands >() ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( cmd . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Issue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġinputs Ġshould Ġbe Ġconsumed Ġwhen Ġiss uing Ġdata Ġset ." Ġusing Ġ( tx . input States . isEmpty ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Only Ġone Ġoutput Ġstate Ġshould Ġbe Ġcreated Ġwhen Ġiss uing Ġterms Ġand Ġconditions ." Ġusing Ġ( tx . output States . size Ġ== Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput State Ġ= Ġtx . output States . single () Ġas ĠTerms And Conditions State ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġissuer Ġmust Ġbe Ġthe Ġone Ġand Ġonly Ġsigner " Ġusing Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcmd . sign ers . toSet () Ġ== Ġoutput State . participants . map Ġ{ Ġit . own ing Key Ġ}. toSet ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The ĠdataSet Ġname Ġcannot Ġbe Ġempty " Ġusing Ġ( Ġoutput State . name . isNotEmpty () Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx . get Attachment ( output State . terms And Conditions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch ElementException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Terms Ġand ĠConditions Ġmust Ġbe Ġpresent ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 Ġattachments Ġ- Ġthe Ġcontract Ġjar Ġand Ġthe Ġterms Ġand Ġconditions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Only Ġone Ġattachment Ġis Ġpermitted " Ġusing Ġ( tx . attachments . size Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Re voke Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġoutputs Ġshould Ġbe Ġpresent Ġwhen Ġrev oking Ġa ĠT & C ." Ġusing Ġ( tx . output States . isEmpty ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput State Ġ= Ġtx . input States . single () Ġas ĠDataSet State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Only Ġone Ġinput Ġstate Ġshould Ġbe Ġcreated Ġwhen Ġiss uing Ġdata Ġset ." Ġusing Ġ( tx . input States . size Ġ== Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġissuer Ġmust Ġsign " Ġusing Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcmd . sign ers . toSet () Ġ== Ġinput State . participants . map Ġ{ Ġit . own ing Key Ġ}. toSet ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġname Ġcannot Ġbe Ġempty " Ġusing Ġ( Ġinput State . name . isNotEmpty () Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unknown Ġcommand : Ġ${ this . toString () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }