From ec26cf915669a2ef454b07262533182e6ab6bb4e Mon Sep 17 00:00:00 2001 From: xyzmaker123 Date: Fri, 28 Jan 2022 11:47:20 +0100 Subject: [PATCH] Fix sorting on bonded roles view --- .../main/dao/bonding/roles/RolesListItem.java | 70 ++++---- .../main/dao/bonding/roles/RolesView.java | 149 +++++++++--------- 2 files changed, 112 insertions(+), 107 deletions(-) diff --git a/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RolesListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RolesListItem.java index 40bb7f668bd..6c292503fcf 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RolesListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RolesListItem.java @@ -20,47 +20,59 @@ import bisq.core.dao.DaoFacade; import bisq.core.dao.governance.bond.BondState; import bisq.core.dao.governance.bond.role.BondedRole; +import bisq.core.dao.state.model.governance.BondedRoleType; import bisq.core.dao.state.model.governance.Role; import bisq.core.locale.Res; -import java.util.Date; - -import lombok.Value; import lombok.extern.slf4j.Slf4j; @Slf4j -@Value class RolesListItem { + private final DaoFacade daoFacade; private final BondedRole bondedRole; - private final Role role; - private final String buttonText; - private final boolean isButtonVisible; - private final BondState bondState; - private final String bondStateString; - private final String lockupTxId; - private final Date lockupDate; - RolesListItem(BondedRole bondedRole, - DaoFacade daoFacade) { + RolesListItem(BondedRole bondedRole, DaoFacade daoFacade) { + this.daoFacade = daoFacade; this.bondedRole = bondedRole; + } + + public String getLockupTxId() { + return this.bondedRole.getLockupTxId(); + } + + public Role getRole() { + return this.bondedRole.getBondedAsset(); + } + + public String getName() { + return this.getRole().getName(); + } + + public String getLink() { + return this.getRole().getLink(); + } - role = bondedRole.getBondedAsset(); - boolean isMyRole = daoFacade.isMyRole(role); - bondState = bondedRole.getBondState(); - lockupTxId = bondedRole.getLockupTxId(); - lockupDate = new Date(bondedRole.getLockupDate()); - bondStateString = Res.get("dao.bond.bondState." + bondedRole.getBondState().name()); + public BondedRoleType getType() { + return this.getRole().getBondedRoleType(); + } - boolean showLockup = bondedRole.getBondState() == BondState.READY_FOR_LOCKUP; - boolean showRevoke = bondedRole.getBondState() == BondState.LOCKUP_TX_CONFIRMED; - if (showLockup) { - buttonText = Res.get("dao.bond.table.button.lockup"); - } else if (showRevoke) { - buttonText = Res.get("dao.bond.table.button.revoke"); - } else { - buttonText = ""; - } + public String getTypeAsString() { + return this.getRole().getBondedRoleType().getDisplayString(); + } + + public long getLockupDate() { + return this.bondedRole.getLockupDate(); + } + + public String getBondStateAsString() { + return Res.get("dao.bond.bondState." + bondedRole.getBondState().name()); + } + + public boolean isLockupButtonVisible() { + return this.daoFacade.isMyRole(this.getRole()) && (this.bondedRole.getBondState() == BondState.READY_FOR_LOCKUP); + } - isButtonVisible = isMyRole && (showLockup || showRevoke); + public boolean isRevokeButtonVisible() { + return this.daoFacade.isMyRole(this.getRole()) && (this.bondedRole.getBondState() == BondState.LOCKUP_TX_CONFIRMED); } } diff --git a/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RolesView.java b/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RolesView.java index febf166e449..653f9b59db1 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RolesView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RolesView.java @@ -28,10 +28,7 @@ import bisq.desktop.util.GUIUtil; import bisq.core.dao.DaoFacade; -import bisq.core.dao.governance.bond.BondState; import bisq.core.dao.governance.bond.role.BondedRole; -import bisq.core.dao.state.model.governance.BondedRoleType; -import bisq.core.dao.state.model.governance.RoleProposal; import bisq.core.locale.Res; import bisq.core.user.Preferences; import bisq.core.util.coin.BsqFormatter; @@ -57,7 +54,6 @@ import javafx.util.Callback; import java.util.Comparator; -import java.util.Optional; import java.util.stream.Collectors; @FxmlView @@ -133,39 +129,37 @@ private void updateList() { /////////////////////////////////////////////////////////////////////////////////////////// private void createColumns() { - TableColumn column; - - column = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.name")); - column.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue())); - column.setMinWidth(80); - column.getStyleClass().add("first-column"); - column.setCellFactory( + TableColumn nameColumn = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.name")); + nameColumn.setComparator(Comparator.comparing(RolesListItem::getName, String.CASE_INSENSITIVE_ORDER)); + nameColumn.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue())); + nameColumn.setMinWidth(80); + nameColumn.getStyleClass().add("first-column"); + nameColumn.setCellFactory( new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { @Override public void updateItem(final RolesListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { - setText(item.getRole().getName()); + setText(item.getName()); } else setText(""); } }; } }); - tableView.getColumns().add(column); + tableView.getColumns().add(nameColumn); - column = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.link")); - column.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue())); - column.setMinWidth(60); - column.setCellFactory( + TableColumn linkColumn = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.link")); + linkColumn.setComparator(Comparator.comparing(RolesListItem::getLink)); + linkColumn.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue())); + linkColumn.setMinWidth(60); + linkColumn.setCellFactory( new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { private HyperlinkWithIcon hyperlinkWithIcon; @@ -173,7 +167,7 @@ public TableCell call(TableColumn GUIUtil.openWebPage(link)); hyperlinkWithIcon.setTooltip(new Tooltip(Res.get("shared.openURL", link))); @@ -187,32 +181,31 @@ public void updateItem(final RolesListItem item, boolean empty) { }; } }); - tableView.getColumns().add(column); + tableView.getColumns().add(linkColumn); - column = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.bondType")); - column.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue())); - column.setMinWidth(80); - column.setCellFactory( + TableColumn bondTypeColumn = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.bondType")); + bondTypeColumn.setComparator(Comparator.comparing(RolesListItem::getTypeAsString)); + bondTypeColumn.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue())); + bondTypeColumn.setMinWidth(80); + bondTypeColumn.setCellFactory( new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { private Hyperlink hyperlink; @Override public void updateItem(final RolesListItem item, boolean empty) { super.updateItem(item, empty); - if (item != null && !empty) { - BondedRoleType bondedRoleType = item.getRole().getBondedRoleType(); - String type = bondedRoleType.getDisplayString(); - hyperlink = new Hyperlink(type); - hyperlink.setOnAction(event -> { - Optional roleProposal = bondingViewUtils.getAcceptedBondedRoleProposal(item.getRole()); - new RoleDetailsWindow(bondedRoleType, roleProposal, daoFacade, bsqFormatter).show(); - }); - hyperlink.setTooltip(new Tooltip(Res.get("tooltip.openPopupForDetails", type))); + hyperlink = new Hyperlink(item.getTypeAsString()); + hyperlink.setOnAction(event -> new RoleDetailsWindow( + item.getType(), + bondingViewUtils.getAcceptedBondedRoleProposal(item.getRole()), + daoFacade, + bsqFormatter + ).show()); + hyperlink.setTooltip(new Tooltip(Res.get("tooltip.openPopupForDetails", item.getTypeAsString()))); setGraphic(hyperlink); } else { setGraphic(null); @@ -223,16 +216,16 @@ public void updateItem(final RolesListItem item, boolean empty) { }; } }); - tableView.getColumns().add(column); + tableView.getColumns().add(bondTypeColumn); - column = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.lockupTxId")); - column.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue())); - column.setMinWidth(80); - column.setCellFactory( + TableColumn lockupTxIdColumn = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.lockupTxId")); + lockupTxIdColumn.setComparator(Comparator.comparing(RolesListItem::getLockupTxId, Comparator.nullsFirst(Comparator.naturalOrder()))); + lockupTxIdColumn.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue())); + lockupTxIdColumn.setMinWidth(80); + lockupTxIdColumn.setCellFactory( new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { private HyperlinkWithIcon hyperlinkWithIcon; private Label label; @@ -242,11 +235,11 @@ public void updateItem(final RolesListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { - String transactionId = item.getBondedRole().getLockupTxId(); - if (transactionId != null) { - hyperlinkWithIcon = new ExternalHyperlink(transactionId); - hyperlinkWithIcon.setOnAction(event -> GUIUtil.openTxInBsqBlockExplorer(transactionId, preferences)); - hyperlinkWithIcon.setTooltip(new Tooltip(Res.get("tooltip.openBlockchainForTx", transactionId))); + String lockupTxId = item.getLockupTxId(); + if (lockupTxId != null) { + hyperlinkWithIcon = new ExternalHyperlink(lockupTxId); + hyperlinkWithIcon.setOnAction(event -> GUIUtil.openTxInBsqBlockExplorer(lockupTxId, preferences)); + hyperlinkWithIcon.setTooltip(new Tooltip(Res.get("tooltip.openBlockchainForTx", lockupTxId))); setGraphic(hyperlinkWithIcon); } else { label = new Label("-"); @@ -263,58 +256,58 @@ public void updateItem(final RolesListItem item, boolean empty) { }; } }); - tableView.getColumns().add(column); + tableView.getColumns().add(lockupTxIdColumn); - column = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.bondState")); - column.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue())); - column.setMinWidth(120); - column.setCellFactory( + TableColumn bondStateColumn = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.bondState")); + bondStateColumn.setComparator(Comparator.comparing(RolesListItem::getBondStateAsString)); + bondStateColumn.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue())); + bondStateColumn.setMinWidth(120); + bondStateColumn.setCellFactory( new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { @Override public void updateItem(final RolesListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { - setText(item.getBondStateString()); + setText(item.getBondStateAsString()); } else setText(""); } }; } }); - tableView.getColumns().add(column); - - column = new TableColumn<>(); - column.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue())); - column.setMinWidth(80); - column.getStyleClass().add("last-column"); - column.setCellFactory( + tableView.getColumns().add(bondStateColumn); + + TableColumn actionColumn = new TableColumn<>(); + actionColumn.setComparator(Comparator.comparing(RolesListItem::isLockupButtonVisible).thenComparing(RolesListItem::isRevokeButtonVisible)); + actionColumn.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue())); + actionColumn.setMinWidth(80); + actionColumn.getStyleClass().add("last-column"); + actionColumn.setCellFactory( new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { AutoTooltipButton button; @Override public void updateItem(final RolesListItem item, boolean empty) { super.updateItem(item, empty); - if (item != null && !empty && item.isButtonVisible()) { + if (item != null && !empty && (item.isLockupButtonVisible() || item.isRevokeButtonVisible())) { if (button == null) { - button = new AutoTooltipButton(item.getButtonText()); + button = new AutoTooltipButton( + item.isLockupButtonVisible() + ? Res.get("dao.bond.table.button.lockup") + : Res.get("dao.bond.table.button.revoke") + ); button.setMinWidth(70); button.setOnAction(e -> { - if (item.getBondState() == BondState.READY_FOR_LOCKUP) { - bondingViewUtils.lockupBondForBondedRole(item.getRole(), - txId -> { - }); - } else if (item.getBondState() == BondState.LOCKUP_TX_CONFIRMED) { - bondingViewUtils.unLock(item.getLockupTxId(), - txId -> { - }); + if (item.isLockupButtonVisible() ) { + bondingViewUtils.lockupBondForBondedRole(item.getRole(), txId -> {}); + } else if (item.isRevokeButtonVisible()) { + bondingViewUtils.unLock(item.getLockupTxId(), txId -> {}); } }); setGraphic(button); @@ -330,6 +323,6 @@ public void updateItem(final RolesListItem item, boolean empty) { }; } }); - tableView.getColumns().add(column); + tableView.getColumns().add(actionColumn); } }