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