package net.minecraft.launcher.ui.tabs; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import net.minecraft.launcher.Launcher; import net.minecraft.launcher.OperatingSystem; import net.minecraft.launcher.events.RefreshedVersionsListener; import net.minecraft.launcher.updater.VersionList; import net.minecraft.launcher.updater.VersionManager; import net.minecraft.launcher.updater.VersionSyncInfo; import net.minecraft.launcher.versions.CompleteVersion; import net.minecraft.launcher.versions.ReleaseType; import net.minecraft.launcher.versions.Version; public class VersionListTab extends JScrollPane implements RefreshedVersionsListener { private static final int COLUMN_NAME = 0; private static final int COLUMN_TYPE = 1; private static final int COLUMN_RELEASE_DATE = 2; private static final int COLUMN_UPDATE_DATE = 3; private static final int COLUMN_LIBRARIES = 4; private static final int COLUMN_STATUS = 5; private static final int NUM_COLUMNS = 6; private final Launcher launcher; private final VersionTableModel dataModel = new VersionTableModel(null); private final JTable table = new JTable(this.dataModel); public VersionListTab(Launcher launcher) { this.launcher = launcher; setViewportView(this.table); createInterface(); launcher.getVersionManager().addRefreshedVersionsListener(this); } protected void createInterface() { this.table.setFillsViewportHeight(true); } public Launcher getLauncher() { return this.launcher; } public void onVersionsRefreshed(VersionManager manager) { this.dataModel.setVersions(manager.getLocalVersionList().getVersions()); } public boolean shouldReceiveEventsInUIThread() { return true; } private class VersionTableModel extends AbstractTableModel { private final List<Version> versions = new ArrayList(); private VersionTableModel() { } public int getRowCount() { return this.versions.size(); } public int getColumnCount() { return 6; } public Class<?> getColumnClass(int columnIndex) { if ((columnIndex == 3) || (columnIndex == 2)) { return Date.class; } return String.class; } public String getColumnName(int column) { switch (column) { case 3: return "Last modified"; case 1: return "Version type"; case 4: return "Library count"; case 0: return "Version name"; case 5: return "Sync status"; case 2: return "Release Date"; } return super.getColumnName(column); } public Object getValueAt(int rowIndex, int columnIndex) { Version version = (Version)this.versions.get(rowIndex); switch (columnIndex) { case 0: return version.getId(); case 3: return version.getUpdatedTime(); case 4: if ((version instanceof CompleteVersion)) { CompleteVersion complete = (CompleteVersion)version; int total = complete.getLibraries().size(); int relevant = complete.getRelevantLibraries(OperatingSystem.getCurrentPlatform()).size(); if (total == relevant) { return Integer.valueOf(total); } return String.format("%d (%d relevant to %s)", new Object[] { Integer.valueOf(total), Integer.valueOf(relevant), OperatingSystem.getCurrentPlatform().getName() }); } return "?"; case 5: VersionSyncInfo syncInfo = VersionListTab.this.launcher.getVersionManager().getVersionSyncInfo(version); if (syncInfo.isOnRemote()) { if (syncInfo.isUpToDate()) { return "Up to date with remote"; } return "Update avail from remote"; } return "Local only"; case 1: return version.getType().getName(); case 2: return version.getReleaseTime(); } return null; } public void setVersions(Collection<Version> versions) { this.versions.clear(); this.versions.addAll(versions); fireTableDataChanged(); } } }