mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
InstaledPackagesPanel is filled with data through PackageManagementService
This commit is contained in:
@@ -19,11 +19,6 @@ public class PyPackage extends InstalledPackage {
|
||||
myRequirements = requirements;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getName();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<PyRequirement> getRequirements() {
|
||||
return myRequirements;
|
||||
@@ -37,4 +32,10 @@ public class PyPackage extends InstalledPackage {
|
||||
public boolean isInstalled() {
|
||||
return myLocation != null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getTooltipText() {
|
||||
return myLocation;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -243,14 +243,19 @@ public class PyPIPackageUtil {
|
||||
}
|
||||
|
||||
public Collection<String> getPackageNames() throws IOException {
|
||||
Map<String, String> pyPIPackages = loadAndGetPackages();
|
||||
ArrayList<String> list = Lists.newArrayList(pyPIPackages.keySet());
|
||||
Collections.sort(list);
|
||||
return list;
|
||||
}
|
||||
|
||||
public Map<String, String> loadAndGetPackages() throws IOException {
|
||||
Map<String, String> pyPIPackages = getPyPIPackages();
|
||||
if (pyPIPackages.isEmpty()) {
|
||||
updatePyPICache(PyPackageService.getInstance());
|
||||
pyPIPackages = getPyPIPackages();
|
||||
}
|
||||
ArrayList<String> list = Lists.newArrayList(pyPIPackages.keySet());
|
||||
Collections.sort(list);
|
||||
return list;
|
||||
return pyPIPackages;
|
||||
}
|
||||
|
||||
public static Map<String, String> getPyPIPackages() {
|
||||
|
||||
@@ -150,7 +150,7 @@ public class InstalledPackagesPanel extends JPanel {
|
||||
@Nullable String errorDescription) {
|
||||
myNotificationArea.showResult(packageName, errorDescription);
|
||||
myPackagesTable.clearSelection();
|
||||
doUpdatePackages(mySelectedSdk);
|
||||
doUpdatePackages(myPackageManagementService);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -337,39 +337,40 @@ public class InstalledPackagesPanel extends JPanel {
|
||||
myPackageManagementService = packageManagementService;
|
||||
myPackagesTable.clearSelection();
|
||||
myPackagesTableModel.getDataVector().clear();
|
||||
doUpdatePackages(selectedSdk);
|
||||
doUpdatePackages(packageManagementService);
|
||||
}
|
||||
|
||||
public void doUpdatePackages(final Sdk selectedSdk) {
|
||||
public void doUpdatePackages(final PackageManagementService packageManagementService) {
|
||||
myPackagesTable.setPaintBusy(true);
|
||||
final Application application = ApplicationManager.getApplication();
|
||||
application.executeOnPooledThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
List<PyPackage> packages = Lists.newArrayList();
|
||||
if (selectedSdk != null) {
|
||||
Collection<InstalledPackage> packages = Lists.newArrayList();
|
||||
if (packageManagementService != null) {
|
||||
try {
|
||||
packages = ((PyPackageManagerImpl)PyPackageManager.getInstance(selectedSdk)).getPackages();
|
||||
packages = packageManagementService.getInstalledPackages();
|
||||
}
|
||||
catch (PyExternalProcessException e) {
|
||||
catch (IOException e) {
|
||||
// do nothing, we already have an empty list
|
||||
}
|
||||
finally {
|
||||
final List<PyPackage> finalPackages = packages;
|
||||
final Map<String, String> cache = PyPIPackageUtil.getPyPIPackages();
|
||||
final Collection<InstalledPackage> finalPackages = packages;
|
||||
|
||||
final Map<String, RepoPackage> cache = buildNameToPackageMap(packageManagementService.getAllPackagesCached());
|
||||
if (cache.isEmpty()) {
|
||||
updateCache(application);
|
||||
refreshLatestVersions();
|
||||
}
|
||||
application.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
if (selectedSdk == mySelectedSdk) {
|
||||
if (packageManagementService == myPackageManagementService) {
|
||||
myPackagesTableModel.getDataVector().clear();
|
||||
for (PyPackage pyPackage : finalPackages) {
|
||||
final String version = cache.get(pyPackage.getName());
|
||||
for (InstalledPackage pkg : finalPackages) {
|
||||
RepoPackage repoPackage = cache.get(pkg.getName());
|
||||
final String version = repoPackage != null ? repoPackage.getLatestVersion() : null;
|
||||
myPackagesTableModel
|
||||
.addRow(new Object[]{pyPackage, pyPackage.getVersion(), version == null ? "" : version});
|
||||
.addRow(new Object[]{pkg, pkg.getVersion(), version == null ? "" : version});
|
||||
}
|
||||
if (!cache.isEmpty()) {
|
||||
myPackagesTable.setPaintBusy(false);
|
||||
@@ -383,20 +384,21 @@ public class InstalledPackagesPanel extends JPanel {
|
||||
});
|
||||
}
|
||||
|
||||
private void updateCache(final Application application) {
|
||||
private void refreshLatestVersions() {
|
||||
final Application application = ApplicationManager.getApplication();
|
||||
application.executeOnPooledThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
PyPIPackageUtil.INSTANCE.updatePyPICache(PyPackageService.getInstance());
|
||||
List<RepoPackage> packages = myPackageManagementService.reloadAllPackages();
|
||||
final Map<String, RepoPackage> packageMap = buildNameToPackageMap(packages);
|
||||
application.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final Map<String, String> cache = PyPIPackageUtil.getPyPIPackages();
|
||||
for (int i = 0; i != myPackagesTableModel.getRowCount(); ++i) {
|
||||
final PyPackage pyPackage = (PyPackage)myPackagesTableModel.getValueAt(i, 0);
|
||||
final String version = cache.get(pyPackage.getName());
|
||||
myPackagesTableModel.setValueAt(version, i, 2);
|
||||
final InstalledPackage pyPackage = (PyPackage)myPackagesTableModel.getValueAt(i, 0);
|
||||
final RepoPackage repoPackage = packageMap.get(pyPackage.getName());
|
||||
myPackagesTableModel.setValueAt(repoPackage == null ? null : repoPackage.getLatestVersion(), i, 2);
|
||||
}
|
||||
myPackagesTable.setPaintBusy(false);
|
||||
}
|
||||
@@ -409,6 +411,14 @@ public class InstalledPackagesPanel extends JPanel {
|
||||
});
|
||||
}
|
||||
|
||||
private static Map<String, RepoPackage> buildNameToPackageMap(List<RepoPackage> packages) {
|
||||
final Map<String, RepoPackage> packageMap = new HashMap<String, RepoPackage>();
|
||||
for (RepoPackage aPackage : packages) {
|
||||
packageMap.put(aPackage.getName(), aPackage);
|
||||
}
|
||||
return packageMap;
|
||||
}
|
||||
|
||||
private static class MyTableCellRenderer extends DefaultTableCellRenderer {
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected,
|
||||
|
||||
@@ -54,23 +54,41 @@ public class PyPackageManagementService extends PackageManagementService {
|
||||
|
||||
@Override
|
||||
public List<RepoPackage> getAllPackages() throws IOException {
|
||||
List<RepoPackage> packages = new ArrayList<RepoPackage>();
|
||||
final Collection<String> packageNames;
|
||||
final Map<String, String> packageToVersionMap;
|
||||
try {
|
||||
packageNames = PyPIPackageUtil.INSTANCE.getPackageNames();
|
||||
packageToVersionMap = PyPIPackageUtil.INSTANCE.loadAndGetPackages();
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new IOException("Could not reach URL " + e.getMessage() + ". Please, check your internet connection.");
|
||||
}
|
||||
final boolean customRepoConfigured = !PyPackageService.getInstance().additionalRepositories.isEmpty();
|
||||
String url = customRepoConfigured? PyPIPackageUtil.PYPI_URL : "";
|
||||
for (String name : packageNames) {
|
||||
packages.add(new RepoPackage(name, url));
|
||||
}
|
||||
List<RepoPackage> packages = versionMapToPackageList(packageToVersionMap);
|
||||
packages.addAll(PyPIPackageUtil.INSTANCE.getAdditionalPackageNames());
|
||||
return packages;
|
||||
}
|
||||
|
||||
private static List<RepoPackage> versionMapToPackageList(Map<String, String> packageToVersionMap) {
|
||||
final boolean customRepoConfigured = !PyPackageService.getInstance().additionalRepositories.isEmpty();
|
||||
String url = customRepoConfigured? PyPIPackageUtil.PYPI_URL : "";
|
||||
List<RepoPackage> packages = new ArrayList<RepoPackage>();
|
||||
for (Map.Entry<String, String> entry : packageToVersionMap.entrySet()) {
|
||||
packages.add(new RepoPackage(entry.getKey(), url, entry.getValue()));
|
||||
}
|
||||
return packages;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RepoPackage> reloadAllPackages() throws IOException {
|
||||
final PyPackageService service = PyPackageService.getInstance();
|
||||
PyPIPackageUtil.INSTANCE.updatePyPICache(service);
|
||||
service.LAST_TIME_CHECKED = System.currentTimeMillis();
|
||||
return getAllPackages();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RepoPackage> getAllPackagesCached() {
|
||||
return versionMapToPackageList(PyPIPackageUtil.getPyPIPackages());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInstallToUser() {
|
||||
return !PythonSdkType.isVirtualEnv(mySdk);
|
||||
@@ -94,14 +112,6 @@ public class PyPackageManagementService extends PackageManagementService {
|
||||
PyPackageService.getInstance().addSdkToUserSite(mySdk.getHomePath(), newValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RepoPackage> reloadAllPackages() throws IOException {
|
||||
final PyPackageService service = PyPackageService.getInstance();
|
||||
PyPIPackageUtil.INSTANCE.updatePyPICache(service);
|
||||
service.LAST_TIME_CHECKED = System.currentTimeMillis();
|
||||
return getAllPackages();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<InstalledPackage> getInstalledPackages() throws IOException {
|
||||
List<PyPackage> packages;
|
||||
|
||||
Reference in New Issue
Block a user