diff --git a/core/src/main/kotlin/com/r3corda/core/contracts/clauses/AllComposition.kt b/core/src/main/kotlin/com/r3corda/core/contracts/clauses/AllComposition.kt index 1deea44fdd..99dc5f528b 100644 --- a/core/src/main/kotlin/com/r3corda/core/contracts/clauses/AllComposition.kt +++ b/core/src/main/kotlin/com/r3corda/core/contracts/clauses/AllComposition.kt @@ -9,6 +9,7 @@ import java.util.* /** * Compose a number of clauses, such that all of the clauses must run for verification to pass. */ +// TODO: Rename to AllOf class AllComposition(firstClause: Clause, vararg remainingClauses: Clause) : CompositeClause() { override val clauses = ArrayList>() diff --git a/core/src/main/kotlin/com/r3corda/core/contracts/clauses/AnyComposition.kt b/core/src/main/kotlin/com/r3corda/core/contracts/clauses/AnyComposition.kt index 00d7e671f4..a00e95bdd1 100644 --- a/core/src/main/kotlin/com/r3corda/core/contracts/clauses/AnyComposition.kt +++ b/core/src/main/kotlin/com/r3corda/core/contracts/clauses/AnyComposition.kt @@ -9,6 +9,7 @@ import java.util.* /** * Compose a number of clauses, such that any number of the clauses can run. */ +// TODO: Rename to AnyOf class AnyComposition(vararg rawClauses: Clause) : CompositeClause() { override val clauses: List> = rawClauses.asList() diff --git a/core/src/main/kotlin/com/r3corda/core/contracts/clauses/FilterOn.kt b/core/src/main/kotlin/com/r3corda/core/contracts/clauses/FilterOn.kt new file mode 100644 index 0000000000..3574d17593 --- /dev/null +++ b/core/src/main/kotlin/com/r3corda/core/contracts/clauses/FilterOn.kt @@ -0,0 +1,25 @@ +package com.r3corda.core.contracts.clauses + +import com.r3corda.core.contracts.AuthenticatedObject +import com.r3corda.core.contracts.CommandData +import com.r3corda.core.contracts.ContractState +import com.r3corda.core.contracts.TransactionForContract + +/** + * Filter the states that are passed through to the wrapped clause, to restrict them to a specific type. + */ +class FilterOn(val clause: Clause, + val filterStates: (List) -> List) : Clause() { + override val requiredCommands: Set> + = clause.requiredCommands + + override fun getExecutionPath(commands: List>): List> + = clause.getExecutionPath(commands) + + override fun verify(tx: TransactionForContract, + inputs: List, + outputs: List, + commands: List>, + groupingKey: K?): Set + = clause.verify(tx, filterStates(inputs), filterStates(outputs), commands, groupingKey) +} \ No newline at end of file diff --git a/core/src/main/kotlin/com/r3corda/core/contracts/clauses/FirstComposition.kt b/core/src/main/kotlin/com/r3corda/core/contracts/clauses/FirstComposition.kt index 49101c6f84..100234ed32 100644 --- a/core/src/main/kotlin/com/r3corda/core/contracts/clauses/FirstComposition.kt +++ b/core/src/main/kotlin/com/r3corda/core/contracts/clauses/FirstComposition.kt @@ -10,6 +10,7 @@ import java.util.* /** * Compose a number of clauses, such that the first match is run, and it errors if none is run. */ +// TODO: Rename to FirstOf class FirstComposition(val firstClause: Clause, vararg remainingClauses: Clause) : CompositeClause() { companion object { val logger = loggerFor>()