/*******************************************************************************
* Copyright (c) 2013 hangum.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* hangum - initial API and implementation
******************************************************************************/
package com.hangum.tadpole.preference.ui;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.log4j.Logger;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import com.hangum.tadpole.commons.google.analytics.AnalyticCaller;
import com.hangum.tadpole.commons.libs.core.message.CommonMessages;
import com.hangum.tadpole.engine.query.sql.TadpoleSystem_UserInfoData;
import com.hangum.tadpole.preference.Messages;
import com.hangum.tadpole.preference.define.PreferenceDefine;
import com.hangum.tadpole.preference.get.GetPreferenceGeneral;
import com.hangum.tadpole.session.manager.SessionManager;
/**
* SQL formatter preference page
*
* @author hangum
*
*/
public class SQLFormatterPreferencePage extends TadpoleDefaulPreferencePage implements IWorkbenchPreferencePage {
private static final Logger logger = Logger.getLogger(SQLFormatterPreferencePage.class);
private Combo comboTabsize;
private Button btnNoInsertNewDecode;
private Button btnNoInsertNewIn;
private Button btnNewLineBefeoreAndOr;
private Button btnNewLineBeforeComma;
private Button btnRemoveEmptyLine;
private Button btnWordBreak;
private Text textWidth;
/**
* Create the preference page.
*/
public SQLFormatterPreferencePage() {
}
/**
* Initialize the preference page.
*/
public void init(IWorkbench workbench) {
// Initialize the preference page
}
/**
* Create contents of the preference page.
* @param parent
*/
@Override
public Control createContents(Composite parent) {
Composite container = new Composite(parent, SWT.NULL);
container.setLayout(new GridLayout(2, false));
Label lblTabSize = new Label(container, SWT.NONE);
lblTabSize.setText(Messages.get().SQLFormatterPreferencePage_0);
comboTabsize = new Combo(container, SWT.READ_ONLY);
comboTabsize.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
comboTabsize.add("2"); //$NON-NLS-1$
comboTabsize.add("4"); //$NON-NLS-1$
comboTabsize.select(0);
btnNoInsertNewDecode = new Button(container, SWT.CHECK);
btnNoInsertNewDecode.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
btnNoInsertNewDecode.setText(Messages.get().SQLFormatterPreferencePage_3);
btnNoInsertNewIn = new Button(container, SWT.CHECK);
btnNoInsertNewIn.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
btnNoInsertNewIn.setText(Messages.get().SQLFormatterPreferencePage_4);
btnNewLineBefeoreAndOr = new Button(container, SWT.CHECK);
btnNewLineBefeoreAndOr.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
btnNewLineBefeoreAndOr.setText(Messages.get().SQLFormatterPreferencePage_btnCheckButton_text);
btnNewLineBeforeComma = new Button(container, SWT.CHECK);
btnNewLineBeforeComma.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
btnNewLineBeforeComma.setText(Messages.get().SQLFormatterPreferencePage_btnNewLineBefore_text);
btnRemoveEmptyLine = new Button(container, SWT.CHECK);
btnRemoveEmptyLine.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
btnRemoveEmptyLine.setText(Messages.get().SQLFormatterPreferencePage_btnRemoveEmptyLine_text);
btnWordBreak = new Button(container, SWT.CHECK);
btnWordBreak.setText(Messages.get().SQLFormatterPreferencePage_btnWordBreak_text);
textWidth = new Text(container, SWT.BORDER);
textWidth.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent event) {
isValid();
}
});
textWidth.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
initDefaultValue();
// google analytic
AnalyticCaller.track(this.getClass().getName());
return container;
}
@Override
public boolean isValid() {
String strTextWidth = textWidth.getText();
if(!NumberUtils.isNumber(strTextWidth)) {
textWidth.setFocus();
setValid(false);
setErrorMessage(Messages.get().SQLFormatterPreferencePage_8);
return false;
} else if(!(NumberUtils.toInt(strTextWidth) >= 40 && NumberUtils.toInt(strTextWidth) <= 1000)) {
textWidth.setFocus();
setValid(false);
setErrorMessage(String.format(CommonMessages.get().ValueIsLessThanOrOverThan, Messages.get().SQLFormatterPreferencePage_btnWordBreak_text, "40", "1,000"));
return false;
}
setErrorMessage(null);
setValid(true);
return true;
}
@Override
public boolean performOk() {
if(!isValid()) return false;
String txtTabSize = comboTabsize.getText();
String txtNoInsertDecode = ""+btnNoInsertNewDecode.getSelection(); //$NON-NLS-1$
String txtNoInsertIn = ""+btnNoInsertNewIn.getSelection(); //$NON-NLS-1$
String txtNewLineBefeoreAndOr = ""+btnNewLineBefeoreAndOr.getSelection(); //$NON-NLS-1$
String txtNewLineBefeoreComma = ""+btnNewLineBeforeComma.getSelection(); //$NON-NLS-1$
String txtRemoveEmptyLine = ""+btnRemoveEmptyLine.getSelection(); //$NON-NLS-1$
String txtWordbreak = ""+btnWordBreak.getSelection(); //$NON-NLS-1$
String strTextWidth = textWidth.getText();
// 테이블에 저장
try {
TadpoleSystem_UserInfoData.updateSQLFormatterInfoData(
txtTabSize, txtNoInsertDecode, txtNoInsertIn,
txtNewLineBefeoreAndOr, txtNewLineBefeoreComma, txtRemoveEmptyLine,
txtWordbreak, strTextWidth
);
// session 데이터를 수정한다.
SessionManager.setUserInfo(PreferenceDefine.DEFAULT_TAB_SIZE_PREFERENCE, txtTabSize);
SessionManager.setUserInfo(PreferenceDefine.SQL_FORMATTER_DECODE_PREFERENCE, txtNoInsertDecode);
SessionManager.setUserInfo(PreferenceDefine.SQL_FORMATTER_IN_PREFERENCE, txtNoInsertIn);
SessionManager.setUserInfo(PreferenceDefine.SQL_FORMATTER_NEWLINE_BEFAORE_AND_OR_PREFERENCE, txtNewLineBefeoreAndOr);
SessionManager.setUserInfo(PreferenceDefine.SQL_FORMATTER_NEWLINE_BEFAORE_COMMA_PREFERENCE, txtNewLineBefeoreComma);
SessionManager.setUserInfo(PreferenceDefine.SQL_FORMATTER_REMOVE_EMPTY_LINE_PREFERENCE, txtRemoveEmptyLine);
SessionManager.setUserInfo(PreferenceDefine.SQL_FORMATTER_WORD_BREAK_PREFERENCE, txtWordbreak);
SessionManager.setUserInfo(PreferenceDefine.SQL_FORMATTER_WORD_WIDTH_PREFERENCE, strTextWidth);
} catch(Exception e) {
logger.error("SQLFormatter preference saveing", e); //$NON-NLS-1$
MessageDialog.openError(getShell(), CommonMessages.get().Confirm, Messages.get().RDBPreferencePage_5 + e.getMessage()); //$NON-NLS-1$
return false;
}
return super.performOk();
}
/**
* initialize default value
*/
private void initDefaultValue() {
comboTabsize.setText(GetPreferenceGeneral.getDefaultTabSize());
btnNoInsertNewDecode.setSelection(Boolean.parseBoolean(GetPreferenceGeneral.getSQLFormatDecode()));
btnNoInsertNewIn.setSelection(Boolean.parseBoolean(GetPreferenceGeneral.getSQLFormatIn()));
btnNewLineBefeoreAndOr.setSelection(Boolean.parseBoolean(GetPreferenceGeneral.getSQLFormatNewLineBeforeAndOr()));
btnNewLineBeforeComma.setSelection(Boolean.parseBoolean(GetPreferenceGeneral.getSQLFormatNewLineBeforeComma()));
btnRemoveEmptyLine.setSelection(Boolean.parseBoolean(GetPreferenceGeneral.getSQLFormatRemoveEmptyLine()));
btnWordBreak.setSelection(Boolean.parseBoolean(GetPreferenceGeneral.getSQLFormatWordBreak()));
textWidth.setText(GetPreferenceGeneral.getSQLFormatWordWidth());
}
@Override
public boolean performCancel() {
initDefaultValue();
return super.performCancel();
}
@Override
protected void performApply() {
super.performApply();
}
@Override
protected void performDefaults() {
initDefaultValue();
super.performDefaults();
}
}