client, explorer: Rearrange/add tx screen columns

This commit is contained in:
Andras Slemmer 2016-09-12 13:42:31 +01:00
parent 041c33a167
commit 01d879772d
4 changed files with 60 additions and 44 deletions

View File

@ -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))
}
)
}

View File

@ -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(",") }
}

View File

@ -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>

View File

@ -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)"