@Override public void setFilter(Collection<Integer> rowIdSet) { if(rowIdSet != null) { rowFilter = new IntegerUnion(rowIdSet); rowFilterIterator = rowFilter.listIterator(); if(!rowFilter.isEmpty()) { rowId = rowFilter.first() - 1; } else { rowId = 0; } currentRow = null; } else { rowFilter = null; rowFilterIterator = null; } }
/** * @param zeroBaseDiff JTable selection is 0 based. Set 1 in order to get a 1 based row identifier selection. * @return Select row id */ private IntegerUnion getTableModelSelection(int zeroBaseDiff) { IntegerUnion selectionModelRowId = new IntegerUnion(); for (int viewRowId : table.getSelectedRows()) { selectionModelRowId.add(tableSorter.convertRowIndexToModel(viewRowId) + zeroBaseDiff); } return selectionModelRowId; }
/** * Copy constructor with a generic collection * @param externalCollection */ public IntegerUnion(Collection<Integer> externalCollection) { this(); if(externalCollection instanceof IntegerUnion) { copyExternalIntegerUnion((IntegerUnion)externalCollection); } else { for(Integer value : externalCollection) { internalAdd(value); } } }
@Override public SortedSet<Integer> tailSet(Integer e) { int index = Collections.binarySearch(intervals, e); if(index < 0) { index = -index - 1; //retrieve the insertion point } IntegerUnion retVal = new IntegerUnion(); if(index % 2 != 0) { retVal.intervals = new ArrayList<>(intervals.subList(index, intervals.size())); retVal.intervals.add(0, e); } else { retVal.intervals = intervals.subList(index, intervals.size()); } return retVal; }
private boolean moveCursorTo(long i) throws SQLException { i = Math.max(0, i); i = Math.min(getRowCount() + 1, i); if(rowFilter != null && !rowFilter.isEmpty()) { i = Math.max(rowFilter.first() - 1, i); i = Math.min(rowFilter.last() + 1, i); rowId = rowFilterIterator.previous(); } else { if(!rowFilter.isEmpty()) { rowId = rowFilter.first(); } else { rowId = 1; rowId = rowFilterIterator.next(); } else { if(!rowFilter.isEmpty()) { rowId = rowFilter.last() + 1; } else { rowId = getRowCount() + 1; rowId = i; boolean validRow = !(rowId == 0 || rowId > getRowCount() || (rowFilter != null && !rowFilter.isEmpty() && (rowId < rowFilter.first() || rowId > rowFilter.last()))); if(validRow) { refreshRowCache();
@Override public void run() { // Update the table values List<Integer> ranges = nextViewSelection.getValueRanges(); Iterator<Integer> intervals = ranges.iterator(); try { table.getSelectionModel().setValueIsAdjusting(true); table.clearSelection(); ProgressMonitor swingPm = pm.startTask("Apply filter", ranges.size()); while (intervals.hasNext()) { int begin = intervals.next(); int end = intervals.next(); table.addRowSelectionInterval(begin, end); swingPm.endTask(); if (swingPm.isCancelled()) { return; } } } finally { table.getSelectionModel().setValueIsAdjusting(false); } if(!nextViewSelection.isEmpty()) { scrollToRow(nextViewSelection.first(), table); } } });
/** * Update the table selection * @param viewSelection View index selection */ private void setViewRowSelection(Set<Integer> viewSelection) { // Integer union is able to compute range of integer from a set of integer Iterator<Integer> intervals = new IntegerUnion(viewSelection).getValueRanges().iterator(); final int maxRow = table.getRowCount(); try { table.getSelectionModel().setValueIsAdjusting(true); table.clearSelection(); while(intervals.hasNext()) { // If the DataSource here and in other editors is not the same (uncommitted changes) // Then the selected row index may not be the same and can be out of range. // The check is done here. int begin = intervals.next(); int end = Math.min(intervals.next(),maxRow - 1); if(begin < maxRow) { table.addRowSelectionInterval(begin, end); } } }finally { table.getSelectionModel().setValueIsAdjusting(false); } }
@Override public boolean addAll(Collection<? extends Integer> clctn) { boolean isAllAdded=true; for (Iterator<? extends Integer> it = clctn.iterator(); it.hasNext();) { Integer value = it.next(); if(!add(value)) { isAllAdded = false; } } return isAllAdded; }
/** * Creator with an initial value * @param externalArray Array of int */ public IntegerUnion(int[] externalArray) { this(); for(Integer val : externalArray) { internalAdd(val); } } /**
@Override public boolean remove(Object o) { Integer value = (Integer) o; return internalRemove(value); }
@Override public SortedSet<Integer> tailSet(Integer e) { int index = Collections.binarySearch(intervals, e); if(index < 0) { index = -index - 1; //retrieve the insertion point } IntegerUnion retVal = new IntegerUnion(); if(index % 2 != 0) { retVal.intervals = new ArrayList<>(intervals.subList(index, intervals.size())); retVal.intervals.add(0, e); } else { retVal.intervals = intervals.subList(index, intervals.size()); } return retVal; }
@Override public boolean addAll(Collection<? extends Integer> clctn) { boolean isAllAdded=true; for (Iterator<? extends Integer> it = clctn.iterator(); it.hasNext();) { Integer value = it.next(); if(!add(value)) { isAllAdded = false; } } return isAllAdded; }
/** * Creator with an initial value * @param externalArray Array of int */ public IntegerUnion(int[] externalArray) { this(); for(Integer val : externalArray) { internalAdd(val); } } /**
@Override public boolean remove(Object o) { Integer value = (Integer) o; return internalRemove(value); }
@Override public SortedSet<Integer> getSelectionTableRow() throws EditableElementException { SortedSet<Integer> modelRows = new IntegerUnion(); for (long value : selectedGeometries) { modelRows.add(getRowSet().getRowId(value)); } return modelRows; }
/** * Invert the current table selection */ public void onMenuReverseSelection() { IntegerUnion invertedSelection = new IntegerUnion(); for(int viewId = 0; viewId<table.getRowCount();viewId++) { if(!table.isRowSelected(viewId)) { invertedSelection.add(viewId); } } setViewRowSelection(invertedSelection); }