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