package org.insightech.er.editor.view.dialog.dbexport;
import java.net.UnknownHostException;
import java.sql.Connection;
import java.sql.SQLException;
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.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.insightech.er.Activator;
import org.insightech.er.ResourceString;
import org.insightech.er.common.exception.InputException;
import org.insightech.er.db.DBManager;
import org.insightech.er.db.DBManagerFactory;
import org.insightech.er.editor.model.ERDiagram;
import org.insightech.er.editor.model.dbexport.db.PreTableExportManager;
import org.insightech.er.editor.model.settings.Environment;
import org.insightech.er.editor.model.settings.Settings;
import org.insightech.er.editor.view.dialog.common.AbstractDBSettingDialog;
public class ExportDBSettingDialog extends AbstractDBSettingDialog {
private Combo environmentCombo;
private String ddl;
public ExportDBSettingDialog(Shell parentShell, ERDiagram diagram) {
super(parentShell, diagram);
this.dbSetting = this.diagram.getDbSetting();
}
/**
* {@inheritDoc}
*/
@Override
protected void initializeBody(Composite group) {
GridData labelLayoutData = new GridData();
// labelLayoutData.widthHint = 130;
// DB
Label label = new Label(group, SWT.NONE);
label.setLayoutData(labelLayoutData);
label.setText(ResourceString
.getResourceString("label.tablespace.environment"));
label.setEnabled(true);
this.environmentCombo = new Combo(group, SWT.BORDER | SWT.READ_ONLY);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.widthHint = 200;
this.environmentCombo.setLayoutData(data);
this.environmentCombo.setVisibleItemCount(20);
this.environmentCombo.setEnabled(true);
super.initializeBody(group);
}
/**
* {@inheritDoc}
*/
@Override
protected void initialize(Composite parent) {
super.initialize(parent);
}
/**
* {@inheritDoc}
*/
@Override
protected String getErrorMessage() {
if (this.settingAddButton != null) {
this.settingAddButton.setEnabled(false);
}
if (isBlank(this.environmentCombo)) {
return "error.tablespace.environment.empty";
}
if (!this.diagram.getDatabase().equals(this.getDBSName())) {
return "error.database.not.correct";
}
return super.getErrorMessage();
}
/**
* {@inheritDoc}
*/
@Override
protected void perfomeOK() throws InputException {
this.setCurrentSetting();
String db = this.getDBSName();
DBManager manager = DBManagerFactory.getDBManager(db);
Connection con = null;
try {
this.diagram.setDbSetting(this.dbSetting);
con = this.dbSetting.connect();
int index = this.environmentCombo.getSelectionIndex();
Environment environment = this.diagram.getDiagramContents()
.getSettings().getEnvironmentSetting().getEnvironments()
.get(index);
PreTableExportManager exportToDBManager = manager
.getPreTableExportManager();
exportToDBManager.init(con, dbSetting, diagram, environment);
exportToDBManager.run();
Exception e = exportToDBManager.getException();
if (e != null) {
Activator.log(e);
String message = e.getMessage();
String errorSql = exportToDBManager.getErrorSql();
if (errorSql != null) {
message += "\r\n\r\n" + errorSql;
}
ErrorDialog errorDialog = new ErrorDialog(this.getShell(),
message);
errorDialog.open();
throw new InputException("error.jdbc.version");
}
this.ddl = exportToDBManager.getDdl();
} catch (InputException e) {
throw e;
} catch (Exception e) {
Activator.log(e);
Throwable cause = e.getCause();
if (cause instanceof UnknownHostException) {
throw new InputException("error.server.not.found");
}
Activator.showExceptionDialog(e);
throw new InputException("error.database.not.found");
} finally {
if (con != null) {
try {
con.close();
} catch (SQLException e) {
Activator.showExceptionDialog(e);
}
}
}
}
/**
* {@inheritDoc}
*/
@Override
protected String getTitle() {
return "dialog.title.export.db";
}
/**
* {@inheritDoc}
*/
@Override
protected void setData() {
super.setData();
Settings settings = this.diagram.getDiagramContents().getSettings();
for (Environment environment : settings.getEnvironmentSetting()
.getEnvironments()) {
this.environmentCombo.add(environment.getName());
}
this.environmentCombo.select(0);
}
/**
* {@inheritDoc}
*/
@Override
protected boolean isOnlyCurrentDatabase() {
return true;
}
/**
* ddl ���擾���܂�.
*
* @return ddl
*/
public String getDdl() {
return ddl;
}
/**
* {@inheritDoc}
*/
@Override
protected void addListener() {
super.addListener();
this.environmentCombo.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
validate();
}
});
}
}