package org.teiid.designer.datatools.profiles.ldap;
import java.util.Map.Entry;
import java.util.Properties;
import org.eclipse.datatools.connectivity.ui.wizards.ProfileDetailsPropertyPage;
import org.eclipse.datatools.help.ContextProviderDelegate;
import org.eclipse.help.IContext;
import org.eclipse.help.IContextProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.teiid.core.designer.event.IChangeListener;
import org.teiid.core.designer.event.IChangeNotifier;
import org.teiid.designer.datatools.profiles.ldap.widget.LdapAuthenticationWidget;
import org.teiid.designer.datatools.profiles.ldap.widget.LdapSettingsWidget;
import org.teiid.designer.datatools.ui.DatatoolsUiConstants;
import org.teiid.designer.datatools.ui.DatatoolsUiPlugin;
/**
* Property page displaying all settings when an
* ldap connection is to be edited.
*/
public class PropertyPage extends ProfileDetailsPropertyPage
implements IContextProvider, DatatoolsUiConstants, IChangeListener, ILdapProfileConstants {
private ContextProviderDelegate contextProviderDelegate = new ContextProviderDelegate(
DatatoolsUiPlugin.getDefault().getBundle().getSymbolicName());
private TabFolder tabFolder;
private Properties newProperties = new Properties();
@Override
public IContext getContext(Object target) {
return contextProviderDelegate.getContext(target);
}
@Override
public int getContextChangeMask() {
return contextProviderDelegate.getContextChangeMask();
}
@Override
public String getSearchExpression(Object target) {
return contextProviderDelegate.getSearchExpression(target);
}
@Override
protected Control createContents(Composite parent) {
Control result = super.createContents(parent);
this.setPingButtonEnabled(true);
this.setPingButtonVisible(true);
return result;
}
@Override
protected void createCustomContents(Composite parent) {
Properties oldProperties = getConnectionProfile().getBaseProperties();
for (Entry<Object, Object> entry : oldProperties.entrySet()) {
newProperties.put(entry.getKey(), entry.getValue());
}
tabFolder = new TabFolder(parent, SWT.TOP);
TabItem[] tabs = new TabItem[2];
tabs[0] = new TabItem(tabFolder, SWT.NONE);
LdapSettingsWidget settingsWidget = new LdapSettingsWidget(tabFolder, SWT.NONE, newProperties);
settingsWidget.addChangeListener(this);
tabs[0].setText(settingsWidget.getTitle());
tabs[0].setControl(settingsWidget);
tabs[0] = new TabItem(tabFolder, SWT.NONE);
LdapAuthenticationWidget authWidget = new LdapAuthenticationWidget(tabFolder, SWT.NONE, newProperties);
authWidget.addChangeListener(this);
tabs[0].setText(authWidget.getTitle());
tabs[0].setControl(authWidget);
}
protected void validate() {
String errorMessage = null;
boolean valid = true;
if (null == newProperties.get(URL_PROP_ID) || newProperties.getProperty(URL_PROP_ID).isEmpty()) {
errorMessage = UTIL.getString("Common.URL.Error.Message"); //$NON-NLS-1$
valid = false;
}
if (null == newProperties.get(CONTEXT_FACTORY) || newProperties.getProperty(CONTEXT_FACTORY).isEmpty()) {
setErrorMessage(UTIL.getString("Common.Context.Factory.Error.Message")); //$NON-NLS-1$
valid = false;
}
boolean authSimple = AUTHMETHOD_SIMPLE.equals(newProperties.getProperty(AUTHENTICATION_METHOD));
boolean hasPassword = (newProperties.get(PASSWORD_PROP_ID) != null && !newProperties.getProperty(PASSWORD_PROP_ID).isEmpty());
boolean hasUser = (newProperties.get(USERNAME_PROP_ID) != null && !newProperties.getProperty(USERNAME_PROP_ID).isEmpty());
if (authSimple && !hasPassword) {
setErrorMessage(UTIL.getString("Common.Password.Error.Message")); //$NON-NLS-1$
valid = false;
} else if (authSimple && !hasUser) {
setErrorMessage(UTIL.getString("Common.Username.Error.Message")); //$NON-NLS-1$
valid = false;
}
setErrorMessage(errorMessage);
setValid(valid);
}
@Override
public void stateChanged(IChangeNotifier theSource) {
validate();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.datatools.connectivity.ui.wizards.ProfileDetailsPropertyPage#collectProperties()
*/
@Override
protected Properties collectProperties() {
return newProperties;
}
}