/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.directory.studio.connection.core;
import org.apache.directory.api.ldap.model.constants.SaslQoP;
import org.apache.directory.api.ldap.model.constants.SaslSecurityStrength;
import org.apache.directory.api.ldap.model.url.LdapUrl;
import org.apache.directory.studio.connection.core.ConnectionParameter.AuthenticationMethod;
import org.apache.directory.studio.connection.core.ConnectionParameter.EncryptionMethod;
import org.apache.directory.studio.connection.core.ConnectionParameter.Krb5Configuration;
import org.apache.directory.studio.connection.core.ConnectionParameter.Krb5CredentialConfiguration;
import org.apache.directory.studio.connection.core.ConnectionParameter.NetworkProvider;
import org.apache.directory.studio.connection.core.event.ConnectionEventRegistry;
import org.apache.directory.studio.connection.core.io.ConnectionWrapper;
import org.apache.directory.studio.connection.core.io.api.DirectoryApiConnectionWrapper;
import org.apache.directory.studio.connection.core.io.jndi.JNDIConnectionWrapper;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.ui.IActionFilter;
/**
* The Connection class is the central .
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class Connection implements ConnectionPropertyPageProvider, IAdaptable
{
/**
* Enum for alias dereferencing method.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public static enum AliasDereferencingMethod
{
/** Never. */
NEVER(0),
/** Always. */
ALWAYS(1),
/** Finding. */
FINDING(2),
/** Search. */
SEARCH(3);
private final int ordinal;
private AliasDereferencingMethod( int ordinal )
{
this.ordinal = ordinal;
}
/**
* Gets the ordinal.
*
* @return the ordinal
*/
public int getOrdinal()
{
return ordinal;
}
/**
* Gets the AliasDereferencingMethod by ordinal.
*
* @param ordinal the ordinal
*
* @return the AliasDereferencingMethod
*/
public static AliasDereferencingMethod getByOrdinal( int ordinal )
{
switch ( ordinal )
{
case 0:
return NEVER;
case 1:
return ALWAYS;
case 2:
return FINDING;
case 3:
return SEARCH;
default:
return null;
}
}
}
/**
* Enum for referral handling method.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public static enum ReferralHandlingMethod
{
/** Ignore. */
IGNORE(0),
/** Follow automatically. */
FOLLOW(1),
/** Manage. */
//MANAGE(2),
/** Follow manually. */
FOLLOW_MANUALLY(3);
private final int ordinal;
private ReferralHandlingMethod( int ordinal )
{
this.ordinal = ordinal;
}
/**
* Gets the ordinal.
*
* @return the ordinal
*/
public int getOrdinal()
{
return ordinal;
}
/**
* Gets the ReferralHandlingMethod by ordinal.
*
* @param ordinal the ordinal
*
* @return the ReferralHandlingMethod
*/
public static ReferralHandlingMethod getByOrdinal( int ordinal )
{
switch ( ordinal )
{
case 0:
return IGNORE;
case 1:
return FOLLOW;
case 2:
return FOLLOW_MANUALLY;
case 3:
return FOLLOW_MANUALLY;
default:
return null;
}
}
}
/** The connection parameter */
private ConnectionParameter connectionParameter;
/** The connection wrapper */
private ConnectionWrapper connectionWrapper;
/** The detected connection properties */
private DetectedConnectionProperties detectedConnectionProperties;
/**
* Creates a new instance of Connection.
*
* @param connectionParameter
*/
public Connection( ConnectionParameter connectionParameter )
{
this.connectionParameter = connectionParameter;
detectedConnectionProperties = new DetectedConnectionProperties( this );
}
/**
* @see java.lang.Object#clone()
*/
public Object clone()
{
ConnectionParameter cp = new ConnectionParameter( getName(), getHost(), getPort(), getEncryptionMethod(),
getNetworkProvider(), getAuthMethod(), getBindPrincipal(), getBindPassword(), getSaslRealm(), isReadOnly(),
getConnectionParameter().getExtendedProperties() );
Connection clone = new Connection( cp );
return clone;
}
/**
* Gets the connection wrapper.
*
* @return the connection wrapper
*/
public ConnectionWrapper getConnectionWrapper()
{
switch ( connectionParameter.getNetworkProvider() )
{
case JNDI:
return getJndiConnectionWrapper();
case APACHE_DIRECTORY_LDAP_API:
return getDirectoryApiConnectionWrapper();
}
return null;
}
/**
* Gets the JNDI connection wrapper.
*
* @return
* the JNDI connection wrapper
*/
private ConnectionWrapper getJndiConnectionWrapper()
{
if ( !( connectionWrapper instanceof JNDIConnectionWrapper ) )
{
connectionWrapper = new JNDIConnectionWrapper( this );
}
return connectionWrapper;
}
/**
* Gets the Directory API connection wrapper.
*
* @return
* the Directory API connection wrapper
*/
private ConnectionWrapper getDirectoryApiConnectionWrapper()
{
if ( !( connectionWrapper instanceof DirectoryApiConnectionWrapper ) )
{
connectionWrapper = new DirectoryApiConnectionWrapper( this );
}
return connectionWrapper;
}
/**
* Gets the connection parameter.
*
* @return the connection parameter
*/
public ConnectionParameter getConnectionParameter()
{
return connectionParameter;
}
/**
* Sets the connection parameter.
*
* @param connectionParameter the connection parameter
*/
public void setConnectionParameter( ConnectionParameter connectionParameter )
{
this.connectionParameter = connectionParameter;
ConnectionEventRegistry.fireConnectionUpdated( this, this );
}
/**
* Gets the detected connection properties.
*
* @return the detected connection properties
*/
public DetectedConnectionProperties getDetectedConnectionProperties()
{
return detectedConnectionProperties;
}
/**
* Sets the detected connection properties.
*
* @param detectedConnectionProperties the detected connection properties
*/
public void setDetectedConnectionProperties( DetectedConnectionProperties detectedConnectionProperties )
{
this.detectedConnectionProperties = detectedConnectionProperties;
}
/**
* Gets the auth method.
*
* @return the auth method
*/
public AuthenticationMethod getAuthMethod()
{
return connectionParameter.getAuthMethod();
}
/**
* Gets the bind password.
*
* @return the bind password
*/
public String getBindPassword()
{
return connectionParameter.getBindPassword();
}
/**
* Gets the bind principal.
*
* @return the bind principal
*/
public String getBindPrincipal()
{
return connectionParameter.getBindPrincipal();
}
/**
* Gets the encryption method.
*
* @return the encryption method
*/
public EncryptionMethod getEncryptionMethod()
{
return connectionParameter.getEncryptionMethod();
}
/**
* Gets the network provider.
*
* @return the network provider
*/
public NetworkProvider getNetworkProvider()
{
return connectionParameter.getNetworkProvider();
}
/**
* Gets the id.
*
* @return the id
*/
public String getId()
{
return connectionParameter.getId();
}
/**
* Gets the host.
*
* @return the host
*/
public String getHost()
{
return connectionParameter.getHost();
}
/**
* Gets the name.
*
* @return the name
*/
public String getName()
{
return connectionParameter.getName();
}
/**
* Gets the port.
*
* @return the port
*/
public int getPort()
{
return connectionParameter.getPort();
}
/**
* Gets the SASL realm.
*
* @return the SASL realm
*/
public String getSaslRealm()
{
return connectionParameter.getSaslRealm();
}
/**
* Gets the SASL quality of protection.
*
* @return the SASL quality of protection
*/
public SaslQoP getSaslQop()
{
return connectionParameter.getSaslQop();
}
/**
* Gets the SASL security strength.
*
* @return the SASL security strength
*/
public SaslSecurityStrength getSaslSecurityStrength()
{
return connectionParameter.getSaslSecurityStrength();
}
/**
* Checks if is SASL mutual authentication.
*
* @return true, if is SASL mutual authentication
*/
public boolean isSaslMutualAuthentication()
{
return connectionParameter.isSaslMutualAuthentication();
}
/**
* Gets the Kerberos credential configuration.
*
* @return the Kerberos credential configuration
*/
public Krb5CredentialConfiguration getKrb5CredentialConfiguration()
{
return connectionParameter.getKrb5CredentialConfiguration();
}
/**
* Gets the Kerberos configuration.
*
* @return the Kerberos configuration
*/
public Krb5Configuration getKrb5Configuration()
{
return connectionParameter.getKrb5Configuration();
}
/**
* Gets the Kerberos configuration file.
*
* @return the Kerberos configuration file
*/
public String getKrb5ConfigurationFile()
{
return connectionParameter.getKrb5ConfigurationFile();
}
/**
* Gets the Kerberos realm.
*
* @return the Kerberos realm
*/
public String getKrb5Realm()
{
return connectionParameter.getKrb5Realm();
}
/**
* Gets the Kerberos KDC host.
*
* @return the Kerberos KDC host
*/
public String getKrb5KdcHost()
{
return connectionParameter.getKrb5KdcHost();
}
/**
* Gets the Kerberos KDC port.
*
* @return the Kerberos KDCport
*/
public int getKrb5KdcPort()
{
return connectionParameter.getKrb5KdcPort();
}
/**
* Checks if this connection is read only.
*
* @return true, if this connection is read only
*/
public boolean isReadOnly()
{
return connectionParameter.isReadOnly();
}
/**
* Sets the auth method.
*
* @param authMethod the auth method
*/
public void setAuthMethod( AuthenticationMethod authMethod )
{
connectionParameter.setAuthMethod( authMethod );
ConnectionEventRegistry.fireConnectionUpdated( this, this );
}
/**
* Sets the bind password.
*
* @param bindPassword the bind password
*/
public void setBindPassword( String bindPassword )
{
connectionParameter.setBindPassword( bindPassword );
ConnectionEventRegistry.fireConnectionUpdated( this, this );
}
/**
* Sets the bind principal.
*
* @param bindPrincipal the bind principal
*/
public void setBindPrincipal( String bindPrincipal )
{
connectionParameter.setBindPrincipal( bindPrincipal );
ConnectionEventRegistry.fireConnectionUpdated( this, this );
}
/**
* Sets the encryption method.
*
* @param encryptionMethod the encryption method
*/
public void setEncryptionMethod( EncryptionMethod encryptionMethod )
{
connectionParameter.setEncryptionMethod( encryptionMethod );
ConnectionEventRegistry.fireConnectionUpdated( this, this );
}
/**
* Sets the host.
*
* @param host the host
*/
public void setHost( String host )
{
connectionParameter.setHost( host );
ConnectionEventRegistry.fireConnectionUpdated( this, this );
}
/**
* Sets the name.
*
* @param name the name
*/
public void setName( String name )
{
connectionParameter.setName( name );
ConnectionEventRegistry.fireConnectionUpdated( this, this );
}
/**
* Sets the port.
*
* @param port the port
*/
public void setPort( int port )
{
connectionParameter.setPort( port );
ConnectionEventRegistry.fireConnectionUpdated( this, this );
}
/**
* Sets the SASL realm.
*
* @param realm the new SASL realm
*/
public void setSaslRealm( String realm )
{
connectionParameter.setSaslRealm( realm );
ConnectionEventRegistry.fireConnectionUpdated( this, this );
}
/**
* Sets the read only flag.
*
* @param isReadOnly the new read only flag
*/
public void setReadOnly( boolean isReadOnly )
{
connectionParameter.setReadOnly( isReadOnly );
ConnectionEventRegistry.fireConnectionUpdated( this, this );
}
/**
* @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
*/
@SuppressWarnings("unchecked")
public Object getAdapter( Class adapter )
{
// if ( adapter.isAssignableFrom( ISearchPageScoreComputer.class ) )
// {
// return new LdapSearchPageScoreComputer();
// }
if ( adapter == Connection.class )
{
return this;
}
else if ( adapter.isAssignableFrom( IActionFilter.class ) )
{
return ConnectionActionFilterAdapter.getInstance();
}
return null;
}
/**
* Gets the LDAP URL.
*
* @return the LDAP URL
*/
public LdapUrl getUrl()
{
LdapUrl url = new LdapUrl();
url.setHost( getHost() );
url.setPort( getPort() );
return url;
}
}