summaryrefslogtreecommitdiff
path: root/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/SelectProfilesStep.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/SelectProfilesStep.java')
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/SelectProfilesStep.java147
1 files changed, 138 insertions, 9 deletions
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/SelectProfilesStep.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/SelectProfilesStep.java
index 4f0238c2694b..3fc7fb47b202 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/SelectProfilesStep.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/SelectProfilesStep.java
@@ -15,14 +15,21 @@
*/
package org.jetbrains.idea.maven.wizards;
-import com.intellij.ide.util.ElementsChooser;
+import com.intellij.ide.util.MultiStateElementsChooser;
import com.intellij.ide.util.projectWizard.WizardContext;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.projectImport.ProjectImportWizardStep;
+import gnu.trove.THashSet;
import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.idea.maven.model.MavenExplicitProfiles;
+import org.jetbrains.idea.maven.model.MavenProfileKind;
import javax.swing.*;
-import java.util.ArrayList;
+import javax.swing.table.TableCellRenderer;
+import java.awt.*;
+import java.util.*;
import java.util.List;
/**
@@ -30,7 +37,8 @@ import java.util.List;
*/
public class SelectProfilesStep extends ProjectImportWizardStep {
private JPanel panel;
- private ElementsChooser<String> profileChooser;
+ private MultiStateElementsChooser<String, MavenProfileKind> profileChooser;
+ private MavenProfileKindMarkStateDescriptor myMarkStateDescriptor;
public SelectProfilesStep(final WizardContext context) {
super(context);
@@ -52,7 +60,8 @@ public class SelectProfilesStep extends ProjectImportWizardStep {
}
public void createUIComponents() {
- profileChooser = new ElementsChooser<String>(true);
+ myMarkStateDescriptor = new MavenProfileKindMarkStateDescriptor();
+ profileChooser = new MultiStateElementsChooser<String, MavenProfileKind>(true, myMarkStateDescriptor);
}
public JComponent getComponent() {
@@ -61,15 +70,39 @@ public class SelectProfilesStep extends ProjectImportWizardStep {
public void updateStep() {
List<String> allProfiles = getBuilder().getProfiles();
- List<String> markedProfiles = new ArrayList<String>(getBuilder().getSelectedProfiles());
- markedProfiles.retainAll(allProfiles); // mark only existing profiles
+ List<String> activatedProfiles = getBuilder().getActivatedProfiles();
+ MavenExplicitProfiles selectedProfiles = getBuilder().getSelectedProfiles();
+ List<String> enabledProfiles = new ArrayList<String>(selectedProfiles.getEnabledProfiles());
+ List<String> disabledProfiles = new ArrayList<String>(selectedProfiles.getDisabledProfiles());
+ enabledProfiles.retainAll(allProfiles); // mark only existing profiles
+ disabledProfiles.retainAll(allProfiles); // mark only existing profiles
- profileChooser.setElements(allProfiles, false);
- profileChooser.markElements(markedProfiles);
+ myMarkStateDescriptor.setActivatedProfiles(activatedProfiles);
+ profileChooser.setElements(allProfiles, null);
+ profileChooser.markElements(enabledProfiles, MavenProfileKind.EXPLICIT);
+ profileChooser.markElements(disabledProfiles, MavenProfileKind.NONE);
}
public boolean validate() throws ConfigurationException {
- return getBuilder().setSelectedProfiles(profileChooser.getMarkedElements());
+ Collection<String> activatedProfiles = myMarkStateDescriptor.getActivatedProfiles();
+ MavenExplicitProfiles newSelectedProfiles = MavenExplicitProfiles.NONE.clone();
+ for (Map.Entry<String, MavenProfileKind> entry : profileChooser.getElementMarkStates().entrySet()) {
+ String profile = entry.getKey();
+ MavenProfileKind profileKind = entry.getValue();
+ switch (profileKind) {
+ case NONE:
+ if (activatedProfiles.contains(profile)) {
+ newSelectedProfiles.getDisabledProfiles().add(profile);
+ }
+ break;
+ case EXPLICIT:
+ newSelectedProfiles.getEnabledProfiles().add(profile);
+ break;
+ case IMPLICIT:
+ break;
+ }
+ }
+ return getBuilder().setSelectedProfiles(newSelectedProfiles);
}
public void updateDataModel() {
@@ -79,4 +112,100 @@ public class SelectProfilesStep extends ProjectImportWizardStep {
public String getHelpId() {
return "reference.dialogs.new.project.import.maven.page2";
}
+
+ private static class MavenProfileKindMarkStateDescriptor
+ implements MultiStateElementsChooser.MarkStateDescriptor<String, MavenProfileKind> {
+ private Collection<String> myActivatedProfiles = Collections.emptySet();
+
+ public Collection<String> getActivatedProfiles() {
+ return myActivatedProfiles;
+ }
+
+ public void setActivatedProfiles(Collection<String> activatedProfiles) {
+ myActivatedProfiles = new THashSet<String>(activatedProfiles);
+ }
+
+ @NotNull
+ @Override
+ public MavenProfileKind getDefaultState(@NotNull String element) {
+ return myActivatedProfiles.contains(element) ? MavenProfileKind.IMPLICIT : MavenProfileKind.NONE;
+ }
+
+ @NotNull
+ @Override
+ public MavenProfileKind getNextState(@NotNull String element, @NotNull MavenProfileKind state) {
+ MavenProfileKind nextState;
+ switch (state) {
+ case NONE:
+ nextState = MavenProfileKind.EXPLICIT;
+ break;
+ case EXPLICIT:
+ nextState = getDefaultState(element);
+ break;
+ case IMPLICIT:
+ default:
+ nextState = MavenProfileKind.NONE;
+ break;
+ }
+ return nextState;
+ }
+
+ @Nullable
+ @Override
+ public MavenProfileKind getNextState(@NotNull Map<String, MavenProfileKind> elementsWithStates) {
+ MavenProfileKind nextState = null;
+ for (Map.Entry<String, MavenProfileKind> entry : elementsWithStates.entrySet()) {
+ MavenProfileKind nextElementState = getNextState(entry.getKey(), entry.getValue());
+ if (nextState == null) {
+ nextState = nextElementState;
+ }
+ else if (!nextState.equals(nextElementState)) {
+ nextState = null;
+ break;
+ }
+ }
+ return nextState;
+ }
+
+ @Override
+ public boolean isMarked(@NotNull MavenProfileKind state) {
+ return state != MavenProfileKind.NONE;
+ }
+
+ @Nullable
+ @Override
+ public MavenProfileKind getMarkState(@Nullable Object value) {
+ return value instanceof MavenProfileKind ? (MavenProfileKind)value : null;
+ }
+
+ @Nullable
+ @Override
+ public TableCellRenderer getMarkRenderer() {
+ return new CheckboxTableCellRenderer();
+ }
+ }
+
+ private static class CheckboxTableCellRenderer extends JCheckBox implements TableCellRenderer {
+ public CheckboxTableCellRenderer() {
+ setHorizontalAlignment(SwingConstants.CENTER);
+ setBorder(null);
+ }
+
+ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+ if (isSelected) {
+ setForeground(table.getSelectionForeground());
+ super.setBackground(table.getSelectionBackground());
+ }
+ else {
+ setForeground(table.getForeground());
+ setBackground(table.getBackground());
+ }
+
+ MavenProfileKind state = (MavenProfileKind)value;
+ setSelected(state != MavenProfileKind.NONE);
+ setEnabled(state != MavenProfileKind.IMPLICIT);
+
+ return this;
+ }
+ }
}