001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.history; 003 004import java.awt.Color; 005import java.time.format.FormatStyle; 006 007import javax.swing.table.AbstractTableModel; 008 009import org.openstreetmap.josm.data.osm.Changeset; 010import org.openstreetmap.josm.data.osm.User; 011import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive; 012import org.openstreetmap.josm.tools.Logging; 013import org.openstreetmap.josm.tools.date.DateUtils; 014 015/** 016 * The table model for the list of versions in the current history 017 * @since 11646 (extracted from HistoryBrowserModel) 018 */ 019public final class VersionTableModel extends AbstractTableModel { 020 021 private final HistoryBrowserModel model; 022 023 /** 024 * Constructs a new {@code VersionTableModel}. 025 * @param model parent {@code HistoryBrowserModel} 026 */ 027 public VersionTableModel(HistoryBrowserModel model) { 028 this.model = model; 029 } 030 031 @Override 032 public int getRowCount() { 033 if (model.getHistory() == null) 034 return 0; 035 int ret = model.getHistory().getNumVersions(); 036 if (model.getLatest() != null) { 037 ret++; 038 } 039 return ret; 040 } 041 042 @Override 043 public Object getValueAt(int row, int column) { 044 switch (column) { 045 case VersionTableColumnModel.COL_VERSION: 046 HistoryOsmPrimitive p1 = model.getPrimitive(row); 047 if (p1 != null) 048 return Long.toString(p1.getVersion()); 049 return null; 050 case VersionTableColumnModel.COL_REFERENCE: 051 return model.isReferencePointInTime(row); 052 case VersionTableColumnModel.COL_CURRENT: 053 return model.isCurrentPointInTime(row); 054 case VersionTableColumnModel.COL_DATE: 055 HistoryOsmPrimitive p3 = model.getPrimitive(row); 056 if (p3 != null && p3.getInstant() != null) 057 return DateUtils.getDateTimeFormatter(FormatStyle.SHORT, FormatStyle.SHORT).format(p3.getInstant()); 058 return null; 059 case VersionTableColumnModel.COL_USER: 060 HistoryOsmPrimitive p4 = model.getPrimitive(row); 061 if (p4 != null) { 062 User user = p4.getUser(); 063 if (user != null) 064 return user.getName(); 065 } 066 return null; 067 case VersionTableColumnModel.COL_EDITOR: 068 HistoryOsmPrimitive p5 = model.getPrimitive(row); 069 if (p5 != null) { 070 Changeset cs = p5.getChangeset(); 071 if (cs != null) { 072 return cs.get("created_by"); 073 } 074 } 075 return null; 076 default: 077 return null; 078 } 079 } 080 081 /** 082 * Returns the color for the primitive in the given row 083 * @param row row number 084 * @return the color for the primitive in the given row 085 */ 086 public Color getVersionColor(int row) { 087 return model.getVersionColor(row); 088 } 089 090 @Override 091 public void setValueAt(Object aValue, int row, int column) { 092 if (!((Boolean) aValue)) 093 return; 094 try { 095 switch (column) { 096 case 1: 097 model.setReferencePointInTime(row); 098 break; 099 case 2: 100 model.setCurrentPointInTime(row); 101 break; 102 default: 103 return; 104 } 105 } catch (IllegalArgumentException e) { 106 Logging.error(e); 107 } 108 fireTableDataChanged(); 109 } 110 111 @Override 112 public boolean isCellEditable(int row, int column) { 113 return column >= 1 && column <= 2; 114 } 115 116 @Override 117 public int getColumnCount() { 118 return 6; 119 } 120}