mirror of
https://github.com/corda/corda.git
synced 2024-12-22 14:22:28 +00:00
Re-applied changes following net.corda rebase.
This commit is contained in:
parent
9d7bfe4229
commit
5dfffb1b84
@ -38,8 +38,7 @@ val DEFAULT_SESSION_ID = 0L
|
|||||||
* Active means they haven't been consumed yet (or we don't know about it).
|
* Active means they haven't been consumed yet (or we don't know about it).
|
||||||
* Relevant means they contain at least one of our pubkeys.
|
* Relevant means they contain at least one of our pubkeys.
|
||||||
*/
|
*/
|
||||||
class Vault(val states: Iterable<StateAndRef<ContractState>>,
|
class Vault(val states: Iterable<StateAndRef<ContractState>>) {
|
||||||
val transactionNotes: Map<SecureHash, Set<String>> = emptyMap()) {
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
inline fun <reified T : ContractState> statesOfType() = states.filter { it.state.data is T } as List<StateAndRef<T>>
|
inline fun <reified T : ContractState> statesOfType() = states.filter { it.state.data is T } as List<StateAndRef<T>>
|
||||||
|
|
||||||
|
@ -45,9 +45,12 @@ class NodeVaultService(private val services: ServiceHub) : SingletonSerializeAsT
|
|||||||
val stateRef = stateRef("transaction_id", "output_index")
|
val stateRef = stateRef("transaction_id", "output_index")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private data class TxnNote(val txnId: SecureHash, val note: String) {
|
||||||
|
override fun toString() = "$txnId: $note"
|
||||||
|
}
|
||||||
|
|
||||||
private object TransactionNotesTable : JDBCHashedTable("${NODE_DATABASE_PREFIX}vault_txn_notes") {
|
private object TransactionNotesTable : JDBCHashedTable("${NODE_DATABASE_PREFIX}vault_txn_notes") {
|
||||||
val txnId = secureHash("txnId")
|
val txnNote = txnNote("txnId", "note")
|
||||||
val notes = text("notes")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private val mutex = ThreadBox(content = object {
|
private val mutex = ThreadBox(content = object {
|
||||||
@ -60,21 +63,12 @@ class NodeVaultService(private val services: ServiceHub) : SingletonSerializeAsT
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val transactionNotes = object : AbstractJDBCHashMap<SecureHash, Set<String>, TransactionNotesTable>(TransactionNotesTable, loadOnInit = false) {
|
val transactionNotes = object : AbstractJDBCHashSet<TxnNote, TransactionNotesTable>(TransactionNotesTable) {
|
||||||
override fun keyFromRow(row: ResultRow): SecureHash {
|
override fun elementFromRow(row: ResultRow): TxnNote = TxnNote(row[table.txnNote.txId], row[table.txnNote.note])
|
||||||
return row[table.txnId]
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun valueFromRow(row: ResultRow): Set<String> {
|
override fun addElementToInsert(insert: InsertStatement, entry: TxnNote, finalizables: MutableList<() -> Unit>) {
|
||||||
return row[table.notes].split(delimiters = ";").toSet()
|
insert[table.txnNote.txId] = entry.txnId
|
||||||
}
|
insert[table.txnNote.note] = entry.note
|
||||||
|
|
||||||
override fun addKeyToInsert(insert: InsertStatement, entry: Map.Entry<SecureHash, Set<String>>, finalizables: MutableList<() -> Unit>) {
|
|
||||||
insert[table.txnId] = entry.key
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun addValueToInsert(insert: InsertStatement, entry: Map.Entry<SecureHash, Set<String>>, finalizables: MutableList<() -> Unit>) {
|
|
||||||
insert[table.notes] = entry.value.joinToString(separator = ";")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,14 +95,14 @@ class NodeVaultService(private val services: ServiceHub) : SingletonSerializeAsT
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
override val currentVault: Vault get() = mutex.locked { Vault(allUnconsumedStates(), transactionNotes) }
|
override val currentVault: Vault get() = mutex.locked { Vault(allUnconsumedStates()) }
|
||||||
|
|
||||||
override val updates: Observable<Vault.Update>
|
override val updates: Observable<Vault.Update>
|
||||||
get() = mutex.locked { _updatesPublisher }
|
get() = mutex.locked { _updatesPublisher }
|
||||||
|
|
||||||
override fun track(): Pair<Vault, Observable<Vault.Update>> {
|
override fun track(): Pair<Vault, Observable<Vault.Update>> {
|
||||||
return mutex.locked {
|
return mutex.locked {
|
||||||
Pair(Vault(allUnconsumedStates(), transactionNotes), _updatesPublisher.bufferUntilSubscribed())
|
Pair(Vault(allUnconsumedStates()), _updatesPublisher.bufferUntilSubscribed())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,16 +128,13 @@ class NodeVaultService(private val services: ServiceHub) : SingletonSerializeAsT
|
|||||||
|
|
||||||
override fun addNoteToTransaction(txnId: SecureHash, noteText: String) {
|
override fun addNoteToTransaction(txnId: SecureHash, noteText: String) {
|
||||||
mutex.locked {
|
mutex.locked {
|
||||||
val notes = transactionNotes.getOrPut(key = txnId, defaultValue = {
|
transactionNotes.add(TxnNote(txnId, noteText))
|
||||||
setOf(noteText)
|
|
||||||
})
|
|
||||||
transactionNotes.put(txnId, notes.plus(noteText))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTransactionNotes(txnId: SecureHash): Iterable<String> {
|
override fun getTransactionNotes(txnId: SecureHash): Iterable<String> {
|
||||||
mutex.locked {
|
mutex.locked {
|
||||||
return transactionNotes.get(txnId)!!.asIterable()
|
return transactionNotes.filter { it.txnId == txnId }.map { it.note }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,6 +140,7 @@ class StrandLocalTransactionManager(initWithDatabase: Database) : TransactionMan
|
|||||||
// Composite columns for use with below Exposed helpers.
|
// Composite columns for use with below Exposed helpers.
|
||||||
data class PartyColumns(val name: Column<String>, val owningKey: Column<PublicKeyTree>)
|
data class PartyColumns(val name: Column<String>, val owningKey: Column<PublicKeyTree>)
|
||||||
data class StateRefColumns(val txId: Column<SecureHash>, val index: Column<Int>)
|
data class StateRefColumns(val txId: Column<SecureHash>, val index: Column<Int>)
|
||||||
|
data class TxnNoteColumns(val txId: Column<SecureHash>, val note: Column<String>)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [Table] column helpers for use with Exposed, as per [varchar] etc.
|
* [Table] column helpers for use with Exposed, as per [varchar] etc.
|
||||||
@ -154,6 +155,7 @@ fun Table.localDate(name: String) = this.registerColumn<LocalDate>(name, LocalDa
|
|||||||
fun Table.localDateTime(name: String) = this.registerColumn<LocalDateTime>(name, LocalDateTimeColumnType)
|
fun Table.localDateTime(name: String) = this.registerColumn<LocalDateTime>(name, LocalDateTimeColumnType)
|
||||||
fun Table.instant(name: String) = this.registerColumn<Instant>(name, InstantColumnType)
|
fun Table.instant(name: String) = this.registerColumn<Instant>(name, InstantColumnType)
|
||||||
fun Table.stateRef(txIdColumnName: String, indexColumnName: String) = StateRefColumns(this.secureHash(txIdColumnName), this.integer(indexColumnName))
|
fun Table.stateRef(txIdColumnName: String, indexColumnName: String) = StateRefColumns(this.secureHash(txIdColumnName), this.integer(indexColumnName))
|
||||||
|
fun Table.txnNote(txIdColumnName: String, txnNoteColumnName: String) = TxnNoteColumns(this.secureHash(txIdColumnName), this.text(txnNoteColumnName))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [ColumnType] for marshalling to/from database on behalf of [PublicKey].
|
* [ColumnType] for marshalling to/from database on behalf of [PublicKey].
|
||||||
|
@ -112,7 +112,6 @@ class NodeVaultServiceTest {
|
|||||||
services.vaultService.addNoteToTransaction(usefulTX.id, "USD Sample Note 1")
|
services.vaultService.addNoteToTransaction(usefulTX.id, "USD Sample Note 1")
|
||||||
services.vaultService.addNoteToTransaction(usefulTX.id, "USD Sample Note 2")
|
services.vaultService.addNoteToTransaction(usefulTX.id, "USD Sample Note 2")
|
||||||
services.vaultService.addNoteToTransaction(usefulTX.id, "USD Sample Note 3")
|
services.vaultService.addNoteToTransaction(usefulTX.id, "USD Sample Note 3")
|
||||||
assertEquals(1, services.vaultService.currentVault.transactionNotes.toList().size)
|
|
||||||
assertEquals(3, services.vaultService.getTransactionNotes(usefulTX.id).count())
|
assertEquals(3, services.vaultService.getTransactionNotes(usefulTX.id).count())
|
||||||
|
|
||||||
// Issue more Money (GBP)
|
// Issue more Money (GBP)
|
||||||
@ -124,7 +123,6 @@ class NodeVaultServiceTest {
|
|||||||
services.recordTransactions(listOf(anotherTX))
|
services.recordTransactions(listOf(anotherTX))
|
||||||
|
|
||||||
services.vaultService.addNoteToTransaction(anotherTX.id, "GPB Sample Note 1")
|
services.vaultService.addNoteToTransaction(anotherTX.id, "GPB Sample Note 1")
|
||||||
assertEquals(2, services.vaultService.currentVault.transactionNotes.toList().size)
|
|
||||||
assertEquals(1, services.vaultService.getTransactionNotes(anotherTX.id).count())
|
assertEquals(1, services.vaultService.getTransactionNotes(anotherTX.id).count())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user