001 /* 002 * CDDL HEADER START 003 * 004 * The contents of this file are subject to the terms of the 005 * Common Development and Distribution License, Version 1.0 only 006 * (the "License"). You may not use this file except in compliance 007 * with the License. 008 * 009 * You can obtain a copy of the license at 010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE 011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE. 012 * See the License for the specific language governing permissions 013 * and limitations under the License. 014 * 015 * When distributing Covered Code, include this CDDL HEADER in each 016 * file and include the License file at 017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, 018 * add the following below this CDDL HEADER, with the fields enclosed 019 * by brackets "[]" replaced with your own identifying information: 020 * Portions Copyright [yyyy] [name of copyright owner] 021 * 022 * CDDL HEADER END 023 * 024 * 025 * Copyright 2008 Sun Microsystems, Inc. 026 */ 027 028 package org.opends.admin.ads.util; 029 030 import javax.naming.ldap.InitialLdapContext; 031 032 /** 033 * A simple class that is used to be able to specify which URL and connection 034 * type to use when we connect to a server. 035 */ 036 public class PreferredConnection 037 { 038 private String ldapUrl; 039 private Type type; 040 /** 041 * The type of the connection. 042 */ 043 public enum Type 044 { 045 /** 046 * LDAP connection. 047 */ 048 LDAP, 049 /** 050 * LDAPS connection. 051 */ 052 LDAPS, 053 /** 054 * Start TLS connection. 055 */ 056 START_TLS 057 } 058 059 /** 060 * The constructor of the PreferredConnection. 061 * @param ldapUrl the LDAP URL to connect to the server. 062 * @param type the type of connection to be used to connect (required to 063 * differentiate StartTLS and regular LDAP). 064 */ 065 public PreferredConnection(String ldapUrl, Type type) 066 { 067 this.ldapUrl = ldapUrl; 068 this.type = type; 069 } 070 071 /** 072 * Returns the LDAP URL to be used. 073 * @return the LDAP URL to be used. 074 */ 075 public String getLDAPURL() 076 { 077 return ldapUrl; 078 } 079 080 /** 081 * Returns the type of the connection. 082 * @return the type of the connection. 083 */ 084 public Type getType() 085 { 086 return type; 087 } 088 089 /** 090 * {@inheritDoc} 091 */ 092 public int hashCode() 093 { 094 return (type+ldapUrl.toLowerCase()).hashCode(); 095 } 096 097 /** 098 * {@inheritDoc} 099 */ 100 public boolean equals(Object o) 101 { 102 boolean equals = false; 103 if (this != o) 104 { 105 if ((o != null) && 106 (o instanceof PreferredConnection)) 107 { 108 PreferredConnection p = (PreferredConnection)o; 109 equals = type == p.getType() && 110 ldapUrl.equalsIgnoreCase(p.getLDAPURL()); 111 } 112 } 113 else 114 { 115 equals = true; 116 } 117 return equals; 118 } 119 120 121 /** 122 * Commodity method that returns a PreferredConnection object with the 123 * information on a given InitialLdapContext. 124 * @param ctx the connection we retrieve the inforamtion from. 125 * @return a preferred connection object. 126 */ 127 public static PreferredConnection getPreferredConnection( 128 InitialLdapContext ctx) 129 { 130 String ldapUrl = ConnectionUtils.getLdapUrl(ctx); 131 PreferredConnection.Type type; 132 if (ConnectionUtils.isStartTLS(ctx)) 133 { 134 type = PreferredConnection.Type.START_TLS; 135 } 136 else if (ConnectionUtils.isSSL(ctx)) 137 { 138 type = PreferredConnection.Type.LDAPS; 139 } 140 else 141 { 142 type = PreferredConnection.Type.LDAP; 143 } 144 PreferredConnection cnx = new PreferredConnection(ldapUrl, type); 145 return cnx; 146 } 147 }