package org.insightech.er.editor.view.dialog.common; import org.eclipse.jface.dialogs.IDialogConstants; 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.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.insightech.er.Activator; import org.insightech.er.ResourceString; import org.insightech.er.common.dialog.AbstractDialog; import org.insightech.er.common.widgets.CompositeFactory; import org.insightech.er.common.widgets.ListenerAppender; import org.insightech.er.db.DBManager; import org.insightech.er.db.DBManagerFactory; import org.insightech.er.db.impl.standard_sql.StandardSQLDBManager; import org.insightech.er.editor.model.ERDiagram; import org.insightech.er.editor.model.settings.DBSetting; import org.insightech.er.preference.PreferenceInitializer; import org.insightech.er.util.Check; import org.insightech.er.util.Format; public abstract class AbstractDBSettingDialog extends AbstractDialog { private Text userName; private Text password; private Combo dbList; private Text serverName; private Text port; private Text dbName; private Text url; private Button useDefaultDriverButton; private Text driverClassName; private Button settingListButton; protected Button settingAddButton; protected DBSetting dbSetting; protected ERDiagram diagram; public AbstractDBSettingDialog(Shell parentShell, ERDiagram diagram) { super(parentShell, 2); this.diagram = diagram; } /** * {@inheritDoc} */ @Override protected void initialize(Composite parent) { Composite group = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 2; group.setLayout(layout); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 2; group.setLayoutData(gridData); this.initializeBody(group); this.setDBList(); } private void setDBList() { if (this.isOnlyCurrentDatabase()) { this.dbList.add(this.diagram.getDatabase()); this.dbList.select(0); } else { for (String db : DBManagerFactory.getAllDBList()) { this.dbList.add(db); } this.dbList.setVisibleItemCount(20); } } protected void initializeBody(Composite group) { this.dbList = CompositeFactory.createReadOnlyCombo(this, group, "label.database"); this.dbList.setFocus(); this.serverName = CompositeFactory.createText(this, group, "label.server.name", false); this.port = CompositeFactory.createText(this, group, "label.port", false); this.dbName = CompositeFactory.createText(this, group, "label.database.name", false); this.userName = CompositeFactory.createText(this, group, "label.user.name", false); this.password = CompositeFactory.createText(this, group, "label.user.password", false); this.password.setEchoChar('*'); CompositeFactory.filler(group, 2); this.useDefaultDriverButton = CompositeFactory.createCheckbox(this, group, "label.use.default.driver", 2); this.url = CompositeFactory.createText(null, group, "label.url", 1, -1, SWT.BORDER | SWT.READ_ONLY, false); this.driverClassName = CompositeFactory.createText(null, group, "label.driver.class.name", 1, -1, SWT.BORDER | SWT.READ_ONLY, false); } @Override protected void createButtonsForButtonBar(Composite parent) { this.createButton(parent, 0, IDialogConstants.NEXT_LABEL, true); this.createButton(parent, 1, IDialogConstants.CANCEL_LABEL, false); this.settingListButton = createButton( parent, IDialogConstants.OPEN_ID, ResourceString.getResourceString("label.load.database.setting"), false); this.settingAddButton = createButton(parent, IDialogConstants.YES_ID, ResourceString .getResourceString("label.load.database.setting.add"), false); } public String getDBSName() { return this.dbList.getText().trim(); } public String getDBName() { return this.dbName.getText().trim(); } public String getServerName() { return this.serverName.getText().trim(); } public int getPort() { String port = this.port.getText().trim(); try { return Integer.parseInt(port); } catch (Exception e) { return 0; } } public String getUserName() { return this.userName.getText().trim(); } public String getPassword() { return this.password.getText().trim(); } /** * {@inheritDoc} */ @Override protected String getErrorMessage() { DBManager manager = null; String database = this.getDBSName(); if (!Check.isEmpty(database)) { if (!this.useDefaultDriverButton.getSelection()) { if (isBlank(this.url)) { return "error.url.is.empty"; } if (isBlank(this.driverClassName)) { return "error.driver.class.name.is.empty"; } } else { manager = DBManagerFactory.getDBManager(this.getDBSName()); String url = manager.getURL(this.getServerName(), this .getDBName(), this.getPort()); this.url.setText(url); if (isBlank(this.serverName) && manager.doesNeedURLServerName()) { return "error.server.is.empty"; } if (isBlank(this.port) && manager.doesNeedURLServerName()) { return "error.port.is.empty"; } if (isBlank(this.dbName) && manager.doesNeedURLDatabaseName()) { return "error.database.name.is.empty"; } } } if (this.settingAddButton != null) { this.settingAddButton.setEnabled(false); } if (isBlank(this.dbList)) { return "error.database.not.selected"; } String text = this.port.getText(); if (!text.equals("")) { try { int port = Integer.parseInt(text); if (port < 0) { return "error.port.zero"; } } catch (NumberFormatException e) { return "error.port.degit"; } } if (isBlank(this.userName)) { return "error.user.name.is.empty"; } if (this.settingAddButton != null) { this.settingAddButton.setEnabled(true); } return null; } /** * {@inheritDoc} */ @Override protected void setData() { if (this.dbSetting != null) { String database = this.dbSetting.getDbsystem(); this.dbList.setText(database); this.enableUseDefaultDriver(); this.enableField(); this.serverName.setText(Format.null2blank(this.dbSetting .getServer())); this.port.setText(String.valueOf(this.dbSetting.getPort())); this.dbName .setText(Format.null2blank(this.dbSetting.getDatabase())); this.userName.setText(Format.null2blank(this.dbSetting.getUser())); this.password.setText(Format.null2blank(this.dbSetting .getPassword())); this.url.setText(Format.null2blank(this.dbSetting.getUrl())); this.driverClassName.setText(Format.null2blank(this.dbSetting .getDriverClassName())); if (!Check.isEmpty(database) && this.useDefaultDriverButton.getSelection()) { DBManager manager = DBManagerFactory.getDBManager(this .getDBSName()); String url = manager.getURL(this.getServerName(), this .getDBName(), this.getPort()); this.url.setText(url); String driverClassName = manager.getDriverClassName(); this.driverClassName.setText(driverClassName); } } } @Override protected int getErrorLine() { return 2; } /** * dbSetting ���擾���܂�. * * @return dbSetting */ public DBSetting getDbSetting() { return this.dbSetting; } private void enableUseDefaultDriver() { String database = this.getDBSName(); if (!Check.isEmpty(database)) { DBManager dbManager = DBManagerFactory.getDBManager(database); if (StandardSQLDBManager.ID.equals(dbManager.getId())) { this.useDefaultDriverButton.setSelection(false); this.useDefaultDriverButton.setEnabled(false); } else { this.useDefaultDriverButton.setSelection(true); this.useDefaultDriverButton.setEnabled(true); } } } private void enableField() { String database = this.getDBSName(); if (this.useDefaultDriverButton.getSelection()) { DBManager dbManager = DBManagerFactory.getDBManager(database); this.dbName.setEnabled(true); this.url.setEditable(false); this.driverClassName.setEditable(false); this.driverClassName.setText(dbManager.getDriverClassName()); if (dbManager.doesNeedURLServerName()) { this.port.setText(String.valueOf(dbManager.getDefaultPort())); this.port.setEnabled(true); this.serverName.setEnabled(true); } else { this.port.setEnabled(false); this.serverName.setEnabled(false); } } else { this.port.setEnabled(false); this.serverName.setEnabled(false); this.dbName.setEnabled(false); this.url.setEditable(true); this.driverClassName.setEditable(true); } } /** * {@inheritDoc} */ @Override protected void addListener() { super.addListener(); this.dbList.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { enableUseDefaultDriver(); enableField(); validate(); } }); this.useDefaultDriverButton .addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent selectionevent) { enableField(); validate(); } }); ListenerAppender.addModifyListener(this.serverName, this); ListenerAppender.addModifyListener(this.port, this); ListenerAppender.addModifyListener(this.dbName, this); ListenerAppender.addModifyListener(this.userName, this); ListenerAppender.addModifyListener(this.driverClassName, this); this.url.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (!useDefaultDriverButton.getSelection()) { validate(); } } }); this.settingListButton.addSelectionListener(new SelectionAdapter() { /** * {@inheritDoc} */ @Override public void widgetSelected(SelectionEvent e) { try { String database = null; if (isOnlyCurrentDatabase()) { database = diagram.getDatabase(); } DBSettingListDialog dialog = new DBSettingListDialog( PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getShell(), database); if (dialog.open() == IDialogConstants.OK_ID) { dbSetting = dialog.getResult(); setData(); } } catch (Exception ex) { Activator.showExceptionDialog(ex); } } }); this.settingAddButton.addSelectionListener(new SelectionAdapter() { /** * {@inheritDoc} */ @Override public void widgetSelected(SelectionEvent e) { try { if (validate()) { setCurrentSetting(); PreferenceInitializer.addDBSetting(dbSetting); Activator .showMessageDialog("dialog.message.add.to.connection.list"); } } catch (Exception ex) { Activator.showExceptionDialog(ex); } } }); } protected boolean isOnlyCurrentDatabase() { return false; } protected void setCurrentSetting() { String database = this.getDBSName(); String url = this.url.getText().trim(); String driverClassName = this.driverClassName.getText().trim(); String serverName = this.getServerName(); int port = this.getPort(); String dbName = this.getDBName(); boolean useDefaultDriver = this.useDefaultDriverButton.getSelection(); if (!useDefaultDriver) { serverName = null; port = 0; dbName = null; } this.dbSetting = new DBSetting(database, serverName, port, dbName, this .getUserName(), this.getPassword(), useDefaultDriver, url, driverClassName); PreferenceInitializer.saveSetting(0, this.dbSetting); } }