Cleanup (unused import; too specific class)
[idea/community.git] / platform / platform-impl / src / com / intellij / openapi / updateSettings / impl / pluginsAdvertisement / PluginsAdvertiserDialog.java
1 /*
2  * Copyright 2000-2014 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.openapi.updateSettings.impl.pluginsAdvertisement;
17
18 import com.intellij.ide.plugins.*;
19 import com.intellij.openapi.diagnostic.Logger;
20 import com.intellij.openapi.project.Project;
21 import com.intellij.openapi.ui.DialogWrapper;
22 import com.intellij.openapi.updateSettings.impl.DetectedPluginsPanel;
23 import com.intellij.openapi.updateSettings.impl.PluginDownloader;
24 import com.intellij.ui.TableUtil;
25 import org.jetbrains.annotations.Nullable;
26
27 import javax.swing.*;
28 import java.io.IOException;
29 import java.util.*;
30
31 /**
32  * @author anna
33  */
34 public class PluginsAdvertiserDialog extends DialogWrapper {
35   private static final Logger LOG = Logger.getInstance("#" + PluginsAdvertiserDialog.class.getName());
36
37   @Nullable private final Project myProject;
38   private final PluginDownloader[] myUploadedPlugins;
39   private final List<IdeaPluginDescriptor> myAllPlugins;
40   private final Set<String> mySkippedPlugins = new HashSet<String>();
41
42   PluginsAdvertiserDialog(@Nullable Project project, PluginDownloader[] plugins, List<IdeaPluginDescriptor> allPlugins) {
43     super(project);
44     myProject = project;
45     Arrays.sort(plugins, new Comparator<PluginDownloader>() {
46       @Override
47       public int compare(PluginDownloader o1, PluginDownloader o2) {
48         return o1.getPluginName().compareToIgnoreCase(o2.getPluginName());
49       }
50     });
51     myUploadedPlugins = plugins;
52     myAllPlugins = allPlugins;
53     setTitle("Choose Plugins to Install or Enable");
54     init();
55   }
56
57   @Nullable
58   @Override
59   protected JComponent createCenterPanel() {
60     final DetectedPluginsPanel foundPluginsPanel = new DetectedPluginsPanel() {
61       @Override
62       protected Set<String> getSkippedPlugins() {
63         return mySkippedPlugins;
64       }
65     };
66
67     for (PluginDownloader uploadedPlugin : myUploadedPlugins) {
68       foundPluginsPanel.add(uploadedPlugin);
69     }
70     TableUtil.ensureSelectionExists(foundPluginsPanel.getEntryTable());
71     return foundPluginsPanel;
72   }
73
74   @Override
75   protected void doOKAction() {
76     final Set<String> pluginsToEnable = new HashSet<String>();
77     final List<PluginNode> nodes = new ArrayList<PluginNode>();
78     for (PluginDownloader downloader : myUploadedPlugins) {
79       String pluginId = downloader.getPluginId();
80       if (!mySkippedPlugins.contains(pluginId)) {
81         pluginsToEnable.add(pluginId);
82         if (!PluginManagerCore.getDisabledPlugins().contains(pluginId)) {
83           final PluginNode pluginNode = PluginDownloader.createPluginNode(null, downloader);
84           if (pluginNode != null) {
85             nodes.add(pluginNode);
86           }
87         }
88       }
89     }
90     final Runnable notifyRunnable = new Runnable() {
91       @Override
92       public void run() {
93         PluginManagerMain.notifyPluginsWereInstalled(null, myProject);
94       }
95     };
96     for (String pluginId : pluginsToEnable) {
97       PluginManagerCore.enablePlugin(pluginId);
98     }
99     if (!nodes.isEmpty()) {
100       try {
101         PluginManagerMain.downloadPlugins(nodes, myAllPlugins, notifyRunnable, null);
102       }
103       catch (IOException e) {
104         LOG.error(e);
105       }
106     }
107     else {
108       if (!pluginsToEnable.isEmpty()) {
109         notifyRunnable.run();
110       }
111     }
112     super.doOKAction();
113   }
114 }