/*
* SoapUI, Copyright (C) 2004-2016 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.eviware.soapui.actions;
import com.eviware.soapui.model.settings.Settings;
import com.eviware.soapui.settings.UISettings;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.components.SimpleForm;
import com.eviware.soapui.support.types.StringToStringMap;
import com.jgoodies.forms.builder.ButtonBarBuilder;
import com.l2fprod.common.swing.JFontChooser;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JTextField;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Preferences class for UISettings
*
* @author ole.matzura
*/
public class EditorPrefs implements Prefs {
public static final String NO_RESIZE_REQUEST_EDITOR = "Disable auto-resize";
public static final String START_WITH_REQUEST_TABS = "Tabbed request view";
public static final String AUTO_VALIDATE_REQUEST = "Validate Requests";
public static final String ABORT_ON_INVALID_REQUEST = "Abort on invalid";
public static final String AUTO_VALIDATE_RESPONSE = "Validate Responses";
public static final String XML_LINE_NUMBERS = "XML Line Numbers";
public static final String GROOVY_LINE_NUMBERS = "Groovy Line Numbers";
private JTextField editorFontTextField;
private SimpleForm editorForm;
private final String title;
private JCheckBox abortCheckBox;
private JCheckBox autoValidateCheckBox;
public EditorPrefs(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
public SimpleForm getForm() {
if (editorForm == null) {
ButtonBarBuilder builder = new ButtonBarBuilder();
editorFontTextField = new JTextField(20);
editorFontTextField.setEnabled(false);
builder.addFixed(editorFontTextField);
builder.addRelatedGap();
builder.addFixed(new JButton(new AbstractAction("Select Font..") {
public void actionPerformed(ActionEvent e) {
Font font = JFontChooser.showDialog(UISupport.getMainFrame(), "Select XML Editor Font",
Font.decode(editorFontTextField.getText()));
if (font != null) {
editorFontTextField.setText(encodeFont(font));
}
}
}));
editorForm = new SimpleForm();
editorForm.addSpace(5);
editorForm.append("Editor Font", builder.getPanel());
editorForm.appendSeparator();
editorForm.appendCheckBox(XML_LINE_NUMBERS, "Show line numbers in XML editors by default", true);
editorForm.appendCheckBox(GROOVY_LINE_NUMBERS, "Show line numbers in Groovy editors by default", true);
editorForm.appendSeparator();
editorForm.appendCheckBox(NO_RESIZE_REQUEST_EDITOR, "Disables automatic resizing of Request editors", true);
editorForm.appendCheckBox(START_WITH_REQUEST_TABS, "Defaults the Request editor to the tabbed layout", true);
editorForm.appendSeparator();
autoValidateCheckBox = editorForm.appendCheckBox(AUTO_VALIDATE_REQUEST,
"Always validate request messages before they are sent", true);
abortCheckBox = editorForm.appendCheckBox(ABORT_ON_INVALID_REQUEST, "Abort invalid requests", true);
editorForm.appendCheckBox(AUTO_VALIDATE_RESPONSE, "Always validate response messages", true);
autoValidateCheckBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
abortCheckBox.setEnabled(autoValidateCheckBox.isSelected());
}
});
}
return editorForm;
}
public void getFormValues(Settings settings) {
StringToStringMap values = new StringToStringMap();
editorForm.getValues(values);
storeValues(values, settings);
}
public void storeValues(StringToStringMap values, Settings settings) {
if (editorFontTextField != null) {
settings.setString(UISettings.EDITOR_FONT, editorFontTextField.getText());
}
settings.setBoolean(UISettings.NO_RESIZE_REQUEST_EDITOR, values.getBoolean(NO_RESIZE_REQUEST_EDITOR));
settings.setBoolean(UISettings.START_WITH_REQUEST_TABS, values.getBoolean(START_WITH_REQUEST_TABS));
settings.setBoolean(UISettings.AUTO_VALIDATE_REQUEST, values.getBoolean(AUTO_VALIDATE_REQUEST));
settings.setBoolean(UISettings.ABORT_ON_INVALID_REQUEST, values.getBoolean(ABORT_ON_INVALID_REQUEST));
settings.setBoolean(UISettings.AUTO_VALIDATE_RESPONSE, values.getBoolean(AUTO_VALIDATE_RESPONSE));
settings.setBoolean(UISettings.SHOW_XML_LINE_NUMBERS, values.getBoolean(XML_LINE_NUMBERS));
settings.setBoolean(UISettings.SHOW_GROOVY_LINE_NUMBERS, values.getBoolean(GROOVY_LINE_NUMBERS));
}
public static String encodeFont(Font font) {
String editorFont = font.getFontName() + " ";
if (font.isBold()) {
editorFont += "bold ";
}
if (font.isItalic()) {
editorFont += "italic ";
}
editorFont += font.getSize();
return editorFont;
}
public void setFormValues(Settings settings) {
editorFontTextField.setText(encodeFont(UISupport.getEditorFont()));
editorForm.setValues(getValues(settings));
abortCheckBox.setEnabled(settings.getBoolean(UISettings.AUTO_VALIDATE_REQUEST));
}
public StringToStringMap getValues(Settings settings) {
StringToStringMap values = new StringToStringMap();
values.put(NO_RESIZE_REQUEST_EDITOR, settings.getBoolean(UISettings.NO_RESIZE_REQUEST_EDITOR));
values.put(START_WITH_REQUEST_TABS, settings.getBoolean(UISettings.START_WITH_REQUEST_TABS));
values.put(AUTO_VALIDATE_REQUEST, settings.getBoolean(UISettings.AUTO_VALIDATE_REQUEST));
values.put(ABORT_ON_INVALID_REQUEST, settings.getBoolean(UISettings.ABORT_ON_INVALID_REQUEST));
values.put(AUTO_VALIDATE_RESPONSE, settings.getBoolean(UISettings.AUTO_VALIDATE_RESPONSE));
values.put(XML_LINE_NUMBERS, settings.getBoolean(UISettings.SHOW_XML_LINE_NUMBERS));
values.put(GROOVY_LINE_NUMBERS, settings.getBoolean(UISettings.SHOW_GROOVY_LINE_NUMBERS));
return values;
}
}