You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2008/08/25 22:39:30 UTC
svn commit: r688867 - in /directory/studio/trunk:
connection-ui/src/main/java/org/apache/directory/studio/connection/ui/
connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/
connection-ui/src/main/java/org/apache/directory/stu...
Author: seelmann
Date: Mon Aug 25 13:39:30 2008
New Revision: 688867
URL: http://svn.apache.org/viewvc?rev=688867&view=rev
Log:
First implementation of DIRSTUDIO-356: copy/paste of connections as URL
Modified:
directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/ConnectionParameterPage.java
directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/CopyAction.java
directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/PasteAction.java
directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/AuthenticationParameterPage.java
directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/NetworkParameterPage.java
directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/connection/BrowserParameterPage.java
Modified: directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/ConnectionParameterPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/ConnectionParameterPage.java?rev=688867&r1=688866&r2=688867&view=diff
==============================================================================
--- directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/ConnectionParameterPage.java (original)
+++ directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/ConnectionParameterPage.java Mon Aug 25 13:39:30 2008
@@ -20,6 +20,7 @@
package org.apache.directory.studio.connection.ui;
+import org.apache.directory.shared.ldap.util.LdapURL;
import org.apache.directory.studio.connection.core.ConnectionParameter;
import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.swt.widgets.Composite;
@@ -36,9 +37,9 @@
{
/**
- * Save the fields to the parameters.
+ * Save the fields to the connection parameters.
*
- * @param parameter the parameter
+ * @param parameter the connection parameter
*/
public void saveParameters( ConnectionParameter parameter );
@@ -189,8 +190,25 @@
* The implementing class must return true if any
* parameter was modified.
*
- * @return true, if parameters were modifed
+ * @return true, if parameters were modified
*/
public boolean areParametersModifed();
+
+ /**
+ * Merges the connection parameters into the LDAP URL.
+ *
+ * @param parameter the source connection parameter
+ * @param ldapUrl the target LDAP URL
+ */
+ public void mergeParametersToLdapURL( ConnectionParameter parameter, LdapURL ldapUrl );
+
+
+ /**
+ * Merges the LDAP URL into the connection parameters.
+ *
+ * @param ldapUrl the source LDAP URL
+ * @param parameter the target connection parameter
+ */
+ public void mergeLdapUrlToParameters( LdapURL ldapUrl, ConnectionParameter parameter );
}
Modified: directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/CopyAction.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/CopyAction.java?rev=688867&r1=688866&r2=688867&view=diff
==============================================================================
--- directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/CopyAction.java (original)
+++ directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/CopyAction.java Mon Aug 25 13:39:30 2008
@@ -25,11 +25,18 @@
import java.util.Arrays;
import java.util.List;
+import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.util.LdapURL;
import org.apache.directory.studio.connection.core.Connection;
+import org.apache.directory.studio.connection.core.ConnectionCoreConstants;
import org.apache.directory.studio.connection.core.ConnectionFolder;
+import org.apache.directory.studio.connection.core.ConnectionParameter;
+import org.apache.directory.studio.connection.ui.ConnectionParameterPage;
+import org.apache.directory.studio.connection.ui.ConnectionParameterPageManager;
import org.apache.directory.studio.connection.ui.dnd.ConnectionTransfer;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.ISharedImages;
@@ -111,13 +118,14 @@
List<Object> objects = new ArrayList<Object>();
objects.addAll( Arrays.asList( connections ) );
objects.addAll( Arrays.asList( connectionFolders ) );
+ String urls = getSelectedConnectionUrls();
- // connection
+ // copy to clipboard
if ( objects != null )
{
copyToClipboard( new Object[]
- { objects.toArray() }, new Transfer[]
- { ConnectionTransfer.getInstance() } );
+ { objects.toArray(), urls }, new Transfer[]
+ { ConnectionTransfer.getInstance(), TextTransfer.getInstance() } );
}
// update paste action
@@ -161,4 +169,33 @@
return getSelectedConnections().length + getSelectedConnectionFolders().length > 0;
}
+
+ /**
+ * Gets the selected connections as URLs, multiple URLs
+ * are separated by a line break.
+ *
+ * @return the selected connections as URLs
+ */
+ private String getSelectedConnectionUrls()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ Connection[] connections = getSelectedConnections();
+ ConnectionParameterPage[] connectionParameterPages = ConnectionParameterPageManager
+ .getConnectionParameterPages();
+ for ( Connection connection : connections )
+ {
+ ConnectionParameter parameter = connection.getConnectionParameter();
+ LdapURL ldapUrl = new LdapURL();
+ ldapUrl.setDn( LdapDN.EMPTY_LDAPDN );
+ for ( ConnectionParameterPage connectionParameterPage : connectionParameterPages )
+ {
+ connectionParameterPage.mergeParametersToLdapURL( parameter, ldapUrl );
+ }
+ sb.append( ldapUrl.toString() );
+ sb.append( ConnectionCoreConstants.LINE_SEPARATOR );
+ }
+ return sb.toString();
+ }
+
}
Modified: directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/PasteAction.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/PasteAction.java?rev=688867&r1=688866&r2=688867&view=diff
==============================================================================
--- directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/PasteAction.java (original)
+++ directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/PasteAction.java Mon Aug 25 13:39:30 2008
@@ -24,14 +24,22 @@
import java.util.ArrayList;
import java.util.List;
+import org.apache.commons.lang.StringUtils;
+import org.apache.directory.shared.ldap.codec.util.LdapURLEncodingException;
+import org.apache.directory.shared.ldap.util.LdapURL;
import org.apache.directory.studio.connection.core.Connection;
+import org.apache.directory.studio.connection.core.ConnectionCoreConstants;
import org.apache.directory.studio.connection.core.ConnectionCorePlugin;
import org.apache.directory.studio.connection.core.ConnectionFolder;
import org.apache.directory.studio.connection.core.ConnectionFolderManager;
import org.apache.directory.studio.connection.core.ConnectionManager;
+import org.apache.directory.studio.connection.core.ConnectionParameter;
+import org.apache.directory.studio.connection.ui.ConnectionParameterPage;
+import org.apache.directory.studio.connection.ui.ConnectionParameterPageManager;
import org.apache.directory.studio.connection.ui.dnd.ConnectionTransfer;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.ISharedImages;
@@ -101,7 +109,8 @@
*/
public boolean isEnabled()
{
- return this.getFromClipboard( ConnectionTransfer.getInstance() ) != null;
+ return this.getFromClipboard( ConnectionTransfer.getInstance() ) != null
+ || !getConnectionsByLdapUrl().isEmpty();
}
@@ -159,7 +168,8 @@
{
List<Connection> connections = new ArrayList<Connection>();
- Object content = this.getFromClipboard( ConnectionTransfer.getInstance() );
+ // first check for Connection objects in the clipboard
+ Object content = getFromClipboard( ConnectionTransfer.getInstance() );
if ( content != null && content instanceof Object[] )
{
Object[] objects = ( Object[] ) content;
@@ -172,6 +182,53 @@
}
}
+ // if there are no Connection objects in the clipboard
+ // then check for LDAP URLs
+ if ( connections.isEmpty() )
+ {
+ List<Connection> connectionByLdapUrl = getConnectionsByLdapUrl();
+ connections.addAll( connectionByLdapUrl );
+ }
+
+ return connections;
+ }
+
+
+ private List<Connection> getConnectionsByLdapUrl()
+ {
+ List<Connection> connections = new ArrayList<Connection>();
+
+ Object content = getFromClipboard( TextTransfer.getInstance() );
+ if ( content != null && content instanceof String )
+ {
+ ConnectionParameterPage[] connectionParameterPages = ConnectionParameterPageManager
+ .getConnectionParameterPages();
+
+ String[] lines = ( ( String ) content ).split( ConnectionCoreConstants.LINE_SEPARATOR );
+ for ( String line : lines )
+ {
+ line = line.trim();
+ if ( StringUtils.isNotEmpty( line ) )
+ {
+ try
+ {
+ LdapURL ldapUrl = new LdapURL( line );
+ ConnectionParameter parameter = new ConnectionParameter();
+ for ( ConnectionParameterPage connectionParameterPage : connectionParameterPages )
+ {
+ connectionParameterPage.mergeLdapUrlToParameters( ldapUrl, parameter );
+ }
+ Connection connection = new Connection( parameter );
+ connections.add( connection );
+ }
+ catch ( LdapURLEncodingException e )
+ {
+ // this was a string that doesn't represent an LDAP URL, ignore
+ }
+ }
+ }
+ }
+
return connections;
}
Modified: directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/AuthenticationParameterPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/AuthenticationParameterPage.java?rev=688867&r1=688866&r2=688867&view=diff
==============================================================================
--- directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/AuthenticationParameterPage.java (original)
+++ directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/AuthenticationParameterPage.java Mon Aug 25 13:39:30 2008
@@ -22,6 +22,7 @@
import org.apache.commons.lang.StringUtils;
+import org.apache.directory.shared.ldap.util.LdapURL;
import org.apache.directory.studio.connection.core.Connection;
import org.apache.directory.studio.connection.core.ConnectionParameter;
import org.apache.directory.studio.connection.core.ConnectionParameter.AuthenticationMethod;
@@ -45,7 +46,6 @@
import org.eclipse.swt.widgets.Text;
-
/**
* The AuthenticationParameterPage is used the edit the authentication parameters of a
* connection.
@@ -55,6 +55,22 @@
*/
public class AuthenticationParameterPage extends AbstractConnectionParameterPage
{
+
+ private static final String X_AUTH_METHOD = "X-AUTH-METHOD";
+
+ private static final String X_AUTH_METHOD_ANONYMOUS = "Anonymous";
+
+ private static final String X_AUTH_METHOD_SIMPLE = "Simple";
+
+ private static final String X_AUTH_METHOD_DIGEST_MD5 = "DIGEST-MD5";
+
+ private static final String X_AUTH_METHOD_CRAM_MD5 = "CRAM-MD5";
+
+ private static final String X_BIND_USER = "X-BIND-USER";
+
+ private static final String X_BIND_PASSWORD = "X-BIND-PASSWORD";
+
+ private static final String X_SASL_REALM = "X-SASL-REALM";
/** The combo to select the authentication method */
private Combo authenticationMethodCombo;
@@ -395,11 +411,107 @@
*/
public boolean isReconnectionRequired()
{
- return connectionParameter == null
- || connectionParameter.getAuthMethod() != getAuthenticationMethod()
+ return connectionParameter == null || connectionParameter.getAuthMethod() != getAuthenticationMethod()
|| !StringUtils.equals( connectionParameter.getBindPrincipal(), getBindPrincipal() )
|| !StringUtils.equals( connectionParameter.getBindPassword(), getBindPassword() )
|| !StringUtils.equals( connectionParameter.getSaslRealm(), getSaslRealm() );
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public void mergeParametersToLdapURL( ConnectionParameter parameter, LdapURL ldapUrl )
+ {
+ switch ( parameter.getAuthMethod() )
+ {
+ case SASL_CRAM_MD5:
+ ldapUrl.getExtensions().put( X_AUTH_METHOD, X_AUTH_METHOD_CRAM_MD5 );
+ break;
+ case SASL_DIGEST_MD5:
+ ldapUrl.getExtensions().put( X_AUTH_METHOD, X_AUTH_METHOD_DIGEST_MD5 );
+ break;
+ case SIMPLE:
+ if ( StringUtils.isEmpty( parameter.getBindPrincipal() ) )
+ {
+ // default if bind user is present
+ ldapUrl.getExtensions().put( X_AUTH_METHOD, X_AUTH_METHOD_SIMPLE );
+ }
+ break;
+ case NONE:
+ if ( StringUtils.isNotEmpty( parameter.getBindPrincipal() ) )
+ {
+ // default if bind user is absent
+ ldapUrl.getExtensions().put( X_AUTH_METHOD, X_AUTH_METHOD_ANONYMOUS );
+ }
+ break;
+ }
+
+ if ( StringUtils.isNotEmpty( parameter.getBindPrincipal() ) )
+ {
+ ldapUrl.getExtensions().put( X_BIND_USER, parameter.getBindPrincipal() );
+ }
+
+ if ( StringUtils.isNotEmpty( parameter.getBindPassword() ) )
+ {
+ ldapUrl.getExtensions().put( X_BIND_PASSWORD, parameter.getBindPassword() );
+ }
+
+ if ( StringUtils.isNotEmpty( parameter.getSaslRealm() ) )
+ {
+ ldapUrl.getExtensions().put( X_SASL_REALM, parameter.getSaslRealm() );
+ }
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void mergeLdapUrlToParameters( LdapURL ldapUrl, ConnectionParameter parameter )
+ {
+ // bind user and password, none if empty or absent
+ String principal = ldapUrl.getExtensions().get( X_BIND_USER );
+ if ( principal == null )
+ {
+ principal = StringUtils.EMPTY;
+ }
+ parameter.setBindPrincipal( principal );
+
+ String password = ldapUrl.getExtensions().get( X_BIND_PASSWORD );
+ parameter.setBindPassword( password );
+
+ // auth method, simple if unknown or absent and X-BIND-USER is present, else anonymous
+ String authMethod = ldapUrl.getExtensions().get( X_AUTH_METHOD );
+ if ( StringUtils.isNotEmpty( authMethod ) && X_AUTH_METHOD_ANONYMOUS.equalsIgnoreCase( authMethod ) )
+ {
+ parameter.setAuthMethod( ConnectionParameter.AuthenticationMethod.NONE );
+ }
+ else if ( StringUtils.isNotEmpty( authMethod ) && X_AUTH_METHOD_SIMPLE.equalsIgnoreCase( authMethod ) )
+ {
+ parameter.setAuthMethod( ConnectionParameter.AuthenticationMethod.SIMPLE );
+ }
+ else if ( StringUtils.isNotEmpty( authMethod ) && X_AUTH_METHOD_DIGEST_MD5.equalsIgnoreCase( authMethod ) )
+ {
+ parameter.setAuthMethod( ConnectionParameter.AuthenticationMethod.SASL_DIGEST_MD5 );
+ }
+ else if ( StringUtils.isNotEmpty( authMethod ) && X_AUTH_METHOD_CRAM_MD5.equalsIgnoreCase( authMethod ) )
+ {
+ parameter.setAuthMethod( ConnectionParameter.AuthenticationMethod.SASL_CRAM_MD5 );
+ }
+ else if ( StringUtils.isNotEmpty( parameter.getBindPrincipal() ) )
+ {
+ parameter.setAuthMethod( ConnectionParameter.AuthenticationMethod.SIMPLE );
+ }
+ else
+ {
+ parameter.setAuthMethod( ConnectionParameter.AuthenticationMethod.NONE );
+ }
+
+ // SASL realm, none if empty or absent
+ String saslRealm = ldapUrl.getExtensions().get( X_SASL_REALM );
+ if ( StringUtils.isNotEmpty( saslRealm ) )
+ {
+ parameter.setSaslRealm( saslRealm );
+ }
+ }
}
Modified: directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/NetworkParameterPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/NetworkParameterPage.java?rev=688867&r1=688866&r2=688867&view=diff
==============================================================================
--- directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/NetworkParameterPage.java (original)
+++ directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/NetworkParameterPage.java Mon Aug 25 13:39:30 2008
@@ -21,7 +21,11 @@
package org.apache.directory.studio.connection.ui.widgets;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
import org.apache.commons.lang.StringUtils;
+import org.apache.directory.shared.ldap.util.LdapURL;
import org.apache.directory.studio.connection.core.Connection;
import org.apache.directory.studio.connection.core.ConnectionCorePlugin;
import org.apache.directory.studio.connection.core.ConnectionParameter;
@@ -58,6 +62,14 @@
public class NetworkParameterPage extends AbstractConnectionParameterPage
{
+ private static final String X_CONNECTION_NAME = "X-CONNECTION-NAME";
+
+ private static final String X_ENCRYPTION = "X-ENCRYPTION";
+
+ private static final String X_ENCRYPTION_LDAPS = "ldaps";
+
+ private static final String X_ENCRYPTION_START_TLS = "StartTLS";
+
/** The connection name text widget */
private Text nameText;
@@ -150,7 +162,7 @@
/**
- * @see org.apache.directory.studio.connection.ui.AbstractConnectionParameterPage#createComposite(org.eclipse.swt.widgets.Composite)
+ * {@inheritDoc}
*/
protected void createComposite( Composite parent )
{
@@ -198,7 +210,7 @@
/**
- * @see org.apache.directory.studio.connection.ui.AbstractConnectionParameterPage#validate()
+ * {@inheritDoc}
*/
protected void validate()
{
@@ -230,7 +242,7 @@
/**
- * @see org.apache.directory.studio.connection.ui.AbstractConnectionParameterPage#loadParameters(org.apache.directory.studio.connection.core.ConnectionParameter)
+ * {@inheritDoc}
*/
protected void loadParameters( ConnectionParameter parameter )
{
@@ -246,7 +258,7 @@
/**
- * @see org.apache.directory.studio.connection.ui.AbstractConnectionParameterPage#initListeners()
+ * {@inheritDoc}
*/
protected void initListeners()
{
@@ -314,7 +326,7 @@
/**
- * @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#saveParameters(org.apache.directory.studio.connection.core.ConnectionParameter)
+ * {@inheritDoc}
*/
public void saveParameters( ConnectionParameter parameter )
{
@@ -326,7 +338,7 @@
/**
- * @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#saveDialogSettings()
+ * {@inheritDoc}
*/
public void saveDialogSettings()
{
@@ -336,7 +348,7 @@
/**
- * @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#setFocus()
+ * {@inheritDoc}
*/
public void setFocus()
{
@@ -345,7 +357,7 @@
/**
- * @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#areParametersModifed()
+ * {@inheritDoc}
*/
public boolean areParametersModifed()
{
@@ -354,14 +366,74 @@
/**
- * @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#isReconnectionRequired()
+ * {@inheritDoc}
*/
public boolean isReconnectionRequired()
{
- return connectionParameter == null
- || !StringUtils.equals( connectionParameter.getHost(), getHostName() )
+ return connectionParameter == null || !StringUtils.equals( connectionParameter.getHost(), getHostName() )
|| connectionParameter.getPort() != getPort()
|| connectionParameter.getEncryptionMethod() != getEncyrptionMethod();
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public void mergeParametersToLdapURL( ConnectionParameter parameter, LdapURL ldapUrl )
+ {
+ ldapUrl.getExtensions().put( X_CONNECTION_NAME, parameter.getName() );
+
+ ldapUrl.setHost( parameter.getHost() );
+
+ ldapUrl.setPort( parameter.getPort() );
+
+ switch ( parameter.getEncryptionMethod() )
+ {
+ case NONE:
+ // default
+ break;
+ case LDAPS:
+ ldapUrl.getExtensions().put( X_ENCRYPTION, X_ENCRYPTION_LDAPS );
+ break;
+ case START_TLS:
+ ldapUrl.getExtensions().put( X_ENCRYPTION, X_ENCRYPTION_START_TLS );
+ break;
+ }
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void mergeLdapUrlToParameters( LdapURL ldapUrl, ConnectionParameter parameter )
+ {
+ // connection name, current date if absent
+ String name = ldapUrl.getExtensions().get( X_CONNECTION_NAME );
+ if ( StringUtils.isEmpty( name ) )
+ {
+ name = new SimpleDateFormat( "yyyy-MM-dd HH-mm-ss" ).format( new Date() ); //$NON-NLS-1$
+ }
+ parameter.setName( name );
+
+ // host
+ parameter.setHost( ldapUrl.getHost() );
+
+ // port
+ parameter.setPort( ldapUrl.getPort() );
+
+ // encryption method, none if unknown or absent
+ String encryption = ldapUrl.getExtensions().get( X_ENCRYPTION );
+ if ( StringUtils.isNotEmpty( encryption ) && X_ENCRYPTION_LDAPS.equalsIgnoreCase( encryption ) )
+ {
+ parameter.setEncryptionMethod( ConnectionParameter.EncryptionMethod.LDAPS );
+ }
+ else if ( StringUtils.isNotEmpty( encryption ) && X_ENCRYPTION_START_TLS.equalsIgnoreCase( encryption ) )
+ {
+ parameter.setEncryptionMethod( ConnectionParameter.EncryptionMethod.START_TLS );
+ }
+ else
+ {
+ parameter.setEncryptionMethod( ConnectionParameter.EncryptionMethod.NONE );
+ }
+ }
}
Modified: directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/connection/BrowserParameterPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/connection/BrowserParameterPage.java?rev=688867&r1=688866&r2=688867&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/connection/BrowserParameterPage.java (original)
+++ directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/connection/BrowserParameterPage.java Mon Aug 25 13:39:30 2008
@@ -25,11 +25,12 @@
import org.apache.commons.lang.StringUtils;
import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.util.LdapURL;
import org.apache.directory.studio.connection.core.Connection;
import org.apache.directory.studio.connection.core.ConnectionParameter;
import org.apache.directory.studio.connection.ui.AbstractConnectionParameterPage;
-import org.apache.directory.studio.connection.ui.widgets.BaseWidgetUtils;
import org.apache.directory.studio.connection.ui.RunnableContextRunner;
+import org.apache.directory.studio.connection.ui.widgets.BaseWidgetUtils;
import org.apache.directory.studio.ldapbrowser.common.widgets.search.AliasesDereferencingWidget;
import org.apache.directory.studio.ldapbrowser.common.widgets.search.LimitWidget;
import org.apache.directory.studio.ldapbrowser.common.widgets.search.ReferralsHandlingWidget;
@@ -61,6 +62,26 @@
public class BrowserParameterPage extends AbstractConnectionParameterPage
{
+ private static final String X_BASE_DN = "X-BASE-DN";
+
+ private static final String X_COUNT_LIMIT = "X-COUNT-LIMIT";
+
+ private static final String X_TIME_LIMIT = "X-TIME-LIMIT";
+
+ private static final String X_ALIAS_HANDLING = "X-ALIAS-HANDLING";
+
+ private static final String X_ALIAS_HANDLING_FINDING = "FINDING";
+
+ private static final String X_ALIAS_HANDLING_SEARCHING = "SEARCHING";
+
+ private static final String X_ALIAS_HANDLING_NEVER = "NEVER";
+
+ private static final String X_REFERRAL_HANDLING = "X-REFERRAL-HANDLING";
+
+ private static final String X_REFERRAL_HANDLING_IGNORE = "IGNORE";
+
+ private static final String X_REFERRAL_HANDLING_MANAGE = "MANAGE";
+
/** The checkbox to fetch the base DN's from namingContexts whenever opening the connection */
private Button autoFetchBaseDnsButton;
@@ -407,10 +428,160 @@
Connection.AliasDereferencingMethod aliasesDereferencingMethod = Connection.AliasDereferencingMethod
.getByOrdinal( aliasesDereferencingMethodOrdinal );
- return fetchBaseDns != isAutoFetchBaseDns()
- || !StringUtils.equals( baseDn, getBaseDN() )
+ return fetchBaseDns != isAutoFetchBaseDns() || !StringUtils.equals( baseDn, getBaseDN() )
|| referralsHandlingMethod != getReferralsHandlingMethod()
|| aliasesDereferencingMethod != getAliasesDereferencingMethod();
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public void mergeParametersToLdapURL( ConnectionParameter parameter, LdapURL ldapUrl )
+ {
+ boolean fetchBaseDns = parameter
+ .getExtendedBoolProperty( IBrowserConnection.CONNECTION_PARAMETER_FETCH_BASE_DNS );
+ String baseDn = parameter.getExtendedProperty( IBrowserConnection.CONNECTION_PARAMETER_BASE_DN );
+ if ( !fetchBaseDns && StringUtils.isNotEmpty( baseDn ) )
+ {
+ ldapUrl.getExtensions().put( X_BASE_DN, baseDn );
+ }
+
+ int countLimit = parameter.getExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_COUNT_LIMIT );
+ if ( countLimit != 0 )
+ {
+ ldapUrl.getExtensions().put( X_COUNT_LIMIT,
+ parameter.getExtendedProperty( IBrowserConnection.CONNECTION_PARAMETER_COUNT_LIMIT ) );
+ }
+
+ int timeLimit = parameter.getExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_TIME_LIMIT );
+ if ( timeLimit != 0 )
+ {
+ ldapUrl.getExtensions().put( X_TIME_LIMIT,
+ parameter.getExtendedProperty( IBrowserConnection.CONNECTION_PARAMETER_TIME_LIMIT ) );
+ }
+
+ int aliasesDereferencingMethodOrdinal = parameter
+ .getExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_ALIASES_DEREFERENCING_METHOD );
+ Connection.AliasDereferencingMethod aliasesDereferencingMethod = Connection.AliasDereferencingMethod
+ .getByOrdinal( aliasesDereferencingMethodOrdinal );
+ switch ( aliasesDereferencingMethod )
+ {
+ case ALWAYS:
+ // default
+ break;
+ case FINDING:
+ ldapUrl.getExtensions().put( X_ALIAS_HANDLING, X_ALIAS_HANDLING_FINDING );
+ break;
+ case SEARCH:
+ ldapUrl.getExtensions().put( X_ALIAS_HANDLING, X_ALIAS_HANDLING_SEARCHING );
+ break;
+ case NEVER:
+ ldapUrl.getExtensions().put( X_ALIAS_HANDLING, X_ALIAS_HANDLING_NEVER );
+ break;
+ }
+
+ int referralsHandlingMethodOrdinal = parameter
+ .getExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_REFERRALS_HANDLING_METHOD );
+ Connection.ReferralHandlingMethod referralsHandlingMethod = Connection.ReferralHandlingMethod
+ .getByOrdinal( referralsHandlingMethodOrdinal );
+ switch ( referralsHandlingMethod )
+ {
+ case FOLLOW:
+ // default
+ break;
+ case IGNORE:
+ ldapUrl.getExtensions().put( X_REFERRAL_HANDLING, X_REFERRAL_HANDLING_IGNORE );
+ break;
+ case MANAGE:
+ ldapUrl.getExtensions().put( X_REFERRAL_HANDLING, X_REFERRAL_HANDLING_MANAGE );
+ break;
+ }
+
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void mergeLdapUrlToParameters( LdapURL ldapUrl, ConnectionParameter parameter )
+ {
+ // base DN, get from Root DSE if absent, may be empty
+ String baseDn = ldapUrl.getExtensions().get( X_BASE_DN );
+ if ( baseDn == null )
+ {
+ parameter.setExtendedBoolProperty( IBrowserConnection.CONNECTION_PARAMETER_FETCH_BASE_DNS, true );
+ parameter.setExtendedProperty( IBrowserConnection.CONNECTION_PARAMETER_BASE_DN, null );
+ }
+ else
+ {
+ parameter.setExtendedBoolProperty( IBrowserConnection.CONNECTION_PARAMETER_FETCH_BASE_DNS, false );
+ parameter.setExtendedProperty( IBrowserConnection.CONNECTION_PARAMETER_BASE_DN, baseDn );
+ }
+
+ // count limit, 1000 if non-numeric or absent
+ String countLimit = ldapUrl.getExtensions().get( X_COUNT_LIMIT );
+ try
+ {
+ parameter.setExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_COUNT_LIMIT, new Integer(
+ countLimit ).intValue() );
+ }
+ catch ( NumberFormatException e )
+ {
+ parameter.setExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_COUNT_LIMIT, 0 );
+ }
+
+ // time limit, 0 if non-numeric or absent
+ String timeLimit = ldapUrl.getExtensions().get( X_TIME_LIMIT );
+ try
+ {
+ parameter.setExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_TIME_LIMIT, new Integer(
+ timeLimit ).intValue() );
+ }
+ catch ( NumberFormatException e )
+ {
+ parameter.setExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_TIME_LIMIT, 0 );
+ }
+
+ // alias handling, ALWAYS if unknown or absent
+ String alias = ldapUrl.getExtensions().get( X_ALIAS_HANDLING );
+ if ( StringUtils.isNotEmpty( alias ) && X_ALIAS_HANDLING_FINDING.equalsIgnoreCase( alias ) )
+ {
+ parameter.setExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_ALIASES_DEREFERENCING_METHOD,
+ Connection.AliasDereferencingMethod.FINDING.getOrdinal() );
+ }
+ else if ( StringUtils.isNotEmpty( alias ) && X_ALIAS_HANDLING_SEARCHING.equalsIgnoreCase( alias ) )
+ {
+ parameter.setExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_ALIASES_DEREFERENCING_METHOD,
+ Connection.AliasDereferencingMethod.SEARCH.getOrdinal() );
+ }
+ else if ( StringUtils.isNotEmpty( alias ) && X_ALIAS_HANDLING_NEVER.equalsIgnoreCase( alias ) )
+ {
+ parameter.setExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_ALIASES_DEREFERENCING_METHOD,
+ Connection.AliasDereferencingMethod.NEVER.getOrdinal() );
+ }
+ else
+ {
+ parameter.setExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_ALIASES_DEREFERENCING_METHOD,
+ Connection.AliasDereferencingMethod.ALWAYS.getOrdinal() );
+ }
+
+ // referral handling, FOLLOW if unknown or absent
+ String referral = ldapUrl.getExtensions().get( X_REFERRAL_HANDLING );
+ if ( StringUtils.isNotEmpty( referral ) && X_REFERRAL_HANDLING_IGNORE.equalsIgnoreCase( referral ) )
+ {
+ parameter.setExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_REFERRALS_HANDLING_METHOD,
+ Connection.ReferralHandlingMethod.IGNORE.getOrdinal() );
+ }
+ else if ( StringUtils.isNotEmpty( referral ) && X_REFERRAL_HANDLING_MANAGE.equalsIgnoreCase( referral ) )
+ {
+ parameter.setExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_REFERRALS_HANDLING_METHOD,
+ Connection.ReferralHandlingMethod.MANAGE.getOrdinal() );
+ }
+ else
+ {
+ parameter.setExtendedIntProperty( IBrowserConnection.CONNECTION_PARAMETER_REFERRALS_HANDLING_METHOD,
+ Connection.ReferralHandlingMethod.FOLLOW.getOrdinal() );
+ }
+ }
}