Return-Path: Delivered-To: apmail-geronimo-dev-archive@www.apache.org Received: (qmail 55674 invoked from network); 15 Nov 2006 09:17:05 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 15 Nov 2006 09:17:05 -0000 Received: (qmail 6289 invoked by uid 500); 15 Nov 2006 09:17:12 -0000 Delivered-To: apmail-geronimo-dev-archive@geronimo.apache.org Received: (qmail 6245 invoked by uid 500); 15 Nov 2006 09:17:12 -0000 Mailing-List: contact dev-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org List-Id: Delivered-To: mailing list dev@geronimo.apache.org Received: (qmail 6234 invoked by uid 99); 15 Nov 2006 09:17:12 -0000 X-ASF-Spam-Status: No, hits=4.9 required=10.0 tests=FROM_HAS_MIXED_NUMS,HTML_MESSAGE,HTML_TINY_FONT,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (hermes.apache.org: domain of c1vamsi1c@gmail.com designates 64.233.182.190 as permitted sender) Received: from [64.233.182.190] (HELO nf-out-0910.google.com) (64.233.182.190) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 15 Nov 2006 01:17:07 -0800 Received: by nf-out-0910.google.com with SMTP id x37so217403nfc for ; Wed, 15 Nov 2006 01:14:49 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:mime-version:content-type; b=r5VsBRsMeFoh9P+GVjB2N8AsCgipI4264fueDWf8cNdbGueuWfzoqrhXq44t3R0ajaiBM8W/OufPyTOkA8GnzKE0iKhNgoEilMrH0Uc0IW2/NKH5Kx2xt137qQ8+KD3AkJnoBsGVTfC34U4lpxBeez3gTs6WicUrw0ItNauuvnE= Received: by 10.49.42.5 with SMTP id u5mr644821nfj.1163582088580; Wed, 15 Nov 2006 01:14:48 -0800 (PST) Received: by 10.49.6.4 with HTTP; Wed, 15 Nov 2006 01:14:48 -0800 (PST) Message-ID: <22d56c4d0611150114k6190b3a4y8460eb41cac87e10@mail.gmail.com> Date: Wed, 15 Nov 2006 14:44:48 +0530 From: "Vamsavardhana Reddy" To: dev@geronimo.apache.org Subject: Re: svn commit: r475164 - in /geronimo/server/trunk/applications/console: geronimo-console-framework/src/main/webapp/WEB-INF/aggregation/ geronimo-console-framework/src/main/webapp/WEB-INF/data/ geronimo-console-standard/src/main/java/org/apache/gero MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_44570_6513100.1163582088415" X-Virus-Checked: Checked by ClamAV on apache.org ------=_Part_44570_6513100.1163582088415 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Source headers of newly added files are not in line with new ASF source header and copyright notice policy. See GERONIMO-2537. --vamsi On 11/15/06, ccardona@apache.org wrote: > > Author: ccardona > Date: Wed Nov 15 00:57:58 2006 > New Revision: 475164 > > URL: http://svn.apache.org/viewvc?view=rev&rev=475164 > Log: > GERONIMO-1823 Add Embedded LDAP Server Viewer Portlet > > Added: > > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/ > > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerHelper.java > > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerPortlet.java > > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/ > > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/help.jsp > > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/viewLDAPServer.jsp > Modified: > > geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/aggregation/Head.jsp > > geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/pageregistry.xml > > geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/portletentityregistry.xml > > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/dwr.xml > > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/portlet.xml > > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/web.xml > > Modified: > geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/aggregation/Head.jsp > URL: > http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/aggregation/Head.jsp?view=diff&rev=475164&r1=475163&r2=475164 > > ============================================================================== > --- > geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/aggregation/Head.jsp > (original) > +++ > geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/aggregation/Head.jsp > Wed Nov 15 00:57:58 2006 > @@ -44,6 +44,7 @@ > dojo.require("dojo.widget.SortableTable"); > dojo.require("dojo.widget.ComboBox"); > dojo.require("dojo.widget.Tooltip"); > + dojo.require("dojo.widget.validate"); > // Includes Dojo source for debugging > // dojo.hostenv.writeIncludes(); > > > Modified: > geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/pageregistry.xml > URL: > http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/pageregistry.xml?view=diff&rev=475164&r1=475163&r2=475164 > > ============================================================================== > --- > geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/pageregistry.xml > (original) > +++ > geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/pageregistry.xml > Wed Nov 15 00:57:58 2006 > @@ -608,4 +608,19 @@ > > > > + > + > + LDAP Viewer > + ico_filetree_16x16.gif View contents of an LDAP > server > + > + > + > + > + > + > + > + > + > + > + > > > Modified: > geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/portletentityregistry.xml > URL: > http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/portletentityregistry.xml?view=diff&rev=475164&r1=475163&r2=475164 > > ============================================================================== > --- > geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/portletentityregistry.xml > (original) > +++ > geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/portletentityregistry.xml > Wed Nov 15 00:57:58 2006 > @@ -148,6 +148,9 @@ > > console-standard.ImportExport > > + > + console-standard.LDAPViewer > + > > console-standard.JMXViewer > > > Added: > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerHelper.java > URL: > http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerHelper.java?view=auto&rev=475164 > > ============================================================================== > --- > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerHelper.java > (added) > +++ > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerHelper.java > Wed Nov 15 00:57:58 2006 > @@ -0,0 +1,446 @@ > +/** > > + * > > + * Copyright 2006 The Apache Software Foundation or its licensors, as > applicable. > > + * > > + * Licensed 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.geronimo.console.ldapmanager; > > + > > +import java.util.ArrayList; > > +import java.util.Collection; > > +import java.util.Enumeration; > > +import java.util.HashMap; > > +import java.util.Hashtable; > > +import java.util.List; > > +import java.util.Map; > > + > > +import javax.naming.Context; > > +import javax.naming.NameClassPair; > > +import javax.naming.NamingEnumeration; > > +import javax.naming.NamingException; > > +import javax.naming.directory.Attribute; > > +import javax.naming.directory.Attributes; > > +import javax.naming.directory.DirContext; > > +import javax.naming.directory.InitialDirContext; > > +import javax.naming.directory.SearchControls; > > +import javax.naming.directory.SearchResult; > > +import javax.servlet.http.HttpSession; > > + > > +import uk.ltd.getahead.dwr.WebContext; > > +import uk.ltd.getahead.dwr.WebContextFactory; > > + > > +/** > > + * The LDAP manager helper > > + */ > > +public class LDAPManagerHelper { > > + private final static String LDAP_VERSION_KEY = " > java.naming.ldap.version"; > > + > > + private final static String SSL_VALUE = "ssl"; > > + > > + private final static String NONE_VALUE = "none"; > > + > > + private final static String INITIAL_CONTEXT_FACTORY_DEFAULT = " > com.sun.jndi.ldap.LdapCtxFactory"; > > + > > + private final static String HOST_DEFAULT = "localhost"; > > + > > + private final static String PORT_DEFAULT = "1389"; > > + > > + private final static String BASE_DN_DEFAULT = "ou=system"; > > + > > + // LDAP Version: "3", "2" > > + private final static String LDAP_VERSION_DEFAULT = "3"; > > + > > + // Security Protocol: "simple", "ssl", "sasl" > > + private final static String SECURITY_PROTOCOL_DEFAULT = "simple"; > > + > > + // Security Authentication: "simple", "none", "strong" > > + private final static String SECURITY_AUTHENTICATION_DEFAULT = > "simple"; > > + > > + private final static String SECURITY_PRINCIPAL_DEFAULT = "uid=admin, > ou=system"; > > + > > + private final static String SECURITY_CREDENTIALS_DEFAULT = "secret"; > > + > > + private final static String ONELEVEL_SCOPE = "onelevel"; > > + > > + private final static String SUBTREE_SCOPE = "subtree"; > > + > > + private final static String DIR_CONTEXT_KEY = " > LDAPManagerHelper.dirContext"; > > + > > + private final static String DIR_ENV_KEY = "LDAPManagerHelper.dirEnv"; > > + > > + private final static String HOST_KEY = "LDAPManagerHelper.host"; > > + > > + private final static String PORT_KEY = "LDAPManagerHelper.port"; > > + > > + private final static String BASE_DN_KEY = "LDAPManagerHelper.baseDN"; > > + > > + private final static String SUCCESS_RESULT = ""; > > + > > + private DirContext dirContext; > > + > > + private Hashtable dirEnv; > > + > > + private String host; > > + > > + private String port; > > + > > + private String baseDN; > > + > > + /** > > + * Construct an LDAP manager helper using config data (default) > > + */ > > + public LDAPManagerHelper() throws Exception { > > + dirContext = (DirContext) getSessionAttribute(DIR_CONTEXT_KEY); > > + if (dirContext == null) { > > + // TODO: Get the default values from configuration / GBean > > + String result = connect(INITIAL_CONTEXT_FACTORY_DEFAULT, > > + HOST_DEFAULT, PORT_DEFAULT, BASE_DN_DEFAULT, > > + LDAP_VERSION_DEFAULT, SECURITY_PROTOCOL_DEFAULT, > > + SECURITY_AUTHENTICATION_DEFAULT, > > + SECURITY_PRINCIPAL_DEFAULT, > SECURITY_CREDENTIALS_DEFAULT); > > + if (!SUCCESS_RESULT.equalsIgnoreCase(result)) { > > + throw new Exception(result); > > + } > > + } else { > > + dirEnv = (Hashtable) getSessionAttribute(DIR_ENV_KEY); > > + host = (String) getSessionAttribute(HOST_KEY); > > + port = (String) getSessionAttribute(PORT_KEY); > > + baseDN = (String) getSessionAttribute(BASE_DN_KEY); > > + } > > + } > > + > > + /** > > + * Construct an LDAP manager helper using config data (partial) > > + */ > > + public LDAPManagerHelper(String host, String port, String baseDN, > > + String securityAuthentication, String userDN, String userPwd) > > + throws Exception { > > + connect(INITIAL_CONTEXT_FACTORY_DEFAULT, host, port, baseDN, > > + LDAP_VERSION_DEFAULT, SECURITY_PROTOCOL_DEFAULT, > > + securityAuthentication, userDN, userPwd); > > + } > > + > > + /** > > + * Construct an LDAP manager helper using config data (all) > > + */ > > + public LDAPManagerHelper(String initialContextFactory, String host, > > + String port, String baseDN, String ldapVersion, > > + String securityProtocol, String securityAuthentication, > > + String securityPrincipal, String securityCredentials) > > + throws Exception { > > + connect(initialContextFactory, host, port, baseDN, ldapVersion, > > + securityProtocol, securityAuthentication, > securityPrincipal, > > + securityCredentials); > > + } > > + > > + /** > > + * Create a directory context using config data > > + */ > > + public synchronized String connect(String initialContextFactory, > > + String host, String port, String baseDN, String ldapVersion, > > + String securityProtocol, String securityAuthentication, > > + String securityPrincipal, String securityCredentials) > > + throws Exception { > > + String result = SUCCESS_RESULT; > > + > > + Hashtable dirEnv = new Hashtable(); > > + dirEnv.put(Context.INITIAL_CONTEXT_FACTORY, > initialContextFactory); > > + String providerURL = createLDAPURL(host, port, ""); // Empty Base > DN > > + dirEnv.put(Context.PROVIDER_URL, providerURL); > > + dirEnv.put(LDAP_VERSION_KEY, ldapVersion); > > + if (SSL_VALUE.equalsIgnoreCase(securityProtocol)) { > > + dirEnv.put(Context.SECURITY_PROTOCOL, SSL_VALUE); > > + } > > + dirEnv.put(Context.SECURITY_AUTHENTICATION, > securityAuthentication); > > + if (!(NONE_VALUE.equalsIgnoreCase(securityAuthentication))) { > > + // Either "simple" or "strong" > > + dirEnv.put(Context.SECURITY_PRINCIPAL, securityPrincipal); // > User DN > > + dirEnv.put(Context.SECURITY_CREDENTIALS, > securityCredentials); // Password > > + } > > + > > + try { > > + DirContext newDirContext = new InitialDirContext(dirEnv); > > + // Close old context > > + if (dirContext != null) { > > + dirContext.close(); > > + } > > + // Save directory data to class vars > > + this.dirContext = newDirContext; > > + this.dirEnv = dirEnv; > > + this.host = host; > > + this.port = port; > > + this.baseDN = baseDN; > > + // Save directory data to session > > + setSessionAttribute(DIR_CONTEXT_KEY, dirContext); > > + setSessionAttribute(DIR_ENV_KEY, dirEnv); > > + setSessionAttribute(HOST_KEY, host); > > + setSessionAttribute(PORT_KEY, port); > > + setSessionAttribute(BASE_DN_KEY, baseDN); > > + } catch (NamingException e) { > > + result = "Problem connecting to directory server: " > > + + e.getMessage(); > > + } > > + > > + return result; > > + } > > + > > + /** > > + * Return directory context environment > > + */ > > + public Map getEnvironment() { > > + Map env = new HashMap(); > > + env.put("host", host); > > + env.put("port", port); > > + String ldapVersion = (String) dirEnv.get(LDAP_VERSION_KEY); > > + env.put("ldapVersion", ldapVersion); > > + env.put("baseDN", baseDN); > > + String securityProtocol = (String) dirEnv > > + .get(Context.SECURITY_PROTOCOL); > > + env.put("securityProtocol", securityProtocol); > > + String securityAuthentication = (String) dirEnv > > + .get(Context.SECURITY_AUTHENTICATION); > > + env.put("securityAuthentication", securityAuthentication); > > + String securityPrincipal = (String) dirEnv > > + .get(Context.SECURITY_PRINCIPAL); > > + env.put("securityPrincipal", securityPrincipal); > > + > > + return env; > > + } > > + > > + /** > > + * Returns the names bound in the named context > > + */ > > + public Collection list(String name) throws Exception { > > + ArrayList result = new ArrayList(); > > + > > + try { > > + NamingEnumeration list = dirContext.list(name); // can't be > "" > > + > > + while (list.hasMore()) { > > + NameClassPair ncp = (NameClassPair) list.next(); > > + String childName = ncp.getName(); > > + String dn = childName + ", " + name; > > + String[] pair = { childName, dn }; > > + result.add(pair); > > + } > > + } catch (NamingException e) { > > + throw new Exception("Problem getting directory list: " > > + + e.getMessage()); > > + } > > + > > + return result; > > + } > > + > > + /** > > + * Returns the names bound in the base DN context > > + */ > > + public Collection listBaseDN() throws Exception { > > + return list(baseDN); > > + } > > + > > + /** > > + * Enumerates the names bound in the named context and return result > as JSON > > + */ > > + public String listJSON(String name) throws Exception { > > + return listJSON(name, null); > > + } > > + > > + /** > > + * Enumerates the names bound in the named context and return result > as JSON > > + */ > > + public String listJSON(String name, String commonFields) throws > Exception { > > + // JSON: [{title:"Title1",isFolder:true}, {title:"Title2"}] > > + > > + StringBuffer json = new StringBuffer(); > > + List list = (List) list(name); > > + > > + json.append('['); > > + int size = list.size(); > > + for (int i = 0; i < size; i++) { > > + String[] entry = (String[]) list.get(i); > > + json.append("{title:\""); > > + json.append(entry[0]); > > + json.append("\",widgetId:\""); > > + json.append(entry[1]); > > + json.append("\""); > > + if (commonFields != null) { // TODO: Do additional testing > > + json.append(commonFields); > > + } > > + json.append("}"); > > + if ((i + 1) < size) { > > + json.append(','); > > + } > > + } > > + json.append("]"); > > + > > + return json.toString(); > > + } > > + > > + /** > > + * Return the attributes of an LDAP entry > > + */ > > + public Collection getAttributes(String name) throws Exception { > > + ArrayList result = new ArrayList(); > > + try { > > + Attributes attribs = dirContext.getAttributes(name); > > + NamingEnumeration attributes = attribs.getAll(); > > + while (attributes.hasMore()) { > > + Attribute attribute = (Attribute) attributes.next(); > > + String id = attribute.getID(); > > + NamingEnumeration values = attribute.getAll(); > > + while (values.hasMore()) { > > + String value = values.next().toString(); > > + String[] pair = { id, value }; > > + result.add(pair); > > + } > > + } > > + } catch (NamingException e) { > > + throw new Exception("Problem retrieving attributes: " > > + + e.getMessage()); > > + } > > + return result; > > + } > > + > > + /** > > + * Execute an LDAP search > > + */ > > + public Collection search(String searchDN, String filter, String > searchScope) > > + throws Exception { > > + ArrayList result = new ArrayList(); > > + try { > > + String ldapURL = createLDAPURL(host, port, searchDN); > > + SearchControls sc = new SearchControls(); > > + if (ONELEVEL_SCOPE.equalsIgnoreCase(searchScope)) { > > + sc.setSearchScope(SearchControls.ONELEVEL_SCOPE); > > + } else if (SUBTREE_SCOPE.equalsIgnoreCase(searchScope)) { > > + sc.setSearchScope(SearchControls.SUBTREE_SCOPE); > > + } else { > > + // Default to one level scope > > + sc.setSearchScope(SearchControls.ONELEVEL_SCOPE); > > + } > > + // Filter: "(objectclass=*)" > > + boolean isSearchDNAdded = false; > > + NamingEnumeration ne = dirContext.search(ldapURL, filter, > sc); > > + while (ne.hasMore()) { > > + SearchResult sr = (SearchResult) ne.next(); > > + String name = sr.getName(); > > + String dn = null; > > + if (name.length() > 0) { > > + dn = name + "," + searchDN; > > + result.add(dn); > > + } else if ((name.length() == 0) && !isSearchDNAdded) { > > + dn = searchDN; > > + result.add(dn); > > + isSearchDNAdded = true; > > + } > > + } > > + } catch (NamingException e) { > > + throw new Exception("Problem performing directory search: " > > + + e.getMessage()); > > + } > > + return result; > > + } > > + > > + /** > > + * Close directory context > > + */ > > + public void close() throws Exception { > > + try { > > + dirContext.close(); > > + } catch (NamingException e) { > > + throw new Exception("Problem closing directory context: " > > + + e.getMessage()); > > + } > > + } > > + > > + /** > > + * Return base DN of this directory context > > + */ > > + public String getBaseDN() { > > + return baseDN; > > + } > > + > > + /** > > + * Create an LDAP url using host, port, and base DN > > + */ > > + private String createLDAPURL(String host, String port, String baseDN) > { > > + StringBuffer url = new StringBuffer(); > > + url.append("ldap://"); > > + url.append(host); > > + url.append(':'); > > + url.append(port); > > + if ((baseDN != null) && (baseDN.length() >= 3)) { > > + if (!baseDN.startsWith("/")) { > > + url.append('/'); > > + } > > + url.append(baseDN); > > + } > > + return url.toString(); > > + } > > + > > + /** > > + * Get the HTTP session > > + */ > > + private HttpSession getSession() { > > + WebContext ctx = WebContextFactory.get(); > > + HttpSession session = ctx.getSession(); > > + return session; > > + } > > + > > + /** > > + * Set an HTTP session attribute > > + */ > > + private void setSessionAttribute(String name, Object value) { > > + getSession().setAttribute(name, value); > > + } > > + > > + /** > > + * Get an HTTP session attribute > > + */ > > + private Object getSessionAttribute(String name) { > > + return getSession().getAttribute(name); > > + } > > + > > + /** > > + * Dump HTTP session attributes > > + */ > > + private void dumpSession() { > > + System.out.println("--- dumpSession()"); > > + WebContext ctx = WebContextFactory.get(); > > + HttpSession session = ctx.getSession(); > > + Enumeration attribNames = session.getAttributeNames(); > > + while (attribNames.hasMoreElements()) { > > + String attribName = (String) attribNames.nextElement(); > > + System.out.print("--- session: " + attribName + " = "); > > + Object attribValue = session.getAttribute(attribName); > > + System.out.println(attribValue); > > + } > > + } > > + > > + /** > > + * Dump search enumeration > > + */ > > + private void printSearchEnumeration(NamingEnumeration ne) { > > + try { > > + while (ne.hasMore()) { > > + SearchResult sr = (SearchResult) ne.next(); > > + System.out.println("-->" + sr.getName()); > > + System.out.println(sr.getAttributes()); > > + } > > + } catch (NamingException e) { > > + e.printStackTrace(); > > + } > > + } > > + > > +} > > > Added: > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerPortlet.java > URL: > http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerPortlet.java?view=auto&rev=475164 > > ============================================================================== > --- > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerPortlet.java > (added) > +++ > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerPortlet.java > Wed Nov 15 00:57:58 2006 > @@ -0,0 +1,113 @@ > +/** > > + * > > + * Copyright 2006 The Apache Software Foundation or its licensors, as > applicable. > > + * > > + * Licensed 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.geronimo.console.ldapmanager; > > + > > +import java.io.IOException; > > +import java.io.PrintWriter; > > + > > +import javax.portlet.ActionRequest; > > +import javax.portlet.ActionResponse; > > +import javax.portlet.PortletConfig; > > +import javax.portlet.PortletContext; > > +import javax.portlet.PortletException; > > +import javax.portlet.PortletRequestDispatcher; > > +import javax.portlet.RenderRequest; > > +import javax.portlet.RenderResponse; > > +import javax.portlet.WindowState; > > + > > +import org.apache.geronimo.console.BasePortlet; > > + > > +/** > > + * The LDAP manager portlet > > + */ > > +public class LDAPManagerPortlet extends BasePortlet { > > + private static final String VIEWLDAPSERVER_ACTION = "viewLDAPServer"; > > + > > + private static final String VIEWLDAPSERVER_JSP = > "/WEB-INF/view/ldapmanager/viewLDAPServer.jsp"; > > + > > + private static final String HELP_JSP = > "/WEB-INF/view/ldapmanager/help.jsp"; > > + > > + private PortletRequestDispatcher viewLDAPServerView; > > + > > + private PortletRequestDispatcher helpView; > > + > > + private static LDAPManagerHelper helper = null /* new > LDAPManagerHelper() */; > > + > > + /** > > + * Process an action request > > + */ > > + public void processAction(ActionRequest actionRequest, > > + ActionResponse actionResponse) throws PortletException, > IOException { > > + } > > + > > + /** > > + * Serve up the view mode > > + */ > > + protected void doView(RenderRequest renderRequest, > > + RenderResponse renderResponse) throws IOException, > PortletException { > > + if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) > { > > + return; > > + } else if (WindowState.NORMAL.equals(renderRequest.getWindowState())) > { > > + String action = renderRequest.getParameter("action"); > > + if (action == null) { > > + action = VIEWLDAPSERVER_ACTION; > > + } > > + if (VIEWLDAPSERVER_ACTION.equals(action)) { > > + viewLDAPServerView.include(renderRequest, > renderResponse); > > + } else { > > + renderResponse.setContentType("text/html"); > > + PrintWriter out = renderResponse.getWriter(); > > + String errorMsg = "Invalid action message: " + action; > > + out.println(errorMsg); > > + } > > + } else if (WindowState.MAXIMIZED.equals( > renderRequest.getWindowState())) { > > + renderResponse.setContentType("text/html"); > > + PrintWriter out = renderResponse.getWriter(); > > + String errorMsg = "Invalid window state: " > > + + renderRequest.getWindowState(); > > + out.println(errorMsg); > > + } > > + } > > + > > + /** > > + * Serve up the help mode > > + */ > > + protected void doHelp(RenderRequest renderRequest, > > + RenderResponse renderResponse) throws PortletException, > IOException { > > + helpView.include(renderRequest, renderResponse); > > + } > > + > > + /** > > + * Portlet is being placed into service > > + */ > > + public void init(PortletConfig portletConfig) throws PortletException > { > > + super.init(portletConfig); > > + PortletContext pc = portletConfig.getPortletContext(); > > + viewLDAPServerView = pc.getRequestDispatcher(VIEWLDAPSERVER_JSP); > > + helpView = pc.getRequestDispatcher(HELP_JSP); > > + } > > + > > + /** > > + * Portlet is being taken out of service > > + */ > > + public void destroy() { > > + viewLDAPServerView = null; > > + helpView = null; > > + super.destroy(); > > + } > > +} > > > Modified: > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/dwr.xml > URL: > http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/dwr.xml?view=diff&rev=475164&r1=475163&r2=475164 > > ============================================================================== > --- > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/dwr.xml > (original) > +++ > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/dwr.xml > Wed Nov 15 00:57:58 2006 > @@ -15,5 +15,8 @@ > > > > + > + > + > > > > Modified: > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/portlet.xml > URL: > http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/portlet.xml?view=diff&rev=475164&r1=475163&r2=475164 > > ============================================================================== > --- > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/portlet.xml > (original) > +++ > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/portlet.xml > Wed Nov 15 00:57:58 2006 > @@ -1137,5 +1137,29 @@ > > > > + > + Portlet for viewing LDAP server > contents > + LDAPViewer > + LDAP Viewer Portlet > + > + > org.apache.geronimo.console.ldapmanager.LDAPManagerPortlet > + > + -1 > + > + > + text/html > + VIEW > + HELP > + > + > + en > + > + > + LDAP Viewer > + LDAP Viewer > + LDAP Viewer > + > + > + > > > > Added: > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/help.jsp > URL: > http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/help.jsp?view=auto&rev=475164 > > ============================================================================== > --- > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/help.jsp > (added) > +++ > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/help.jsp > Wed Nov 15 00:57:58 2006 > @@ -0,0 +1,27 @@ > +<%-- > > + Copyright 2006 The Apache Software Foundation or its licensors, as > applicable. > > + > > + Licensed 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. > > +--%> > > + > > + > > + > > +

The LDAP viewer portlet can be used to do the following: > > +

    > > +
  • Connect to any LDAP server and explore its contents (default is > the Embedded LDAP server - Apache DS) > > +
  • View the attributes of an entry > > +
  • Do an LDAP search on a particular entry > > +
  • Refresh any entry to get the latest data from the directory > server > > +
  • View the LDAP connection environment data > > +
> > +

Note: Right-click to any tree node to view the context menu for > performing different actions. > > > Added: > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/viewLDAPServer.jsp > URL: > http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/viewLDAPServer.jsp?view=auto&rev=475164 > > ============================================================================== > --- > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/viewLDAPServer.jsp > (added) > +++ > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/viewLDAPServer.jsp > Wed Nov 15 00:57:58 2006 > @@ -0,0 +1,648 @@ > +<%-- > > + Copyright 2006 The Apache Software Foundation or its licensors, as > applicable. > > + > > + Licensed 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. > > +--%> > > + > > +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> > > +<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %> > > +<%@ page import="org.apache.geronimo.console.util.PortletManager" %> > > + > > + > > +<% > > + // LDAP icon > > + String consoleFrameworkContext = > PortletManager.getConsoleFrameworkServletPath(request); > > + String ldapIconURI = consoleFrameworkContext + > "/../images/ico_filetree_16x16.gif"; > > +%> > > + > > + > > + > > + > > + > > + > > + > > +<% String dwrForwarderServlet = > PortletManager.getConsoleFrameworkServletPath(request) + "/../dwr"; %> > > + > > + > > + > > + > > + > > + > > +

contextMenuForWindow="false" widgetId="treeContextMenu"> > > +
widgetId="treeContextMenuRefresh" caption="Refresh" >
> > +
widgetId="treeContextMenuSearch" caption="Search...">
> > +
widgetId="treeContextMenuViewEntry" caption="View Entry">
> > +
widgetId="treeContextMenuConnectInfo" caption="Connect Info">
> > +
> > + > > +
> > +
> > + > > + > > +
> + layoutChildPriority='left-right' > > + id="mainLayout" > > + style="height: 500px;"> > > + > > + > > +
> + orientation="horizontal" > > + sizerWidth="5" > > + activeSizing="1" > > + layoutAlign="client"> > > + > > + > > +
> + toggle="fade" > > + layoutAlign="flood" > > + sizeMin="60" > > + sizeShare="40" > > + widgetId="ldapTree" > > + selector="treeSelector" > > + controller="treeController" > > + expandLevel="0" > > + menu="treeContextMenu" > > + strictFolders="false"> > > + > > +
> > + > > + > > +
> + dojoType="TabContainer" > > + selectedTab="attributesTab" > > + style="overflow: auto" > > + sizeShare="60"> > > + > > + > > +
> > +
> > + > > + > > + > > + > > + > > + > > + > > +
width="40%">Name width="60%">Value
> > +
> > + > > + > > +
label="Search"> > > +
> > +
> > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > +
Search DN: value="" size="45"/>
Filter: value="(objectclass=*)" size="45"/>
 Search > scope: > > + value="onelevel" checked> One level > > + value="subtree"> Sub-tree level > > +
 
> > +   name="ldapSearch" onClick="searchBtnClicked()"/> > > +   > > +    id='searchResultCount'> > > +
> > +
> > +
> > + > > + > > + > > + > > + > > + > > +
DN
> > +
> > + > > + > > +
label="Connect Info"> > > +
> > +
> > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > + > > +
Host: > > + value="localhost" size="40" > > + > dojoType="ValidationTextbox" > > + required="true" > > + trim="true" > > + uppercase: false, > > + lowercase: false, > > + ucFirst: false, > > + digit: false, > > + > missingMessage="
* Host is required." /> > > +
Port: > > + value="1389" size="40" > > + > dojoType="IntegerTextbox" > > + required="true" > > + trim="true" > > + digit="true" > > + min="0" > > + max="65535" > > + > missingMessage="
* Port is required." > > + invalidMessage="
* The value > entered is not valid." > > + rangeMessage="
* This value is out > of range use 0 - 65535." /> > > +
Version: > > + value="3" checked> 3 > > + value="2"> 2 > > +
Base DN: > > + value="ou=system" size="40" > > + > dojoType="ValidationTextbox" > > + required="true" > > + trim="true" > > + > missingMessage="
* Base DN is required." /> > > +
SSL: value="" size="40">
 Anonymous > Bind: value="" size="40" onclick="javascript:anonBindChkboxClicked()">
User DN: > > + value="uid=admin, ou=system" size="40" > > + > dojoType="ValidationTextbox" > > + required="true" > > + trim="true" > > + > missingMessage="
* User DN is required." /> > > +
Password: value="" size="40">
> > +   > > +   value="Connect" name="connectLDAP" onClick="connectBtnClicked()"/> > > +
> > +
> > +
> > + > > + > > + > > + > > + > > +
> > +
> > +
> > > Modified: > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/web.xml > URL: > http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/web.xml?view=diff&rev=475164&r1=475163&r2=475164 > > ============================================================================== > --- > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/web.xml > (original) > +++ > geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/web.xml > Wed Nov 15 00:57:58 2006 > @@ -780,9 +780,27 @@ > console-standard.JMXViewer > > > + > + Automated generated Portlet Wrapper > + Pluto Wrapper for LDAP Viewer > Portlet > + LDAPViewer > + org.apache.pluto.core.PortletServlet > > + > + portlet-class > + > org.apache.geronimo.console.ldapmanager.LDAPManagerPortlet > + > + > + portlet-guid > + console-standard.LDAPViewer > + > + > > > > + > + LDAPViewer > + /LDAPViewer/* > + > > JMXViewer > /JMXViewer/* > > > ------=_Part_44570_6513100.1163582088415 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Source headers of newly added files are not in line with new ASF source header and copyright notice policy.  See GERONIMO-2537.

--vamsi

On 11/15/06, ccardona@apache.org <ccardona@apache.org> wrote:
Author: ccardona
Date: Wed Nov 15 00:57:58 2006
New Revision: 475164

URL: http://svn.apache.org/viewvc?view=rev&rev=475164
Log:
GERONIMO-1823 Add Embedded LDAP Server Viewer Portlet

Added:
    geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/
    geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerHelper.java
    geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerPortlet.java
    geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/
    geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/help.jsp
    geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/viewLDAPServer.jsp
Modified:
    geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/aggregation/Head.jsp
    geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/pageregistry.xml
    geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/portletentityregistry.xml
    geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/dwr.xml
    geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/portlet.xml
    geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/web.xml

Modified: geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/aggregation/Head.jsp
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/aggregation/Head.jsp?view=diff&rev=475164&r1=475163&r2=475164
==============================================================================
--- geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/aggregation/Head.jsp (original)
+++ geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/aggregation/Head.jsp Wed Nov 15 00:57:58 2006
@@ -44,6 +44,7 @@
         dojo.require("dojo.widget.SortableTable ");
         dojo.require("dojo.widget.ComboBox");
         dojo.require("dojo.widget.Tooltip");
+        dojo.require("dojo.widget.validate");
        // Includes Dojo source for debugging
        // dojo.hostenv.writeIncludes();
     </script>

Modified: geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/pageregistry.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/pageregistry.xml?view=diff&rev=475164&r1=475163&r2=475164
==============================================================================
--- geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/pageregistry.xml (original)
+++ geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/pageregistry.xml Wed Nov 15 00:57:58 2006
@@ -608,4 +608,19 @@
         </fragment>
     </fragment>

+    <fragment name="LDAPViewer" type="page">
+        <navigation>
+            <title>LDAP Viewer</title>
+            <description>ico_filetree_16x16.gif View contents of an LDAP server</description>
+        </navigation>
+
+        <fragment name="row1" type="row">
+            <fragment name="col1" type="column">
+                <fragment name="p1" type="portlet">
+                    <property name="portlet" value="5.71"/>
+                </fragment>
+            </fragment>
+        </fragment>
+    </fragment>
+
</portal>

Modified: geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/portletentityregistry.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/portletentityregistry.xml?view=diff&rev=475164&r1=475163&r2=475164
==============================================================================
--- geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/portletentityregistry.xml (original)
+++ geronimo/server/trunk/applications/console/geronimo-console-framework/src/main/webapp/WEB-INF/data/portletentityregistry.xml Wed Nov 15 00:57:58 2006
@@ -148,6 +148,9 @@
         <portlet id="70">
             <definition-id>console-standard.ImportExport</definition-id>
         </portlet>
+        <portlet id="71">
+            <definition-id>console-standard.LDAPViewer</definition-id>
+        </portlet>
         <portlet id="72">
             <definition-id>console-standard.JMXViewer</definition-id>
         </portlet>

Added: geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerHelper.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerHelper.java?view=auto&rev=475164
==============================================================================
--- geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerHelper.java (added)
+++ geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerHelper.java Wed Nov 15 00:57:58 2006
@@ -0,0 +1,446 @@
+/**

+ *

+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.

+ *

+ *  Licensed 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.geronimo.console.ldapmanager;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.Enumeration ;

+import java.util.HashMap;

+import java.util.Hashtable;

+import java.util.List;

+import java.util.Map;

+

+import javax.naming.Context;

+import javax.naming.NameClassPair;

+import javax.naming.NamingEnumeration;

+import javax.naming.NamingException;

+import javax.naming.directory.Attribute;

+import javax.naming.directory.Attributes;

+import javax.naming.directory.DirContext ;

+import javax.naming.directory.InitialDirContext;

+import javax.naming.directory.SearchControls;

+import javax.naming.directory.SearchResult;

+import javax.servlet.http.HttpSession;

+

+import uk.ltd.getahead.dwr.WebContext;

+import uk.ltd.getahead.dwr.WebContextFactory;

+

+/**

+ * The LDAP manager helper

+ */

+public class LDAPManagerHelper {

+    private final static String LDAP_VERSION_KEY = " java.naming.ldap.version";

+

+    private final static String SSL_VALUE = "ssl";

+

+    private final static String NONE_VALUE = "none";

+

+    private final static String INITIAL_CONTEXT_FACTORY_DEFAULT = " com.sun.jndi.ldap.LdapCtxFactory";

+

+    private final static String HOST_DEFAULT = "localhost";

+

+    private final static String PORT_DEFAULT = "1389";

+

+    private final static String BASE_DN_DEFAULT = "ou=system";

+

+    // LDAP Version: "3", "2"

+    private final static String LDAP_VERSION_DEFAULT = "3";

+

+    // Security Protocol: "simple", "ssl", "sasl"

+    private final static String SECURITY_PROTOCOL_DEFAULT = "simple";

+

+    // Security Authentication: "simple", "none", "strong"

+    private final static String SECURITY_AUTHENTICATION_DEFAULT = "simple";

+

+    private final static String SECURITY_PRINCIPAL_DEFAULT = "uid=admin, ou=system";

+

+    private final static String SECURITY_CREDENTIALS_DEFAULT = "secret";

+

+    private final static String ONELEVEL_SCOPE = "onelevel";

+

+    private final static String SUBTREE_SCOPE = "subtree";

+

+    private final static String DIR_CONTEXT_KEY = "LDAPManagerHelper.dirContext";

+

+    private final static String DIR_ENV_KEY = "LDAPManagerHelper.dirEnv";

+

+    private final static String HOST_KEY = "LDAPManagerHelper.host";

+

+    private final static String PORT_KEY = "LDAPManagerHelper.port";

+

+    private final static String BASE_DN_KEY = " LDAPManagerHelper.baseDN";

+

+    private final static String SUCCESS_RESULT = "<SUCCESS>";

+

+    private DirContext dirContext;

+

+    private Hashtable dirEnv;

+

+    private String host;

+

+    private String port;

+

+    private String baseDN;

+

+    /**

+     * Construct an LDAP manager helper using config data (default)

+     */

+    public LDAPManagerHelper() throws Exception {

+        dirContext = (DirContext) getSessionAttribute(DIR_CONTEXT_KEY);

+        if (dirContext == null) {

+            // TODO: Get the default values from configuration / GBean

+            String result = connect(INITIAL_CONTEXT_FACTORY_DEFAULT,

+                    HOST_DEFAULT, PORT_DEFAULT, BASE_DN_DEFAULT,

+                    LDAP_VERSION_DEFAULT, SECURITY_PROTOCOL_DEFAULT,

+                    SECURITY_AUTHENTICATION_DEFAULT,

+                    SECURITY_PRINCIPAL_DEFAULT, SECURITY_CREDENTIALS_DEFAULT);

+            if (!SUCCESS_RESULT.equalsIgnoreCase(result)) {

+                throw new Exception(result);

+            }

+        } else {

+            dirEnv = (Hashtable) getSessionAttribute(DIR_ENV_KEY);

+            host = (String) getSessionAttribute(HOST_KEY);

+            port = (String) getSessionAttribute(PORT_KEY);

+            baseDN = (String) getSessionAttribute(BASE_DN_KEY);

+        }

+    }

+

+    /**

+     * Construct an LDAP manager helper using config data (partial)

+     */

+    public LDAPManagerHelper(String host, String port, String baseDN,

+            String securityAuthentication, String userDN, String userPwd)

+            throws Exception {

+        connect(INITIAL_CONTEXT_FACTORY_DEFAULT, host, port, baseDN,

+                LDAP_VERSION_DEFAULT, SECURITY_PROTOCOL_DEFAULT,

+                securityAuthentication, userDN, userPwd);

+    }

+

+    /**

+     * Construct an LDAP manager helper using config data (all)

+     */

+    public LDAPManagerHelper(String initialContextFactory, String host,

+            String port, String baseDN, String ldapVersion,

+            String securityProtocol, String securityAuthentication,

+            String securityPrincipal, String securityCredentials)

+            throws Exception {

+        connect(initialContextFactory, host, port, baseDN, ldapVersion,

+                securityProtocol, securityAuthentication, securityPrincipal,

+                securityCredentials);

+    }

+

+    /**

+     * Create a directory context using config data

+     */

+    public synchronized String connect(String initialContextFactory,

+            String host, String port, String baseDN, String ldapVersion,

+            String securityProtocol, String securityAuthentication,

+            String securityPrincipal, String securityCredentials)

+            throws Exception {

+        String result = SUCCESS_RESULT;

+

+        Hashtable dirEnv = new Hashtable();

+        dirEnv.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactory);

+        String providerURL = createLDAPURL(host, port, ""); // Empty Base DN

+        dirEnv.put(Context.PROVIDER_URL, providerURL);

+        dirEnv.put(LDAP_VERSION_KEY, ldapVersion);

+        if (SSL_VALUE.equalsIgnoreCase(securityProtocol)) {

+            dirEnv.put (Context.SECURITY_PROTOCOL, SSL_VALUE);

+        }

+        dirEnv.put(Context.SECURITY_AUTHENTICATION, securityAuthentication);

+        if (!(NONE_VALUE.equalsIgnoreCase(securityAuthentication))) {

+            // Either "simple" or "strong"

+            dirEnv.put(Context.SECURITY_PRINCIPAL, securityPrincipal); // User DN

+            dirEnv.put(Context.SECURITY_CREDENTIALS, securityCredentials); // Password

+        }

+

+        try {

+            DirContext newDirContext = new InitialDirContext(dirEnv);

+            // Close old context

+            if (dirContext != null) {

+                dirContext.close();

+            }

+            // Save directory data to class vars

+            this.dirContext = newDirContext;

+            this.dirEnv = dirEnv;

+            this.host = host;

+            this.port = port;

+            this.baseDN = baseDN;

+            // Save directory data to session

+            setSessionAttribute(DIR_CONTEXT_KEY, dirContext);

+            setSessionAttribute(DIR_ENV_KEY, dirEnv);

+            setSessionAttribute(HOST_KEY, host);

+            setSessionAttribute(PORT_KEY, port);

+            setSessionAttribute(BASE_DN_KEY, baseDN);

+        } catch (NamingException e) {

+            result = "Problem connecting to directory server: "

+                    + e.getMessage();

+        }

+

+        return result;

+    }

+

+    /**

+     * Return directory context environment

+     */

+    public Map getEnvironment() {

+        Map env = new HashMap();

+        env.put("host", host);

+        env.put("port", port);

+        String ldapVersion = (String) dirEnv.get(LDAP_VERSION_KEY);

+        env.put("ldapVersion", ldapVersion);

+        env.put("baseDN", baseDN);

+        String securityProtocol = (String) dirEnv

+                .get(Context.SECURITY_PROTOCOL );

+        env.put("securityProtocol", securityProtocol);

+        String securityAuthentication = (String) dirEnv

+                .get(Context.SECURITY_AUTHENTICATION);

+        env.put ("securityAuthentication", securityAuthentication);

+        String securityPrincipal = (String) dirEnv

+                .get(Context.SECURITY_PRINCIPAL);

+        env.put("securityPrincipal", securityPrincipal);

+

+        return env;

+    }

+

+    /**

+     * Returns the names bound in the named context

+     */

+    public Collection list(String name) throws Exception {

+        ArrayList result = new ArrayList();

+

+        try {

+            NamingEnumeration list = dirContext.list(name); // can't be ""

+

+            while (list.hasMore()) {

+                NameClassPair ncp = (NameClassPair) list.next();

+                String childName = ncp.getName();

+                String dn = childName + ", " + name;

+                String[] pair = { childName, dn };

+                result.add(pair);

+            }

+        } catch (NamingException e) {

+            throw new Exception("Problem getting directory list: "

+                    + e.getMessage());

+        }

+

+        return result;

+    }

+

+    /**

+     * Returns the names bound in the base DN context

+     */

+    public Collection listBaseDN() throws Exception {

+        return list(baseDN);

+    }

+

+    /**

+     * Enumerates the names bound in the named context and return result as JSON

+     */

+    public String listJSON(String name) throws Exception {

+        return listJSON(name, null);

+    }

+

+    /**

+     * Enumerates the names bound in the named context and return result as JSON

+     */

+    public String listJSON(String name, String commonFields) throws Exception {

+        // JSON: [{title:"Title1",isFolder:true}, {title:"Title2"}]

+

+        StringBuffer json = new StringBuffer();

+        List list = (List) list(name);

+

+        json.append('[');

+        int size = list.size();

+        for (int i = 0; i < size; i++) {

+            String[] entry = (String[]) list.get(i);

+            json.append("{title:\"");

+            json.append(entry[0]);

+            json.append("\",widgetId:\"");

+            json.append(entry[1]);

+            json.append("\"");

+            if (commonFields != null) { // TODO: Do additional testing

+                json.append(commonFields);

+            }

+            json.append("}");

+            if ((i + 1) < size) {

+                json.append(',');

+            }

+        }

+        json.append("]");

+

+        return json.toString();

+    }

+

+    /**

+     * Return the attributes of an LDAP entry

+     */

+    public Collection getAttributes(String name) throws Exception {

+        ArrayList result = new ArrayList();

+        try {

+            Attributes attribs = dirContext.getAttributes(name);

+            NamingEnumeration attributes = attribs.getAll();

+            while (attributes.hasMore()) {

+                Attribute attribute = (Attribute) attributes.next();

+                String id = attribute.getID();

+                NamingEnumeration values = attribute.getAll();

+                while (values.hasMore()) {

+                    String value = values.next().toString();

+                    String[] pair = { id, value };

+                    result.add(pair);

+                }

+            }

+        } catch (NamingException e) {

+            throw new Exception("Problem retrieving attributes: "

+                    + e.getMessage());

+        }

+        return result;

+    }

+

+    /**

+     * Execute an LDAP search

+     */

+    public Collection search(String searchDN, String filter, String searchScope)

+            throws Exception {

+        ArrayList result = new ArrayList();

+        try {

+            String ldapURL = createLDAPURL(host, port, searchDN);

+            SearchControls sc = new SearchControls();

+            if (ONELEVEL_SCOPE.equalsIgnoreCase(searchScope)) {

+                sc.setSearchScope(SearchControls.ONELEVEL_SCOPE);

+            } else if (SUBTREE_SCOPE.equalsIgnoreCase(searchScope)) {

+                sc.setSearchScope(SearchControls.SUBTREE_SCOPE);

+            } else {

+                // Default to one level scope

+                sc.setSearchScope(SearchControls.ONELEVEL_SCOPE );

+            }

+            // Filter: "(objectclass=*)"

+            boolean isSearchDNAdded = false;

+            NamingEnumeration ne = dirContext.search(ldapURL, filter, sc);

+            while (ne.hasMore()) {

+                SearchResult sr = (SearchResult) ne.next();

+                String name = sr.getName();

+                String dn = null;

+                if (name.length() > 0) {

+                    dn = name + "," + searchDN;

+                    result.add(dn);

+                } else if ((name.length() == 0) && !isSearchDNAdded) {

+                    dn = searchDN;

+                    result.add(dn);

+                    isSearchDNAdded = true;

+                }

+            }

+        } catch (NamingException e) {

+            throw new Exception("Problem performing directory search: "

+                    + e.getMessage());

+        }

+        return result;

+    }

+

+    /**

+     * Close directory context

+     */

+    public void close() throws Exception {

+        try {

+            dirContext.close();

+        } catch (NamingException e) {

+            throw new Exception("Problem closing directory context: "

+                    + e.getMessage());

+        }

+    }

+

+    /**

+     * Return base DN of this directory context

+     */

+    public String getBaseDN() {

+        return baseDN;

+    }

+

+    /**

+     * Create an LDAP url using host, port, and base DN

+     */

+    private String createLDAPURL(String host, String port, String baseDN) {

+        StringBuffer url = new StringBuffer();

+        url.append("ldap://");

+        url.append(host);

+        url.append(':');

+        url.append(port);

+        if ((baseDN != null) && (baseDN.length() >= 3)) {

+            if (!baseDN.startsWith("/")) {

+                url.append('/');

+            }

+            url.append(baseDN);

+        }

+        return url.toString();

+    }

+

+    /**

+     * Get the HTTP session

+     */

+    private HttpSession getSession() {

+        WebContext ctx = WebContextFactory.get();

+        HttpSession session = ctx.getSession();

+        return session;

+    }

+

+    /**

+     * Set an HTTP session attribute

+     */

+    private void setSessionAttribute(String name, Object value) {

+        getSession().setAttribute(name, value);

+    }

+

+    /**

+     * Get an HTTP session attribute

+     */

+    private Object getSessionAttribute(String name) {

+        return getSession().getAttribute(name);

+    }

+

+    /**

+     * Dump HTTP session attributes

+     */

+    private void dumpSession() {

+        System.out.println ("--- dumpSession()");

+        WebContext ctx = WebContextFactory.get();

+        HttpSession session = ctx.getSession();

+        Enumeration attribNames = session.getAttributeNames();

+        while (attribNames.hasMoreElements()) {

+            String attribName = (String) attribNames.nextElement();

+            System.out.print("--- session: " + attribName + " = ");

+            Object attribValue = session.getAttribute(attribName);

+            System.out.println(attribValue);

+        }

+    }

+

+    /**

+     * Dump search enumeration

+     */

+    private void printSearchEnumeration(NamingEnumeration ne) {

+        try {

+            while (ne.hasMore()) {

+                SearchResult sr = (SearchResult) ne.next();

+                System.out.println("-->" + sr.getName());

+                System.out.println(sr.getAttributes());

+            }

+        } catch (NamingException e) {

+            e.printStackTrace();

+        }

+    }

+

+}


