mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-101677 Gradle: 'Import project' enhancements
This commit is contained in:
@@ -26,8 +26,9 @@ gradle.import.structure.settings.label.project.config.location=Project location:
|
||||
gradle.import.structure.settings.title.project.config.location=Project location
|
||||
gradle.import.structure.settings.label.project.compile.output.location=Project compiler output:
|
||||
gradle.import.structure.settings.title.project.compile.output.location=Project compiler output
|
||||
gradle.import.structure.settings.label.module.config.location=Module file location:
|
||||
gradle.import.structure.settings.title.module.config.location=Module file location
|
||||
gradle.import.structure.settings.label.iml.location=Module files location:
|
||||
gradle.import.structure.settings.label.iml.location.per.module=module content root
|
||||
gradle.import.structure.settings.label.iml.location.project.dir=project dir
|
||||
gradle.import.structure.settings.label.export=Exported:
|
||||
gradle.import.structure.settings.label.scope=Scope:
|
||||
gradle.import.structure.settings.label.root.source=Source roots:
|
||||
|
||||
-37
@@ -11,8 +11,6 @@ import org.jetbrains.plugins.gradle.util.GradleBundle;
|
||||
import org.jetbrains.plugins.gradle.util.GradleUtil;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
import javax.swing.event.DocumentListener;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
@@ -23,41 +21,6 @@ public class GradleAdjustImportSettingsUtil {
|
||||
private GradleAdjustImportSettingsUtil() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Setups given builder to expose controls for management of the given component's name.
|
||||
*
|
||||
* @param builder target settings builder
|
||||
* @param component component which name management should be exposed
|
||||
* @return UI control that holds target component's name
|
||||
*/
|
||||
@NotNull
|
||||
public static JTextField configureNameControl(@NotNull GradleProjectSettingsBuilder builder, @NotNull final Named component) {
|
||||
final JTextField result = new JTextField();
|
||||
result.setText(component.getName());
|
||||
builder.add("gradle.import.structure.settings.label.name", result);
|
||||
result.getDocument().addDocumentListener(new DocumentListener() {
|
||||
@Override
|
||||
public void insertUpdate(DocumentEvent e) {
|
||||
applyNewName();
|
||||
}
|
||||
@Override
|
||||
public void removeUpdate(DocumentEvent e) {
|
||||
applyNewName();
|
||||
}
|
||||
@Override
|
||||
public void changedUpdate(DocumentEvent e) {
|
||||
}
|
||||
private void applyNewName() {
|
||||
String text = result.getText();
|
||||
if (text == null) {
|
||||
return;
|
||||
}
|
||||
component.setName(text.trim());
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs generic check of the name of the given component.
|
||||
*
|
||||
|
||||
-29
@@ -15,7 +15,6 @@ import org.jetbrains.plugins.gradle.util.GradleUtil;
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* Manages settings of {@link GradleModule gradle module} component.
|
||||
@@ -27,8 +26,6 @@ public class GradleModuleSettings implements GradleProjectStructureNodeSettings
|
||||
|
||||
private final JComponent myComponent;
|
||||
private final GradleModule myModule;
|
||||
private final JTextField myNameControl;
|
||||
private final TextFieldWithBrowseButton myModuleFileLocationField;
|
||||
private final JRadioButton myInheritProjectCompileOutputPathButton;
|
||||
private final JRadioButton myUseModuleCompileOutputPathButton;
|
||||
private final TextFieldWithBrowseButton myOutputLocationField;
|
||||
@@ -37,8 +34,6 @@ public class GradleModuleSettings implements GradleProjectStructureNodeSettings
|
||||
public GradleModuleSettings(@NotNull GradleModule module) {
|
||||
myModule = module;
|
||||
GradleProjectSettingsBuilder builder = new GradleProjectSettingsBuilder();
|
||||
myNameControl = GradleAdjustImportSettingsUtil.configureNameControl(builder, myModule);
|
||||
myModuleFileLocationField = setupModuleFileLocation(builder);
|
||||
Pair<JRadioButton, JRadioButton> pair = setupCompileOutput(builder);
|
||||
myInheritProjectCompileOutputPathButton = pair.first;
|
||||
myUseModuleCompileOutputPathButton = pair.second;
|
||||
@@ -70,15 +65,6 @@ public class GradleModuleSettings implements GradleProjectStructureNodeSettings
|
||||
return new Pair<JRadioButton, JRadioButton>(inheritButton, moduleButton);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static TextFieldWithBrowseButton setupModuleFileLocation(@NotNull GradleProjectSettingsBuilder builder) {
|
||||
TextFieldWithBrowseButton result = new TextFieldWithBrowseButton();
|
||||
String title = GradleBundle.message("gradle.import.structure.settings.title.module.config.location");
|
||||
result.addBrowseFolderListener(title, "", null, BrowseFilesListener.SINGLE_DIRECTORY_DESCRIPTOR);
|
||||
builder.add("gradle.import.structure.settings.label.module.config.location", result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Pair<TextFieldWithBrowseButton, TextFieldWithBrowseButton> setupOutputLocation(
|
||||
@NotNull GradleProjectSettingsBuilder builder)
|
||||
@@ -98,19 +84,6 @@ public class GradleModuleSettings implements GradleProjectStructureNodeSettings
|
||||
|
||||
@Override
|
||||
public boolean validate() {
|
||||
if (!GradleAdjustImportSettingsUtil.validate(myModule, myNameControl)) {
|
||||
return false;
|
||||
}
|
||||
String moduleFileDir = myModuleFileLocationField.getText();
|
||||
if (moduleFileDir == null || StringUtil.isEmpty(moduleFileDir.trim())) {
|
||||
GradleUtil.showBalloon(
|
||||
myModuleFileLocationField,
|
||||
MessageType.ERROR,
|
||||
GradleBundle.message("gradle.import.text.error.module.undefined.config.location")
|
||||
);
|
||||
return false;
|
||||
}
|
||||
myModule.setModuleFileDirectoryPath(moduleFileDir.trim());
|
||||
if (myUseModuleCompileOutputPathButton.isSelected()) {
|
||||
String outputLocation = myOutputLocationField.getText();
|
||||
if (outputLocation == null || StringUtil.isEmpty(outputLocation.trim())) {
|
||||
@@ -139,8 +112,6 @@ public class GradleModuleSettings implements GradleProjectStructureNodeSettings
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
myNameControl.setText(myModule.getName());
|
||||
myModuleFileLocationField.setText(new File(myModule.getModuleFilePath()).getParent());
|
||||
if (myModule.isInheritProjectCompileOutputPath()) {
|
||||
myInheritProjectCompileOutputPathButton.setSelected(true);
|
||||
}
|
||||
|
||||
+80
-20
@@ -1,27 +1,35 @@
|
||||
package org.jetbrains.plugins.gradle.manage.wizard.adjust;
|
||||
|
||||
import com.intellij.ide.util.BrowseFilesListener;
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.projectRoots.JavaSdk;
|
||||
import com.intellij.openapi.projectRoots.JavaSdkVersion;
|
||||
import com.intellij.openapi.projectRoots.ProjectJdkTable;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.ui.MessageType;
|
||||
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.io.FileUtilRt;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.ui.components.JBRadioButton;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.PropertyKey;
|
||||
import org.jetbrains.plugins.gradle.model.gradle.GradleContentRoot;
|
||||
import org.jetbrains.plugins.gradle.model.gradle.GradleModule;
|
||||
import org.jetbrains.plugins.gradle.model.gradle.GradleProject;
|
||||
import org.jetbrains.plugins.gradle.util.GradleBundle;
|
||||
import org.jetbrains.plugins.gradle.util.GradleUtil;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Manages settings of {@link GradleProject gradle project} component.
|
||||
@@ -30,28 +38,33 @@ import java.util.Map;
|
||||
* @since 8/12/11 2:58 PM
|
||||
*/
|
||||
public class GradleProjectSettings implements GradleProjectStructureNodeSettings {
|
||||
|
||||
private final JComponent myComponent;
|
||||
private final GradleProject myProject;
|
||||
private final JTextField myNameControl;
|
||||
private final JComboBox myLanguageLevelComboBox;
|
||||
private final DefaultComboBoxModel mySdkModel;
|
||||
private final TextFieldWithBrowseButton myProjectConfigLocationField;
|
||||
private final TextFieldWithBrowseButton myProjectCompileOutputLocationField;
|
||||
|
||||
private static final String KEEP_IML_AT_MODULE_DIR_PROPERTY_KEY = "gradle.iml.at.module.dir";
|
||||
|
||||
@NotNull private final JComponent myComponent;
|
||||
@NotNull private final GradleProject myProject;
|
||||
@NotNull private final JComboBox myLanguageLevelComboBox;
|
||||
@NotNull private final DefaultComboBoxModel mySdkModel;
|
||||
@NotNull private final TextFieldWithBrowseButton myProjectConfigLocationField;
|
||||
@NotNull private final TextFieldWithBrowseButton myProjectCompileOutputLocationField;
|
||||
@NotNull private final JRadioButton myImlAtModuleContentRootsButton;
|
||||
@NotNull private final JRadioButton myImlAtProjectDirButton;
|
||||
|
||||
public GradleProjectSettings(@NotNull GradleProject project) {
|
||||
myProject = project;
|
||||
GradleProjectSettingsBuilder builder = new GradleProjectSettingsBuilder();
|
||||
myNameControl = GradleAdjustImportSettingsUtil.configureNameControl(builder, project);
|
||||
myLanguageLevelComboBox = setupLanguageLevelControls(builder);
|
||||
setupSdkControls(mySdkModel = new DefaultComboBoxModel(), builder);
|
||||
myProjectConfigLocationField = setupProjectConfigLocation(builder);
|
||||
myProjectCompileOutputLocationField = setupProjectCompileOutputLocation(builder);
|
||||
filterSdksByLanguageLevel();
|
||||
filterSdksByLanguageLevel();
|
||||
myImlAtModuleContentRootsButton = new JBRadioButton(GradleBundle.message("gradle.import.structure.settings.label.iml.location.per.module"));
|
||||
myImlAtProjectDirButton = new JBRadioButton(GradleBundle.message("gradle.import.structure.settings.label.iml.location.project.dir"));
|
||||
setModuleFilesLocationControl(builder);
|
||||
myComponent = builder.build();
|
||||
refresh();
|
||||
}
|
||||
|
||||
|
||||
private JComboBox setupLanguageLevelControls(@NotNull GradleProjectSettingsBuilder builder) {
|
||||
JComboBox result = new JComboBox();
|
||||
final Map<Object, LanguageLevel> levels = new HashMap<Object, LanguageLevel>();
|
||||
@@ -140,14 +153,62 @@ public class GradleProjectSettings implements GradleProjectStructureNodeSettings
|
||||
builder.add("gradle.import.structure.settings.label.project.compile.output.location", result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private void setModuleFilesLocationControl(@NotNull GradleProjectSettingsBuilder builder) {
|
||||
ButtonGroup group = new ButtonGroup();
|
||||
group.add(myImlAtModuleContentRootsButton);
|
||||
group.add(myImlAtProjectDirButton);
|
||||
JPanel panel = new JPanel(new GridLayout(2, 1));
|
||||
panel.add(myImlAtModuleContentRootsButton);
|
||||
panel.add(myImlAtProjectDirButton);
|
||||
myImlAtModuleContentRootsButton.addItemListener(new ItemListener() {
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
if (e.getStateChange() != ItemEvent.SELECTED) {
|
||||
return;
|
||||
}
|
||||
for (GradleModule module : myProject.getModules()) {
|
||||
Collection<GradleContentRoot> contentRoots = module.getContentRoots();
|
||||
if (contentRoots.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
module.setModuleFileDirectoryPath(contentRoots.iterator().next().getRootPath());
|
||||
}
|
||||
PropertiesComponent.getInstance().setValue(KEEP_IML_AT_MODULE_DIR_PROPERTY_KEY, String.valueOf(true));
|
||||
}
|
||||
});
|
||||
myImlAtProjectDirButton.addItemListener(new ItemListener() {
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
if (e.getStateChange() != ItemEvent.SELECTED) {
|
||||
return;
|
||||
}
|
||||
String dirPath = myProjectConfigLocationField.getText();
|
||||
if (StringUtil.isEmpty(dirPath)) {
|
||||
return;
|
||||
}
|
||||
boolean goodDir = FileUtilRt.createDirectory(new File(dirPath));
|
||||
if (!goodDir) {
|
||||
return;
|
||||
}
|
||||
for (GradleModule module : myProject.getModules()) {
|
||||
module.setModuleFileDirectoryPath(dirPath);
|
||||
}
|
||||
PropertiesComponent.getInstance().setValue(KEEP_IML_AT_MODULE_DIR_PROPERTY_KEY, String.valueOf(false));
|
||||
}
|
||||
});
|
||||
boolean imlAtModuleDir = PropertiesComponent.getInstance().getBoolean(KEEP_IML_AT_MODULE_DIR_PROPERTY_KEY, true);
|
||||
if (imlAtModuleDir) {
|
||||
myImlAtModuleContentRootsButton.setSelected(true);
|
||||
}
|
||||
else {
|
||||
myImlAtProjectDirButton.setSelected(true);
|
||||
}
|
||||
builder.add("gradle.import.structure.settings.label.iml.location", panel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean validate() {
|
||||
boolean nameIsValid = GradleAdjustImportSettingsUtil.validate(myProject, myNameControl);
|
||||
if (!nameIsValid) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!validateDirLocation(myProjectConfigLocationField, "gradle.import.text.error.project.undefined.config.location",
|
||||
"gradle.import.text.error.file.config.location"))
|
||||
{
|
||||
@@ -167,7 +228,6 @@ public class GradleProjectSettings implements GradleProjectStructureNodeSettings
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
myNameControl.setText(myProject.getName());
|
||||
myProjectConfigLocationField.setText(myProject.getProjectFileDirectoryPath());
|
||||
myProjectCompileOutputLocationField.setText(myProject.getCompileOutputPath());
|
||||
myLanguageLevelComboBox.setSelectedItem(myProject.getLanguageLevel().getPresentableText());
|
||||
|
||||
Reference in New Issue
Block a user