/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.transformation.ui.preferences;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.transformation.PreferenceConstants;
import org.teiid.designer.transformation.TransformationPlugin;
import org.teiid.designer.ui.common.preferences.IEditorPreferencesComponent;
import org.teiid.designer.ui.common.preferences.IEditorPreferencesValidationListener;
import org.teiid.designer.ui.common.util.WidgetFactory;
import org.teiid.query.ui.UiConstants;
import org.teiid.query.ui.UiPlugin;
/**
* EditorPreferencePage
*
* @since 8.0
*/
public class TransformationEditorPreferencesComponent implements IEditorPreferencesComponent {
private Button startClausesOnNewLineButton;
private Button indentClausesButton;
private Button autoExpandSelectButton;
private Text defaultStringLength;
private Button showViewAndSourcesRadioButton;
private Button showTreeLayoutRadioButton;
private String name = getString("TransformationEditorPreferencesComponent.name"); //$NON-NLS-1$
private String defaultStringMessage =getString("TransformationEditorPreferencesComponent.defaultStringLength"); //$NON-NLS-1$
private String invalidNumberMessage = getString("TransformationEditorPreferencesComponent.invalidNumber"); //$NON-NLS-1$
private static String getString(String key) {
return org.teiid.designer.transformation.ui.UiConstants.Util.getString(key);
}
private static int MAX_NUMBER = 4000;
private static int MIN_NUMBER = 0;
private List<IEditorPreferencesValidationListener> validationListeners = new ArrayList<IEditorPreferencesValidationListener>();
public TransformationEditorPreferencesComponent() {
}
@Override
public String getName() {
return name;
}
@Override
public String getTooltip() {
return name;
}
@Override
public Composite createEditorPreferencesComponent( Composite parent ) {
Label label = null;
Composite comp = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = 8;
layout.marginWidth = 8;
layout.numColumns = 1;
comp.setLayout(layout);
// ================================================
// 1. SQL Clauses options
// ================================================
String clausesGroupHdr = getString("TransformationEditorPreferencesComponent.sqlClauses"); //$NON-NLS-1$
Group clausesGroup = WidgetFactory.createGroup(comp, clausesGroupHdr, GridData.FILL_HORIZONTAL, 1, 2);
startClausesOnNewLineButton = new Button(clausesGroup, SWT.CHECK);
String buttonText = getString("TransformationEditorPreferencesComponent.startClauses"); //$NON-NLS-1$
startClausesOnNewLineButton.setText(buttonText);
startClausesOnNewLineButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent ev ) {
setButtonEnabling();
}
});
indentClausesButton = new Button(clausesGroup, SWT.CHECK);
buttonText = getString("TransformationEditorPreferencesComponent.indentClause"); //$NON-NLS-1$
indentClausesButton.setText(buttonText);
indentClausesButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent ev ) {
setButtonEnabling();
}
});
GridData buttonGridData = new GridData();
buttonGridData.horizontalIndent = 6;
indentClausesButton.setLayoutData(buttonGridData);
autoExpandSelectButton = new Button(clausesGroup, SWT.CHECK);
buttonText = getString("TransformationEditorPreferencesComponent.autoExpandSelect"); //$NON-NLS-1$
autoExpandSelectButton.setText(buttonText);
autoExpandSelectButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent ev ) {
setButtonEnabling();
}
});
buttonGridData = new GridData();
buttonGridData.horizontalSpan = 2;
autoExpandSelectButton.setLayoutData(buttonGridData);
// ================================================
// 2. Transformation Diagram Layout
// ================================================
String diagramLayoutHeader = getString("TransformationEditorPreferencesComponent.diagramLayout"); //$NON-NLS-1$
Group grpDiagramLayout = WidgetFactory.createGroup(comp, diagramLayoutHeader, GridData.FILL_HORIZONTAL);
showViewAndSourcesRadioButton = WidgetFactory.createRadioButton(grpDiagramLayout,
getString("TransformationEditorPreferencesComponent.viewAndSources")); //$NON-NLS-1$);
showTreeLayoutRadioButton = WidgetFactory.createRadioButton(grpDiagramLayout,
getString("TransformationEditorPreferencesComponent.treeLayout")); //$NON-NLS-1$);
// ================================================
// 3. Miscellaneous
// ================================================
String miscHeader = getString("TransformationEditorPreferencesComponent.miscellaneous"); //$NON-NLS-1$
Group grpMisc = WidgetFactory.createGroup(comp, miscHeader, GridData.FILL_HORIZONTAL, 1, 2);
label = new Label(grpMisc, SWT.NONE);
label.setText(defaultStringMessage);
defaultStringLength = new Text(grpMisc, SWT.BORDER);
GridDataFactory.fillDefaults().minSize(40, 1).applyTo(defaultStringLength);
defaultStringLength.addModifyListener(new ModifyListener() {
@Override
public void modifyText( ModifyEvent e ) {
validate();
}
});
setInitialButtonStates();
return comp;
}
private void setInitialButtonStates() {
boolean selected = getPreferenceStore().getBoolean(UiConstants.Prefs.START_CLAUSES_ON_NEW_LINE);
startClausesOnNewLineButton.setSelection(selected);
selected = getPreferenceStore().getBoolean(UiConstants.Prefs.INDENT_CLAUSE_CONTENT);
indentClausesButton.setSelection(selected);
selected = TransformationPlugin.getDefault().getPreferences().getBoolean(
PreferenceConstants.AUTO_EXPAND_SELECT, PreferenceConstants.AUTO_EXPAND_SELECT_DEFAULT);
autoExpandSelectButton.setSelection(selected);
defaultStringLength.setText(String.valueOf(ModelerCore.getTransformationPreferences().getDefaultStringLength()));
boolean treeLayout = getPreferenceStore().getBoolean(UiConstants.Prefs.TREE_DIAGRAM_LAYOUT);
showViewAndSourcesRadioButton.setSelection(!treeLayout);
showTreeLayoutRadioButton.setSelection(treeLayout);
setButtonEnabling();
}
@Override
public boolean performOk() {
boolean changeMade = false;
boolean isSelected = (startClausesOnNewLineButton.getEnabled() && startClausesOnNewLineButton.getSelection());
boolean isSet = getPreferenceStore().getBoolean(UiConstants.Prefs.START_CLAUSES_ON_NEW_LINE);
if (isSelected != isSet) {
getPreferenceStore().setValue(UiConstants.Prefs.START_CLAUSES_ON_NEW_LINE, isSelected);
changeMade = true;
}
isSelected = (indentClausesButton.getEnabled() && indentClausesButton.getSelection());
isSet = getPreferenceStore().getBoolean(UiConstants.Prefs.INDENT_CLAUSE_CONTENT);
if (isSelected != isSet) {
getPreferenceStore().setValue(UiConstants.Prefs.INDENT_CLAUSE_CONTENT, isSelected);
changeMade = true;
}
isSelected = (autoExpandSelectButton.getEnabled() && autoExpandSelectButton.getSelection());
isSet = TransformationPlugin.getDefault().getPreferences().getBoolean(PreferenceConstants.AUTO_EXPAND_SELECT, PreferenceConstants.AUTO_EXPAND_SELECT_DEFAULT);
if (isSelected != isSet) {
TransformationPlugin.getDefault().getPreferences().putBoolean(PreferenceConstants.AUTO_EXPAND_SELECT, isSelected);
changeMade = true;
}
Integer val = new Integer(defaultStringLength.getText());
if (val.intValue() != ModelerCore.getTransformationPreferences().getDefaultStringLength()) {
ModelerCore.getTransformationPreferences().setDefaultStringLength(val.intValue());
changeMade = true;
}
boolean isTreeLayout = getPreferenceStore().getBoolean(UiConstants.Prefs.TREE_DIAGRAM_LAYOUT);
if (isTreeLayout != showTreeLayoutRadioButton.getSelection()) {
changeMade = true;
getPreferenceStore().setValue(UiConstants.Prefs.TREE_DIAGRAM_LAYOUT, showTreeLayoutRadioButton.getSelection());
}
if (changeMade) {
UiPlugin.getDefault().savePreferences();
}
return true;
}
@Override
public void performDefaults() {
boolean select = getPreferenceStore().getDefaultBoolean(UiConstants.Prefs.START_CLAUSES_ON_NEW_LINE);
startClausesOnNewLineButton.setSelection(select);
select = getPreferenceStore().getDefaultBoolean(UiConstants.Prefs.INDENT_CLAUSE_CONTENT);
indentClausesButton.setSelection(select);
indentClausesButton.setSelection(PreferenceConstants.AUTO_EXPAND_SELECT_DEFAULT);
boolean treeLayout = getPreferenceStore().getDefaultBoolean(UiConstants.Prefs.TREE_DIAGRAM_LAYOUT);
showViewAndSourcesRadioButton.setSelection(!treeLayout);
showTreeLayoutRadioButton.setSelection(treeLayout);
defaultStringLength.setText(String.valueOf(ModelerCore.getTransformationPreferences().getDefaultStringLengthDefault()));
setButtonEnabling();
validate();
}
void setButtonEnabling() {
startClausesOnNewLineButton.setEnabled(true);
indentClausesButton.setEnabled(startClausesOnNewLineButton.getSelection());
}
private IPreferenceStore getPreferenceStore() {
return UiPlugin.getDefault().getPreferenceStore();
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.ui.common.preferences.IEditorPreferencesComponent#addValidationListener(org.teiid.designer.ui.common.preferences.IEditorPreferencesValidationListener)
*/
@Override
public void addValidationListener( IEditorPreferencesValidationListener listener ) {
this.validationListeners.add(listener);
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.ui.common.preferences.IEditorPreferencesComponent#removeValidationListener(org.teiid.designer.ui.common.preferences.IEditorPreferencesValidationListener)
*/
@Override
public void removeValidationListener( IEditorPreferencesValidationListener listener ) {
this.validationListeners.remove(listener);
}
public void fireValidationStatus( boolean validationStatus,
String message ) {
for (int i = 0; i < this.validationListeners.size(); i++) {
this.validationListeners.get(i).validationStatus(validationStatus, message);
}
}
/* (non-Javadoc)
* @see org.teiid.designer.ui.common.preferences.IEditorPreferencesComponent#validate()
*/
@Override
public void validate() {
try {
Integer val = new Integer(defaultStringLength.getText());
if ((val.intValue() >= MIN_NUMBER && val.intValue() <= MAX_NUMBER)) {
fireValidationStatus(true, null);
return;
}
} catch (NumberFormatException e) {
// Expected
}
fireValidationStatus(false, invalidNumberMessage);
}
}