Added: geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerPortlet.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerPortlet.java?view=auto&rev=475164
==============================================================================
--- geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerPortlet.java (added)
+++ geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/java/org/apache/geronimo/console/ldapmanager/LDAPManagerPortlet.java Wed Nov 15 00:57:58 2006
@@ -0,0 +1,113 @@
+/**

+ *

+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.

+ *

+ *  Licensed 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.geronimo.console.ldapmanager;

+

+import java.io.IOException;

+import java.io.PrintWriter;

+

+import javax.portlet.ActionRequest;

+import javax.portlet.ActionResponse;

+import javax.portlet.PortletConfig;

+import javax.portlet.PortletContext ;

+import javax.portlet.PortletException;

+import javax.portlet.PortletRequestDispatcher;

+import javax.portlet.RenderRequest;

+import javax.portlet.RenderResponse;

+import javax.portlet.WindowState ;

+

+import org.apache.geronimo.console.BasePortlet;

+

+/**

+ * The LDAP manager portlet

+ */

+public class LDAPManagerPortlet extends BasePortlet {

+    private static final String VIEWLDAPSERVER_ACTION = "viewLDAPServer";

+

+    private static final String VIEWLDAPSERVER_JSP = "/WEB-INF/view/ldapmanager/viewLDAPServer.jsp";

+

+    private static final String HELP_JSP = "/WEB-INF/view/ldapmanager/help.jsp";

+

+    private PortletRequestDispatcher viewLDAPServerView;

+

+    private PortletRequestDispatcher helpView;

+

+    private static LDAPManagerHelper helper = null /* new LDAPManagerHelper() */;

+

+    /**

+     * Process an action request

+     */

+    public void processAction(ActionRequest actionRequest,

+            ActionResponse actionResponse) throws PortletException, IOException {

+    }

+

+    /**

+     * Serve up the view mode

+     */

+    protected void doView(RenderRequest renderRequest,

+            RenderResponse renderResponse) throws IOException, PortletException {

+        if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) {

+            return;

+        } else if (WindowState.NORMAL.equals( renderRequest.getWindowState())) {

+            String action = renderRequest.getParameter("action");

+            if (action == null) {

+                action = VIEWLDAPSERVER_ACTION;

+            }

+            if (VIEWLDAPSERVER_ACTION.equals(action)) {

+                viewLDAPServerView.include(renderRequest, renderResponse);

+            } else {

+                renderResponse.setContentType("text/html");

+                PrintWriter out = renderResponse.getWriter();

+                String errorMsg = "Invalid action message: " + action;

+                out.println(errorMsg);

+            }

+        } else if (WindowState.MAXIMIZED.equals(renderRequest.getWindowState())) {

+            renderResponse.setContentType("text/html");

+            PrintWriter out = renderResponse.getWriter();

+            String errorMsg = "Invalid window state: "

+                    + renderRequest.getWindowState();

+            out.println(errorMsg);

+        }

+    }

