mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
decouple TextFieldWithBrowseButton logic from EnvironmentVariablesComponent
This commit is contained in:
+12
-93
@@ -21,35 +21,21 @@
|
||||
package com.intellij.execution.configuration;
|
||||
|
||||
import com.intellij.execution.ExecutionBundle;
|
||||
import com.intellij.execution.util.EnvVariablesTable;
|
||||
import com.intellij.execution.util.EnvironmentVariable;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.LabeledComponent;
|
||||
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.ui.UserActivityProviderComponent;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.StringBuilderSpinAllocator;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import gnu.trove.THashMap;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class EnvironmentVariablesComponent extends LabeledComponent<TextFieldWithBrowseButton> implements UserActivityProviderComponent {
|
||||
private boolean myPassParentEnvs;
|
||||
private final Map<String, String> myEnvs = new THashMap<String, String>();
|
||||
@NonNls private static final String ENVS = "envs";
|
||||
@NonNls public static final String ENV = "env";
|
||||
@NonNls public static final String NAME = "name";
|
||||
@@ -57,52 +43,30 @@ public class EnvironmentVariablesComponent extends LabeledComponent<TextFieldWit
|
||||
@NonNls private static final String OPTION = "option";
|
||||
@NonNls private static final String ENV_VARIABLES = "ENV_VARIABLES";
|
||||
|
||||
private final List<ChangeListener> myListeners = ContainerUtil.createLockFreeCopyOnWriteList();
|
||||
private final EnvironmentVariablesTextField myEnvsTextField;
|
||||
|
||||
public EnvironmentVariablesComponent() {
|
||||
super();
|
||||
final TextFieldWithBrowseButton envsTestField = new TextFieldWithBrowseButton();
|
||||
envsTestField.setEditable(false);
|
||||
setComponent(envsTestField);
|
||||
myEnvsTextField = new EnvironmentVariablesTextField();
|
||||
setComponent(myEnvsTextField.getComponent());
|
||||
setText(ExecutionBundle.message("environment.variables.component.title"));
|
||||
getComponent().addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent e) {
|
||||
new MyEnvironmentVariablesDialog().show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setEnvs(@NotNull Map<String, String> envs) {
|
||||
myEnvs.clear();
|
||||
myEnvs.putAll(envs);
|
||||
@NonNls final StringBuilder buf = StringBuilderSpinAllocator.alloc();
|
||||
try {
|
||||
for (String variable : myEnvs.keySet()) {
|
||||
buf.append(variable).append("=").append(myEnvs.get(variable)).append(";");
|
||||
}
|
||||
if (buf.length() > 0) buf.deleteCharAt(buf.length() - 1); //trim last ;
|
||||
getComponent().setText(buf.toString());
|
||||
}
|
||||
finally {
|
||||
StringBuilderSpinAllocator.dispose(buf);
|
||||
}
|
||||
myEnvsTextField.setEnvs(envs);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Map<String, String> getEnvs() {
|
||||
return myEnvs;
|
||||
return myEnvsTextField.getEnvs();
|
||||
}
|
||||
|
||||
public boolean isPassParentEnvs() {
|
||||
return myPassParentEnvs;
|
||||
return myEnvsTextField.isPassParentEnvs();
|
||||
}
|
||||
|
||||
public void setPassParentEnvs(final boolean passDefaultVariables) {
|
||||
if (myPassParentEnvs != passDefaultVariables) {
|
||||
myPassParentEnvs = passDefaultVariables;
|
||||
fireStateChanged();
|
||||
}
|
||||
public void setPassParentEnvs(final boolean passParentEnvs) {
|
||||
myEnvsTextField.setPassParentEnvs(passParentEnvs);
|
||||
}
|
||||
|
||||
public static void readExternal(Element element, Map<String, String> envs) {
|
||||
@@ -170,56 +134,11 @@ public class EnvironmentVariablesComponent extends LabeledComponent<TextFieldWit
|
||||
|
||||
@Override
|
||||
public void addChangeListener(final ChangeListener changeListener) {
|
||||
myListeners.add(changeListener);
|
||||
myEnvsTextField.addChangeListener(changeListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeChangeListener(final ChangeListener changeListener) {
|
||||
myListeners.remove(changeListener);
|
||||
}
|
||||
|
||||
private void fireStateChanged() {
|
||||
for (ChangeListener listener : myListeners) {
|
||||
listener.stateChanged(new ChangeEvent(this));
|
||||
}
|
||||
}
|
||||
|
||||
private class MyEnvironmentVariablesDialog extends DialogWrapper {
|
||||
private final EnvVariablesTable myEnvVariablesTable;
|
||||
private final JCheckBox myUseDefaultCb = new JCheckBox(ExecutionBundle.message("env.vars.checkbox.title"));
|
||||
private final JPanel myWholePanel = new JPanel(new BorderLayout());
|
||||
|
||||
protected MyEnvironmentVariablesDialog() {
|
||||
super(EnvironmentVariablesComponent.this, true);
|
||||
myEnvVariablesTable = new EnvVariablesTable();
|
||||
final List<EnvironmentVariable> envVariables = new ArrayList<EnvironmentVariable>();
|
||||
for (String envVariable : myEnvs.keySet()) {
|
||||
envVariables.add(new EnvironmentVariable(envVariable, myEnvs.get(envVariable), false));
|
||||
}
|
||||
myEnvVariablesTable.setValues(envVariables);
|
||||
myUseDefaultCb.setSelected(isPassParentEnvs());
|
||||
myWholePanel.add(myEnvVariablesTable.getComponent(), BorderLayout.CENTER);
|
||||
myWholePanel.add(myUseDefaultCb, BorderLayout.SOUTH);
|
||||
setTitle(ExecutionBundle.message("environment.variables.dialog.title"));
|
||||
init();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected JComponent createCenterPanel() {
|
||||
return myWholePanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doOKAction() {
|
||||
myEnvVariablesTable.stopEditing();
|
||||
final Map<String, String> envs = new LinkedHashMap<String, String>();
|
||||
for (EnvironmentVariable variable : myEnvVariablesTable.getEnvironmentVariables()) {
|
||||
envs.put(variable.getName(), variable.getValue());
|
||||
}
|
||||
setEnvs(envs);
|
||||
setPassParentEnvs(myUseDefaultCb.isSelected());
|
||||
super.doOKAction();
|
||||
}
|
||||
myEnvsTextField.removeChangeListener(changeListener);
|
||||
}
|
||||
}
|
||||
|
||||
+150
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* Copyright 2000-2014 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 com.intellij.execution.configuration;
|
||||
|
||||
import com.intellij.execution.ExecutionBundle;
|
||||
import com.intellij.execution.util.EnvVariablesTable;
|
||||
import com.intellij.execution.util.EnvironmentVariable;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import gnu.trove.THashMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
|
||||
public class EnvironmentVariablesTextField {
|
||||
|
||||
private final TextFieldWithBrowseButton myEnvsTextField;
|
||||
private final Map<String, String> myEnvs = new THashMap<String, String>();
|
||||
private boolean myPassParentEnvs;
|
||||
private final List<ChangeListener> myListeners = ContainerUtil.createLockFreeCopyOnWriteList();
|
||||
|
||||
public EnvironmentVariablesTextField() {
|
||||
myEnvsTextField = new TextFieldWithBrowseButton();
|
||||
myEnvsTextField.setEditable(false);
|
||||
myEnvsTextField.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent e) {
|
||||
new MyEnvironmentVariablesDialog().show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public TextFieldWithBrowseButton getComponent() {
|
||||
return myEnvsTextField;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Map<String, String> getEnvs() {
|
||||
return myEnvs;
|
||||
}
|
||||
|
||||
public void setEnvs(@NotNull Map<String, String> envs) {
|
||||
myEnvs.clear();
|
||||
myEnvs.putAll(envs);
|
||||
String envsStr = stringifyEnvs(myEnvs);
|
||||
myEnvsTextField.setText(envsStr);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static String stringifyEnvs(@NotNull Map<String, String> envs) {
|
||||
if (envs.isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
StringBuilder buf = new StringBuilder();
|
||||
for (Map.Entry<String, String> entry : envs.entrySet()) {
|
||||
if (buf.length() > 0) {
|
||||
buf.append(";");
|
||||
}
|
||||
buf.append(entry.getKey()).append("=").append(entry.getValue());
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
public boolean isPassParentEnvs() {
|
||||
return myPassParentEnvs;
|
||||
}
|
||||
|
||||
public void setPassParentEnvs(boolean passParentEnvs) {
|
||||
if (myPassParentEnvs != passParentEnvs) {
|
||||
myPassParentEnvs = passParentEnvs;
|
||||
fireStateChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public void addChangeListener(ChangeListener changeListener) {
|
||||
myListeners.add(changeListener);
|
||||
}
|
||||
|
||||
public void removeChangeListener(ChangeListener changeListener) {
|
||||
myListeners.remove(changeListener);
|
||||
}
|
||||
|
||||
private void fireStateChanged() {
|
||||
for (ChangeListener listener : myListeners) {
|
||||
listener.stateChanged(new ChangeEvent(this));
|
||||
}
|
||||
}
|
||||
|
||||
private class MyEnvironmentVariablesDialog extends DialogWrapper {
|
||||
private final EnvVariablesTable myEnvVariablesTable;
|
||||
private final JCheckBox myUseDefaultCb = new JCheckBox(ExecutionBundle.message("env.vars.checkbox.title"));
|
||||
private final JPanel myWholePanel = new JPanel(new BorderLayout());
|
||||
|
||||
protected MyEnvironmentVariablesDialog() {
|
||||
super(myEnvsTextField, true);
|
||||
myEnvVariablesTable = new EnvVariablesTable();
|
||||
List<EnvironmentVariable> envVariables = ContainerUtil.newArrayList();
|
||||
for (Map.Entry<String, String> entry : myEnvs.entrySet()) {
|
||||
envVariables.add(new EnvironmentVariable(entry.getKey(), entry.getValue(), false));
|
||||
}
|
||||
myEnvVariablesTable.setValues(envVariables);
|
||||
myUseDefaultCb.setSelected(isPassParentEnvs());
|
||||
myWholePanel.add(myEnvVariablesTable.getComponent(), BorderLayout.CENTER);
|
||||
myWholePanel.add(myUseDefaultCb, BorderLayout.SOUTH);
|
||||
setTitle(ExecutionBundle.message("environment.variables.dialog.title"));
|
||||
init();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected JComponent createCenterPanel() {
|
||||
return myWholePanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doOKAction() {
|
||||
myEnvVariablesTable.stopEditing();
|
||||
final Map<String, String> envs = new LinkedHashMap<String, String>();
|
||||
for (EnvironmentVariable variable : myEnvVariablesTable.getEnvironmentVariables()) {
|
||||
envs.put(variable.getName(), variable.getValue());
|
||||
}
|
||||
setEnvs(envs);
|
||||
setPassParentEnvs(myUseDefaultCb.isSelected());
|
||||
super.doOKAction();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user