Changeset 17887 in josm for trunk/src/org/openstreetmap/josm


Ignore:
Timestamp:
2021-05-12T23:31:56+02:00 (3 years ago)
Author:
simon04
Message:

fix #20879 - History browser: which version changed a tag (git blame)?

Location:
trunk/src/org/openstreetmap/josm
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/history/History.java

    r17838 r17887  
    77import java.util.Comparator;
    88import java.util.List;
     9import java.util.Objects;
    910import java.util.stream.Collectors;
    1011
     
    190191
    191192    /**
     193     * Replies the history primitive which changed the given key.
     194     * @param version the version
     195     * @param key the OSM key
     196     * @return the history primitive which changed the given key
     197     */
     198    public HistoryOsmPrimitive getWhichChangedTag(long version, String key) {
     199        HistoryOsmPrimitive primitive = getByVersion(version);
     200        if (primitive == null) {
     201            return null;
     202        }
     203        for (int i = versions.indexOf(primitive); i > 0; i--) {
     204            if (!Objects.equals(versions.get(i).get(key), versions.get(i - 1).get(key))) {
     205                return versions.get(i);
     206            }
     207        }
     208        return versions.get(0);
     209    }
     210
     211    /**
    192212     * Replies the history primitive at given <code>date</code>. null,
    193213     * if no such primitive exists.
  • trunk/src/org/openstreetmap/josm/gui/history/TagTableCellRenderer.java

    r17886 r17887  
    77import javax.swing.JLabel;
    88import javax.swing.JTable;
     9import javax.swing.SwingConstants;
    910import javax.swing.table.TableCellRenderer;
    1011
     12import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
    1113import org.openstreetmap.josm.gui.util.GuiHelper;
     14
     15import static org.openstreetmap.josm.tools.I18n.tr;
    1216
    1317/**
     
    4347
    4448        String text = "";
     49        String tooltip = null;
    4550        if (model.hasTag(key)) {
    4651            switch(column) {
     
    5358                text = model.getValue(key);
    5459                break;
     60            case TagTableColumnModel.COLUMN_VERSION:
     61                HistoryOsmPrimitive primitive = model.getWhichChangedTag(key);
     62                if (primitive != null) {
     63                    text = "v" + primitive.getVersion();
     64                    tooltip = tr("Key ''{0}'' was changed in version {1}", key, primitive.getVersion());
     65                }
    5566            default: // Do nothing
    5667            }
     
    5869
    5970        setText(text);
    60         setToolTipText(text);
     71        setToolTipText(tooltip != null ? tooltip : text);
     72        setHorizontalAlignment(column == TagTableColumnModel.COLUMN_VERSION ? SwingConstants.TRAILING : SwingConstants.LEADING);
    6173        TwoColumnDiff.Item.DiffItemType diffItemType = model.getDiffItemType(key, column == TagTableColumnModel.COLUMN_VALUE);
    6274        GuiHelper.setBackgroundReadable(this, diffItemType.getColor(isSelected, table.hasFocus()));
  • trunk/src/org/openstreetmap/josm/gui/history/TagTableColumnModel.java

    r10637 r17887  
    1414    protected static final int COLUMN_KEY = 0;
    1515    protected static final int COLUMN_VALUE = 1;
     16    protected static final int COLUMN_VERSION = 2;
    1617
    1718    /**
     
    2526        TagTableCellRenderer renderer = new TagTableCellRenderer();
    2627
    27         // column 0 - Key
    28         TableColumn col = new TableColumn(0);
     28        TableColumn col = new TableColumn(COLUMN_KEY);
    2929        col.setHeaderValue(tr("Key"));
    3030        col.setCellRenderer(renderer);
     31        col.setPreferredWidth(100);
    3132        addColumn(col);
    3233
    33         // column 1 - Value
    34         col = new TableColumn(1);
     34        col = new TableColumn(COLUMN_VALUE);
    3535        col.setHeaderValue(tr("Value"));
    3636        col.setCellRenderer(renderer);
     37        col.setPreferredWidth(100);
     38        addColumn(col);
     39
     40        col = new TableColumn(COLUMN_VERSION);
     41        col.setHeaderValue(tr("Since"));
     42        col.setCellRenderer(renderer);
     43        col.setPreferredWidth(10);
    3744        addColumn(col);
    3845    }
  • trunk/src/org/openstreetmap/josm/gui/history/TagTableModel.java

    r17886 r17887  
    8484
    8585    /**
     86     * Returns the history primitive which changed the given key.
     87     * @param key the OSM key
     88     * @return the history primitive which changed the given key
     89     */
     90    public HistoryOsmPrimitive getWhichChangedTag(String key) {
     91        HistoryOsmPrimitive primitive = model.getPointInTime(pointInTimeType);
     92        if (primitive == null)
     93            return null;
     94        return model.getHistory().getWhichChangedTag(primitive.getVersion(), key);
     95    }
     96
     97    /**
    8698     * Determines if a tag exists in the opposite point in time for the given key.
    8799     * @param key tag key
     
    142154    @Override
    143155    public int getColumnCount() {
    144         return 2;
     156        return 3;
    145157    }
    146158
Note: See TracChangeset for help on using the changeset viewer.