+

+    /**

+     * Serve up the help mode

+     */

+    protected void doHelp(RenderRequest renderRequest,

+            RenderResponse renderResponse) throws PortletException, IOException {

+        helpView.include(renderRequest, renderResponse);

+    }

+

+    /**

+     * Portlet is being placed into service

+     */

+    public void init(PortletConfig portletConfig) throws PortletException {

+        super.init(portletConfig);

+        PortletContext pc = portletConfig.getPortletContext();

+        viewLDAPServerView = pc.getRequestDispatcher(VIEWLDAPSERVER_JSP);

+        helpView = pc.getRequestDispatcher(HELP_JSP);

+    }

+

+    /**

+     * Portlet is being taken out of service

+     */

+    public void destroy() {

+        viewLDAPServerView = null;

+        helpView = null;

+        super.destroy();

+    }

+}


Modified: geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/dwr.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/dwr.xml?view=diff&rev=475164&r1=475163&r2=475164
==============================================================================
--- geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/dwr.xml (original)
+++ geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/dwr.xml Wed Nov 15 00:57:58 2006
@@ -15,5 +15,8 @@
     <create creator="new" javascript="JMXHelper">
       <param name="class" value="org.apache.geronimo.console.jmxmanager.JMXManagerHelper"/>
     </create>
