3e643c56076031eb04facef8a16f0c774d12314c
[idea/community.git] / java / idea-ui / src / com / intellij / projectImport / SelectImportedProjectsStep.java
1 /*
2  * Copyright 2000-2016 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.projectImport;
17
18 import com.intellij.ide.JavaUiBundle;
19 import com.intellij.ide.util.ElementsChooser;
20 import com.intellij.ide.util.projectWizard.WizardContext;
21 import com.intellij.openapi.actionSystem.*;
22 import com.intellij.openapi.options.ConfigurationException;
23 import com.intellij.refactoring.RefactoringBundle;
24 import com.intellij.ui.IdeBorderFactory;
25 import com.intellij.uiDesigner.core.GridConstraints;
26 import com.intellij.uiDesigner.core.GridLayoutManager;
27 import com.intellij.util.ui.JBUI;
28 import org.jetbrains.annotations.NotNull;
29 import org.jetbrains.annotations.Nullable;
30
31 import javax.swing.*;
32
33 /**
34  * @author Vladislav.Kaznacheev
35  */
36 public abstract class SelectImportedProjectsStep<T> extends ProjectImportWizardStep {
37   private final JPanel panel;
38   protected final ElementsChooser<T> fileChooser;
39   private final JCheckBox openModuleSettingsCheckBox;
40
41   public SelectImportedProjectsStep(WizardContext context) {
42     super(context);
43     fileChooser = new ElementsChooser<T>(true) {
44       @Override
45       protected String getItemText(@NotNull T item) {
46         return getElementText(item);
47       }
48
49       @Override
50       protected Icon getItemIcon(@NotNull final T item) {
51         return getElementIcon (item);
52       }
53     };
54
55     panel = new JPanel(new GridLayoutManager(3, 1, JBUI.emptyInsets(), -1, -1));
56
57     panel.add(fileChooser, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_NORTH, GridConstraints.FILL_BOTH,
58                                                GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW,
59                                                GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null,
60                                                null));
61
62     final AnAction selectAllAction = new AnAction(RefactoringBundle.message("select.all.button")) {
63       @Override
64       public void actionPerformed(@NotNull AnActionEvent e) {
65         fileChooser.setAllElementsMarked(true);
66       }
67     };
68     final AnAction unselectAllAction = new AnAction(RefactoringBundle.message("unselect.all.button")) {
69       @Override
70       public void actionPerformed(@NotNull AnActionEvent e) {
71         fileChooser.setAllElementsMarked(false);
72       }
73     };
74     final JComponent actionToolbar =
75       ActionManager.getInstance().createButtonToolbar(ActionPlaces.UNKNOWN, new DefaultActionGroup(selectAllAction, unselectAllAction));
76     panel.add(actionToolbar, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_NORTH, GridConstraints.FILL_HORIZONTAL,
77                                                  GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW,
78                                                  GridConstraints.SIZEPOLICY_CAN_SHRINK, null, null, null));
79
80     openModuleSettingsCheckBox = new JCheckBox(JavaUiBundle.message("project.import.show.settings.after"));
81     panel.add(openModuleSettingsCheckBox, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_SOUTH, GridConstraints.FILL_HORIZONTAL,
82                                                               GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW,
83                                                               GridConstraints.SIZEPOLICY_FIXED, null, null, null));
84   }
85
86   @Nullable
87   protected Icon getElementIcon(final T item) {
88     return null;
89   }
90
91   protected abstract String getElementText(final T item);
92
93   @Override
94   public JComponent getComponent() {
95     return panel;
96   }
97
98   protected boolean isElementEnabled(T element) {
99     return true;
100   }
101
102   @Override
103   public void updateStep() {
104     fileChooser.clear();
105     for (T element : getContext().getList()) {
106       boolean isEnabled = isElementEnabled(element);
107       fileChooser.addElement(element, isEnabled && getContext().isMarked(element));
108       if (!isEnabled) {
109         fileChooser.disableElement(element);
110       }
111     }
112
113     fileChooser.setBorder(IdeBorderFactory.createTitledBorder(
114       JavaUiBundle.message("project.import.select.title", getContext().getName()), false));
115     openModuleSettingsCheckBox.setSelected(getBuilder().isOpenProjectSettingsAfter());
116   }
117
118   @Override
119   public boolean validate() throws ConfigurationException {
120     getContext().setList(fileChooser.getMarkedElements());
121     if (fileChooser.getMarkedElements().size() == 0) {
122       throw new ConfigurationException("Nothing found to import", "Unable to proceed");
123     }
124     return true;
125   }
126
127   @Override
128   public void updateDataModel() {}
129
130   @Override
131   public void onStepLeaving() {
132     super.onStepLeaving();
133     getContext().setOpenProjectSettingsAfter(openModuleSettingsCheckBox.isSelected());
134   }
135
136   public ProjectImportBuilder<T> getContext() {
137     return getBuilder();
138   }
139 }
140