package org.objectstyle.wolips.eomodeler.editors.databaseConfig;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.beans.BeansObservables;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FormLayout;
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.Text;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import org.objectstyle.wolips.eomodeler.Messages;
import org.objectstyle.wolips.eomodeler.core.model.EODatabaseConfig;
import org.objectstyle.wolips.eomodeler.core.model.EOModel;
import org.objectstyle.wolips.eomodeler.editors.entity.EOEntityLabelProvider;
import org.objectstyle.wolips.eomodeler.editors.entity.EOPrototypeEntityListContentProvider;
import org.objectstyle.wolips.eomodeler.utils.ComboViewerBinding;
import org.objectstyle.wolips.eomodeler.utils.FormUtils;
import org.objectstyle.wolips.eomodeler.utils.StringLabelProvider;
import org.objectstyle.wolips.eomodeler.utils.UglyFocusHackWorkaroundListener;
public class DatabaseConfigSection extends AbstractPropertySection {
private DataBindingContext _bindingContext;
private Text _nameText;
private Text _priorityText;
private Text _deploymentProfileText;
private ComboViewer _prototypeComboViewer;
private ComboViewerBinding _prototypeBinding;
private ComboViewer _adaptorNameComboViewer;
private ComboViewerBinding _adaptorNameBinding;
private Button _makeActiveButton;
private ActiveDatabaseConfigHandler _activeDatabaseConfigHandler;
private AdaptorNameHandler _adaptorNameHandler;
private EODatabaseConfig _databaseConfig;
private Composite _connectionDictionaryContainer;
private IConnectionDictionarySection _connectionDictionarySection;
private String _lastAdaptorName;
private Composite _form;
public DatabaseConfigSection() {
_activeDatabaseConfigHandler = new ActiveDatabaseConfigHandler();
_adaptorNameHandler = new AdaptorNameHandler();
}
public void createControls(Composite parent, TabbedPropertySheetPage tabbedPropertySheetPage) {
super.createControls(parent, tabbedPropertySheetPage);
_form = getWidgetFactory().createFlatFormComposite(parent);
FormLayout formLayout = new FormLayout();
_form.setLayout(formLayout);
Composite topForm = FormUtils.createForm(getWidgetFactory(), _form);
getWidgetFactory().createCLabel(topForm, Messages.getString("EODatabaseConfig." + EODatabaseConfig.NAME), SWT.NONE);
_nameText = new Text(topForm, SWT.BORDER);
_nameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
UglyFocusHackWorkaroundListener.addListener(_nameText);
getWidgetFactory().createCLabel(topForm, Messages.getString("EODatabaseConfig." + EODatabaseConfig.DEPLOYMENT_PROFILE), SWT.NONE);
_deploymentProfileText = new Text(topForm, SWT.BORDER);
_deploymentProfileText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
UglyFocusHackWorkaroundListener.addListener(_deploymentProfileText);
getWidgetFactory().createCLabel(topForm, Messages.getString("EODatabaseConfig." + EODatabaseConfig.PRIORITY), SWT.NONE);
_priorityText = new Text(topForm, SWT.BORDER);
_priorityText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
UglyFocusHackWorkaroundListener.addListener(_priorityText);
getWidgetFactory().createCLabel(topForm, Messages.getString("EODatabaseConfig." + EODatabaseConfig.PROTOTYPE), SWT.NONE);
_prototypeComboViewer = new ComboViewer(topForm, SWT.READ_ONLY);
_prototypeComboViewer.setContentProvider(new EOPrototypeEntityListContentProvider(true));
_prototypeComboViewer.setLabelProvider(new EOEntityLabelProvider());
_prototypeComboViewer.getCombo().setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
getWidgetFactory().createCLabel(topForm, Messages.getString("EODatabaseConfig." + EODatabaseConfig.ADAPTOR_NAME), SWT.NONE);
_adaptorNameComboViewer = new ComboViewer(topForm, SWT.READ_ONLY);
_adaptorNameComboViewer.setContentProvider(new AdaptorNameContentProvider());
_adaptorNameComboViewer.setLabelProvider(new StringLabelProvider());
_adaptorNameComboViewer.getCombo().setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
_connectionDictionaryContainer = new Composite(topForm, SWT.NONE);
_connectionDictionaryContainer.setBackground(topForm.getBackground());
GridLayout connectionDictionaryLayout = new GridLayout();
connectionDictionaryLayout.marginLeft = 0;
connectionDictionaryLayout.marginWidth = 0;
connectionDictionaryLayout.marginRight = 0;
connectionDictionaryLayout.marginHeight = 0;
connectionDictionaryLayout.marginTop = 0;
connectionDictionaryLayout.marginBottom = 0;
_connectionDictionaryContainer.setLayout(connectionDictionaryLayout);
GridData connectionDictionaryData = new GridData(GridData.FILL_HORIZONTAL);
connectionDictionaryData.horizontalSpan = 2;
connectionDictionaryData.grabExcessHorizontalSpace = true;
_connectionDictionaryContainer.setLayoutData(connectionDictionaryData);
// add entries
_makeActiveButton = getWidgetFactory().createButton(topForm, Messages.getString("EODatabaseConfig.makeActiveLabel"), SWT.PUSH);
GridData makeActiveData = new GridData();
makeActiveData.horizontalSpan = 2;
_makeActiveButton.setLayoutData(makeActiveData);
_makeActiveButton.addSelectionListener(new MakeActiveHandler());
}
public void setInput(IWorkbenchPart part, ISelection selection) {
disposeBindings();
super.setInput(part, selection);
Object selectedObject = ((IStructuredSelection) selection).getFirstElement();
_databaseConfig = (EODatabaseConfig) selectedObject;
if (_databaseConfig != null) {
_bindingContext = new DataBindingContext();
addBindings();
}
adaptorNameChanged();
}
protected void adaptorNameChanged() {
if (_databaseConfig != null) {
String adaptorName = _databaseConfig.getAdaptorName();
if (adaptorName == null || !adaptorName.equals(_lastAdaptorName)) {
if (_connectionDictionarySection != null) {
_connectionDictionarySection.dispose();
_connectionDictionarySection = null;
}
IConnectionDictionarySection connectionDictionarySection;
if (EODatabaseConfig.JDBC_ADAPTOR_NAME.equals(adaptorName)) {
connectionDictionarySection = new JDBCConnectionDictionarySection(_connectionDictionaryContainer, SWT.NONE, getWidgetFactory());
} else if (EODatabaseConfig.JNDI_ADAPTOR_NAME.equals(adaptorName)) {
connectionDictionarySection = new JNDIConnectionDictionarySection(_connectionDictionaryContainer, SWT.NONE, getWidgetFactory());
} else if (EODatabaseConfig.REST_ADAPTOR_NAME.equals(adaptorName)) {
connectionDictionarySection = new RESTConnectionDictionarySection(_connectionDictionaryContainer, SWT.NONE, getWidgetFactory());
} else {
connectionDictionarySection = new BlankConnectionDictionarySection(_connectionDictionaryContainer, SWT.NONE);
}
GridData connectionDictionaryData = new GridData(GridData.FILL_HORIZONTAL);
connectionDictionaryData.grabExcessHorizontalSpace = true;
((Composite) connectionDictionarySection).setLayoutData(connectionDictionaryData);
_connectionDictionarySection = connectionDictionarySection;
}
_lastAdaptorName = adaptorName;
if (_connectionDictionarySection != null) {
_connectionDictionarySection.setInput(_databaseConfig);
}
} else {
if (_connectionDictionarySection != null) {
_connectionDictionarySection.dispose();
_connectionDictionarySection = null;
}
_lastAdaptorName = null;
}
_form.layout();
}
public EODatabaseConfig getDatabaseConfig() {
return _databaseConfig;
}
public void dispose() {
disposeBindings();
if (_connectionDictionarySection != null) {
_connectionDictionarySection.dispose();
}
super.dispose();
}
protected void disposeBindings() {
if (_bindingContext != null) {
_bindingContext.dispose();
}
if (_prototypeBinding != null) {
_prototypeBinding.dispose();
}
if (_adaptorNameBinding != null) {
// _adaptorNameComboViewer.getCombo().removeModifyListener(_adaptorNameBinding);
_adaptorNameBinding.dispose();
}
EODatabaseConfig databaseConfig = getDatabaseConfig();
if (databaseConfig != null) {
EOModel model = databaseConfig.getModel();
if (model != null) {
model.removePropertyChangeListener(EOModel.ACTIVE_DATABASE_CONFIG, _activeDatabaseConfigHandler);
}
databaseConfig.removePropertyChangeListener(EODatabaseConfig.ADAPTOR_NAME, _adaptorNameHandler);
}
}
protected void addBindings() {
_bindingContext.bindValue(SWTObservables.observeText(_nameText, SWT.Modify), BeansObservables.observeValue(getDatabaseConfig(), EODatabaseConfig.NAME), null, null);
_bindingContext.bindValue(SWTObservables.observeText(_priorityText, SWT.Modify), BeansObservables.observeValue(getDatabaseConfig(), EODatabaseConfig.PRIORITY), null, null);
_bindingContext.bindValue(SWTObservables.observeText(_deploymentProfileText, SWT.Modify), BeansObservables.observeValue(getDatabaseConfig(), EODatabaseConfig.DEPLOYMENT_PROFILE), null, null);
_prototypeComboViewer.setInput(getDatabaseConfig());
_prototypeBinding = new ComboViewerBinding(_prototypeComboViewer, getDatabaseConfig(), EODatabaseConfig.PROTOTYPE, null, null, EOPrototypeEntityListContentProvider.BLANK_ENTITY);
_adaptorNameComboViewer.setInput(getDatabaseConfig());
_adaptorNameBinding = new ComboViewerBinding(_adaptorNameComboViewer, getDatabaseConfig(), EODatabaseConfig.ADAPTOR_NAME, null, null, null);
// _adaptorNameComboViewer.getCombo().addModifyListener(_adaptorNameBinding);
EODatabaseConfig databaseConfig = getDatabaseConfig();
if (databaseConfig != null) {
EOModel model = databaseConfig.getModel();
if (model != null) {
model.addPropertyChangeListener(EOModel.ACTIVE_DATABASE_CONFIG, _activeDatabaseConfigHandler);
}
databaseConfig.addPropertyChangeListener(EODatabaseConfig.ADAPTOR_NAME, _adaptorNameHandler);
}
activeDatabaseConfigChanged();
}
protected void makeActive() {
EODatabaseConfig databaseConfig = getDatabaseConfig();
if (databaseConfig != null) {
databaseConfig.setActive();
}
}
protected void activeDatabaseConfigChanged() {
EODatabaseConfig databaseConfig = getDatabaseConfig();
if (databaseConfig != null) {
_makeActiveButton.setEnabled(!databaseConfig.isActive());
}
}
protected class ActiveDatabaseConfigHandler implements PropertyChangeListener {
public void propertyChange(PropertyChangeEvent evt) {
DatabaseConfigSection.this.activeDatabaseConfigChanged();
}
}
protected class AdaptorNameHandler implements PropertyChangeListener {
public void propertyChange(PropertyChangeEvent evt) {
DatabaseConfigSection.this.adaptorNameChanged();
}
}
protected class MakeActiveHandler implements SelectionListener {
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
public void widgetSelected(SelectionEvent e) {
DatabaseConfigSection.this.makeActive();
}
}
}