package org.nightlabs.jfire.auth.ui.ldap.editor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.FormText;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.nightlabs.jfire.auth.ui.editor.UserSecurityGroupSyncConfigSpecificComposite;
import org.nightlabs.jfire.auth.ui.ldap.LDAPEntrySelectorComposite;
import org.nightlabs.jfire.base.security.integration.ldap.LDAPServer;
import org.nightlabs.jfire.base.security.integration.ldap.LDAPUserSecurityGroupSyncConfig;
import org.nightlabs.jfire.base.security.integration.ldap.attributes.LDAPAttributeSet;
import org.nightlabs.util.CollectionUtil;
/**
* LDAP implementation of {@link UserSecurityGroupSyncConfigSpecificComposite}.
* Gives a possibility to edit {@link LDAPUserSecurityGroupSyncConfig#ldapGroupName} field and shows some useful info
* on {@link LDAPServer} being selected.
*
* @author Denis Dudnik <deniska.dudnik[at]gmail{dot}com>
*
*/
public class LDAPServerUserSecurityGroupSyncConfigComposite extends UserSecurityGroupSyncConfigSpecificComposite{
private LDAPServerUserSecurityGroupSyncConfigModel model;
private LDAPEntrySelectorComposite ldapGroupNameSelector;
private FormText ldapServerInfoFormText;
/**
* Constructs a new {@link LDAPServerUserSecurityGroupSyncConfigComposite}
*
* @param parent Parent {@link Composite}
* @param style {@link SWT} style
* @param toolkit {@link FormToolkit} to be used for creation of composite's content
*/
public LDAPServerUserSecurityGroupSyncConfigComposite(Composite parent, int style, FormToolkit toolkit){
super(parent, style, toolkit);
GridLayout parentLayout = new GridLayout(1, false);
parentLayout.verticalSpacing = 10;
parentLayout.marginTop = 10;
this.setLayout(parentLayout);
this.setLayoutData(new GridData(GridData.FILL_BOTH));
createContents(toolkit);
}
/**
* {@inheritDoc}
*/
@Override
public void commitChanges() {
if (model != null){
model.setLDAPGroupName(ldapGroupNameSelector.getEntryName());
}
}
/**
* {@inheritDoc}
*/
@Override
public void refresh() {
if (!(getSyncConfig() instanceof LDAPUserSecurityGroupSyncConfig)){
throw new IllegalArgumentException(
"Input should be an instance of LDAPUserSecurityGroupSyncConfig! Instead it is " + getSyncConfig()!=null ? getSyncConfig().getClass().getName() : null);
}
this.model = new LDAPServerUserSecurityGroupSyncConfigModel((LDAPUserSecurityGroupSyncConfig) getSyncConfig());
ldapGroupNameSelector.setEntryName(model.getLDAPGroupName());
ldapGroupNameSelector.setLdapConnectionParamsProvider(model.getLdapServer());
setBindCredentialsToSelector(ldapGroupNameSelector);
StringBuilder ldapInfoStringBuilder = new StringBuilder();
LDAPServer ldapServer = model.getLdapServer();
ldapInfoStringBuilder.append("<form><p><b>LDAPServer info</b></p>");
ldapInfoStringBuilder.append("<p><b>Location:</b> ").append(ldapServer.getHost()).append(":").append(ldapServer.getPort()).append("</p>");
ldapInfoStringBuilder.append("<p><b>Is active:</b> ").append(ldapServer.isActive() ? "yes" : "no").append("</p>");
ldapInfoStringBuilder.append("<p><b>Is leading:</b> ").append(ldapServer.isLeading() ? "yes" : "no").append("</p>");
ldapInfoStringBuilder.append("<p><b>Encryption method:</b> ").append(ldapServer.getEncryptionMethod().stringValue()).append("</p>");
ldapInfoStringBuilder.append("<p><b>Authentication method:</b> ").append(ldapServer.getAuthenticationMethod().stringValue()).append("</p>");
ldapInfoStringBuilder.append("</form>");
ldapServerInfoFormText.setText(ldapInfoStringBuilder.toString(), true, false);
}
private void createContents(FormToolkit toolkit){
Composite wrapper = toolkit.createComposite(this, SWT.NONE);
GridLayout gLayout = new GridLayout(1, false);
gLayout.verticalSpacing = 10;
gLayout.horizontalSpacing = 50;
gLayout.marginWidth = 0;
gLayout.marginHeight = 0;
wrapper.setLayout(gLayout);
GridData gd = new GridData(GridData.FILL_BOTH);
wrapper.setLayoutData(gd);
LDAPAttributeSet selectionCriteria = new LDAPAttributeSet();
selectionCriteria.createAttribute(
"objectClass", CollectionUtil.createHashSet(LDAPServer.GROUP_OF_NAMES_ATTR_VALUE, LDAPServer.GROUP_OF_UNIQUE_NAMES_ATTR_VALUE)); //$NON-NLS-1$
ldapGroupNameSelector = new LDAPEntrySelectorComposite(wrapper, SWT.NONE, selectionCriteria);
ldapGroupNameSelector.setToolTipText("Open");
gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
gd.widthHint = 400;
gd.minimumWidth = 400;
ldapGroupNameSelector.setLayoutData(gd);
ldapGroupNameSelector.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent event) {
if (!ldapGroupNameSelector.getEntryName().equals(getSyncConfig().getUserManagementSystemSecurityObject())){
fireSyncConfigChanged();
}
}
});
ldapServerInfoFormText = toolkit.createFormText(wrapper, false);
ldapServerInfoFormText.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
ldapServerInfoFormText.setText("<form><p><b>LDAPServer info: </b>no server selected!</p></form>", true, false);
}
private boolean credentialsSet = false;
private void setBindCredentialsToSelector(LDAPEntrySelectorComposite selectorComposite){
if (credentialsSet){
return;
}
LDAPEntrySelectorComposite.setBindCredentialsToSelector(selectorComposite, model.getLdapServer());
credentialsSet = true;
}
}