From 607ba634fea2c77bb0ff6ee3a8965fc73a1a74e8 Mon Sep 17 00:00:00 2001 From: Ross Nicoll Date: Tue, 27 Sep 2016 12:12:15 +0100 Subject: [PATCH] Add filter composition for clauses --- .../core/contracts/clauses/AllComposition.kt | 1 + .../core/contracts/clauses/AnyComposition.kt | 1 + .../core/contracts/clauses/FilterOn.kt | 25 +++++++++++++++++++ .../contracts/clauses/FirstComposition.kt | 1 + 4 files changed, 28 insertions(+) create mode 100644 core/src/main/kotlin/com/r3corda/core/contracts/clauses/FilterOn.kt 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>()