mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-15 20:26:04 +07:00
package manager refactoring step 2: move core classes to com.intellij.webcore.packaging; decouple ManageRepoDialog from Python service
This commit is contained in:
@@ -37,6 +37,7 @@
|
||||
<orderEntry type="module" module-name="ChromeConnector" />
|
||||
<orderEntry type="module" module-name="FirefoxConnector" />
|
||||
<orderEntry type="module" module-name="python-openapi" exported="" />
|
||||
<orderEntry type="module" module-name="webide-api" />
|
||||
</component>
|
||||
<component name="copyright">
|
||||
<Base>
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.ui.ScrollPaneFactory;
|
||||
import com.intellij.ui.components.JBLabel;
|
||||
import com.intellij.util.net.HttpConfigurable;
|
||||
import com.intellij.webcore.packaging.RepoPackage;
|
||||
import org.apache.xmlrpc.*;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -24,7 +25,10 @@ import javax.swing.text.html.HTMLEditorKit;
|
||||
import javax.swing.text.html.parser.ParserDelegator;
|
||||
import java.awt.*;
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.net.URLDecoder;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.SecureRandom;
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
package com.jetbrains.python.packaging;
|
||||
|
||||
/**
|
||||
* User: catherine
|
||||
*/
|
||||
public class RepoPackage implements Comparable {
|
||||
private final String myName;
|
||||
private final String myRepoUrl;
|
||||
|
||||
public RepoPackage(String name, String repoUrl) {
|
||||
myName = name;
|
||||
myRepoUrl = repoUrl;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return myName;
|
||||
}
|
||||
|
||||
public String getRepoUrl() {
|
||||
return myRepoUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Object o) {
|
||||
if (o instanceof RepoPackage)
|
||||
return myName.compareTo(((RepoPackage)o).getName());
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -20,10 +20,12 @@ import com.intellij.util.Function;
|
||||
import com.intellij.util.ui.PlatformColors;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import com.intellij.util.ui.update.UiNotifyConnector;
|
||||
import com.intellij.webcore.packaging.ManageRepoDialog;
|
||||
import com.intellij.webcore.packaging.PackageManagerController;
|
||||
import com.intellij.webcore.packaging.RepoPackage;
|
||||
import com.jetbrains.python.packaging.PyPIPackageUtil;
|
||||
import com.jetbrains.python.packaging.PyPackageManagerImpl;
|
||||
import com.jetbrains.python.packaging.PyPackageService;
|
||||
import com.jetbrains.python.packaging.RepoPackage;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -53,6 +55,7 @@ import java.util.List;
|
||||
public class ManagePackagesDialog extends DialogWrapper {
|
||||
private static final Logger LOG = Logger.getInstance(ManagePackagesDialog.class);
|
||||
|
||||
@NotNull private final Project myProject;
|
||||
private final PackageManagerController myController;
|
||||
|
||||
private JPanel myFilter;
|
||||
@@ -80,6 +83,7 @@ public class ManagePackagesDialog extends DialogWrapper {
|
||||
public ManagePackagesDialog(@NotNull Project project, @NotNull final Sdk sdk, @NotNull final PyPackagesPanel packageListPanel,
|
||||
final PackageManagerController packageManagerController) {
|
||||
super(project, true);
|
||||
myProject = project;
|
||||
myController = packageManagerController;
|
||||
|
||||
myInstallToUser.setEnabled(!PythonSdkType.isVirtualEnv(sdk));
|
||||
@@ -102,7 +106,7 @@ public class ManagePackagesDialog extends DialogWrapper {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
myController.reloadPackagesList();
|
||||
myController.reloadAllPackages();
|
||||
myPackages.setPaintBusy(false);
|
||||
}
|
||||
catch (IOException e) {
|
||||
@@ -188,7 +192,7 @@ public class ManagePackagesDialog extends DialogWrapper {
|
||||
myManageButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
ManageRepoDialog dialog = new ManageRepoDialog();
|
||||
ManageRepoDialog dialog = new ManageRepoDialog(myProject, myController);
|
||||
dialog.show();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.jetbrains.python.packaging.ui.ManageRepoDialog">
|
||||
<grid id="cbd77" binding="myMainPanel" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<constraints>
|
||||
<xy x="48" y="54" width="550" height="342"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children/>
|
||||
</grid>
|
||||
</form>
|
||||
@@ -1,119 +0,0 @@
|
||||
package com.jetbrains.python.packaging.ui;
|
||||
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.InputValidator;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.ui.AnActionButton;
|
||||
import com.intellij.ui.AnActionButtonRunnable;
|
||||
import com.intellij.ui.AnActionButtonUpdater;
|
||||
import com.intellij.ui.ToolbarDecorator;
|
||||
import com.intellij.ui.components.JBList;
|
||||
import com.jetbrains.python.packaging.PyPIPackageUtil;
|
||||
import com.jetbrains.python.packaging.PyPackageService;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
import java.awt.*;
|
||||
|
||||
public class ManageRepoDialog extends DialogWrapper {
|
||||
private JPanel myMainPanel;
|
||||
private JBList myList;
|
||||
private boolean myEnabled;
|
||||
|
||||
public ManageRepoDialog() {
|
||||
super(false);
|
||||
init();
|
||||
setTitle("Manage Repositories");
|
||||
final DefaultListModel repoModel = new DefaultListModel();
|
||||
repoModel.addElement(PyPIPackageUtil.PYPI_URL);
|
||||
|
||||
for (String url : PyPackageService.getInstance().additionalRepositories) {
|
||||
repoModel.addElement(url);
|
||||
}
|
||||
myList = new JBList();
|
||||
myList.setModel(repoModel);
|
||||
myList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
|
||||
myList.addListSelectionListener(new ListSelectionListener() {
|
||||
@Override
|
||||
public void valueChanged(ListSelectionEvent event) {
|
||||
final Object selected = myList.getSelectedValue();
|
||||
myEnabled = !PyPIPackageUtil.PYPI_URL.equals(selected);
|
||||
}
|
||||
});
|
||||
|
||||
final ToolbarDecorator decorator = ToolbarDecorator.createDecorator(myList).disableUpDownActions();
|
||||
decorator.setAddActionName("Add repository");
|
||||
decorator.setRemoveActionName("Remove repository from list");
|
||||
decorator.setEditActionName("Edit repository URL");
|
||||
|
||||
decorator.setAddAction(new AnActionButtonRunnable() {
|
||||
@Override
|
||||
public void run(AnActionButton button) {
|
||||
String url = Messages.showInputDialog("Please input repository URL", "Repository URL", null);
|
||||
if (!repoModel.contains(url) && !StringUtil.isEmptyOrSpaces(url)) {
|
||||
repoModel.addElement(url);
|
||||
PyPackageService.getInstance().addRepository(url);
|
||||
}
|
||||
}
|
||||
});
|
||||
decorator.setEditAction(new AnActionButtonRunnable() {
|
||||
@Override
|
||||
public void run(AnActionButton button) {
|
||||
final String oldValue = (String)myList.getSelectedValue();
|
||||
|
||||
String url = Messages.showInputDialog("Please edit repository URL", "Repository URL", null, oldValue, new InputValidator() {
|
||||
@Override
|
||||
public boolean checkInput(String inputString) {
|
||||
return !repoModel.contains(inputString);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canClose(String inputString) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
if (!StringUtil.isEmptyOrSpaces(url) && !oldValue.equals(url)) {
|
||||
repoModel.addElement(url);
|
||||
repoModel.removeElement(oldValue);
|
||||
PyPackageService.getInstance().removeRepository(oldValue);
|
||||
PyPackageService.getInstance().addRepository(url);
|
||||
}
|
||||
}
|
||||
});
|
||||
decorator.setRemoveAction(new AnActionButtonRunnable() {
|
||||
@Override
|
||||
public void run(AnActionButton button) {
|
||||
String selected = (String)myList.getSelectedValue();
|
||||
PyPackageService.getInstance().removeRepository(selected);
|
||||
repoModel.removeElement(selected);
|
||||
button.setEnabled(false);
|
||||
}
|
||||
});
|
||||
decorator.setRemoveActionUpdater(new AnActionButtonUpdater() {
|
||||
@Override
|
||||
public boolean isEnabled(AnActionEvent e) {
|
||||
return myEnabled;
|
||||
}
|
||||
});
|
||||
decorator.setEditActionUpdater(new AnActionButtonUpdater() {
|
||||
@Override
|
||||
public boolean isEnabled(AnActionEvent e) {
|
||||
return myEnabled;
|
||||
}
|
||||
});
|
||||
|
||||
final JPanel panel = decorator.createPanel();
|
||||
panel.setPreferredSize(new Dimension(800, 600));
|
||||
myMainPanel.add(panel);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JComponent createCenterPanel() {
|
||||
return myMainPanel;
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
package com.jetbrains.python.packaging.ui;
|
||||
|
||||
import com.intellij.util.CatchingConsumer;
|
||||
import com.jetbrains.python.packaging.RepoPackage;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public interface PackageManagerController {
|
||||
List<RepoPackage> getAllPackages() throws IOException;
|
||||
|
||||
void reloadPackagesList() throws IOException;
|
||||
|
||||
void installPackage(String packageName, String repositoryUrl, @Nullable String version, boolean installToUser,
|
||||
@Nullable String extraOptions, Listener listener);
|
||||
|
||||
void fetchPackageVersions(String packageName, CatchingConsumer<List<String>, Exception> consumer);
|
||||
|
||||
void fetchPackageDetails(String packageName, CatchingConsumer<String, Exception> consumer);
|
||||
|
||||
interface Listener {
|
||||
void installationStarted();
|
||||
void installationFinished(@Nullable String errorDescription);
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,8 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.CatchingConsumer;
|
||||
import com.intellij.webcore.packaging.PackageManagerController;
|
||||
import com.intellij.webcore.packaging.RepoPackage;
|
||||
import com.jetbrains.python.packaging.*;
|
||||
import org.apache.xmlrpc.AsyncCallback;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -25,6 +27,29 @@ public class PyPackagesController implements PackageManagerController {
|
||||
mySdk = sdk;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAllRepositories() {
|
||||
List<String> result = new ArrayList<String>();
|
||||
result.add(PyPIPackageUtil.PYPI_URL);
|
||||
result.addAll(PyPackageService.getInstance().additionalRepositories);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canModifyRepository(String repositoryUrl) {
|
||||
return !PyPIPackageUtil.PYPI_URL.equals(repositoryUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRepository(String repositoryUrl) {
|
||||
PyPackageService.getInstance().addRepository(repositoryUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeRepository(String repositoryUrl) {
|
||||
PyPackageService.getInstance().removeRepository(repositoryUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RepoPackage> getAllPackages() throws IOException {
|
||||
List<RepoPackage> packages = new ArrayList<RepoPackage>();
|
||||
@@ -39,10 +64,11 @@ public class PyPackagesController implements PackageManagerController {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reloadPackagesList() throws IOException {
|
||||
public List<RepoPackage> reloadAllPackages() throws IOException {
|
||||
final PyPackageService service = PyPackageService.getInstance();
|
||||
PyPIPackageUtil.INSTANCE.updatePyPICache(service);
|
||||
service.LAST_TIME_CHECKED = System.currentTimeMillis();
|
||||
return getAllPackages();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user