/** * @return the current page row indexes and their keys */ private Map<List<Integer>, Object> getCurrentRowIndexAndKeys() { List<RowIdWrapper> wrappers = repeater.getBeanList(); if (wrappers == null || wrappers.isEmpty()) { return Collections.EMPTY_MAP; } Map<List<Integer>, Object> rows = new HashMap<>(wrappers.size()); for (RowIdWrapper wrapper : wrappers) { rows.put(wrapper.getRowIndex(), wrapper.getRowKey()); } return rows; }
/** * Provides data to a component rendering a column. * * @param beanProviderBound the component rendering the column. * @return a bean value for component that is rendering the specified row/column */ @Override public Object getBean(final BeanProviderBound beanProviderBound) { UIContext uic = UIContextHolder.getCurrent(); // Make sure we have the correct uic while (uic instanceof SubUIContext && !((SubUIContext) uic).isInContext( (WComponent) beanProviderBound)) { uic = ((SubUIContext) uic).getParentContext(); } if (!(uic instanceof SubUIContext)) { LOG.error("Unable to handle UIContext type: " + uic.getClass().getName()); return null; } RowIdWrapper wrapper = rowRenderer.getCurrentRowIdWrapper(); List<Integer> rowIndex = wrapper.getRowIndex(); // ColunIndex -1 means we have a row renderer return rowRenderer.table.getTableModel().getValueAt(rowIndex, columnIndex); }
@Test public void testSortTable() { SimpleTableModel model = new SimpleTableModel(new String[][]{{"1"}, {"3"}, {"2"}}); model.setComparator(0, SimpleTableModel.COMPARABLE_COMPARATOR); WTable table = new WTable(); table.setSelectMode(WTable.SelectMode.SINGLE); table.setTableModel(new AdapterBasicTableModel(model)); table.addColumn(new WTableColumn("dummy", WText.class)); table.setLocked(true); setActiveContext(createUIContext()); // Sort table manually table.sort(0, true); Assert.assertTrue("Incorrect selection after sort method", table.isSorted()); Assert. assertEquals("Incorrect sort column after sort method", 0, table. getSortColumnIndex()); Assert.assertTrue("Incorrect sort direction after sort method", table.isSortAscending()); List<RowIdWrapper> rowIndices = table.getRepeater().getBeanList(); Assert.assertEquals("Incorrect sort", 3, rowIndices.size()); Assert.assertEquals("Incorrect sort", Integer.valueOf(0), rowIndices.get(0).getRowIndex(). get(0)); Assert.assertEquals("Incorrect sort", Integer.valueOf(2), rowIndices.get(1).getRowIndex(). get(0)); Assert.assertEquals("Incorrect sort", Integer.valueOf(1), rowIndices.get(2).getRowIndex(). get(0)); }
List<Integer> rowIndex = row.getRowIndex(); List<Integer> nextRow = new ArrayList<>(row.getRowIndex()); nextRow.add(i);
if (dataModel.getRendererClass(child.getRowIndex()) != null) { rendererPresent = true; break; .getRowIndex()));
List<Integer> rowIndex = wrapper.getRowIndex();
Assert.assertEquals("Incorrect sort", Integer.valueOf(0), rowIndices.get(0).getRowIndex(). get(0)); Assert.assertEquals("Incorrect sort", Integer.valueOf(1), rowIndices.get(1).getRowIndex(). get(0)); Assert.assertEquals("Incorrect sort", Integer.valueOf(2), rowIndices.get(2).getRowIndex(). get(0)); Assert.assertEquals("Incorrect sort", Integer.valueOf(0), rowIndices.get(0).getRowIndex(). get(0)); Assert.assertEquals("Incorrect sort", Integer.valueOf(1), rowIndices.get(1).getRowIndex(). get(0)); Assert.assertEquals("Incorrect sort", Integer.valueOf(2), rowIndices.get(2).getRowIndex(). get(0));
List<Integer> rowIndex = wrapper.getRowIndex();
/** * Updates the bean using the table data model's {@link TableModel#setValueAt(Object, List, int)} method. This * method only updates the data for the currently set row ids. */ private void updateBeanValueForRenderedRows() { WTableRowRenderer rowRenderer = (WTableRowRenderer) repeater.getRepeatedComponent(); TableModel model = getTableModel(); int index = 0; List<RowIdWrapper> wrappers = repeater.getBeanList(); int columnCount = getColumnCount(); for (RowIdWrapper wrapper : wrappers) { UIContext rowContext = repeater.getRowContext(wrapper, index++); List<Integer> rowIndex = wrapper.getRowIndex(); Class<? extends WComponent> expandRenderer = model.getRendererClass(rowIndex); if (expandRenderer == null) { // Process Columns for (int col = 0; col < columnCount; col++) { // Check if this cell is editable if (model.isCellEditable(rowIndex, col)) { updateBeanValueForColumnInRow(rowRenderer, rowContext, rowIndex, col, model); } } } else if (model.isCellEditable(rowIndex, -1)) { // Check if this expanded row is editable updateBeanValueForRowRenderer(rowRenderer, rowContext, expandRenderer); } } }
/** * This can be used by column components on a {@link WTable} to determine the current row index. * * @param component the column component * @return the row index for the current row, or null if no row details */ public static List<Integer> getCurrentRowIndex(final WComponent component) { UIContext uic = UIContextHolder.getCurrent(); // Check have correct context if (!(uic instanceof SubUIContext)) { return null; } // Find the table WTable table = WebUtilities.getAncestorOfClass(WTable.class, component); if (table == null) { return null; } int repeaterIdx = ((SubUIContext) uic).getRowIndex(); RowIdWrapper wrapper = table.getRepeater().getBeanList().get(repeaterIdx); return wrapper.getRowIndex(); }
/** * Retrieves the renderer class for a given row. * * @return the renderer class for a given row (if it's an expanded row), otherwise null. */ private Class<? extends WComponent> getRowRendererClass() { RowIdWrapper wrapper = getCurrentRowIdWrapper(); if (wrapper != null) { return table.getTableModel().getRendererClass(wrapper.getRowIndex()); } return null; }
/** * {@inheritDoc} */ @Override protected String getRowIdName(final Object rowBean, final Object rowId) { RowIdWrapper wrapper = (RowIdWrapper) rowBean; List<Integer> rowIndex = wrapper.getRowIndex(); return table.getRowIdName(rowIndex, rowId); } }