+    <create creator="new" javascript="LDAPHelper">
+      <param name="class" value="org.apache.geronimo.console.ldapmanager.LDAPManagerHelper"/>
+    </create>
   </allow>
</dwr>

Modified: geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/portlet.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/portlet.xml?view=diff&rev=475164&r1=475163&r2=475164
==============================================================================
--- geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/portlet.xml (original)
+++ geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/portlet.xml Wed Nov 15 00:57:58 2006
@@ -1137,5 +1137,29 @@
         </portlet-info>
     </portlet>

+    <portlet>
+        <description>Portlet for viewing LDAP server contents</description>
+        <portlet-name>LDAPViewer</portlet-name>
+        <display-name>LDAP Viewer Portlet</display-name>
+
+        <portlet-class>org.apache.geronimo.console.ldapmanager.LDAPManagerPortlet</portlet-class>
+
+        <expiration-cache>-1</expiration-cache>
+
+        <supports>
+            <mime-type>text/html</mime-type>
+            <portlet-mode>VIEW</portlet-mode>
+            <portlet-mode>HELP</portlet-mode>
+        </supports>
+
+        <supported-locale>en</supported-locale>
+
+        <portlet-info>
+            <title>LDAP Viewer</title>
+            <short-title>LDAP Viewer</short-title>
+            <keywords>LDAP Viewer</keywords>
+        </portlet-info>
+    </portlet>
+
     <!-- End of console portlets -->
