/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* 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.tools.transfer.database;
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.*;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.tools.transfer.wizard.DataTransferWizard;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.ActiveWizardPage;
public class DatabaseProducerPageExtractSettings extends ActiveWizardPage<DataTransferWizard> {
private static final int EXTRACT_TYPE_SINGLE_QUERY = 0;
private static final int EXTRACT_TYPE_SEGMENTS = 1;
private Spinner threadsNumText;
private Combo rowsExtractType;
private Label segmentSizeLabel;
private Text segmentSizeText;
private Button newConnectionCheckbox;
private Button rowCountCheckbox;
public DatabaseProducerPageExtractSettings() {
super("Extraction settings");
setTitle("Extraction settings");
setDescription("Database table(s) extraction settings");
setPageComplete(false);
}
@Override
public void createControl(Composite parent) {
initializeDialogUnits(parent);
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));
final DatabaseProducerSettings settings = getWizard().getPageSettings(this, DatabaseProducerSettings.class);
{
Group generalSettings = UIUtils.createControlGroup(composite, CoreMessages.data_transfer_wizard_output_group_progress, 4, GridData.FILL_HORIZONTAL, 0);
Label threadsNumLabel = UIUtils.createControlLabel(generalSettings, CoreMessages.data_transfer_wizard_output_label_max_threads);
threadsNumText = new Spinner(generalSettings, SWT.BORDER);
threadsNumText.setMinimum(1);
threadsNumText.setMaximum(10);
threadsNumText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
try {
getWizard().getSettings().setMaxJobCount(Integer.parseInt(threadsNumText.getText()));
} catch (NumberFormatException e1) {
// do nothing
}
}
});
if (getWizard().getSettings().getDataPipes().size() < 2) {
threadsNumLabel.setEnabled(false);
threadsNumText.setEnabled(false);
}
threadsNumText.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING, GridData.VERTICAL_ALIGN_BEGINNING, false, false, 3, 1));
{
UIUtils.createControlLabel(generalSettings, CoreMessages.data_transfer_wizard_output_label_extract_type);
rowsExtractType = new Combo(generalSettings, SWT.DROP_DOWN | SWT.READ_ONLY);
rowsExtractType.setItems(new String[] {
CoreMessages.data_transfer_wizard_output_combo_extract_type_item_single_query,
CoreMessages.data_transfer_wizard_output_combo_extract_type_item_by_segments });
rowsExtractType.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
switch (rowsExtractType.getSelectionIndex()) {
case EXTRACT_TYPE_SEGMENTS: settings.setExtractType(DatabaseProducerSettings.ExtractType.SEGMENTS); break;
case EXTRACT_TYPE_SINGLE_QUERY: settings.setExtractType(DatabaseProducerSettings.ExtractType.SINGLE_QUERY); break;
}
updatePageCompletion();
}
});
segmentSizeLabel = UIUtils.createControlLabel(generalSettings, CoreMessages.data_transfer_wizard_output_label_segment_size);
segmentSizeLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END, GridData.VERTICAL_ALIGN_BEGINNING, false, false, 1, 1));
segmentSizeText = new Text(generalSettings, SWT.BORDER);
segmentSizeText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e)
{
try {
settings.setSegmentSize(Integer.parseInt(segmentSizeText.getText()));
} catch (NumberFormatException e1) {
// just skip it
}
}
});
segmentSizeText.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END, GridData.VERTICAL_ALIGN_BEGINNING, false, false, 1, 1));
}
newConnectionCheckbox = UIUtils.createLabelCheckbox(generalSettings, CoreMessages.data_transfer_wizard_output_checkbox_new_connection, true);
newConnectionCheckbox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
settings.setOpenNewConnections(newConnectionCheckbox.getSelection());
}
});
newConnectionCheckbox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING, GridData.VERTICAL_ALIGN_BEGINNING, false, false, 3, 1));
rowCountCheckbox = UIUtils.createLabelCheckbox(generalSettings, CoreMessages.data_transfer_wizard_output_checkbox_select_row_count, true);
rowCountCheckbox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
settings.setQueryRowCount(rowCountCheckbox.getSelection());
}
});
rowCountCheckbox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING, GridData.VERTICAL_ALIGN_BEGINNING, false, false, 3, 1));
}
setControl(composite);
}
@Override
public void activatePage()
{
final DatabaseProducerSettings settings = getWizard().getPageSettings(this, DatabaseProducerSettings.class);
newConnectionCheckbox.setSelection(settings.isOpenNewConnections());
rowCountCheckbox.setSelection(settings.isQueryRowCount());
if (segmentSizeText != null) {
segmentSizeText.setText(String.valueOf(settings.getSegmentSize()));
switch (settings.getExtractType()) {
case SINGLE_QUERY: rowsExtractType.select(EXTRACT_TYPE_SINGLE_QUERY); break;
case SEGMENTS: rowsExtractType.select(EXTRACT_TYPE_SEGMENTS); break;
}
}
updatePageCompletion();
}
@Override
protected boolean determinePageCompletion()
{
if (rowsExtractType != null) {
int selectionIndex = rowsExtractType.getSelectionIndex();
if (selectionIndex == EXTRACT_TYPE_SEGMENTS) {
segmentSizeLabel.setVisible(true);
segmentSizeText.setVisible(true);
} else {
segmentSizeLabel.setVisible(false);
segmentSizeText.setVisible(false);
}
}
return true;
}
}