package org.wiztools.restclient.ui.option;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.util.List;
import java.util.logging.Logger;
import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JSpinner.DefaultEditor;
import org.wiztools.restclient.IGlobalOptions;
import org.wiztools.restclient.ServiceLocator;
import org.wiztools.restclient.ui.RESTViewImpl;
/**
*
* @author subwiz
*/
public class OptionsEtcPanel extends JPanel implements IOptionsPanel{
private static final Logger LOG = Logger.getLogger(OptionsEtcPanel.class.getName());
private static final String INDENT_KEY = "response.body.indent";
private static final String SYNTAX_COLOR_RESPONSE = "response.body.syntax.color";
private static final String SYNTAX_COLOR_REQUEST = "request.body.syntax.color";
private static final String SCROLL_SPEED = "textarea.scrollspeed";
private JCheckBox jcb_indentResponse = new JCheckBox("Auto-indent Response Body");
private JCheckBox jcb_syntaxResponse = new JCheckBox("Default enable Response Body syntax coloring?");
private JCheckBox jcb_syntaxRequest = new JCheckBox("Default enable Request Body syntax coloring?");
private JSpinner js_scrollSpeed = new JSpinner();
OptionsEtcPanel(){
this.setLayout(new FlowLayout(FlowLayout.LEFT));
jcb_indentResponse.setMnemonic('a');
jcb_syntaxRequest.setToolTipText("Requires RESTClient restart!");
jcb_syntaxResponse.setToolTipText("Requires RESTClient restart!");
JPanel jp = new JPanel();
jp.setLayout(new GridLayout(4, 1));
jp.add(jcb_indentResponse);
jp.add(jcb_syntaxRequest);
jp.add(jcb_syntaxResponse);
JPanel jp_scrollSpeed = new JPanel(new BorderLayout());
JPanel jp_scrollSpeed_inner = new JPanel(new FlowLayout());
jp_scrollSpeed_inner.add(new JLabel("Text areas scroll speed"));
jp_scrollSpeed_inner.add(js_scrollSpeed);
jp_scrollSpeed.add(BorderLayout.WEST, jp_scrollSpeed_inner);
jp.add(jp_scrollSpeed);
((JSpinner.DefaultEditor)js_scrollSpeed.getEditor()).getTextField().setColumns(2);
this.add(jp);
}
private boolean isIndentSetInGlobalOptions(){
IGlobalOptions options = ServiceLocator.getInstance(IGlobalOptions.class);
String indentStr = options.getProperty(INDENT_KEY);
return indentStr==null? false: (indentStr.equals("true")? true: false);
}
private boolean isResponseSyntaxSetInGlobalOptions() {
IGlobalOptions options = ServiceLocator.getInstance(IGlobalOptions.class);
String syntaxResponse = options.getProperty(SYNTAX_COLOR_RESPONSE);
return syntaxResponse==null? true: Boolean.valueOf(syntaxResponse);
}
private boolean isRequestSyntaxSetInGlobalOptions() {
IGlobalOptions options = ServiceLocator.getInstance(IGlobalOptions.class);
String syntaxRequest = options.getProperty(SYNTAX_COLOR_REQUEST);
return syntaxRequest==null? true: Boolean.valueOf(syntaxRequest);
}
@Override
public void initOptions() {
if(isIndentSetInGlobalOptions()){
jcb_indentResponse.setSelected(true);
}
else{
jcb_indentResponse.setSelected(false);
}
if(isResponseSyntaxSetInGlobalOptions()) {
jcb_syntaxResponse.setSelected(true);
}
else {
jcb_syntaxResponse.setSelected(false);
}
if(isRequestSyntaxSetInGlobalOptions()) {
jcb_syntaxRequest.setSelected(true);
}
else {
jcb_syntaxRequest.setSelected(false);
}
int scrollSpeed = 1;
String scrollSpeedStr = ServiceLocator.getInstance(IGlobalOptions.class).getProperty(SCROLL_SPEED);
if (scrollSpeedStr != null) {
try {
scrollSpeed = Integer.parseInt(scrollSpeedStr);
} catch(NumberFormatException ex) {
// leave the default font size of 12
}
}
js_scrollSpeed.setValue(scrollSpeed);
ServiceLocator.getInstance(RESTViewImpl.class).setTextAreaScrollSpeed(getScrollSpeed());
}
@Override
public void shutdownOptions() {
ServiceLocator.getInstance(IGlobalOptions.class).setProperty(SCROLL_SPEED, String.valueOf(js_scrollSpeed.getValue()));
}
@Override
public List<String> validateInput() {
return null;
}
@Override
public boolean saveOptions() {
IGlobalOptions options = ServiceLocator.getInstance(IGlobalOptions.class);
options.setProperty(INDENT_KEY, String.valueOf(jcb_indentResponse.isSelected()));
options.setProperty(SYNTAX_COLOR_REQUEST, String.valueOf(jcb_syntaxRequest.isSelected()));
options.setProperty(SYNTAX_COLOR_RESPONSE, String.valueOf(jcb_syntaxResponse.isSelected()));
options.setProperty(SCROLL_SPEED, String.valueOf(js_scrollSpeed.getValue()));
ServiceLocator.getInstance(RESTViewImpl.class).setTextAreaScrollSpeed(getScrollSpeed());
return true;
}
@Override
public boolean revertOptions() {
initOptions();
return true;
}
private int getScrollSpeed() {
return (Integer) js_scrollSpeed.getValue();
}
}