// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.mdm.repository.ui.preferences;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
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.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.events.ExpansionAdapter;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.talend.mdm.repository.core.service.IModelValidationService;
import org.talend.mdm.repository.core.validate.ValidationPreferenceService;
import org.talend.mdm.repository.core.validate.i18n.Messages;
public class ValidationPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
private Button showDialogAfterImmediateButton;
private Button showDialogAfterSavedButton;
private Button showDialogBeforeDeployButton;
private Button cancelButton;
private Button skipErrorsButton;
private Button skipErrorsAndWarningsButton;
public ValidationPreferencePage() {
}
public ValidationPreferencePage(String title) {
super(title);
}
public ValidationPreferencePage(String title, ImageDescriptor image) {
super(title, image);
}
@Override
public void init(IWorkbench workbench) {
IPreferenceStore prefStore = PlatformUI.getPreferenceStore();
setPreferenceStore(prefStore);
}
@Override
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
doCreateContent(composite);
initControls();
return composite;
}
protected void doCreateContent(Composite parent) {
Composite immediateComposite = createExpandComposite(parent, Messages.ValidationPrefPage_RightClick_Title, true);
showDialogAfterImmediateButton = new Button(immediateComposite, SWT.CHECK);
showDialogAfterImmediateButton.setText(Messages.ValidationPrefPage_Button_Text);
Composite savedComposite = createExpandComposite(parent, Messages.ValidationPreferencePage_SavingDialog_Title, true);
showDialogAfterSavedButton = new Button(savedComposite, SWT.CHECK);
showDialogAfterSavedButton.setText(Messages.ValidationPreferencePage_SavingButton_Text);
Composite deployComposite = createExpandComposite(parent, Messages.ValidationPreferencePage_Before_Deplying_Title, true);
GridLayoutFactory.fillDefaults().extendedMargins(10, 10, 0, 0).applyTo(deployComposite);
showDialogBeforeDeployButton = new Button(deployComposite, SWT.CHECK);
showDialogBeforeDeployButton.setText(Messages.ValidationPreferencePage_Before_Deplying_Text);
final Group deployGroup = new Group(deployComposite, SWT.NONE);
deployGroup.setText(Messages.ValidationPreferencePage_DeplyGroup_Text);
deployGroup.setLayout(new GridLayout());
deployGroup.setLayoutData(new GridData());
cancelButton = new Button(deployGroup, SWT.RADIO);
cancelButton.setText(Messages.ValidationPreferencePage_CancelButton_Text);
skipErrorsButton = new Button(deployGroup, SWT.RADIO);
skipErrorsButton.setText(Messages.ValidationPreferencePage_SkipErrorsButton_Text);
skipErrorsAndWarningsButton = new Button(deployGroup, SWT.RADIO);
skipErrorsAndWarningsButton.setText(Messages.ValidationPreferencePage_SkipErrorsAndWarningsButton_Text);
showDialogBeforeDeployButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateDeplyWayButtons();
}
});
}
private Composite createExpandComposite(final Composite parent, String title, boolean needExpanded) {
ExpandableComposite expComposite = new ExpandableComposite(parent, ExpandableComposite.TREE_NODE
| ExpandableComposite.EXPANDED);
expComposite.setLayout(new GridLayout());
expComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Composite composite = new Composite(expComposite, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginLeft = 10;
layout.marginRight = 10;
composite.setLayout(layout);
composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
expComposite.setClient(composite);
expComposite.setText(title);
expComposite.setExpanded(needExpanded);
expComposite.addExpansionListener(new ExpansionAdapter() {
@Override
public void expansionStateChanged(ExpansionEvent e) {
parent.layout();
}
});
return composite;
}
private void initControls() {
showDialogAfterImmediateButton.setSelection(ValidationPreferenceService.getInstance()
.isShowDlgAfterImmediateChecking());
showDialogAfterSavedButton.setSelection(ValidationPreferenceService.getInstance().isShowDlgAfterSaving());
showDialogBeforeDeployButton.setSelection(ValidationPreferenceService.getInstance().isShowDlgBeforeDeploying());
int value = ValidationPreferenceService.getInstance().getDeployActionWhenValidateFail();
switch (value) {
case IModelValidationService.BUTTON_CANCEL:
cancelButton.setSelection(true);
break;
case IModelValidationService.BUTTON_SKIP_ERROR:
skipErrorsButton.setSelection(true);
break;
case IModelValidationService.BUTTON_SKIP_ERROR_WARNING:
skipErrorsAndWarningsButton.setSelection(true);
break;
}
updateDeplyWayButtons();
}
private void updateDeplyWayButtons() {
boolean selected = showDialogBeforeDeployButton.getSelection();
cancelButton.setEnabled(!selected);
skipErrorsButton.setEnabled(!selected);
skipErrorsAndWarningsButton.setEnabled(!selected);
}
@Override
public boolean performOk() {
ValidationPreferenceService.getInstance().setShowDlgAfterImmediateChecking(
showDialogAfterImmediateButton.getSelection());
ValidationPreferenceService.getInstance().setShowDlgAfterSaving(showDialogAfterSavedButton.getSelection());
ValidationPreferenceService.getInstance().setShowDlgBeforeDeploying(showDialogBeforeDeployButton.getSelection());
ValidationPreferenceService.getInstance().setDeployActionWhenValidateFail(getDeployWayValue());
return super.performOk();
}
private int getDeployWayValue() {
if (cancelButton.getSelection()) {
return IModelValidationService.BUTTON_CANCEL;
} else if (skipErrorsButton.getSelection()) {
return IModelValidationService.BUTTON_SKIP_ERROR;
} else if (skipErrorsAndWarningsButton.getSelection()) {
return IModelValidationService.BUTTON_SKIP_ERROR_WARNING;
}
Assert.isTrue(false);
return -1;
}
@Override
protected void performDefaults() {
initControls();
}
}