Vault Query fix: query by multiple issuer party names. ()

* Fixed query by multiple issuer party names.

* Changes following feedback from PR review.
Added changelog entry.
This commit is contained in:
josecoll 2017-08-04 16:22:21 +01:00 committed by GitHub
parent 42e29d3b22
commit 67361188e5
3 changed files with 27 additions and 2 deletions
docs/source
node/src
main/kotlin/net/corda/node/services/vault
test/kotlin/net/corda/node/services/vault

@ -62,6 +62,8 @@ UNRELEASED
.. Milestone 15:
* Vault Query fix: filter by multiple issuer names in ``FungibleAssetQueryCriteria``
* Following deprecated methods have been removed:
* In ``DataFeed``
* ``first`` and ``current``, replaced by ``snapshot``

@ -242,8 +242,8 @@ class HibernateQueryCriteriaParser(val contractType: Class<out ContractState>,
criteria.issuerPartyName?.let {
val issuerParties = criteria.issuerPartyName as List<AbstractParty>
val joinFungibleStateToParty = vaultFungibleStates.join<VaultSchemaV1.VaultFungibleStates, CommonSchemaV1.Party>("issuerParty")
val dealPartyKeys = issuerParties.map { it.nameOrNull().toString() }
predicateSet.add(criteriaBuilder.equal(joinFungibleStateToParty.get<CommonSchemaV1.Party>("name"), dealPartyKeys))
val issuerPartyNames = issuerParties.map { it.nameOrNull().toString() }
predicateSet.add(criteriaBuilder.and(joinFungibleStateToParty.get<CommonSchemaV1.Party>("name").`in`(issuerPartyNames)))
}
// issuer reference

@ -1392,6 +1392,29 @@ class VaultQueryTests : TestDependencyInjectionBase() {
}
}
@Test
fun `unconsumed fungible assets for selected issuer parties`() {
// GBP issuer
val GBP_CASH_ISSUER_KEY by lazy { entropyToKeyPair(BigInteger.valueOf(1001)) }
val GBP_CASH_ISSUER by lazy { Party(X500Name("CN=British Pounds Cash Issuer,O=R3,OU=corda,L=London,C=GB"), GBP_CASH_ISSUER_KEY.public).ref(1) }
// USD issuer
val USD_CASH_ISSUER_KEY by lazy { entropyToKeyPair(BigInteger.valueOf(1002)) }
val USD_CASH_ISSUER by lazy { Party(X500Name("CN=US Dollars Cash Issuer,O=R3,OU=corda,L=New York,C=US"), USD_CASH_ISSUER_KEY.public).ref(1) }
// CHF issuer
val CHF_CASH_ISSUER_KEY by lazy { entropyToKeyPair(BigInteger.valueOf(1003)) }
val CHF_CASH_ISSUER by lazy { Party(X500Name("CN=Swiss Francs Cash Issuer,O=R3,OU=corda,L=Zurich,C=CH"), CHF_CASH_ISSUER_KEY.public).ref(1) }
database.transaction {
services.fillWithSomeTestCash(100.POUNDS, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = (GBP_CASH_ISSUER), issuerKey = (GBP_CASH_ISSUER_KEY))
services.fillWithSomeTestCash(100.DOLLARS, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = (USD_CASH_ISSUER), issuerKey = (USD_CASH_ISSUER_KEY))
services.fillWithSomeTestCash(100.SWISS_FRANCS, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = (CHF_CASH_ISSUER), issuerKey = (CHF_CASH_ISSUER_KEY))
val criteria = FungibleAssetQueryCriteria(issuerPartyName = listOf(GBP_CASH_ISSUER.party, USD_CASH_ISSUER.party))
val results = vaultQuerySvc.queryBy<FungibleAsset<*>>(criteria)
assertThat(results.states).hasSize(2)
}
}
@Test
fun `unconsumed fungible assets by owner`() {
database.transaction {