source: josm/trunk/src/org/openstreetmap/josm/gui/history/DiffTableModel.java@ 17994

Last change on this file since 17994 was 16497, checked in by simon04, 4 years ago

see #19255 - Java 8: use Stream

  • Property svn:eol-style set to native
File size: 1.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.history;
3
4import java.util.ArrayList;
5import java.util.List;
6import java.util.concurrent.atomic.AtomicInteger;
7import java.util.stream.IntStream;
8
9import javax.swing.table.AbstractTableModel;
10
11import org.openstreetmap.josm.gui.history.TwoColumnDiff.Item.DiffItemType;
12
13/**
14 * Simple model storing "diff cells" in a list. Could probably have
15 * used a {@link javax.swing.table.DefaultTableModel} instead.
16 */
17class DiffTableModel extends AbstractTableModel {
18 private transient List<TwoColumnDiff.Item> rows = new ArrayList<>();
19 private transient int[] rowNumbers;
20 private boolean reversed;
21
22 public void setRows(List<TwoColumnDiff.Item> rows, boolean reversed) {
23 this.rows = rows;
24 this.reversed = reversed;
25 computeRowNumbers();
26 fireTableDataChanged();
27 }
28
29 @Override
30 public int getRowCount() {
31 return rows.size();
32 }
33
34 @Override
35 public int getColumnCount() {
36 return 1;
37 }
38
39 public boolean isReversed() {
40 return reversed;
41 }
42
43 @Override
44 public TwoColumnDiff.Item getValueAt(int rowIndex, int columnIndex) {
45 return rows.get(rowIndex);
46 }
47
48 public int getFirstChange() {
49 return IntStream.range(0, rows.size())
50 .filter(i -> rows.get(i).state != DiffItemType.SAME)
51 .findFirst().orElse(-1);
52 }
53
54 void computeRowNumbers() {
55 AtomicInteger rowNumber = new AtomicInteger(reversed ? rows.size() : 1);
56 rowNumbers = rows.stream().mapToInt(item -> {
57 if (item.state == DiffItemType.EMPTY) {
58 return -1;
59 } else if (reversed) {
60 return rowNumber.getAndDecrement();
61 } else {
62 return rowNumber.getAndIncrement();
63 }
64 }).toArray();
65 }
66
67 public int getRowNumber(int rowIndex) {
68 return rowNumbers[rowIndex];
69 }
70}
Note: See TracBrowser for help on using the repository browser.