diff options
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.java | 147 |
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; + } + } } |