This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch 3808-table.page.actions
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/3808-table.page.actions by 
this push:
     new 39b2fe2d2b CAUSEWAY-3808: page ranged selection
39b2fe2d2b is described below

commit 39b2fe2d2bb2c1162bbf7574487777c93890ef34
Author: andi-huber <[email protected]>
AuthorDate: Tue Aug 27 15:14:54 2024 +0200

    CAUSEWAY-3808: page ranged selection
---
 .../core/metamodel/tabular/DataTableInteractive.java |  7 ++-----
 .../tabular/internal/DataTableInternal.java          | 20 +++++++-------------
 .../table/DataTableWithPagesAndFilter.java           | 15 ++++++++++++---
 .../ui/components/table/nav/NavigationToolbar.java   |  8 ++++----
 .../table/nav/pageact/PageActionChooser.java         |  4 +---
 .../table/nav/pagesize/PagesizeChooser.html          |  3 +--
 .../table/nav/pagesize/PagesizeChooser.java          |  7 +++----
 7 files changed, 30 insertions(+), 34 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/DataTableInteractive.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/DataTableInteractive.java
index c0a94daf14..41de442d3a 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/DataTableInteractive.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/DataTableInteractive.java
@@ -22,6 +22,7 @@ import java.io.Serializable;
 import java.util.Comparator;
 import java.util.Optional;
 import java.util.Set;
+import java.util.stream.IntStream;
 
 import org.apache.causeway.applib.annotation.TableDecorator;
 import org.apache.causeway.applib.annotation.Where;
@@ -124,11 +125,7 @@ public interface DataTableInteractive extends 
MultiselectChoices {
     void doProgrammaticToggle(Runnable runnable);
     Set<Integer> getSelectedRowIndexes();
     Observable<Can<DataRow>> getDataRowsSelected();
-    
-    // -- PAGE SPECIFIC SELECTION
-    
-    void selectCurrentPageRows();
-    void unselectCurrentPageRows();
+    void selectRangeOfRowsByIndex(IntStream range, boolean select);
 
     // -- EXPORTING
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/internal/DataTableInternal.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/internal/DataTableInternal.java
index 36cc559561..e5449a1f1c 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/internal/DataTableInternal.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/internal/DataTableInternal.java
@@ -24,6 +24,7 @@ import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import org.springframework.lang.Nullable;
 
@@ -309,21 +310,14 @@ implements DataTableInteractive {
     }
     
     @Override
-    public void selectCurrentPageRows() {
-        //FIXME limit to page
+    public void selectRangeOfRowsByIndex(IntStream range, boolean select) {
         doProgrammaticToggle(()->{
-            
dataRows.getValue().forEach(dataRow->dataRow.getSelectToggle().setValue(true));
-        });
-    }
-
-    @Override
-    public void unselectCurrentPageRows() {
-        //FIXME limit to page
-        doProgrammaticToggle(()->{
-            
dataRows.getValue().forEach(dataRow->dataRow.getSelectToggle().setValue(false));
-        });
+            dataRows.getValue()
+                .pickByIndex(range)
+                .forEach(dataRow->dataRow.getSelectToggle().setValue(select));
+        });        
     }
-
+    
 //    // -- DATA ROW VISIBILITY
 //
 //    private boolean ignoreHidden(final ManagedObject adapter) {
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/DataTableWithPagesAndFilter.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/DataTableWithPagesAndFilter.java
index d63e8072e1..ccae80326b 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/DataTableWithPagesAndFilter.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/DataTableWithPagesAndFilter.java
@@ -21,6 +21,7 @@ package org.apache.causeway.viewer.wicket.ui.components.table;
 import java.util.List;
 import java.util.Optional;
 import java.util.OptionalLong;
