/* * Copyright 2000-2012 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.execution; import com.intellij.icons.AllIcons; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileTypes.PlainTextFileType; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.*; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.EditorComboBoxEditor; import com.intellij.ui.EditorComboBoxRenderer; import com.intellij.ui.EditorTextField; import com.intellij.ui.StringComboboxEditor; import com.intellij.util.ArrayUtilRt; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.project.MavenProject; import org.jetbrains.idea.maven.project.MavenProjectsManager; import org.jetbrains.idea.maven.utils.MavenUtil; import javax.swing.*; import java.util.Collection; public class MavenEditGoalDialog extends DialogWrapper { private final Project myProject; @Nullable private final Collection<String> myHistory; private JPanel contentPane; private FixedSizeButton showProjectTreeButton; private TextFieldWithBrowseButton workDirectoryField; private JPanel goalsPanel; private JLabel goalsLabel; private ComboBox goalsComboBox; private EditorTextField goalsEditor; public MavenEditGoalDialog(@NotNull Project project) { this(project, null); } public MavenEditGoalDialog(@NotNull Project project, @Nullable Collection<String> history) { super(project, true); myProject = project; myHistory = history; setTitle("Edit Maven Goal"); setUpDialog(); setModal(true); init(); } private void setUpDialog() { JComponent goalComponent; if (myHistory == null) { goalsEditor = new EditorTextField("", myProject, PlainTextFileType.INSTANCE); goalComponent = goalsEditor; goalsLabel.setLabelFor(goalsEditor); } else { goalsComboBox = new ComboBox(ArrayUtilRt.toStringArray(myHistory)); goalComponent = goalsComboBox; goalsLabel.setLabelFor(goalsComboBox); goalsComboBox.setLightWeightPopupEnabled(false); EditorComboBoxEditor editor = new StringComboboxEditor(myProject, PlainTextFileType.INSTANCE, goalsComboBox); goalsComboBox.setRenderer(new EditorComboBoxRenderer(editor)); goalsComboBox.setEditable(true); goalsComboBox.setEditor(editor); goalsComboBox.setFocusable(true); goalsEditor = editor.getEditorComponent(); } goalsPanel.add(goalComponent); new MavenArgumentsCompletionProvider(myProject).apply(goalsEditor); MavenProjectsManager projectsManager = MavenProjectsManager.getInstance(myProject); showProjectTreeButton.setIcon(AllIcons.Actions.Module); MavenSelectProjectPopup.attachToWorkingDirectoryField(projectsManager, workDirectoryField.getTextField(), showProjectTreeButton, goalsComboBox != null ? goalsComboBox : goalsEditor); workDirectoryField.addBrowseFolderListener( RunnerBundle.message("maven.select.maven.project.file"), "", myProject, new FileChooserDescriptor(false, true, false, false, false, false) { @Override public boolean isFileSelectable(VirtualFile file) { if (!super.isFileSelectable(file)) return false; for (VirtualFile child : file.getChildren()) { if(MavenUtil.isPomFileName(child.getName())) return true; } return false; } }); } @Nullable @Override protected ValidationInfo doValidate() { if (workDirectoryField.getText().trim().isEmpty()) { return new ValidationInfo("Working directory is empty", workDirectoryField); } return null; } @NotNull public String getGoals() { if (goalsComboBox != null) { return (String)goalsComboBox.getEditor().getItem(); } else { return goalsEditor.getText(); } } public void setGoals(@NotNull String goals) { if (goalsComboBox != null) { goalsComboBox.setSelectedItem(goals); } goalsEditor.setText(goals); } @NotNull public String getWorkDirectory() { return workDirectoryField.getText(); } public void setWorkDirectory(@NotNull String path) { workDirectoryField.setText(path); } public void setSelectedMavenProject(@Nullable MavenProject mavenProject) { workDirectoryField.setText(mavenProject == null ? "" : mavenProject.getDirectory()); } protected JComponent createCenterPanel() { return contentPane; } public JComponent getPreferredFocusedComponent() { return goalsComboBox; } }