</portlet-app>

Added: geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/help.jsp
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/help.jsp?view=auto&rev=475164
==============================================================================
--- geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/help.jsp (added)
+++ geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/help.jsp Wed Nov 15 00:57:58 2006
@@ -0,0 +1,27 @@
+<%--

+  Copyright 2006 The Apache Software Foundation or its licensors, as applicable.

+

+  Licensed 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.

+--%>

+

+<!-- LDAP Viewer portlet help page -->

+

+<p>The LDAP viewer portlet can be used to do the following:

+<ul>

+    <li>Connect to any LDAP server and explore its contents (default is the Embedded LDAP server - Apache DS)

+    <li>View the attributes of an entry

+    <li>Do an LDAP search on a particular entry

+    <li>Refresh any entry to get the latest data from the directory server

+    <li>View the LDAP connection environment data

+</ul>

+<p>Note: Right-click to any tree node to view the context menu for performing different actions.


Added: geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/viewLDAPServer.jsp
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/viewLDAPServer.jsp?view=auto&rev=475164
==============================================================================
--- geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/viewLDAPServer.jsp (added)
+++ geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/view/ldapmanager/viewLDAPServer.jsp Wed Nov 15 00:57:58 2006
@@ -0,0 +1,648 @@
+<%--

