blob: 61a45a4e88b1e13b07a6309629b5f7dc8d7d53de [file] [log] [blame]
/* ==========================================================================
* Copyright 2006 Mevenide Team
*
* 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.execution.configuration.EnvironmentVariablesComponent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.projectRoots.ProjectJdkTable;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.RawCommandLineEditor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.maven.project.MavenProject;
import org.jetbrains.idea.maven.project.MavenProjectsManager;
import org.jetbrains.idea.maven.utils.ComboBoxUtil;
import javax.swing.*;
import java.awt.*;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;
public class MavenRunnerPanel {
protected final Project myProject;
private final boolean myRunConfigurationMode;
private JCheckBox myRunInBackgroundCheckbox;
private RawCommandLineEditor myVMParametersEditor;
private EnvironmentVariablesComponent myEnvVariablesComponent;
private JComboBox myJdkCombo;
private final DefaultComboBoxModel myJdkComboModel = new DefaultComboBoxModel();
private JCheckBox mySkipTestsCheckBox;
private MavenPropertiesPanel myPropertiesPanel;
private Map<String, String> myProperties;
public MavenRunnerPanel(@NotNull Project p, boolean isRunConfiguration) {
myProject = p;
myRunConfigurationMode = isRunConfiguration;
}
public JComponent createComponent() {
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.WEST;
c.insets.bottom = 5;
myRunInBackgroundCheckbox = new JCheckBox("Run in background");
myRunInBackgroundCheckbox.setMnemonic('b');
if (!myRunConfigurationMode) {
c.gridx = 0;
c.gridy++;
c.weightx = 1;
c.gridwidth = GridBagConstraints.REMAINDER;
panel.add(myRunInBackgroundCheckbox, c);
}
c.gridwidth = 1;
JLabel labelVMParameters = new JLabel("VM Options:");
labelVMParameters.setDisplayedMnemonic('v');
labelVMParameters.setLabelFor(myVMParametersEditor = new RawCommandLineEditor());
myVMParametersEditor.setDialogCaption(labelVMParameters.getText());
c.gridx = 0;
c.gridy++;
c.weightx = 0;
panel.add(labelVMParameters, c);
c.gridx = 1;
c.weightx = 1;
c.insets.left = 10;
panel.add(myVMParametersEditor, c);
c.insets.left = 0;
JLabel jdkLabel = new JLabel("JRE:");
jdkLabel.setDisplayedMnemonic('j');
jdkLabel.setLabelFor(myJdkCombo = new JComboBox());
c.gridx = 0;
c.gridy++;
c.weightx = 0;
panel.add(jdkLabel, c);
c.gridx = 1;
c.weightx = 1;
c.fill = GridBagConstraints.NONE;
c.insets.left = 10;
panel.add(myJdkCombo, c);
c.insets.left = 0;
c.fill = GridBagConstraints.HORIZONTAL;
myEnvVariablesComponent = new EnvironmentVariablesComponent();
myEnvVariablesComponent.setPassParentEnvs(true);
myEnvVariablesComponent.setLabelLocation(BorderLayout.WEST);
c.gridx = 0;
c.gridy++;
c.weightx = 1;
c.gridwidth = 2;
panel.add(myEnvVariablesComponent, c);
c.gridwidth = 1;
JPanel propertiesPanel = new JPanel(new BorderLayout());
propertiesPanel.setBorder(IdeBorderFactory.createTitledBorder("Properties", false));
propertiesPanel.add(mySkipTestsCheckBox = new JCheckBox("Skip tests"), BorderLayout.NORTH);
mySkipTestsCheckBox.setMnemonic('t');
collectProperties();
propertiesPanel.add(myPropertiesPanel = new MavenPropertiesPanel(myProperties), BorderLayout.CENTER);
myPropertiesPanel.getEmptyText().setText("No properties defined");
c.gridx = 0;
c.gridy++;
c.weightx = c.weighty = 1;
c.gridwidth = c.gridheight = GridBagConstraints.REMAINDER;
c.fill = GridBagConstraints.BOTH;
panel.add(propertiesPanel, c);
return panel;
}
private void collectProperties() {
MavenProjectsManager s = MavenProjectsManager.getInstance(myProject);
Map<String, String> result = new LinkedHashMap<String, String>();
for (MavenProject each : s.getProjects()) {
Properties properties = each.getProperties();
result.putAll((Map)properties);
}
myProperties = result;
}
protected void getData(MavenRunnerSettings data) {
myRunInBackgroundCheckbox.setSelected(data.isRunMavenInBackground());
myVMParametersEditor.setText(data.getVmOptions());
mySkipTestsCheckBox.setSelected(data.isSkipTests());
Map<String, String> jdkMap = collectJdkNamesAndDescriptions();
if (!jdkMap.containsKey(data.getJreName())) {
jdkMap.put(data.getJreName(), data.getJreName());
}
myJdkComboModel.removeAllElements();
for (Map.Entry<String, String> entry : jdkMap.entrySet()) {
ComboBoxUtil.addToModel(myJdkComboModel, entry.getKey(), entry.getValue());
}
myJdkCombo.setModel(myJdkComboModel);
ComboBoxUtil.select(myJdkComboModel, data.getJreName());
myPropertiesPanel.setDataFromMap(data.getMavenProperties());
myEnvVariablesComponent.setEnvs(data.getEnvironmentProperties());
myEnvVariablesComponent.setPassParentEnvs(data.isPassParentEnv());
}
private Map<String, String> collectJdkNamesAndDescriptions() {
Map<String, String> result = new LinkedHashMap<String, String>();
for (Sdk projectJdk : ProjectJdkTable.getInstance().getSdksOfType(JavaSdk.getInstance())) {
String name = projectJdk.getName();
result.put(name, name);
}
result.put(MavenRunnerSettings.USE_INTERNAL_JAVA, RunnerBundle.message("maven.java.internal"));
String projectJdkTitle;
String projectJdk = ProjectRootManager.getInstance(myProject).getProjectSdkName();
if (projectJdk == null) {
projectJdkTitle = "Use Project JDK (not defined yet)";
}
else {
projectJdkTitle = "Use Project JDK (" + projectJdk + ')';
}
result.put(MavenRunnerSettings.USE_PROJECT_JDK, projectJdkTitle);
result.put(MavenRunnerSettings.USE_JAVA_HOME, RunnerBundle.message("maven.java.home.env"));
return result;
}
protected void setData(MavenRunnerSettings data) {
data.setRunMavenInBackground(myRunInBackgroundCheckbox.isSelected());
data.setVmOptions(myVMParametersEditor.getText().trim());
data.setSkipTests(mySkipTestsCheckBox.isSelected());
data.setJreName(ComboBoxUtil.getSelectedString(myJdkComboModel));
data.setMavenProperties(myPropertiesPanel.getDataAsMap());
data.setEnvironmentProperties(myEnvVariablesComponent.getEnvs());
data.setPassParentEnv(myEnvVariablesComponent.isPassParentEnvs());
}
public Project getProject() {
return myProject;
}
}