+import java.util.stream.IntStream;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
@@ -138,7 +139,7 @@ public abstract class DataTableWithPagesAndFilter<T, S> 
extends DataTable<T, S>
     // -- PAGE ACTIONS
 
     /**
-     * Provides the page actions as provided in the table view's footer bar 
(drop-down menu).
+     * Provides the page actions as presented in the table view's footer bar 
(drop-down menu).
      * @see #executePageAction(PageActionChoice) 
      */
     public List<PageActionChoice> getPageActionChoices() {
@@ -158,11 +159,11 @@ public abstract class DataTableWithPagesAndFilter<T, S> 
extends DataTable<T, S>
     public boolean executePageAction(PageActionChoice pageActionChoice) {
         switch(pageActionChoice.getKey()) {
         case "PAGE_SEL": {
-            _TableUtils.interactive(this).selectCurrentPageRows();
+            
_TableUtils.interactive(this).selectRangeOfRowsByIndex(getCurrentPageRowIndexes(),
 true);
             return true;
         }
         case "PAGE_UNSEL": { 
-            _TableUtils.interactive(this).unselectCurrentPageRows();
+            
_TableUtils.interactive(this).selectRangeOfRowsByIndex(getCurrentPageRowIndexes(),
 false);
             return true;
         }
         default: 
@@ -170,6 +171,14 @@ public abstract class DataTableWithPagesAndFilter<T, S> 
extends DataTable<T, S>
         }
     }
     
+    public IntStream getCurrentPageRowIndexes() {
+        final int pageIndex = Math.toIntExact(getCurrentPage());
+        final int pageSize = Math.toIntExact(getItemsPerPage());
+        final int fromRowIndexInclusive = Math.toIntExact(pageIndex * 
pageSize);
+        final int toRowIndexExclusive = Math.toIntExact(fromRowIndexInclusive 
+ pageSize);
+        return IntStream.range(fromRowIndexInclusive, toRowIndexExclusive);
+    }
+    
     /**
      * Used by the {@link PagesizeChooser}, to indicate the currently selected 
page-size choice.
      * (Typically a checkmark for the active choice within the drop-down 
select, also disabling the choice's link.)
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/NavigationToolbar.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/NavigationToolbar.java
index 11d40e52f2..87457ddcdb 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/NavigationToolbar.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/NavigationToolbar.java
@@ -37,8 +37,8 @@ implements HasCommonContext {
     private static final long serialVersionUID = 1L;
 
     private static final String NAVIGATOR_CONTAINER_ID = "span";
-    private static final String ID_PAGESIZE_CHOOSER = "pagesizeChooser";
     private static final String ID_PAGE_ACTION_CHOOSER = "pageActionChooser";
+    private static final String ID_PAGESIZE_CHOOSER = "pagesizeChooser";
 
     /**
      * @param table data-table this tool-bar is attached to
@@ -67,11 +67,11 @@ implements HasCommonContext {
         var navigatorContainer = navigatorContainer();
 
         Wkt.add(navigatorContainer,
-                new PagesizeChooser(ID_PAGESIZE_CHOOSER, getTable()));
+                new PageActionChooser(ID_PAGE_ACTION_CHOOSER, getTable()));
         
         Wkt.add(navigatorContainer,
-                new PageActionChooser(ID_PAGE_ACTION_CHOOSER, getTable()));
-
+                new PagesizeChooser(ID_PAGESIZE_CHOOSER, getTable()));
+        
         Wkt.labelAdd(navigatorContainer, "prototypingLabel",
                 
TimeTakenModel.createForPrototypingElseBlank(getMetaModelContext()));
     }
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pageact/PageActionChooser.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pageact/PageActionChooser.java
index d6e67fcb19..7e0ea2d6ac 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pageact/PageActionChooser.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pageact/PageActionChooser.java
@@ -60,8 +60,6 @@ public class PageActionChooser extends Panel {
 
     private void buildGui() {
 
-        //Wkt.labelAdd(this, ID_ENTRIES_PER_PAGE_LABEL, 
table.getEntriesPerPageAsLiteral());
-
         Wkt.listViewAdd(this, ID_PAGE_ACTION_CHOICES, 
table.getPageActionChoices(), item->{
             var link = Wkt.linkAdd(item, ID_PAGE_ACTION_CHOICE, target->{
                 var pageActionChoice = item.getModelObject();
@@ -75,7 +73,7 @@ public class PageActionChooser extends Panel {
             Wkt.ajaxEnable(link);
         });
         
-        WktTooltips.addTooltip(this, translate("Execute a page specific 
action."));
+        WktTooltips.addTooltip(this, translate("Page actions"));
 
     }
     
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.html
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.html
index 8bfdfeed90..4bbc031287 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.html
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.html
@@ -25,7 +25,7 @@
                                                        type="button"
                                                        
data-bs-toggle="dropdown" 
                                                        aria-expanded="false">
-                       <span wicket:id="entriesPerPageLabel"></span>
+                       <span wicket:id="pagesizeLabel"></span>
                    </button>
                    <ul class="dropdown-menu" role="menu">
                        <li wicket:id="pagesizeChoices">
@@ -35,7 +35,6 @@
                                                    <span 
wicket:id="viewItemTitle" class="ViewLinkItemTitle">[link title]</span>
                                                    <i 
wicket:id="viewItemCheckmark" class="fa-solid fa-check"></i>
                                                </a>
-                                               
                                        </li>
                    </ul>
                        </div>
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.java
index 5ed618ba48..6f70becc51 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.java
@@ -39,7 +39,7 @@ import lombok.NonNull;
 public class PagesizeChooser extends Panel {
     private static final long serialVersionUID = 1L;
 
-    private static final String ID_ENTRIES_PER_PAGE_LABEL = 
"entriesPerPageLabel";
+    private static final String ID_PAGESIZE_LABEL = "pagesizeLabel";
     private static final String ID_PAGESIZE_CHOICE = "pagesizeChoice";
     private static final String ID_PAGESIZE_CHOICES = "pagesizeChoices";
 
@@ -64,7 +64,7 @@ public class PagesizeChooser extends Panel {
 
     private void buildGui() {
 
-        Wkt.labelAdd(this, ID_ENTRIES_PER_PAGE_LABEL, 
table.getEntriesPerPageAsLiteral());
+        Wkt.labelAdd(this, ID_PAGESIZE_LABEL, 
table.getEntriesPerPageAsLiteral());
 
         Wkt.listViewAdd(this, ID_PAGESIZE_CHOICES, table.getPagesizeChoices(), 
item->{
             var link = Wkt.linkAdd(item, ID_PAGESIZE_CHOICE, target->{
@@ -81,8 +81,7 @@ public class PagesizeChooser extends Panel {
             Wkt.ajaxEnable(link);
         });
         
-        WktTooltips.addTooltip(this, translate("Select your desired page size "
-                + "(how many rows to display per page)."));
+        WktTooltips.addTooltip(this, translate("How many rows to display per 
page"));
 
     }
     

Reply via email to