+  Copyright 2006 The Apache Software Foundation or its licensors, as applicable.

+

+  Licensed 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.

+--%>

+

+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

+<%@ taglib uri=" http://java.sun.com/portlet" prefix="portlet" %>

+<%@ page import="org.apache.geronimo.console.util.PortletManager" %>

+<portlet:defineObjects/>

+

+<%

+    // LDAP icon

+    String consoleFrameworkContext = PortletManager.getConsoleFrameworkServletPath(request);

+    String ldapIconURI = consoleFrameworkContext + "/../images/ico_filetree_16x16.gif";

+%>

+

+<!-- DOJO Stuff -->

+<script>

+/* Global vars */

+var _selectedNode = null; // Selected tree node

+var _baseDN = null;       // Base distinguised name

+

+/* Get selected node */

+function getSelectedNode() {

+    var tree = dojo.widget.byId('ldapTree');

+    var selectedNode = tree.selector.selectedNode;

+    return selectedNode;

+}

+

+/* Select tab */

+function selectTab(tabID) {

+    var mainTabContainer = dojo.widget.byId('mainTabContainer');

+    var tab = dojo.widget.byId(tabID);

+    mainTabContainer.selectTab (tab);

+}

+

+/* Init stuff */

+dojo.addOnLoad(

+    function() {

+        /* Init LDAP tree */

+        LDAPHelper.getBaseDN(<portlet:namespace/>initLDAPTree);

+

+        /* Init LDAP connection info tab */

+        if (_baseDN != null) {

+            LDAPHelper.getEnvironment(<portlet:namespace/>initConnectInfoTab);

+        }

+

+        /* Tree click event handler */

+        var treeController = dojo.widget.manager.getWidgetById('treeController');

+        dojo.event.connect(

+            'before',

+            treeController,

+            'onTreeClick',

+            {

+                beforeTreeClick: function(evt) {

+                    var selectedNode = evt.source;

+                    if ((selectedNode.state == 'UNCHECKED') && (selectedNode.isExpanded == false)) {

+                        // Add children

+                        _selectedNode = selectedNode;

+                        LDAPHelper.list(<portlet:namespace/>updateLDAPTree, _selectedNode.widgetId);

+                    }

+                }

+            },

+            'beforeTreeClick'

+        );

+

+               /* Tree node title click event handler */

+               var tree = dojo.widget.manager.getWidgetById('ldapTree');

+               dojo.event.topic.subscribe (

+                       tree.eventNames.titleClick,

+                       function(message) {

+                           var dn = message.source.widgetId;

+                           LDAPHelper.getAttributes(<portlet:namespace/>updateAttributesTable, dn);

+                       }

+               );

+

+        /* Tree context menu event handler: 'Refresh' */

+               dojo.event.topic.subscribe(

+                   'treeContextMenuRefresh/engage',

+                       function (menuItem) {

+                           var selectedNode = getSelectedNode();

+                if (selectedNode == null) {

+                    alert('Please select a tree node.');

+                    return;

+                }

+                           if ((selectedNode.state == 'UNCHECKED') && (selectedNode.isExpanded == false)) {

+                               // Unchecked tree node, do nothing

+                } else {

+                    // Remove children

+                    var treeController = dojo.widget.byId('treeController');

+                           var children = selectedNode.children;

+                           while (children.length > 0) {

+                               var node = children[0];

+                               treeController.removeNode(node);

+                        node.destroy();

+                           }

+                           // Add children

+                           _selectedNode = selectedNode;

+                           LDAPHelper.list(<portlet:namespace/>updateLDAPTree, _selectedNode.widgetId);

+               }

+            }

+               );

+

+        /* Tree context menu event handler: 'Search...' */

+               dojo.event.topic.subscribe(

+                   'treeContextMenuSearch/engage',

+                       function (menuItem) {

+                           var selectedNode = getSelectedNode();

+                if (selectedNode == null) {

+                    alert('Please select a tree node.');

+                    return;

+                }

+                           selectTab('searchTab');

+                           // Set Search DN

+                           document.LDAPSearchForm.searchDN.value = selectedNode.widgetId;

+                       }

+               );

+

+        /* Tree context menu event handler: 'View Entry' */

+               dojo.event.topic.subscribe(

+                   'treeContextMenuViewEntry/engage',

+                       function (menuItem) {

+                           var selectedNode = getSelectedNode();

+                if (selectedNode == null) {

+                    alert('Please select a tree node.');

+                    return;

+                }

+                           selectTab('attributesTab');

+            }

+               );

+

+        /* Tree context menu event handler: 'Connect Info' */

+               dojo.event.topic.subscribe(

+                   'treeContextMenuConnectInfo/engage',

+                       function (menuItem) {

+                           var selectedNode = getSelectedNode();

+                if (selectedNode == null) {

+                    alert('Please select a tree node.');

+                    return;

+                }

+                           selectTab('connectInfoTab');

+            }

+               );

+    }

+);

