push out creation of PackageManagementService to clients of InstalledPackagesPanel

This commit is contained in:
Dmitry Jemerov
2013-05-03 21:25:53 +02:00
parent 319ce3e0f2
commit 941b3c8ab5
3 changed files with 13 additions and 8 deletions
@@ -7,6 +7,7 @@ import com.intellij.openapi.ui.LabeledComponent;
import com.intellij.ui.CollectionComboBoxModel;
import com.intellij.webcore.packaging.PackagesNotificationPanel;
import com.jetbrains.python.packaging.ui.PyInstalledPackagesPanel;
import com.jetbrains.python.packaging.ui.PyPackageManagementService;
import com.jetbrains.python.sdk.PreferredSdkComparator;
import com.jetbrains.python.sdk.PySdkListCellRenderer;
import com.jetbrains.python.sdk.PythonSdkType;
@@ -25,7 +26,7 @@ import java.util.List;
public class PyManagePackagesDialog extends DialogWrapper {
private JPanel myMainPanel;
public PyManagePackagesDialog(@NotNull Project project, Sdk sdk) {
public PyManagePackagesDialog(@NotNull final Project project, Sdk sdk) {
super(project, true);
setTitle("Manage Python Packages");
@@ -37,7 +38,7 @@ public class PyManagePackagesDialog extends DialogWrapper {
PackagesNotificationPanel notificationPanel = new PackagesNotificationPanel(project);
final PyInstalledPackagesPanel packagesPanel = new PyInstalledPackagesPanel(project, notificationPanel);
packagesPanel.setBorder(BorderFactory.createEmptyBorder(4, 0, 0, 0));
packagesPanel.updatePackages(sdk);
packagesPanel.updatePackages(sdk, new PyPackageManagementService(project, sdk));
packagesPanel.updateNotifications(sdk);
myMainPanel = new JPanel(new BorderLayout());
@@ -51,7 +52,7 @@ public class PyManagePackagesDialog extends DialogWrapper {
@Override
public void actionPerformed(ActionEvent e) {
Sdk sdk = (Sdk) sdkComboBox.getSelectedItem();
packagesPanel.updatePackages(sdk);
packagesPanel.updatePackages(sdk, new PyPackageManagementService(project, sdk));
packagesPanel.updateNotifications(sdk);
}
});
@@ -45,6 +45,7 @@ public class InstalledPackagesPanel extends JPanel {
protected final JBTable myPackagesTable;
private DefaultTableModel myPackagesTableModel;
protected Sdk mySelectedSdk;
protected PackageManagementService myPackageManagementService;
protected final Project myProject;
protected final PackagesNotificationPanel myNotificationArea;
protected final List<Consumer<Sdk>> myPathChangedListeners = ContainerUtil.createLockFreeCopyOnWriteList();
@@ -140,7 +141,7 @@ public class InstalledPackagesPanel extends JPanel {
private ManagePackagesDialog createManagePackagesDialog() {
return new ManagePackagesDialog(myProject,
new PyPackageManagementService(myProject, mySelectedSdk),
myPackageManagementService,
new PackageManagementService.Listener() {
@Override
public void installationStarted(String packageName) {
@@ -167,6 +168,7 @@ public class InstalledPackagesPanel extends JPanel {
public void actionPerformed(ActionEvent e) {
final int[] rows = myPackagesTable.getSelectedRows();
final Sdk selectedSdk = mySelectedSdk;
final PackageManagementService selPackageManagementService = myPackageManagementService;
if (selectedSdk != null) {
for (int row : rows) {
final Object pyPackage = myPackagesTableModel.getValueAt(row, 0);
@@ -197,7 +199,7 @@ public class InstalledPackagesPanel extends JPanel {
@Override
public void finished(final List<PyExternalProcessException> exceptions) {
myPackagesTable.clearSelection();
updatePackages(selectedSdk);
updatePackages(selectedSdk, selPackageManagementService);
myPackagesTable.setPaintBusy(false);
currentlyInstalling.remove(packageName);
if (exceptions.isEmpty()) {
@@ -286,6 +288,7 @@ public class InstalledPackagesPanel extends JPanel {
public void actionPerformed(final ActionEvent e) {
final List<PyPackage> packages = getSelectedPackages();
final Sdk sdk = mySelectedSdk;
final PackageManagementService selPackageManagementService = myPackageManagementService;
if (sdk != null) {
PyPackageManagerImpl.UI ui = new PyPackageManagerImpl.UI(myProject, sdk, new PyPackageManagerImpl.UI.Listener() {
@Override
@@ -296,7 +299,7 @@ public class InstalledPackagesPanel extends JPanel {
@Override
public void finished(final List<PyExternalProcessException> exceptions) {
myPackagesTable.clearSelection();
updatePackages(sdk);
updatePackages(sdk, selPackageManagementService);
myPackagesTable.setPaintBusy(false);
if (exceptions.isEmpty()) {
myNotificationArea.showSuccess("Packages successfully uninstalled");
@@ -327,8 +330,9 @@ public class InstalledPackagesPanel extends JPanel {
return results;
}
public void updatePackages(Sdk selectedSdk) {
public void updatePackages(Sdk selectedSdk, PackageManagementService packageManagementService) {
mySelectedSdk = selectedSdk;
myPackageManagementService = packageManagementService;
myPackagesTable.clearSelection();
myPackagesTableModel.getDataVector().clear();
doUpdatePackages(selectedSdk);
@@ -138,7 +138,7 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel {
packageManager.showInstallationError(myProject, "Failed to install " + name, description);
}
packageManager.refresh();
updatePackages(sdk);
updatePackages(sdk, new PyPackageManagementService(myProject, sdk));
for (Consumer<Sdk> listener : myPathChangedListeners) {
listener.consume(sdk);
}