/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
* Copyright (C) 2017 Andrew Khitrin (ahitrin@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.data.office.export;
import org.eclipse.jface.preference.PreferenceDialog;
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.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.model.data.DBDDataFormatterProfile;
import org.jkiss.dbeaver.registry.formatter.DataFormatterRegistry;
import org.jkiss.dbeaver.registry.transfer.DataTransferProcessorDescriptor;
import org.jkiss.dbeaver.runtime.properties.PropertySourceCustom;
import org.jkiss.dbeaver.tools.transfer.stream.StreamConsumerPageSettings;
import org.jkiss.dbeaver.tools.transfer.stream.StreamConsumerSettings;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.preferences.PrefPageDataFormat;
import org.jkiss.dbeaver.ui.properties.PropertyTreeViewer;
/**
* @author Andrey.Hitrin
*
*/
public class StreamPOIConsumerPageSettings extends StreamConsumerPageSettings {
private PropertyTreeViewer propsEditor;
private Combo formatProfilesCombo;
private PropertySourceCustom propertySource;
public StreamPOIConsumerPageSettings() {
super();
setTitle(CoreMessages.data_transfer_wizard_settings_title);
setDescription(CoreMessages.data_transfer_wizard_settings_description);
setPageComplete(false);
}
@Override
public void createControl(Composite parent) {
initializeDialogUnits(parent);
final StreamConsumerSettings settings = getWizard().getPageSettings(this, StreamConsumerSettings.class);
Composite composite = new Composite(parent, SWT.NULL);
GridLayout gl = new GridLayout();
gl.marginHeight = 0;
gl.marginWidth = 0;
composite.setLayout(gl);
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
{
Group generalSettings = new Group(composite, SWT.NONE);
generalSettings.setText(CoreMessages.data_transfer_wizard_settings_group_general);
gl = new GridLayout(4, false);
generalSettings.setLayout(gl);
generalSettings.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
{
Composite formattingGroup = UIUtils.createPlaceholder(generalSettings, 3);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 4;
formattingGroup.setLayoutData(gd);
UIUtils.createControlLabel(formattingGroup, CoreMessages.data_transfer_wizard_settings_label_formatting);
formatProfilesCombo = new Combo(formattingGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
gd.widthHint = 200;
formatProfilesCombo.setLayoutData(gd);
formatProfilesCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
if (formatProfilesCombo.getSelectionIndex() > 0) {
settings.setFormatterProfile(
DataFormatterRegistry.getInstance().getCustomProfile(UIUtils.getComboSelection(formatProfilesCombo)));
} else {
settings.setFormatterProfile(null);
}
}
});
Button profilesManageButton = new Button(formattingGroup, SWT.PUSH);
profilesManageButton.setText(CoreMessages.data_transfer_wizard_settings_button_edit);
profilesManageButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
PreferenceDialog propDialog = PreferencesUtil.createPropertyDialogOn(
getShell(),
DataFormatterRegistry.getInstance(),
PrefPageDataFormat.PAGE_ID,
null,
getSelectedFormatterProfile(),
PreferencesUtil.OPTION_NONE);
if (propDialog != null) {
propDialog.open();
reloadFormatProfiles();
}
}
});
reloadFormatProfiles();
}
}
Group exporterSettings = new Group(composite, SWT.NONE);
exporterSettings.setText(CoreMessages.data_transfer_wizard_settings_group_exporter);
exporterSettings.setLayoutData(new GridData(GridData.FILL_BOTH));
exporterSettings.setLayout(new GridLayout(1, false));
propsEditor = new PropertyTreeViewer(exporterSettings, SWT.BORDER);
setControl(composite);
}
private Object getSelectedFormatterProfile()
{
DataFormatterRegistry registry = DataFormatterRegistry.getInstance();
int selectionIndex = formatProfilesCombo.getSelectionIndex();
if (selectionIndex < 0) {
return null;
} else if (selectionIndex == 0) {
return registry.getGlobalProfile();
} else {
return registry.getCustomProfile(UIUtils.getComboSelection(formatProfilesCombo));
}
}
private void reloadFormatProfiles()
{
DataFormatterRegistry registry = DataFormatterRegistry.getInstance();
formatProfilesCombo.removeAll();
formatProfilesCombo.add(CoreMessages.data_transfer_wizard_settings_listbox_formatting_item_default);
for (DBDDataFormatterProfile profile : registry.getCustomProfiles()) {
formatProfilesCombo.add(profile.getProfileName());
}
final StreamConsumerSettings settings = getWizard().getPageSettings(this, StreamConsumerSettings.class);
DBDDataFormatterProfile formatterProfile = settings.getFormatterProfile();
if (formatterProfile != null) {
if (!UIUtils.setComboSelection(formatProfilesCombo, formatterProfile.getProfileName())) {
formatProfilesCombo.select(0);
}
} else {
formatProfilesCombo.select(0);
}
}
@Override
public void activatePage() {
final StreamConsumerSettings settings = getWizard().getPageSettings(this, StreamConsumerSettings.class);
DataTransferProcessorDescriptor processor = getWizard().getSettings().getProcessor();
propertySource = new PropertySourceCustom(
processor.getProperties(),
getWizard().getSettings().getProcessorProperties());
propsEditor.loadProperties(propertySource);
updatePageCompletion();
}
@Override
public void deactivatePage()
{
getWizard().getSettings().setProcessorProperties(propertySource.getPropertiesWithDefaults());
}
@Override
protected boolean determinePageCompletion()
{
return true;
}
}