+

+/* Anonymous bind checkbox clicked even handler */

+function anonBindChkboxClicked() {

+    var isAnonBind = document.LDAPConnectForm.anonBind.checked;

+    document.LDAPConnectForm.userDN.disabled = isAnonBind;

+    document.LDAPConnectForm.password.disabled = isAnonBind;

+}

+

+/* Restore Default button clicked event handler */

+function restoreDefaultBtnClicked() {

+    // Restore default connection properties (Embedded Apache DS)

+    document.LDAPConnectForm.host.value = 'localhost';

+    document.LDAPConnectForm.port.value = '1389';

+    document.LDAPConnectForm.ldapVersion[0].checked = true;

+    document.LDAPConnectForm.ldapVersion[1].checked = false;

+     document.LDAPConnectForm.baseDN.value = 'ou=system';

+    document.LDAPConnectForm.ssl.checked = false;

+    document.LDAPConnectForm.anonBind.checked = false;

+    document.LDAPConnectForm.userDN.value = 'uid=admin, ou=system';

+    document.LDAPConnectForm.password.value = '';

+    document.LDAPConnectForm.userDN.disabled = false;

+    document.LDAPConnectForm.password.disabled = false;

+}

+

+/* Connect button clicked event handler */

+function connectBtnClicked() {

+    // TODO: Add validation

+    var initialContextFactory = 'com.sun.jndi.ldap.LdapCtxFactory';

+    var host = document.LDAPConnectForm.host.value;

+    var port = document.LDAPConnectForm.port.value;

+    var ldapVersion;

+    if (document.LDAPConnectForm.ldapVersion[0].checked) {

+        ldapVersion = '3';

+    } else {

+        ldapVersion = '2';

+    }

+    var baseDN = document.LDAPConnectForm.baseDN.value;

+    var securityProtocol = '';

+    if (document.LDAPConnectForm.ssl.checked ) {

+        securityProtocol = 'ssl';

+    }

+    var securityAuthentication = 'simple';

+    var securityPrincipal;

+    var securityCredentials;

+    if (document.LDAPConnectForm.anonBind.checked ) {

+        securityAuthentication = 'none';

+        securityPrincipal = '';

+        securityCredentials = '';

+    } else {

+        securityAuthentication = 'simple';

+        securityPrincipal = document.LDAPConnectForm.userDN.value;

+        securityCredentials = document.LDAPConnectForm.password.value;

+    }

+

+    // DEBUG: Connect Info

+    var connectInfoStr =

+        'initialContextFactory:' + initialContextFactory +

+        '\nhost:' + host +

+        '\nport:' + port +

+        '\nldapVersion:' + ldapVersion +

+        '\nbaseDN:' + baseDN +

+        '\nsecurityProtocol:' + securityProtocol +

+        '\nsecurityAuthentication:' + securityAuthentication +

+        '\nsecurityPrincipal:' + securityPrincipal +

+        '\nsecurityCredentials:' + securityCredentials;

+    // alert(connectInfoStr);

+

+    // Connect to new LDAP server

+    LDAPHelper.connect(

+        function(result) {

+            // TODO: Check result

+            if (result == '<SUCCESS>') {

+                window.location = '<portlet:actionURL />';

+            } else {

+                // Display error

+                alert(result + '\n** Make sure LDAP server is running and/or connection properties are correct.');

+            }

+        },

+        initialContextFactory,

+        host,

+        port,

+        baseDN,

+        ldapVersion,

+        securityProtocol,

+        securityAuthentication,

+        securityPrincipal,

+        securityCredentials

+    );

+}

+

+/* Search button clicked event handler */

+function searchBtnClicked() {

+    var searchDN = document.LDAPSearchForm.searchDN.value;

+    var filter = document.LDAPSearchForm.filter.value;

+    var scope;

+    if (document.LDAPSearchForm.searchScope[0].checked) {

+        scope = 'onelevel';

+    } else {

+        scope = 'subtree';

+    }

+    LDAPHelper.search(<portlet:namespace/>updateSearchResultTable, searchDN, filter, scope);

+}

+

+/* Clear result button clicked event handler */

+function clearResultBtnClicked() {

+    DWRUtil.removeAllRows('searchResultTableBody');

+    DWRUtil.setValue('searchResultCount', '');

+}

+</script>

+

+<style>

+body .dojoHtmlSplitterPanePanel {

+       background: white;

+       overflow: auto;

+}

+

+span.invalid, span.missing , span.range {

+       display: inline;

+       margin-left: 1em;

+       font-weight: bold;

+       font-style: italic;

+       font-family: Arial, Verdana, sans-serif;

+       color: #f66;

+       font-size: 0.9em;

+}

+</style>

+

+<!-- DWR Stuff -->

+<% String dwrForwarderServlet = PortletManager.getConsoleFrameworkServletPath(request) + "/../dwr"; %>

+<script type='text/javascript' src='<%= dwrForwarderServlet %>/interface/LDAPHelper.js'></script>

+<script type='text/javascript' src='<%= dwrForwarderServlet %>/engine.js'></script>

+<script type='text/javascript' src='<%= dwrForwarderServlet %>/util.js'></script>

+

+<script>

+/* Sync calls */

+DWREngine.setAsync(false);

+

+/* Generic error handler */

+DWREngine.setErrorHandler(

+    function (errorString) {

+        alert('Error: ' + errorString + '\n** Make sure LDAP server is running and/or connection properties are correct.');

+        selectTab('connectInfoTab');

+    }

+);

+

+/* Table render option */

+var tableOption = {

+    rowCreator: function(options) {

+        var row = document.createElement('tr');

+        return row;

+    },

+    cellCreator: function(options) {

+        var td = document.createElement('td');

+        if (( options.rowIndex % 2) == 0) {

+            td.style.backgroundColor = '#FFFFFF';

+        } else {

+            td.style.backgroundColor = '#F2F2F2';

+        }

+        return td;

+    }

+}

+

+/* Update attributes table */

+function <portlet:namespace/>updateAttributesTable(attributes) {

+    DWRUtil.removeAllRows('attributesTableBody');

+    DWRUtil.addRows (

+        'attributesTableBody',

+        attributes,

+        [

+            function(attribute) { /* Attribute Name Column */

+                return attribute[0];

+            },

+            function(attribute) { /* Attribute Value Column */

+                return attribute[1];

+            }

+        ],

+        tableOption

+    );

+}

+

+/* Update search result table */

+function <portlet:namespace/>updateSearchResultTable(searchResult) {

+    DWRUtil.removeAllRows('searchResultTableBody');

+    DWRUtil.addRows(

+        'searchResultTableBody',

+        searchResult,

+        [

+            function(dn) { /* Distinguished Name Column */

+                return dn;

+            }

+        ],

+        tableOption

+    );

+    DWRUtil.setValue('searchResultCount', searchResult.length + ' entries returned...');

+}

+

+/* Update LDAP tree */

+function <portlet:namespace/>updateLDAPTree(entries) {

+    for (var i = 0; i < entries.length; i++) {

+        var entry = entries[i];

+        var newNode = dojo.widget.createWidget(

+            'TreeNode',

+            {title: entry[0], widgetId: entry[1], isFolder: true, childIconSrc:'<%= ldapIconURI %>'}

+        );

+               _selectedNode.addChild(newNode);

+    }

+    _selectedNode.state = 'LOADED';

+}

+

+/* Init LDAP tree */

+function <portlet:namespace/>initLDAPTree(baseDN) {

+    _baseDN = baseDN;

+    var tree = dojo.widget.byId('ldapTree');

+       var rootNode = dojo.widget.createWidget(

+           'TreeNode',

+           {title: baseDN, widgetId: baseDN, isFolder: true, childIconSrc:'<%= ldapIconURI %>'}

+       );

+       tree.addChild(rootNode);

+    var controller = dojo.widget.byId('treeController');

+    controller.expand(rootNode);

+    _selectedNode = rootNode;

+    LDAPHelper.list(<portlet:namespace/>updateLDAPTree, _selectedNode.widgetId);

+

+    // Select node

+    var treeSelector = dojo.widget.byId("treeSelector");

+    if (getSelectedNode() != null) {

+        treeSelector.deselect();

+    }

+    treeSelector.doSelect(rootNode);

+

+    // Select attributes tab

+    selectTab('attributesTab');

+

+    // Update attributes table

+    var dn = rootNode.widgetId;

+       LDAPHelper.getAttributes(<portlet:namespace/>updateAttributesTable, dn);

+

+       // Update Search tab's 'Search DN' field

+       document.LDAPSearchForm.searchDN.value = baseDN;

+}

+

+/* Init LDAP connection info tab */

+function <portlet:namespace/>initConnectInfoTab(env) {

+    var host = env['host'];

+    document.LDAPConnectForm.host.value = host;

+    var port = env['port'];

+    document.LDAPConnectForm.port.value = port;

+    var version = env['ldapVersion'];

+    if (version == '3') {

+        document.LDAPConnectForm.ldapVersion [0].checked = true;

+    } else if (version == '2') {

+        document.LDAPConnectForm.ldapVersion[1].checked = true;

+    }

+    var baseDN = env['baseDN'];

+    document.LDAPConnectForm.baseDN.value = baseDN;

+    var securityProtocol = env['securityProtocol'];

+    if ((securityProtocol != null) && (securityProtocol == 'ssl')) {

+        // SSL

+        document.LDAPConnectForm.ssl.checked = true;

+    }

+    var securityAuthentication = env['securityAuthentication'];

+    if ((securityAuthentication != null) && (securityAuthentication == 'none')) {

+        // Anonymous bind

+        document.LDAPConnectForm.anonBind.checked = true;

+        document.LDAPConnectForm.userDN.value = '';

+    } else {

+        var securityPrincipal = env['securityPrincipal'];

+        document.LDAPConnectForm.userDN.value = securityPrincipal;

+    }

+}

