// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.history;
import java.text.DateFormat;
import javax.swing.table.AbstractTableModel;
import org.openstreetmap.josm.data.osm.Changeset;
import org.openstreetmap.josm.data.osm.User;
import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
import org.openstreetmap.josm.tools.date.DateUtils;
/**
* The table model for the list of versions in the current history
* @since 11646 (extracted from HistoryBrowserModel)
*/
public final class VersionTableModel extends AbstractTableModel {
private final HistoryBrowserModel model;
/**
* Constructs a new {@code VersionTableModel}.
* @param model parent {@code HistoryBrowserModel}
*/
public VersionTableModel(HistoryBrowserModel model) {
this.model = model;
}
@Override
public int getRowCount() {
if (model.getHistory() == null)
return 0;
int ret = model.getHistory().getNumVersions();
if (model.getLatest() != null) {
ret++;
}
return ret;
}
@Override
public Object getValueAt(int row, int column) {
switch (column) {
case VersionTableColumnModel.COL_VERSION:
HistoryOsmPrimitive p1 = model.getPrimitive(row);
if (p1 != null)
return Long.toString(p1.getVersion());
return null;
case VersionTableColumnModel.COL_REFERENCE:
return model.isReferencePointInTime(row);
case VersionTableColumnModel.COL_CURRENT:
return model.isCurrentPointInTime(row);
case VersionTableColumnModel.COL_DATE:
HistoryOsmPrimitive p3 = model.getPrimitive(row);
if (p3 != null && p3.getTimestamp() != null)
return DateUtils.formatDateTime(p3.getTimestamp(), DateFormat.SHORT, DateFormat.SHORT);
return null;
case VersionTableColumnModel.COL_USER:
HistoryOsmPrimitive p4 = model.getPrimitive(row);
if (p4 != null) {
User user = p4.getUser();
if (user != null)
return user.getName();
}
return null;
case VersionTableColumnModel.COL_EDITOR:
HistoryOsmPrimitive p5 = model.getPrimitive(row);
if (p5 != null) {
Changeset cs = p5.getChangeset();
if (cs != null) {
return cs.get("created_by");
}
}
return null;
default:
return null;
}
}
@Override
public void setValueAt(Object aValue, int row, int column) {
if (!((Boolean) aValue))
return;
switch (column) {
case 1:
model.setReferencePointInTime(row);
break;
case 2:
model.setCurrentPointInTime(row);
break;
default:
return;
}
fireTableDataChanged();
}
@Override
public boolean isCellEditable(int row, int column) {
return column >= 1 && column <= 2;
}
@Override
public int getColumnCount() {
return 6;
}
}