mirror of
https://github.com/corda/corda.git
synced 2025-05-31 14:40:52 +00:00
client, explorer: Rearrange/add tx screen columns
This commit is contained in:
parent
041c33a167
commit
01d879772d
@ -16,8 +16,8 @@ import java.util.UUID
|
|||||||
interface GatheredTransactionData {
|
interface GatheredTransactionData {
|
||||||
val fiberId: ObservableValue<Long?>
|
val fiberId: ObservableValue<Long?>
|
||||||
val uuid: ObservableValue<UUID?>
|
val uuid: ObservableValue<UUID?>
|
||||||
val protocolName: ObservableValue<String?>
|
|
||||||
val protocolStatus: ObservableValue<ProtocolStatus?>
|
val protocolStatus: ObservableValue<ProtocolStatus?>
|
||||||
|
val stateMachineStatus: ObservableValue<StateMachineStatus?>
|
||||||
val transaction: ObservableValue<LedgerTransaction?>
|
val transaction: ObservableValue<LedgerTransaction?>
|
||||||
val status: ObservableValue<TransactionCreateStatus?>
|
val status: ObservableValue<TransactionCreateStatus?>
|
||||||
val lastUpdate: ObservableValue<Instant>
|
val lastUpdate: ObservableValue<Instant>
|
||||||
@ -30,17 +30,19 @@ sealed class TransactionCreateStatus(val message: String?) {
|
|||||||
override fun toString(): String = message ?: javaClass.simpleName
|
override fun toString(): String = message ?: javaClass.simpleName
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed class ProtocolStatus(val status: String?) {
|
data class ProtocolStatus(
|
||||||
object Added: ProtocolStatus(null)
|
val status: String
|
||||||
object Removed: ProtocolStatus(null)
|
)
|
||||||
class InProgress(status: String): ProtocolStatus(status)
|
sealed class StateMachineStatus(val stateMachineName: String) {
|
||||||
override fun toString(): String = status ?: javaClass.simpleName
|
class Added(stateMachineName: String): StateMachineStatus(stateMachineName)
|
||||||
|
class Removed(stateMachineName: String): StateMachineStatus(stateMachineName)
|
||||||
|
override fun toString(): String = "${javaClass.simpleName}($stateMachineName)"
|
||||||
}
|
}
|
||||||
|
|
||||||
data class GatheredTransactionDataWritable(
|
data class GatheredTransactionDataWritable(
|
||||||
override val fiberId: SimpleObjectProperty<Long?> = SimpleObjectProperty(null),
|
override val fiberId: SimpleObjectProperty<Long?> = SimpleObjectProperty(null),
|
||||||
override val uuid: SimpleObjectProperty<UUID?> = SimpleObjectProperty(null),
|
override val uuid: SimpleObjectProperty<UUID?> = SimpleObjectProperty(null),
|
||||||
override val protocolName: SimpleObjectProperty<String?> = SimpleObjectProperty(null),
|
override val stateMachineStatus: SimpleObjectProperty<StateMachineStatus?> = SimpleObjectProperty(null),
|
||||||
override val protocolStatus: SimpleObjectProperty<ProtocolStatus?> = SimpleObjectProperty(null),
|
override val protocolStatus: SimpleObjectProperty<ProtocolStatus?> = SimpleObjectProperty(null),
|
||||||
override val transaction: SimpleObjectProperty<LedgerTransaction?> = SimpleObjectProperty(null),
|
override val transaction: SimpleObjectProperty<LedgerTransaction?> = SimpleObjectProperty(null),
|
||||||
override val status: SimpleObjectProperty<TransactionCreateStatus?> = SimpleObjectProperty(null),
|
override val status: SimpleObjectProperty<TransactionCreateStatus?> = SimpleObjectProperty(null),
|
||||||
@ -81,10 +83,9 @@ class GatheredTransactionDataModel {
|
|||||||
fiberId = serviceToClientEvent.fiberId,
|
fiberId = serviceToClientEvent.fiberId,
|
||||||
lastUpdate = serviceToClientEvent.time,
|
lastUpdate = serviceToClientEvent.time,
|
||||||
tweak = {
|
tweak = {
|
||||||
protocolName.set(serviceToClientEvent.label)
|
stateMachineStatus.set(when (serviceToClientEvent.addOrRemove) {
|
||||||
protocolStatus.set(when (serviceToClientEvent.addOrRemove) {
|
AddOrRemove.ADD -> StateMachineStatus.Added(serviceToClientEvent.label)
|
||||||
AddOrRemove.ADD -> ProtocolStatus.Added
|
AddOrRemove.REMOVE -> StateMachineStatus.Removed(serviceToClientEvent.label)
|
||||||
AddOrRemove.REMOVE -> ProtocolStatus.Removed
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -94,7 +95,7 @@ class GatheredTransactionDataModel {
|
|||||||
fiberId = serviceToClientEvent.fiberId,
|
fiberId = serviceToClientEvent.fiberId,
|
||||||
lastUpdate = serviceToClientEvent.time,
|
lastUpdate = serviceToClientEvent.time,
|
||||||
tweak = {
|
tweak = {
|
||||||
protocolStatus.set(ProtocolStatus.InProgress(serviceToClientEvent.message))
|
protocolStatus.set(ProtocolStatus(serviceToClientEvent.message))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import com.r3corda.contracts.asset.Cash
|
|||||||
import com.r3corda.core.contracts.Amount
|
import com.r3corda.core.contracts.Amount
|
||||||
import com.r3corda.core.contracts.CommandData
|
import com.r3corda.core.contracts.CommandData
|
||||||
import com.r3corda.core.contracts.withoutIssuer
|
import com.r3corda.core.contracts.withoutIssuer
|
||||||
import com.r3corda.core.transactions.SignedTransaction
|
|
||||||
import com.r3corda.core.contracts.*
|
import com.r3corda.core.contracts.*
|
||||||
import com.r3corda.core.crypto.Party
|
import com.r3corda.core.crypto.Party
|
||||||
import com.r3corda.core.crypto.toStringShort
|
import com.r3corda.core.crypto.toStringShort
|
||||||
@ -46,10 +45,11 @@ class TransactionViewer: View() {
|
|||||||
|
|
||||||
// Top half (transactions table)
|
// Top half (transactions table)
|
||||||
private val transactionViewTable: TableView<ViewerNode> by fxid("TransactionViewTable")
|
private val transactionViewTable: TableView<ViewerNode> by fxid("TransactionViewTable")
|
||||||
private val transactionViewTransactionId: TableColumn<ViewerNode, String> by fxid("TransactionViewTransactionId")
|
private val transactionViewFiberId: TableColumn<ViewerNode, String> by fxid("TransactionViewFiberId")
|
||||||
private val transactionViewOriginator: TableColumn<ViewerNode, String> by fxid("TransactionViewOriginator")
|
private val transactionViewClientUuid: TableColumn<ViewerNode, String> by fxid("TransactionViewClientUuid")
|
||||||
private val transactionViewTransactionStatus: TableColumn<ViewerNode, Pair<TransactionCreateStatus?, ProtocolStatus?>> by fxid("TransactionViewTransactionStatus")
|
private val transactionViewTransactionStatus: TableColumn<ViewerNode, TransactionCreateStatus?> by fxid("TransactionViewTransactionStatus")
|
||||||
private val transactionViewStatusUpdated: TableColumn<ViewerNode, Instant> by fxid("TransactionViewStatusUpdated")
|
private val transactionViewProtocolStatus: TableColumn<ViewerNode, String> by fxid("TransactionViewProtocolStatus")
|
||||||
|
private val transactionViewStateMachineStatus: TableColumn<ViewerNode, StateMachineStatus?> by fxid("TransactionViewStateMachineStatus")
|
||||||
private val transactionViewCommandTypes: TableColumn<ViewerNode, String> by fxid("TransactionViewCommandTypes")
|
private val transactionViewCommandTypes: TableColumn<ViewerNode, String> by fxid("TransactionViewCommandTypes")
|
||||||
private val transactionViewTotalValueEquiv: TableColumn<ViewerNode, AmountDiff<Currency>> by fxid("TransactionViewTotalValueEquiv")
|
private val transactionViewTotalValueEquiv: TableColumn<ViewerNode, AmountDiff<Currency>> by fxid("TransactionViewTotalValueEquiv")
|
||||||
|
|
||||||
@ -94,7 +94,9 @@ class TransactionViewer: View() {
|
|||||||
data class ViewerNode(
|
data class ViewerNode(
|
||||||
val transactionId: ObservableValue<Pair<Long?, UUID?>>,
|
val transactionId: ObservableValue<Pair<Long?, UUID?>>,
|
||||||
val originator: ObservableValue<String>,
|
val originator: ObservableValue<String>,
|
||||||
val transactionStatus: ObservableValue<Pair<TransactionCreateStatus?, ProtocolStatus?>>,
|
val transactionStatus: ObservableValue<TransactionCreateStatus?>,
|
||||||
|
val stateMachineStatus: ObservableValue<StateMachineStatus?>,
|
||||||
|
val protocolStatus: ObservableValue<ProtocolStatus?>,
|
||||||
val statusUpdated: ObservableValue<Instant>,
|
val statusUpdated: ObservableValue<Instant>,
|
||||||
val commandTypes: ObservableValue<Collection<Class<CommandData>>>,
|
val commandTypes: ObservableValue<Collection<Class<CommandData>>>,
|
||||||
val totalValueEquiv: ObservableValue<AmountDiff<Currency>?>,
|
val totalValueEquiv: ObservableValue<AmountDiff<Currency>?>,
|
||||||
@ -117,9 +119,9 @@ class TransactionViewer: View() {
|
|||||||
"Us"
|
"Us"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
transactionStatus = EasyBind.combine(it.status, it.protocolStatus) { status, protocolStatus ->
|
transactionStatus = it.status,
|
||||||
Pair(status, protocolStatus)
|
protocolStatus = it.protocolStatus,
|
||||||
},
|
stateMachineStatus = it.stateMachineStatus,
|
||||||
statusUpdated = it.lastUpdate,
|
statusUpdated = it.lastUpdate,
|
||||||
commandTypes = EasyBind.map(it.transaction) {
|
commandTypes = EasyBind.map(it.transaction) {
|
||||||
val commands = mutableSetOf<Class<CommandData>>()
|
val commands = mutableSetOf<Class<CommandData>>()
|
||||||
@ -282,23 +284,15 @@ class TransactionViewer: View() {
|
|||||||
Math.floor(tableWidthWithoutPaddingAndBorder.toDouble() / transactionViewTable.columns.size).toInt()
|
Math.floor(tableWidthWithoutPaddingAndBorder.toDouble() / transactionViewTable.columns.size).toInt()
|
||||||
}
|
}
|
||||||
|
|
||||||
transactionViewTransactionId.setCellValueFactory {
|
transactionViewFiberId.setCellValueFactory { EasyBind.map (it.value.transactionId) { "${it.first ?: ""}" } }
|
||||||
EasyBind.map(it.value.transactionId) {
|
transactionViewClientUuid.setCellValueFactory { EasyBind.map (it.value.transactionId) { "${it.second ?: ""}" } }
|
||||||
val (fiberId, uuid) = it
|
transactionViewProtocolStatus.setCellValueFactory { EasyBind.map(it.value.protocolStatus) { "${it ?: ""}" } }
|
||||||
if (fiberId == null && uuid == null) {
|
|
||||||
"???"
|
|
||||||
} else {
|
|
||||||
(uuid?.toString() ?: "") + (fiberId?.let { "[$it]" } ?: "")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
transactionViewOriginator.setCellValueFactory { it.value.originator }
|
|
||||||
transactionViewTransactionStatus.setCellValueFactory { it.value.transactionStatus }
|
transactionViewTransactionStatus.setCellValueFactory { it.value.transactionStatus }
|
||||||
transactionViewTransactionStatus.setCellFactory {
|
transactionViewTransactionStatus.setCellFactory {
|
||||||
object : TableCell<ViewerNode, Pair<TransactionCreateStatus?, ProtocolStatus?>>() {
|
object : TableCell<ViewerNode, TransactionCreateStatus?>() {
|
||||||
val label = Label()
|
val label = Label()
|
||||||
override fun updateItem(
|
override fun updateItem(
|
||||||
value: Pair<TransactionCreateStatus?, ProtocolStatus?>?,
|
value: TransactionCreateStatus?,
|
||||||
empty: Boolean
|
empty: Boolean
|
||||||
) {
|
) {
|
||||||
super.updateItem(value, empty)
|
super.updateItem(value, empty)
|
||||||
@ -307,23 +301,43 @@ class TransactionViewer: View() {
|
|||||||
text = null
|
text = null
|
||||||
} else {
|
} else {
|
||||||
graphic = label
|
graphic = label
|
||||||
val backgroundFill = when (value.first) {
|
val backgroundFill = when (value) {
|
||||||
is TransactionCreateStatus.Started -> BackgroundFill(Color.TRANSPARENT, CornerRadii.EMPTY, Insets.EMPTY)
|
is TransactionCreateStatus.Started -> BackgroundFill(Color.TRANSPARENT, CornerRadii.EMPTY, Insets.EMPTY)
|
||||||
is TransactionCreateStatus.Failed -> BackgroundFill(Color.SALMON, CornerRadii.EMPTY, Insets.EMPTY)
|
is TransactionCreateStatus.Failed -> BackgroundFill(Color.SALMON, CornerRadii.EMPTY, Insets.EMPTY)
|
||||||
null -> BackgroundFill(Color.TRANSPARENT, CornerRadii.EMPTY, Insets.EMPTY)
|
null -> BackgroundFill(Color.TRANSPARENT, CornerRadii.EMPTY, Insets.EMPTY)
|
||||||
}
|
}
|
||||||
label.background = Background(backgroundFill)
|
label.background = Background(backgroundFill)
|
||||||
label.text = if (value.first == null && value.second == null) {
|
label.text = "$value"
|
||||||
"???"
|
}
|
||||||
} else {
|
}
|
||||||
(value.first?.toString() ?: "") + (value.second?.let { "[${it.toString()}]" } ?: "")
|
}
|
||||||
|
}
|
||||||
|
transactionViewStateMachineStatus.setCellValueFactory { it.value.stateMachineStatus }
|
||||||
|
transactionViewStateMachineStatus.setCellFactory {
|
||||||
|
object : TableCell<ViewerNode, StateMachineStatus?>() {
|
||||||
|
val label = Label()
|
||||||
|
override fun updateItem(
|
||||||
|
value: StateMachineStatus?,
|
||||||
|
empty: Boolean
|
||||||
|
) {
|
||||||
|
super.updateItem(value, empty)
|
||||||
|
if (value == null || empty) {
|
||||||
|
graphic = null
|
||||||
|
text = null
|
||||||
|
} else {
|
||||||
|
graphic = label
|
||||||
|
val backgroundFill = when (value) {
|
||||||
|
is StateMachineStatus.Added -> BackgroundFill(Color.LIGHTYELLOW, CornerRadii.EMPTY, Insets.EMPTY)
|
||||||
|
is StateMachineStatus.Removed -> BackgroundFill(Color.TRANSPARENT, CornerRadii.EMPTY, Insets.EMPTY)
|
||||||
|
null -> BackgroundFill(Color.TRANSPARENT, CornerRadii.EMPTY, Insets.EMPTY)
|
||||||
}
|
}
|
||||||
|
label.background = Background(backgroundFill)
|
||||||
|
label.text = "$value"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
transactionViewStatusUpdated.setCellValueFactory { it.value.statusUpdated }
|
|
||||||
transactionViewCommandTypes.setCellValueFactory {
|
transactionViewCommandTypes.setCellValueFactory {
|
||||||
EasyBind.map(it.value.commandTypes) { it.map { it.simpleName }.joinToString(",") }
|
EasyBind.map(it.value.commandTypes) { it.map { it.simpleName }.joinToString(",") }
|
||||||
}
|
}
|
||||||
|
@ -44,10 +44,11 @@
|
|||||||
<items>
|
<items>
|
||||||
<TableView fx:id="TransactionViewTable" prefHeight="200.0" prefWidth="200.0">
|
<TableView fx:id="TransactionViewTable" prefHeight="200.0" prefWidth="200.0">
|
||||||
<columns>
|
<columns>
|
||||||
<TableColumn fx:id="TransactionViewTransactionId" prefWidth="187.0" text="Transaction ID" />
|
<TableColumn fx:id="TransactionViewFiberId" prefWidth="187.0" text="Fiber ID" />
|
||||||
<TableColumn fx:id="TransactionViewOriginator" prefWidth="174.0" text="Originator" />
|
<TableColumn fx:id="TransactionViewClientUuid" prefWidth="75.0" text="Client UUID" />
|
||||||
<TableColumn fx:id="TransactionViewTransactionStatus" prefWidth="75.0" text="Transaction status" />
|
<TableColumn fx:id="TransactionViewTransactionStatus" prefWidth="75.0" text="Transaction status" />
|
||||||
<TableColumn fx:id="TransactionViewStatusUpdated" prefWidth="75.0" text="Status updated" />
|
<TableColumn fx:id="TransactionViewProtocolStatus" prefWidth="75.0" text="Protocol status" />
|
||||||
|
<TableColumn fx:id="TransactionViewStateMachineStatus" prefWidth="75.0" text="SM Status" />
|
||||||
<TableColumn fx:id="TransactionViewCommandTypes" prefWidth="75.0" text="Command type(s)" />
|
<TableColumn fx:id="TransactionViewCommandTypes" prefWidth="75.0" text="Command type(s)" />
|
||||||
<TableColumn fx:id="TransactionViewTotalValueEquiv" prefWidth="75.0" styleClass="monetary-value" text="Total value (USD equiv)" />
|
<TableColumn fx:id="TransactionViewTotalValueEquiv" prefWidth="75.0" styleClass="monetary-value" text="Total value (USD equiv)" />
|
||||||
</columns>
|
</columns>
|
||||||
|
@ -26,7 +26,7 @@ sealed class ServiceToClientEvent(val time: Instant) {
|
|||||||
val label: String,
|
val label: String,
|
||||||
val addOrRemove: AddOrRemove
|
val addOrRemove: AddOrRemove
|
||||||
) : ServiceToClientEvent(time) {
|
) : ServiceToClientEvent(time) {
|
||||||
override fun toString() = "StateMachine(${addOrRemove.name})"
|
override fun toString() = "StateMachine($label, ${addOrRemove.name})"
|
||||||
}
|
}
|
||||||
class Progress(time: Instant, val fiberId: Long, val message: String) : ServiceToClientEvent(time) {
|
class Progress(time: Instant, val fiberId: Long, val message: String) : ServiceToClientEvent(time) {
|
||||||
override fun toString() = "Progress($message)"
|
override fun toString() = "Progress($message)"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user