+

+/* Prints 'LOADING' message while waiting for DWR method calls */

+function init() {

+    DWRUtil.useLoadingMessage ();

+}

+

+function callOnLoad(load) {

+    if (window.addEventListener) {

+        window.addEventListener('load', load, false);

+    } else if (window.attachEvent) {

+         window.attachEvent('onload', load);

+    } else {

+        window.onload = load;

+    }

+}

+

+callOnLoad(init);

+</script>

+

+<div dojoType="TreeContextMenu" toggle="explode" contextMenuForWindow="false" widgetId="treeContextMenu">

+       <div dojoType="TreeMenuItem" treeActions="refreshNode" widgetId="treeContextMenuRefresh" caption="Refresh" ></div>

+       <div dojoType="TreeMenuItem" treeActions="searchNode" widgetId="treeContextMenuSearch" caption="Search..."></div>

+       <div dojoType="TreeMenuItem" treeActions="viewEntry" widgetId="treeContextMenuViewEntry" caption="View Entry"></div>

+       <div dojoType="TreeMenuItem" treeActions="viewConnectInfo" widgetId="treeContextMenuConnectInfo" caption="Connect Info"></div>

+</div>

+

+<div dojoType="TreeSelector" widgetId="treeSelector"></div>

+<div dojoType="TreeBasicController" widgetId="treeController"></div>

+

+<!-- Main layout container -->

+<div dojoType="LayoutContainer"

+       layoutChildPriority='left-right'

+       id="mainLayout"

+       style="height: 500px;">

+

+    <!-- Horizontal split container -->

+       <div dojoType="SplitContainer"

+               orientation="horizontal"

+               sizerWidth="5"

+               activeSizing="1"

+               layoutAlign="client">

+

+               <!-- LDAP tree -->

+        <div dojoType="Tree"

+            toggle="fade"

+            layoutAlign="flood"

+                       sizeMin="60"

+                       sizeShare="40"

+            widgetId="ldapTree"

+            selector="treeSelector"

+            controller="treeController"

+            expandLevel="0"

+            menu="treeContextMenu"

+            strictFolders="false">

+            <!-- Nodes will be added programmatically -->

+        </div>

+

+        <!-- Main tab container -->

+       <div id="mainTabContainer"

+           dojoType="TabContainer"

+           selectedTab="attributesTab"

+           style="overflow: auto"

+           sizeShare="60">

+

+            <!-- Attributes tab -->

+               <div id="attributesTab" dojoType="ContentPane" title="LDAP Entry Attributes" label="Attributes">

+                <br>

+                <table width="100%">

+                    <tr>

+                        <td class="DarkBackground" align="center" width="40%">Name</td>

+                        <td class="DarkBackground" align="center" width="60%">Value</td>

+                    </tr>

+                    <tbody id="attributesTableBody">

+                    </tbody>

+                </table>

+               </div> <!-- Attributes tab -->

+

+            <!-- Search tab -->

+               <div id="searchTab" dojoType="ContentPane" title = "" label="Search">

+                   <br>

+                <form NAME="LDAPSearchForm">

+                       <table>

+                        <tr>

+                            <td nowrap align="right">Search DN:</td>

+                            <td><input type="text" name="searchDN" value="" size="45"/></td>

+                        </tr>

+                        <tr>

+                            <td nowrap align="right">Filter:</td>

+                            <td><input type="text" name="filter" value="(objectclass=*)" size="45"/></td>

+                        </tr>

+                        <tr>

+                            <td nowrap align="right">&nbsp;Search scope:</td>

+                            <td>

+                                <INPUT type="radio" name="searchScope" value="onelevel" checked> One level

+                                <INPUT type="radio" name="searchScope" value="subtree"> Sub-tree level

+                            </td>

+                        </tr>

+                        <tr>

+                            <td colspan="2">&nbsp;</td>

+                        </tr>

+                        <tr>

+                            <td align="left" colspan="2">

+                                &nbsp;<input type="button" value="Search" name="ldapSearch" onClick="searchBtnClicked()"/>

+                                &nbsp;<input type="button" value="Clear Result" name="clearResult" onClick="clearResultBtnClicked()"/>

+                                &nbsp;&nbsp;<span id='searchResultCount'></span>

+                            </td>

+                        </tr>

+                    </table>

+                </form>

+                <hr>

+                <table width="100%">

+                  <tr>

+                    <td class="DarkBackground" align="center">DN</td>

+                  </tr>

+                  <tbody id="searchResultTableBody">

+                  </tbody>

+                </table>

+            </div> <!-- Search tab -->

+

+            <!-- Connection Info tab -->

+               <div id="connectInfoTab" dojoType="ContentPane" title = "" label="Connect Info">

+                   <br>

+                <form NAME="LDAPConnectForm">

+                       <table>

+                        <tr>

+                            <td nowrap align="right">Host:</td>

+                            <td>

+                                <input type="text" name="host" value="localhost" size="40"

+                                                       dojoType="ValidationTextbox"

+                                                       required="true"

+                                                       trim="true"

+                                       uppercase: false,

+                                       lowercase: false,

+                                       ucFirst: false,

+                                       digit: false,

+                                                       missingMessage="<br>* Host is required." />

+                            </td>

+                        </tr>

+                        <tr>

+                            <td nowrap align="right">Port:</td>

+                            <td>

+                                <input type="text" name="port" value="1389" size="40"

+                                                       dojoType="IntegerTextbox"

+                                                       required="true"

+                                                       trim="true"

+                                                       digit="true"

+                                                       min="0"

+                                                       max="65535"

+                                                       missingMessage="<br>* Port is required."

+                                    invalidMessage="<br>* The value entered is not valid."

+                                    rangeMessage="<br>* This value is out of range use 0 - 65535." />

+                            </td>

+                        </tr>

+                        <tr>

+                            <td nowrap align="right">Version:</td>

+                            <td>

+                                <INPUT type="radio" name="ldapVersion" value="3" checked> 3

+                                <INPUT type="radio" name="ldapVersion" value="2"> 2

+                            </td>

+                        </tr>

+                        <tr>

+                            <td nowrap align="right">Base DN:</td>

+                            <td>

+                                <input type="text" name="baseDN" value="ou=system" size="40"

+                                                       dojoType="ValidationTextbox"

+                                                       required="true"

+                                                       trim="true"

+                                                       missingMessage="<br>* Base DN is required." />

+                            </td>

+                        </tr>

+                        <tr>

+                            <td nowrap align="right">SSL:</td>

+                            <td><input type="checkbox" name="ssl" value="" size="40"></td>

+                        </tr>

+                        <tr>

+                            <td nowrap align="right">&nbsp;Anonymous Bind:</td>

+                            <td><input type="checkbox" name="anonBind" value="" size="40" onclick="javascript:anonBindChkboxClicked()"></td>

+                        </tr>

+                        <tr>

+                            <td nowrap align="right">User DN:</td>

+                            <td>

+                                <input type="text" name="userDN" value="uid=admin, ou=system" size="40"

+                                                       dojoType="ValidationTextbox"

+                                                       required="true"

+                                                       trim="true"

+                                                       missingMessage="<br>* User DN is required." />

+                            </td>

+                        </tr>

+                        <tr>

+                            <td nowrap align="right">Password:</td>

+                            <td><input type="password" name="password" value="" size="40"></td>

+                        </tr>

+                        <tr>

+                            <td align="right" colspan="2">

+                                &nbsp;<input type="button" value="Restore Default" name="defaultLDAP" onClick="restoreDefaultBtnClicked()"/>

+                                &nbsp;<input type="button" value="Connect" name="connectLDAP" onClick="connectBtnClicked()"/>

+                            </td>

+                        </tr>

+                    </table>

+                </form>

+            </div> <!-- Connection Info tab -->

+

+            <!-- Help tab -->

+               <!--

+               <div id="helpTab" dojoType="ContentPane" title="Help Information" label="Help">

+                <br>

+                <p>The LDAP viewer portlet can be used to do the following:

+                <ul>

+                    <li>Connect to any LDAP server and explore its contents (default is the Embedded LDAP server - Apache DS)

+                    <li>View the attributes of an entry

+                    <li>Do an LDAP search on a particular entry

+                    <li>Refresh any entry to get the latest data from the directory server

+                    <li>View the LDAP connection environment data

+                </ul>

+                <p>Note: Right-click to any tree node to view the context menu for performing different actions.

+               </div>

+               -->

+               <!-- Help tab -->

+

+        </div> <!-- Main tab container -->

+       </div>  <!-- Horizontal split container -->

+</div> <!-- Main layout container -->


Modified: geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/web.xml?view=diff&rev=475164&r1=475163&r2=475164
==============================================================================
--- geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/web.xml (original)
+++ geronimo/server/trunk/applications/console/geronimo-console-standard/src/main/webapp/WEB-INF/web.xml Wed Nov 15 00:57:58 2006
@@ -780,9 +780,27 @@
             <param-value>console-standard.JMXViewer</param-value>
         </init-param>
     </servlet>
+    <servlet>
+        <description>Automated generated Portlet Wrapper</description>
+        <display-name>Pluto Wrapper for LDAP Viewer Portlet</display-name>
+        <servlet-name>LDAPViewer</servlet-name>
+        <servlet-class>org.apache.pluto.core.PortletServlet </servlet-class>
+        <init-param>
+            <param-name>portlet-class</param-name>
+            <param-value>org.apache.geronimo.console.ldapmanager.LDAPManagerPortlet</param-value>
+        </init-param>
+        <init-param>
+            <param-name>portlet-guid</param-name>
+            <param-value>console-standard.LDAPViewer</param-value>
+        </init-param>
+    </servlet>

<!-- [INSERT FRAGMENT HERE] -->

+    <servlet-mapping>
+        <servlet-name>LDAPViewer</servlet-name>
+        <url-pattern>/LDAPViewer/*</url-pattern>
+    </servlet-mapping>
     <servlet-mapping>
         <servlet-name>JMXViewer</servlet-name>
         <url-pattern>/JMXViewer/*</url-pattern>



------=_Part_44570_6513100.1163582088415--