buildframework/helium/sf/java/core/src/com/nokia/helium/core/LDAPHelper.java
changeset 628 7c4a911dc066
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/LDAPHelper.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2010-2011 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:  
+ *
+ */
+package com.nokia.helium.core;
+
+import java.util.Hashtable;
+
+import javax.naming.Context;
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+
+/**
+ * Simpler LDAP interface to retrieve user base attribute. 
+ *
+ */
+public class LDAPHelper {
+    public static final String EMAIL_ATTRIBUTE_NAME = "mail";
+    private String ldapURL;
+    private String rootdn;
+    
+    /**
+     * Construct a LDAP helper for a specific server.
+     * @param ldapURL the ldap url (e.g: ldap://server:389)
+     * @param rootdn the rootdn value.
+     */
+    public LDAPHelper(String ldapURL, String rootdn) {
+        if (ldapURL == null) {
+            throw new IllegalArgumentException("The ldap server url cannot be null.");
+        }
+        if (rootdn == null) {
+            throw new IllegalArgumentException("The rootdn cannot be null.");
+        }
+        this.ldapURL = ldapURL;
+        this.rootdn = rootdn;
+    }
+    
+    /**
+     * Get the value of the LDAP attribute for a filter.
+     * @param filter the filter to search for
+     * @param attribute the attribute name.
+     * @return the value of the attribute as a string., if the value is not a String then it is 
+     *         stringify using toString. Returns null if not found.
+     * @throws LDAPException
+     */
+    public String getAttributeAsString(String filter, String attribute) throws LDAPException {
+        if (filter == null) {
+            throw new IllegalArgumentException("filter cannot be null.");
+        }
+        if (attribute == null) {
+            throw new IllegalArgumentException("attribute cannot be null.");
+        }
+        // Set up environment for creating initial context
+        Hashtable<String, String> env = new Hashtable<String, String>(11);
+        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
+        env.put(Context.PROVIDER_URL, ldapURL + "/" + rootdn);
+
+        // Create initial context
+        try {
+            DirContext ctx = new InitialDirContext(env);
+            SearchControls controls = new SearchControls();
+            controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+            NamingEnumeration<SearchResult> en = ctx.search("", filter, controls);
+            if (en.hasMore()) {
+                SearchResult sr = en.next();
+                if (sr.getAttributes().get(attribute) != null) {
+                    Object value = sr.getAttributes().get(attribute).get();
+                    if (value instanceof String) {
+                        return (String)value;
+                    } else {
+                        return value.toString();
+                    }
+                }
+            }
+        } catch (NameNotFoundException ex) {
+            throw new LDAPException("Could not find " +  filter + " attribute " + attribute + " in LDAP: " + ex.getMessage(), ex);
+        } catch (NamingException ex) {
+            throw new LDAPException("Could not find " +  filter + " attribute " + attribute + " in LDAP: " + ex.getMessage(), ex);
+        }
+        return null;
+    }
+
+    /**
+     * Get the value of the LDAP attribute for current user. (based on user.name).
+     * @param attribute the attribute name.
+     * @return the value of the attribute as a string., if the value is not a String then it is 
+     *         stringify using toString. Returns null if not found.
+     * @throws LDAPException
+     */
+    public String getUserAttributeAsString(String attribute) throws LDAPException {
+        return getUserAttributeAsString(System.getProperty("user.name"), attribute);
+    }
+
+    /**
+     * Get the value of the LDAP attribute for username.
+     * @param username the user to search for
+     * @param attribute the attribute name.
+     * @return the value of the attribute as a string., if the value is not a String then it is 
+     *         stringify using toString. Returns null if not found.
+     * @throws LDAPException
+     */
+    public String getUserAttributeAsString(String username, String attribute) throws LDAPException {
+        return getAttributeAsString("uid=" + username, attribute);
+    }
+
+}