blob: 5e7e107babef80edee8c79efdb3a33425e2908d5 [file] [log] [blame]
/*
* Copyright 2000-2010 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.idea.maven.dom.refactorings.extract;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.util.Function;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.maven.dom.MavenDomBundle;
import org.jetbrains.idea.maven.dom.MavenDomUtil;
import org.jetbrains.idea.maven.dom.model.MavenDomDependency;
import org.jetbrains.idea.maven.dom.model.MavenDomProjectModel;
import org.jetbrains.idea.maven.project.MavenProject;
import org.jetbrains.idea.maven.utils.ComboBoxUtil;
import javax.swing.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Set;
public class SelectMavenProjectDialog extends DialogWrapper {
private final Set<MavenDomProjectModel> myMavenDomProjectModels;
private final boolean myHasExclusions;
private JComboBox myMavenProjectsComboBox;
private JPanel myMainPanel;
private JCheckBox myReplaceAllCheckBox;
private JCheckBox myExtractExclusions;
private boolean myHasUsagesInProjects = false;
private ItemListener myReplaceAllListener;
private final Function<MavenDomProjectModel, Set<MavenDomDependency>> myOccurrencesCountFunction;
public SelectMavenProjectDialog(@NotNull Project project,
@NotNull Set<MavenDomProjectModel> mavenDomProjectModels,
@NotNull Function<MavenDomProjectModel, Set<MavenDomDependency>> funOccurrences,
@NotNull boolean hasExclusions) {
super(project, true);
myMavenDomProjectModels = mavenDomProjectModels;
myHasExclusions = hasExclusions;
setTitle(MavenDomBundle.message("choose.project"));
myOccurrencesCountFunction = funOccurrences;
for (MavenDomProjectModel model : myMavenDomProjectModels) {
if (myOccurrencesCountFunction.fun(model).size() > 0) {
myHasUsagesInProjects = true;
break;
}
}
init();
}
@NotNull
protected Action[] createActions() {
return new Action[]{getOKAction(), getCancelAction()};
}
protected void init() {
super.init();
updateOkStatus();
}
@Override
protected void dispose() {
super.dispose();
if (myReplaceAllCheckBox != null) {
myReplaceAllCheckBox.removeItemListener(myReplaceAllListener);
}
}
@Nullable
public MavenDomProjectModel getSelectedProject() {
return (MavenDomProjectModel)ComboBoxUtil.getSelectedValue((DefaultComboBoxModel)myMavenProjectsComboBox.getModel());
}
public boolean isReplaceAllOccurrences() {
return myReplaceAllCheckBox.isSelected();
}
public boolean isExtractExclusions() {
return myExtractExclusions.isSelected();
}
protected JComponent createCenterPanel() {
ComboBoxUtil.setModel(myMavenProjectsComboBox, new DefaultComboBoxModel(), myMavenDomProjectModels,
new Function<MavenDomProjectModel, Pair<String, ?>>() {
public Pair<String, ?> fun(MavenDomProjectModel model) {
String projectName = model.getName().getStringValue();
MavenProject mavenProject = MavenDomUtil.findProject(model);
if (mavenProject != null) {
projectName = mavenProject.getDisplayName();
}
if (StringUtil.isEmptyOrSpaces(projectName)) {
projectName = "pom.xml";
}
return Pair.create(projectName, model);
}
});
myReplaceAllListener = new ItemListener() {
public void itemStateChanged(ItemEvent e) {
updateControls();
}
};
myMavenProjectsComboBox.addItemListener(myReplaceAllListener);
myMavenProjectsComboBox.setSelectedItem(0);
myReplaceAllCheckBox.setVisible(myHasUsagesInProjects);
myExtractExclusions.setVisible(myHasExclusions);
updateControls();
return myMainPanel;
}
private void updateControls() {
MavenDomProjectModel project = getSelectedProject();
Integer count = myOccurrencesCountFunction.fun(project).size();
myReplaceAllCheckBox.setText(RefactoringBundle.message("replace.all.occurences", count));
myReplaceAllCheckBox.setEnabled(count != 0);
}
private void updateOkStatus() {
setOKActionEnabled(getSelectedProject() != null);
}
public JComponent getPreferredFocusedComponent() {
return myMavenProjectsComboBox;
}
}