nicolaken 2002/11/28 07:12:34 Modified: . changes.xml module.xml properties.xml Added: src/blocks/naming/java/org/apache/cocoon/transformation LDAPTransformer.java src/blocks/naming/conf naming.xmap src/blocks/naming/samples notyet.txt Removed: src/java/org/apache/cocoon/transformation LDAPTransformer.java naming.xmap Log: <action dev="NKB" type="update"> Moved LDAPTransformer to a block called "naming". </action> Revision Changes Path 1.291 +5 -2 xml-cocoon2/changes.xml Index: changes.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/changes.xml,v retrieving revision 1.290 retrieving revision 1.291 diff -u -r1.290 -r1.291 --- changes.xml 28 Nov 2002 08:41:53 -0000 1.290 +++ changes.xml 28 Nov 2002 15:12:32 -0000 1.291 @@ -40,11 +40,14 @@ </devs> <release version="@version@" date="@date@"> + <action dev="NKB" type="update"> + Moved LDAPTransformer to a block called "naming". + </action> <action dev="DC" type="update" fixes-bug="14581" due-to="Colin Paul Adams" due-to-email="[EMAIL PROTECTED]"> New build target "validate-schematron" to conduct build-time validation (currently only the sitemaps) using RELAX NG grammars with embedded Schematron rules. - This uses <link="http://www.ascc.net/xml/schematron/">Schematron</link> + This uses <link href="http://www.ascc.net/xml/schematron/">Schematron</link> stylesheets from Rick Jelliffe and Academia Sinica Computing Center, Taiwan. </action> <action dev="DC" type="add" due-to="Colin Paul Adams" due-to-email="[EMAIL PROTECTED]"> 1.18 +19 -0 xml-cocoon2/module.xml Index: module.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/module.xml,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- module.xml 25 Nov 2002 15:18:30 -0000 1.17 +++ module.xml 28 Nov 2002 15:12:33 -0000 1.18 @@ -333,6 +333,25 @@ </project> + <project name="naming-block"> + <package>org.apache.cocoon</package> + + <ant target="block"> + <property name="block-name" value="naming"/> + </ant> + + <depend project="xml-cocoon2"/> + + <work nested="tools/anttasks"/> + <home nested="build/cocoon"/> + + <jar name="naming-block.jar"/> + + <nag from="Nicola Ken Barozzi <[EMAIL PROTECTED]>" + to="[EMAIL PROTECTED]"/> + + </project> + <!-- ******************************************** ******** COCOON SUPPLIED PROJECTS ******** 1.14 +2 -1 xml-cocoon2/properties.xml Index: properties.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/properties.xml,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- properties.xml 25 Nov 2002 15:18:30 -0000 1.13 +++ properties.xml 28 Nov 2002 15:12:33 -0000 1.14 @@ -119,7 +119,8 @@ <databases include="true"/> <hsqldb include="true"/> <precept/> - <poi include="true"/> + <poi include="true"/> + <naming include="true"/> </blocks> <!-- Specify what should be included in the web application (war) file --> 1.1 xml-cocoon2/src/blocks/naming/java/org/apache/cocoon/transformation/LDAPTransformer.java Index: LDAPTransformer.java =================================================================== /* ============================================================================ The Apache Software License, Version 1.1 ============================================================================ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved. Redistribution and use in source and binary forms, with or without modifica- tion, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The end-user documentation included with the redistribution, if any, must include the following acknowledgment: "This product includes software developed by the Apache Software Foundation (http://www.apache.org/)." Alternately, this acknowledgment may appear in the software itself, if and wherever such third-party acknowledgments normally appear. 4. The names "Apache Cocoon" and "Apache Software Foundation" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact [EMAIL PROTECTED] 5. Products derived from this software may not be called "Apache", nor may "Apache" appear in their name, without prior written permission of the Apache Software Foundation. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. This software consists of voluntary contributions made by many individuals on behalf of the Apache Software Foundation and was originally created by Stefano Mazzocchi <[EMAIL PROTECTED]>. For more information on the Apache Software Foundation, please see <http://www.apache.org/>. */ package org.apache.cocoon.transformation; import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.environment.SourceResolver; import org.apache.cocoon.xml.XMLConsumer; import org.apache.avalon.framework.logger.Logger; import org.xml.sax.Attributes; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.ext.LexicalHandler; import org.xml.sax.helpers.AttributesImpl; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.*; import java.io.IOException; import java.util.*; /***************************************************************************** * The <code>LDAPTransformer</code> is a class that can be plugged into a pipeline * to transform the SAX events which passes thru this transformer into queries * an responses to/from a ldap interface. * <br> * The file will be specified in a parameter tag in the sitemap pipeline to the * transformer as follows: * <p> * <code> * <map:transform type="ldap"/><br> * </code> * </p> * <br> * * The following DTD is valid:<br> * <!ELEMENT execute-query (attribute+ | show-attribute? | scope? | initializer? | authentication? | error-element? | sax-error? doc-element? | row-element? | version? | serverurl? | rootdn? | password? | deref-link? | count-limit? | searchbase, filter)><br> * <!ELEMENT execute-increment (attribute | show-attribute? | scope? | initializer? | authentication? | error-element? | sax-error? | doc-element? | row-element? | version? | serverurl? | rootdn? | password? | deref-link? | count-limit? | searchbase, filter)><br> * increments (+1) an integer attribute on a directory-server (ldap)<br> * <br> * <!ELEMENT initializer (#PCDATA)>+ (default: "com.sun.jndi.ldap.LdapCtxFactory")<br> * <!ELEMENT authentication (#PCDATA)>+ (default: "simple")<br> * <!ELEMENT version (#PCDATA)>+ (default: "2")<br> * <!ELEMENT serverurl (#PCDATA)>+<br> * <!ELEMENT port (#PCDATA)>+ (default: 389)<br> * <!ELEMENT rootdn (#PCDATA)>+<br> * <!ELEMENT password (#PCDATA)>+<br> * <!ELEMENT scope (ONELEVEL_SCOPE | SUBTREE_SCOPE | OBJECT_SCOPE)>+ (default: ONELEVEL_SCOPE)<br> * <!ELEMENT searchbase (#PCDATA)>+<br> * <!ELEMENT doc-element (#PCDATA)>+ (default: "doc-element")<br> * <!ELEMENT row-element (#PCDATA)>+ (default: "row-element")<br> * <!ELEMENT error-element (#PCDATA)>+ (default: "ldap-error") (in case of error returned error tag)<br> * <!ELEMENT sax_error (TRUE | FALSE)>+; (default: FALSE) (throws SAX-Exception instead of error tag)<br> * <!ELEMENT attribute (#PCDATA)><br> * <!ELEMENT show-attribute (TRUE | FALSE)> (default: TRUE)<br> * <!ELEMENT filter (#PCDATA | execute-query)><br> * <!ELEMENT deref-link (TRUE | FALSE)> (default: FALSE)<br> * <!ELEMENT count-limit (#PCDATA)> (integer default: 0 -> no limit)<br> * <!ELEMENT time-limit (#PCDATA)> (integer default: 0 -> infinite)<br> * <!ELEMENT debug (TRUE | FALSE)>+; (default: FALSE)<br> * <br> * + can also be defined as parameter in the sitemap. * <br> * <br> * * @author Felix Knecht * @version CVS $Id: LDAPTransformer.java,v 1.1 2002/11/28 15:12:33 nicolaken Exp $ */ public class LDAPTransformer extends AbstractTransformer { /** The LDAP namespace ("http://apache.org/cocoon/LDAP/1.0")**/ public static final String my_uri = "http://apache.org/cocoon/LDAP/1.0"; public static final String my_name = "LDAPTransformer"; /** The LDAP namespace element names **/ public static final String MAGIC_EXECUTE_QUERY = "execute-query"; public static final String MAGIC_EXECUTE_INCREMENT = "execute-increment"; public static final String MAGIC_INITIALIZER_ELEMENT = "initializer"; public static final String MAGIC_DOC_ELEMENT = "doc-element"; public static final String MAGIC_ROW_ELEMENT = "row-element"; public static final String MAGIC_ERROR_ELEMENT = "error-element"; public static final String MAGIC_SAX_ERROR = "sax-error"; public static final String MAGIC_ATTRIBUTE_ELEMENT = "attribute"; public static final String MAGIC_SERVERURL_ELEMENT = "serverurl"; public static final String MAGIC_PORT_ELEMENT = "port"; public static final String MAGIC_SEARCHBASE_ELEMENT = "searchbase"; public static final String MAGIC_FILTER_ELEMENT = "filter"; public static final String MAGIC_ROOT_DN_ELEMENT = "rootdn"; public static final String MAGIC_PASSWORD_ELEMENT = "password"; public static final String MAGIC_SHOW_ATTRIBUTE_ELEMENT = "show-attribute"; public static final String MAGIC_SCOPE_ELEMENT = "scope"; public static final String MAGIC_VERSION_ELEMENT = "version"; public static final String MAGIC_AUTHENTICATION_ELEMENT = "authentication"; public static final String MAGIC_DEREF_LINK_ELEMENT = "deref-link"; public static final String MAGIC_COUNT_LIMIT_ELEMENT = "count-limit"; public static final String MAGIC_TIME_LIMIT_ELEMENT = "time-limit"; public static final String MAGIC_DEBUG_ELEMENT = "debug"; /** The states we are allowed to be in **/ public static final int STATE_OUTSIDE = 0; public static final int STATE_INSIDE_EXECUTE_QUERY = 1; public static final int STATE_INSIDE_EXECUTE_INCREMENT = 2; public static final int STATE_INSIDE_EXECUTE_ELEMENT = 3; public static final int STATE_INSIDE_INITIALIZER_ELEMENT = 4; public static final int STATE_INSIDE_SERVERURL_ELEMENT = 5; public static final int STATE_INSIDE_PORT_ELEMENT = 6; public static final int STATE_INSIDE_SCOPE_ELEMENT = 7; public static final int STATE_INSIDE_VERSION_ELEMENT = 8; public static final int STATE_INSIDE_AUTHENTICATION_ELEMENT = 9; public static final int STATE_INSIDE_ROOT_DN_ELEMENT = 10; public static final int STATE_INSIDE_PASSWORD_ELEMENT = 11; public static final int STATE_INSIDE_SEARCHBASE_ELEMENT = 12; public static final int STATE_INSIDE_DOC_ELEMENT = 13; public static final int STATE_INSIDE_ROW_ELEMENT = 14; public static final int STATE_INSIDE_ATTRIBUTE_ELEMENT = 15; public static final int STATE_INSIDE_SHOW_ATTRIBUTE_ELEMENT = 16; public static final int STATE_INSIDE_ERROR_ELEMENT = 17; public static final int STATE_INSIDE_FILTER_ELEMENT = 18; public static final int STATE_INSIDE_DEREF_LINK_ELEMENT = 19; public static final int STATE_INSIDE_COUNT_LIMIT_ELEMENT = 20; public static final int STATE_INSIDE_TIME_LIMIT_ELEMENT = 21; public static final int STATE_INSIDE_DEBUG_ELEMENT = 22; public static final int STATE_INSIDE_SAX_ERROR_ELEMENT = 23; /** Default parameters that might apply to all queries **/ protected Properties default_properties = new Properties(); /** The name of the value element we're currently receiving **/ protected String current_name; /** The current state of the event receiving FSM **/ protected int current_state = STATE_OUTSIDE; /** The value of the value element we're currently receiving **/ protected StringBuffer current_value = new StringBuffer(); /** The list of queries that we're currently working on **/ protected Vector queries = new Vector(); /** The offset of the current query in the queries list **/ protected int current_query_index = -1; /** SAX producing state information */ protected XMLConsumer xml_consumer; protected LexicalHandler lexical_handler; /** BEGIN SitemapComponent methods **/ public void setup(SourceResolver resolver, Map objectModel, String source, Parameters parameters) throws ProcessingException, SAXException, IOException { current_state = STATE_OUTSIDE; // Check the initializer String parameter = parameters.getParameter(MAGIC_INITIALIZER_ELEMENT, null); if (parameter != null) { default_properties.setProperty(MAGIC_INITIALIZER_ELEMENT, parameter); } // Check the version parameter = parameters.getParameter(MAGIC_VERSION_ELEMENT, null); if (parameter != null) { default_properties.setProperty(MAGIC_VERSION_ELEMENT, parameter); } // Check the authentication parameter = parameters.getParameter(MAGIC_AUTHENTICATION_ELEMENT, null); if (parameter != null) { default_properties.setProperty(MAGIC_AUTHENTICATION_ELEMENT, parameter); } // Check the scope parameter = parameters.getParameter(MAGIC_SCOPE_ELEMENT, null); if (parameter != null) { default_properties.setProperty(MAGIC_SCOPE_ELEMENT, parameter); } // Check the serverurl parameter = parameters.getParameter(MAGIC_SERVERURL_ELEMENT, null); if (parameter != null) { default_properties.setProperty(MAGIC_SERVERURL_ELEMENT, parameter); } // Check the ldap-root_dn parameter = parameters.getParameter(MAGIC_ROOT_DN_ELEMENT, null); if (parameter != null) { default_properties.setProperty(MAGIC_ROOT_DN_ELEMENT, parameter); } // Check the ldap-pwd parameter = parameters.getParameter(MAGIC_PASSWORD_ELEMENT,null); if (parameter != null) { default_properties.setProperty(MAGIC_PASSWORD_ELEMENT, parameter); } // Check the port parameter = parameters.getParameter(MAGIC_PORT_ELEMENT, null); if (parameter != null) { default_properties.setProperty(MAGIC_PORT_ELEMENT, parameter); } // Check the searchbase parameter = parameters.getParameter(MAGIC_SEARCHBASE_ELEMENT, null); if (parameter != null) { default_properties.setProperty(MAGIC_SEARCHBASE_ELEMENT, parameter); } // Check the doc-element parameter = parameters.getParameter(MAGIC_DOC_ELEMENT, null); if (parameter != null) { default_properties.setProperty(MAGIC_DOC_ELEMENT, parameter); } // Check the row-element parameter = parameters.getParameter(MAGIC_ROW_ELEMENT,null); if (parameter != null) { default_properties.setProperty(MAGIC_ROW_ELEMENT, parameter); } // Check the error-element parameter = parameters.getParameter(MAGIC_ERROR_ELEMENT, null); if (parameter != null) { default_properties.setProperty(MAGIC_ERROR_ELEMENT, parameter); } // Check the sax-error parameter = parameters.getParameter(MAGIC_SAX_ERROR, null); if (parameter != null) { default_properties.setProperty(MAGIC_SAX_ERROR, parameter); } // Check the deref-link-element parameter = parameters.getParameter(MAGIC_DEREF_LINK_ELEMENT, null); if (parameter != null) { default_properties.setProperty(MAGIC_DEREF_LINK_ELEMENT, parameter.toUpperCase()); } // Check the count-limit-element parameter = parameters.getParameter(MAGIC_COUNT_LIMIT_ELEMENT, null); if (parameter != null) { default_properties.setProperty(MAGIC_COUNT_LIMIT_ELEMENT, parameter); } // Check the time-limit-element parameter = parameters.getParameter(MAGIC_TIME_LIMIT_ELEMENT, null); if (parameter != null) { default_properties.setProperty(MAGIC_TIME_LIMIT_ELEMENT, parameter); } // Check the debug-element parameter = parameters.getParameter(MAGIC_DEBUG_ELEMENT, null); if (parameter != null) { default_properties.setProperty(MAGIC_DEBUG_ELEMENT, parameter); } } /** END SitemapComponent methods **/ /** BEGIN my very own methods **/ /** * This will be the meat of LDAPTransformer, where the query is run. */ protected void executeQuery(int index) throws SAXException { this.contentHandler.startPrefixMapping("", LDAPTransformer.my_uri); LDAPQuery query = (LDAPQuery) queries.elementAt(index); try { query.execute(); } catch (NamingException e) { throw new SAXException (e); } catch (Exception e) { throw new SAXException (e); } this.contentHandler.endPrefixMapping(""); } protected static void throwIllegalStateException(String message) { throw new IllegalStateException(my_name + ": " + message); } protected void startExecuteQuery(Attributes attributes) { LDAPQuery query; switch (current_state) { case LDAPTransformer.STATE_OUTSIDE: current_state = LDAPTransformer.STATE_INSIDE_EXECUTE_QUERY; current_query_index = queries.size(); query = new LDAPQuery(this); queries.addElement(query); getCurrentQuery().toDo = LDAPTransformer.STATE_INSIDE_EXECUTE_QUERY; getCurrentQuery().query_index = current_query_index; break; case LDAPTransformer.STATE_INSIDE_FILTER_ELEMENT: current_state = LDAPTransformer.STATE_INSIDE_EXECUTE_QUERY; current_query_index = queries.size(); query = new LDAPQuery(this); queries.addElement(query); getCurrentQuery().toDo = LDAPTransformer.STATE_INSIDE_EXECUTE_QUERY; getCurrentQuery().query_index = current_query_index; break; default: throwIllegalStateException("Not expecting a start execute-query element"); } } protected void endExecuteQuery() throws SAXException { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: executeQuery(current_query_index); queries.remove(current_query_index); --current_query_index; if (current_query_index > -1) { current_state = getCurrentQuery().toDo; } else { queries.removeAllElements(); current_state = LDAPTransformer.STATE_OUTSIDE; } break; default: throwIllegalStateException("Not expecting a end execute-query element"); } } protected void startExecuteIncrement(Attributes attributes) { LDAPQuery query; switch (current_state) { case LDAPTransformer.STATE_OUTSIDE: current_state = LDAPTransformer.STATE_INSIDE_EXECUTE_INCREMENT; current_query_index = queries.size(); query = new LDAPQuery(this); queries.addElement(query); getCurrentQuery().toDo = LDAPTransformer.STATE_INSIDE_EXECUTE_INCREMENT; getCurrentQuery().query_index = current_query_index; break; case LDAPTransformer.STATE_INSIDE_EXECUTE_QUERY: current_state = LDAPTransformer.STATE_INSIDE_EXECUTE_INCREMENT; current_query_index = queries.size(); query = new LDAPQuery(this); queries.addElement(query); getCurrentQuery().toDo = LDAPTransformer.STATE_INSIDE_EXECUTE_INCREMENT; getCurrentQuery().query_index = current_query_index; break; default: throwIllegalStateException("Not expecting a start execute-increment element"); } } protected void endExecuteIncrement() throws SAXException { switch (current_state) { case LDAPTransformer.STATE_INSIDE_EXECUTE_INCREMENT: executeQuery(current_query_index); queries.remove(current_query_index); --current_query_index; if (current_query_index > 1) { current_state = getCurrentQuery().toDo; } else { queries.removeAllElements(); current_state = LDAPTransformer.STATE_OUTSIDE; } break; default: throwIllegalStateException("Not expecting a end execute-increment element"); } } protected void startInitializerElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_INITIALIZER_ELEMENT; getCurrentQuery().current_state = LDAPTransformer.STATE_INSIDE_INITIALIZER_ELEMENT; break; case STATE_INSIDE_EXECUTE_INCREMENT: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_INITIALIZER_ELEMENT; getCurrentQuery().current_state = LDAPTransformer.STATE_INSIDE_INITIALIZER_ELEMENT; break; default: throwIllegalStateException("Not expecting a start initializer element"); } } protected void endInitializerElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_INITIALIZER_ELEMENT: getCurrentQuery().initializer = current_value.toString(); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end initializer element"); } } protected void startScopeElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_SCOPE_ELEMENT; getCurrentQuery().current_state = LDAPTransformer.STATE_INSIDE_SCOPE_ELEMENT; break; case STATE_INSIDE_EXECUTE_INCREMENT: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_SCOPE_ELEMENT; getCurrentQuery().current_state = LDAPTransformer.STATE_INSIDE_SCOPE_ELEMENT; break; default: throwIllegalStateException("Not expecting a start scope element"); } } protected void endScopeElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_SCOPE_ELEMENT: getCurrentQuery().scope = current_value.toString(); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end scope element"); } } protected void startAuthenticationElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_AUTHENTICATION_ELEMENT; getCurrentQuery().current_state = LDAPTransformer.STATE_INSIDE_AUTHENTICATION_ELEMENT; break; case STATE_INSIDE_EXECUTE_INCREMENT: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_AUTHENTICATION_ELEMENT; getCurrentQuery().current_state = LDAPTransformer.STATE_INSIDE_AUTHENTICATION_ELEMENT; break; default: throwIllegalStateException("Not expecting a start authentication element"); } } protected void endAuthenticationElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_AUTHENTICATION_ELEMENT: getCurrentQuery().authentication = current_value.toString(); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end authentication element"); } } protected void startServerurlElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_SERVERURL_ELEMENT; break; case STATE_INSIDE_EXECUTE_INCREMENT: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_SERVERURL_ELEMENT; break; default: throwIllegalStateException("Not expecting a start serverurl element"); } } protected void endServerurlElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_SERVERURL_ELEMENT: getCurrentQuery().serverurl = current_value.toString(); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end serverurl element"); } } protected void startPortElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_PORT_ELEMENT; break; case STATE_INSIDE_EXECUTE_INCREMENT: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_PORT_ELEMENT; break; default: throwIllegalStateException("Not expecting a start port element"); } } protected void endPortElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_PORT_ELEMENT: getCurrentQuery().port = Integer.parseInt(current_value.toString()); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end server element"); } } protected void startShowAttributeElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_SHOW_ATTRIBUTE_ELEMENT; break; case STATE_INSIDE_EXECUTE_INCREMENT: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_SHOW_ATTRIBUTE_ELEMENT; break; default: throwIllegalStateException("Not expecting a start show-attribute element"); } } protected void endShowAttributeElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_SHOW_ATTRIBUTE_ELEMENT: if (current_value.toString().toUpperCase().equals("FALSE")) { getCurrentQuery().showAttribute = false; } current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end show-attribute element"); } } protected void startSearchbaseElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_SEARCHBASE_ELEMENT; break; case STATE_INSIDE_EXECUTE_INCREMENT: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_SEARCHBASE_ELEMENT; break; default: throwIllegalStateException("Not expecting a start searchbase element"); } } protected void endSearchbaseElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_SEARCHBASE_ELEMENT: getCurrentQuery().searchbase = current_value.toString(); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end searchbase element"); } } protected void startDocElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_DOC_ELEMENT; break; case STATE_INSIDE_EXECUTE_INCREMENT: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_DOC_ELEMENT; break; default: throwIllegalStateException("Not expecting a start doc-element element"); } } protected void endDocElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_DOC_ELEMENT: getCurrentQuery().doc_element = current_value.toString(); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end doc-element element"); } } protected void startRowElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_ROW_ELEMENT; break; case STATE_INSIDE_EXECUTE_INCREMENT: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_ROW_ELEMENT; break; default: throwIllegalStateException("Not expecting a start row-element element"); } } protected void endRowElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_ROW_ELEMENT: getCurrentQuery().row_element = current_value.toString(); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end row-element element"); } } protected void startErrorElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_ERROR_ELEMENT; break; case STATE_INSIDE_EXECUTE_INCREMENT: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_ERROR_ELEMENT; break; default: throwIllegalStateException("Not expecting a start error-element element"); } } protected void endErrorElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_ERROR_ELEMENT: getCurrentQuery().error_element = current_value.toString(); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end error-element element"); } } protected void startSaxError(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_SAX_ERROR_ELEMENT; break; case STATE_INSIDE_EXECUTE_INCREMENT: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_SAX_ERROR_ELEMENT; break; default: throwIllegalStateException("Not expecting a start sax-error element"); } } protected void endSaxError() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_SAX_ERROR_ELEMENT: if (current_value.toString().toUpperCase().equals("TRUE")) { getCurrentQuery().sax_error = true; } current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end sax-error element"); } } protected void startRootDnElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_ROOT_DN_ELEMENT; break; case STATE_INSIDE_EXECUTE_INCREMENT: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_ROOT_DN_ELEMENT; break; default: throwIllegalStateException("Not expecting a start root-dn element"); } } protected void endRootDnElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_ROOT_DN_ELEMENT: getCurrentQuery().root_dn = current_value.toString( ); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end root-dn element"); } } protected void startPasswordElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_PASSWORD_ELEMENT; break; case STATE_INSIDE_EXECUTE_INCREMENT: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_PASSWORD_ELEMENT; break; default: throwIllegalStateException("Not expecting a start password element"); } } protected void endPasswordElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_PASSWORD_ELEMENT: getCurrentQuery().password = current_value.toString(); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end password element"); } } protected void startAttributeElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_state = LDAPTransformer.STATE_INSIDE_ATTRIBUTE_ELEMENT; current_value.setLength(0); break; case STATE_INSIDE_EXECUTE_INCREMENT: current_state = LDAPTransformer.STATE_INSIDE_ATTRIBUTE_ELEMENT; current_value.setLength(0); break; default: throwIllegalStateException("Not expecting a start attribute element"); } } protected void endAttributeElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_ATTRIBUTE_ELEMENT: getCurrentQuery().addAttrList(current_value.toString()); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end attribute element"); } } protected void startVersionElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_state = LDAPTransformer.STATE_INSIDE_VERSION_ELEMENT; current_value.setLength(0); break; case STATE_INSIDE_EXECUTE_INCREMENT: current_state = LDAPTransformer.STATE_INSIDE_VERSION_ELEMENT; current_value.setLength(0); break; default: throwIllegalStateException("Not expecting a start version element"); } } protected void endVersionElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_VERSION_ELEMENT: getCurrentQuery().version = current_value.toString(); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end version element"); } } protected void startFilterElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_state = LDAPTransformer.STATE_INSIDE_FILTER_ELEMENT; getCurrentQuery().current_state = LDAPTransformer.STATE_INSIDE_FILTER_ELEMENT; current_value.setLength(0); break; case STATE_INSIDE_EXECUTE_INCREMENT: current_state = LDAPTransformer.STATE_INSIDE_FILTER_ELEMENT; getCurrentQuery().current_state = LDAPTransformer.STATE_INSIDE_FILTER_ELEMENT; current_value.setLength(0); break; default: throwIllegalStateException("Not expecting a start filter element"); } } protected void endFilterElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_FILTER_ELEMENT: getCurrentQuery().filter = current_value.toString(); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end filter element"); } } protected void startDerefLinkElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_state = LDAPTransformer.STATE_INSIDE_DEREF_LINK_ELEMENT; current_value.setLength(0); break; case STATE_INSIDE_EXECUTE_INCREMENT: current_state = LDAPTransformer.STATE_INSIDE_DEREF_LINK_ELEMENT; current_value.setLength(0); break; default: throwIllegalStateException("Not expecting a start deref-link element"); } } protected void endDerefLinkElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_DEREF_LINK_ELEMENT: if (current_value.toString().toUpperCase().equals("TRUE")) { getCurrentQuery().deref_link = true; } current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end deref-link element"); } } protected void startCountLimitElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_state = LDAPTransformer.STATE_INSIDE_COUNT_LIMIT_ELEMENT; current_value.setLength(0); break; case STATE_INSIDE_EXECUTE_INCREMENT: current_state = LDAPTransformer.STATE_INSIDE_COUNT_LIMIT_ELEMENT; current_value.setLength(0); break; default: throwIllegalStateException("Not expecting a start count-limit element"); } } protected void endCountLimitElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_COUNT_LIMIT_ELEMENT: getCurrentQuery().count_limit = Integer.parseInt(current_value.toString()); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end count-limit element"); } } protected void startTimeLimitElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_state = LDAPTransformer.STATE_INSIDE_TIME_LIMIT_ELEMENT; current_value.setLength(0); break; case STATE_INSIDE_EXECUTE_INCREMENT: current_state = LDAPTransformer.STATE_INSIDE_TIME_LIMIT_ELEMENT; current_value.setLength(0); break; default: throwIllegalStateException("Not expecting a start time-limit element"); } } protected void endTimeLimitElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_TIME_LIMIT_ELEMENT: getCurrentQuery().time_limit = Integer.parseInt(current_value.toString()); current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end time-limit element"); } } protected void startDebugElement(Attributes attributes) { switch (current_state) { case STATE_INSIDE_EXECUTE_QUERY: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_DEBUG_ELEMENT; break; case STATE_INSIDE_EXECUTE_INCREMENT: current_value.setLength(0); current_state = LDAPTransformer.STATE_INSIDE_DEBUG_ELEMENT; break; default: throwIllegalStateException("Not expecting a start debug element"); } } protected void endDebugElement() { switch (current_state) { case LDAPTransformer.STATE_INSIDE_DEBUG_ELEMENT: if (current_value.toString().toUpperCase().equals("TRUE")) { getCurrentQuery().debug = true; } current_state = getCurrentQuery().toDo; break; default: throwIllegalStateException("Not expecting a end debug element"); } } protected LDAPQuery getCurrentQuery() { return (LDAPQuery) queries.elementAt(current_query_index); } protected LDAPQuery getQuery(int i) { return (LDAPQuery) queries.elementAt(i); } /** END my very own methods **/ /** BEGIN SAX ContentHandler handlers **/ public void setDocumentLocator(Locator locator) { if (getLogger().isDebugEnabled()) { getLogger().debug( "PUBLIC ID: " + locator.getPublicId() ); getLogger().debug( "SYSTEM ID: " + locator.getSystemId() ); } if (super.contentHandler != null) super.contentHandler.setDocumentLocator(locator); } public void startElement(String uri, String name, String raw, Attributes attributes) throws SAXException { if (!uri.equals(my_uri)) { super.startElement(uri, name, raw, attributes); return; } if (this.getLogger().isDebugEnabled()) { getLogger().debug("RECEIVED START ELEMENT " + name + "(" + uri + ")"); } if (name.equals(LDAPTransformer.MAGIC_EXECUTE_QUERY)) { startExecuteQuery(attributes); } else if (name.equals(LDAPTransformer.MAGIC_EXECUTE_INCREMENT)) { startExecuteIncrement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_INITIALIZER_ELEMENT)) { startInitializerElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_AUTHENTICATION_ELEMENT)) { startAuthenticationElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_SCOPE_ELEMENT)) { startScopeElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_VERSION_ELEMENT)) { startVersionElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_SERVERURL_ELEMENT)) { startServerurlElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_PORT_ELEMENT)) { startPortElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_DOC_ELEMENT)) { startDocElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_ROW_ELEMENT)) { startRowElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_ERROR_ELEMENT)) { startErrorElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_SAX_ERROR)) { startSaxError(attributes); } else if (name.equals(LDAPTransformer.MAGIC_ROOT_DN_ELEMENT)) { startRootDnElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_PASSWORD_ELEMENT)) { startPasswordElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_ATTRIBUTE_ELEMENT)) { startAttributeElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_SHOW_ATTRIBUTE_ELEMENT)) { startShowAttributeElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_SEARCHBASE_ELEMENT)) { startSearchbaseElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_FILTER_ELEMENT)) { startFilterElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_DEREF_LINK_ELEMENT)) { startDerefLinkElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_COUNT_LIMIT_ELEMENT)) { startCountLimitElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_TIME_LIMIT_ELEMENT)) { startTimeLimitElement(attributes); } else if (name.equals(LDAPTransformer.MAGIC_DEBUG_ELEMENT)) { startDebugElement(attributes); } } public void endElement(String uri, String name, String raw) throws SAXException { if (!uri.equals(my_uri)) { super.endElement(uri, name, raw); return; } if (this.getLogger().isDebugEnabled()) { getLogger().debug("RECEIVED END ELEMENT "+ name + "(" + uri + ")"); } if (name.equals(LDAPTransformer.MAGIC_EXECUTE_QUERY)) { endExecuteQuery(); } else if (name.equals(LDAPTransformer.MAGIC_EXECUTE_INCREMENT)) { endExecuteIncrement(); } else if (name.equals(LDAPTransformer.MAGIC_INITIALIZER_ELEMENT)) { endInitializerElement(); } else if (name.equals(LDAPTransformer.MAGIC_AUTHENTICATION_ELEMENT)) { endAuthenticationElement(); } else if (name.equals(LDAPTransformer.MAGIC_SCOPE_ELEMENT)) { endScopeElement(); } else if (name.equals(LDAPTransformer.MAGIC_VERSION_ELEMENT)) { endVersionElement(); } else if (name.equals(LDAPTransformer.MAGIC_SERVERURL_ELEMENT)) { endServerurlElement(); } else if (name.equals(LDAPTransformer.MAGIC_PORT_ELEMENT)) { endPortElement(); } else if (name.equals(LDAPTransformer.MAGIC_DOC_ELEMENT)) { endDocElement(); } else if (name.equals(LDAPTransformer.MAGIC_ROW_ELEMENT)) { endRowElement(); } else if (name.equals(LDAPTransformer.MAGIC_ERROR_ELEMENT)) { endErrorElement(); } else if (name.equals(LDAPTransformer.MAGIC_SAX_ERROR)) { endSaxError(); } else if (name.equals(LDAPTransformer.MAGIC_ROOT_DN_ELEMENT)) { endRootDnElement(); } else if (name.equals(LDAPTransformer.MAGIC_PASSWORD_ELEMENT)) { endPasswordElement(); } else if (name.equals(LDAPTransformer.MAGIC_ATTRIBUTE_ELEMENT)) { endAttributeElement(); } else if (name.equals(LDAPTransformer.MAGIC_SHOW_ATTRIBUTE_ELEMENT)) { endShowAttributeElement(); } else if (name.equals(LDAPTransformer.MAGIC_SEARCHBASE_ELEMENT)) { endSearchbaseElement(); } else if (name.equals(LDAPTransformer.MAGIC_FILTER_ELEMENT)) { endFilterElement(); } else if (name.equals(LDAPTransformer.MAGIC_DEREF_LINK_ELEMENT)) { endDerefLinkElement(); } else if (name.equals(LDAPTransformer.MAGIC_COUNT_LIMIT_ELEMENT)) { endCountLimitElement(); } else if (name.equals(LDAPTransformer.MAGIC_TIME_LIMIT_ELEMENT)) { endTimeLimitElement(); } else if (name.equals(LDAPTransformer.MAGIC_DEBUG_ELEMENT)) { endDebugElement(); } } public void characters(char ary[], int start, int length) throws SAXException { if (current_state != LDAPTransformer.STATE_INSIDE_INITIALIZER_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_AUTHENTICATION_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_SCOPE_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_VERSION_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_SERVERURL_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_PORT_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_DOC_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_ROW_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_ERROR_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_SAX_ERROR_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_ROOT_DN_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_PASSWORD_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_ATTRIBUTE_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_SHOW_ATTRIBUTE_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_FILTER_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_DEREF_LINK_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_COUNT_LIMIT_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_TIME_LIMIT_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_DEBUG_ELEMENT && current_state != LDAPTransformer.STATE_INSIDE_SEARCHBASE_ELEMENT) { super.characters(ary, start, length); } if (this.getLogger().isDebugEnabled()) { getLogger().debug("RECEIVED CHARACTERS: " + new String(ary, start, length)); } current_value.append(ary, start, length); } private void attribute(AttributesImpl attr, String name, String value) { attr.addAttribute("", name, name, "CDATA", value); } private void start(String name, AttributesImpl attr) throws SAXException { super.contentHandler.startElement("", name, name, attr); attr.clear(); } private void end(String name) throws SAXException { super.contentHandler.endElement("", name, name); } private void data(String data) throws SAXException { if (data != null) super.contentHandler.characters(data.toCharArray(), 0, data.length()); } protected static String getStringValue(Object object) { if (object instanceof byte[]) { return new String((byte[]) object); } else if (object instanceof char[]) { return new String((char[]) object); } else if (object != null) { return object.toString(); } else { return ""; } } public final Logger getTheLogger() { return getLogger(); } class LDAPQuery { /** What index are you in daddy's queries list **/ protected int query_index; /** The current state of the event receiving FSM **/ protected int current_state; /** Who's your daddy? **/ protected LDAPTransformer transformer; /** LDAP configuration information **/ protected String initializer = "com.sun.jndi.ldap.LdapCtxFactory"; protected String serverurl = "localhost"; protected int port = 389; protected String root_dn = ""; protected String password = ""; protected String version = "2"; protected String scope = "ONELEVEL_SCOPE"; protected String authentication = "simple"; /** LDAP environment information **/ protected Properties env = new Properties(); protected DirContext ctx; /** LDAP Query **/ protected int toDo; protected String searchbase = ""; protected List attrListe = new LinkedList(); protected boolean showAttribute = true; protected String filter = ""; protected String doc_element = "doc-element"; protected String row_element = "row-element"; protected String error_element = "ldap-error"; protected boolean sax_error = false; protected boolean deref_link = false; // Dereference: true -> dereference the link during search protected long count_limit = 0; // Maximum number of entries to return: 0 -> no limit protected int time_limit = 0; // Number of milliseconds to wait before return: 0 -> infinite protected boolean debug = false; protected LDAPQuery (LDAPTransformer transformer) { this.transformer = transformer; if (null != transformer.default_properties.getProperty(transformer.MAGIC_INITIALIZER_ELEMENT)) { initializer = transformer.default_properties.getProperty(transformer.MAGIC_INITIALIZER_ELEMENT); } if (null != transformer.default_properties.getProperty(transformer.MAGIC_SERVERURL_ELEMENT)) { serverurl = transformer.default_properties.getProperty(transformer.MAGIC_SERVERURL_ELEMENT); } if (null != transformer.default_properties.getProperty(transformer.MAGIC_PORT_ELEMENT)) { port = Integer.parseInt(transformer.default_properties.getProperty(transformer.MAGIC_PORT_ELEMENT)); } if (null != transformer.default_properties.getProperty(transformer.MAGIC_ROOT_DN_ELEMENT)) { root_dn = transformer.default_properties.getProperty(transformer.MAGIC_ROOT_DN_ELEMENT); } if (null != transformer.default_properties.getProperty(transformer.MAGIC_PASSWORD_ELEMENT)) { password = transformer.default_properties.getProperty(transformer.MAGIC_PASSWORD_ELEMENT); } if (null != transformer.default_properties.getProperty(transformer.MAGIC_VERSION_ELEMENT)) { version = transformer.default_properties.getProperty(transformer.MAGIC_VERSION_ELEMENT); } if (null != transformer.default_properties.getProperty(transformer.MAGIC_SCOPE_ELEMENT)) { scope = transformer.default_properties.getProperty(transformer.MAGIC_SCOPE_ELEMENT); } if (null != transformer.default_properties.getProperty(transformer.MAGIC_AUTHENTICATION_ELEMENT)) { authentication = transformer.default_properties.getProperty(transformer.MAGIC_AUTHENTICATION_ELEMENT); } if (null != transformer.default_properties.getProperty(transformer.MAGIC_SEARCHBASE_ELEMENT)) { searchbase = transformer.default_properties.getProperty(transformer.MAGIC_SEARCHBASE_ELEMENT); } if (null != transformer.default_properties.getProperty(transformer.MAGIC_SHOW_ATTRIBUTE_ELEMENT)) { showAttribute = transformer.default_properties.getProperty(transformer.MAGIC_SHOW_ATTRIBUTE_ELEMENT).equals("FALSE") ? false : true; } if (null != transformer.default_properties.getProperty(transformer.MAGIC_DOC_ELEMENT)) { doc_element = transformer.default_properties.getProperty(transformer.MAGIC_DOC_ELEMENT); } if (null != transformer.default_properties.getProperty(transformer.MAGIC_ROW_ELEMENT)) { row_element = transformer.default_properties.getProperty(transformer.MAGIC_ROW_ELEMENT); } if (null != transformer.default_properties.getProperty(transformer.MAGIC_ERROR_ELEMENT)) { error_element = transformer.default_properties.getProperty(transformer.MAGIC_ERROR_ELEMENT); } if (null != transformer.default_properties.getProperty(transformer.MAGIC_SAX_ERROR)) { sax_error = transformer.default_properties.getProperty(transformer.MAGIC_SAX_ERROR).equals("TRUE") ? true : false; } if (null != transformer.default_properties.getProperty(transformer.MAGIC_DEREF_LINK_ELEMENT)) { deref_link = transformer.default_properties.getProperty(transformer.MAGIC_DEREF_LINK_ELEMENT).equals("TRUE") ? true : false; } if (null != transformer.default_properties.getProperty(transformer.MAGIC_COUNT_LIMIT_ELEMENT)) { count_limit = Long.parseLong(transformer.default_properties.getProperty(transformer.MAGIC_COUNT_LIMIT_ELEMENT)); } if (null != transformer.default_properties.getProperty(transformer.MAGIC_TIME_LIMIT_ELEMENT)) { time_limit = Integer.parseInt(transformer.default_properties.getProperty(transformer.MAGIC_TIME_LIMIT_ELEMENT)); } if (null != transformer.default_properties.getProperty(transformer.MAGIC_DEBUG_ELEMENT)) { debug = transformer.default_properties.getProperty(transformer.MAGIC_DEBUG_ELEMENT).equals("TRUE") ? true : false; } } protected void execute() throws Exception, NamingException { String[] attrList = new String[attrListe.size()]; AttributesImpl attr = new AttributesImpl(); if (debug) { debugPrint(); } SearchControls constraints = new SearchControls(); attrListe.toArray(attrList); attrListe.clear(); try { connect(); switch (toDo) { case LDAPTransformer.STATE_INSIDE_EXECUTE_QUERY: try { if (scope.equals("OBJECT_SCOPE")) { constraints.setSearchScope(SearchControls.OBJECT_SCOPE); } else if (scope.equals("SUBTREE_SCOPE")) { constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); } else { constraints.setSearchScope(SearchControls.ONELEVEL_SCOPE); } constraints.setTimeLimit(time_limit); constraints.setDerefLinkFlag(deref_link); constraints.setCountLimit(count_limit); if (attrList.length > 0) { constraints.setReturningAttributes(attrList); } NamingEnumeration ldapresults = ctx.search(searchbase, filter, constraints); if (!doc_element.equals("")) { transformer.start(doc_element, attr); } while (ldapresults != null && ldapresults.hasMore()) { if (!row_element.equals("")) { transformer.start(row_element, attr); } SearchResult si = (SearchResult)ldapresults.next(); javax.naming.directory.Attributes attrs = si.getAttributes(); if (attrs != null) { NamingEnumeration ae = attrs.getAll(); while (ae.hasMoreElements()) { Attribute at = (Attribute)ae.next(); Enumeration vals = at.getAll(); String attrID = at.getID(); if (showAttribute) { transformer.start(attrID, attr); } String attrVal = (String)vals.nextElement(); if (query_index > 0) { switch (transformer.getQuery(query_index-1).current_state) { case LDAPTransformer.STATE_INSIDE_FILTER_ELEMENT: if (!transformer.getQuery(query_index-1).filter.equals("")) { transformer.getQuery(query_index-1).filter.concat(", "); } transformer.getQuery(query_index-1).filter.concat(attrID).concat("=").concat(attrVal); break; default: transformer.start(attrID, attr); } } else { transformer.data(String.valueOf(attrVal)); } if (showAttribute) { transformer.end(attrID); } } } if (!row_element.equals("")) { transformer.end(row_element); } } if (!doc_element.equals("")) { transformer.end(doc_element); } } catch(Exception e) { if (sax_error) { throw new Exception ("[LDAPTransformer] Error in LDAP-Query: " + e.toString()); } else { transformer.start(error_element, attr); transformer.data("[LDAPTransformer] Error in LDAP-Query: " + e); transformer.end(error_element); transformer.getTheLogger().error("[LDAPTransformer] Exception: " + e.toString()); } } break; case LDAPTransformer.STATE_INSIDE_EXECUTE_INCREMENT: try { if (scope.equals("OBJECT_SCOPE")) { constraints.setSearchScope(SearchControls.OBJECT_SCOPE); } else if (scope.equals("SUBTREE_SCOPE")) { constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); } else { constraints.setSearchScope(SearchControls.ONELEVEL_SCOPE); } constraints.setTimeLimit(time_limit); constraints.setDerefLinkFlag(deref_link); constraints.setCountLimit(count_limit); if (attrList.length != 1) { transformer.start(error_element, attr); transformer.data("Increment must reference exactly 1 attribute."); transformer.end(error_element); } else { constraints.setReturningAttributes(attrList); NamingEnumeration ldapresults = ctx.search(searchbase, filter, constraints); int attrVal = 0; String attrID = ""; SearchResult si = null; while (ldapresults != null && ldapresults.hasMore()) { si = (SearchResult)ldapresults.next(); javax.naming.directory.Attributes attrs = si.getAttributes(); if (attrs != null) { NamingEnumeration ae = attrs.getAll(); while (ae.hasMoreElements()) { Attribute at = (Attribute)ae.next(); Enumeration vals = at.getAll(); attrID = at.getID(); attrVal = Integer.parseInt((String)vals.nextElement()); } } } ++attrVal; // Specify the changes to make ModificationItem[] mods = new ModificationItem[1]; // Replace the "mail" attribute with a new value mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute(attrID, Integer.toString(attrVal))); // Perform the requested modifications on the named object ctx.modifyAttributes(new StringBuffer(si.toString().substring(0,si.toString().indexOf(":"))) .append(",").append(searchbase).toString(), mods); } } catch(Exception e) { if (sax_error) { throw new Exception ("[LDAPTransformer] Error incrementing an attribute: " + e.toString()); } else { transformer.start(error_element, attr); transformer.data("[LDAPTransformer] Error incrementing an attribute: " + e.toString()); transformer.end(error_element); transformer.getTheLogger().error("[LDAPTransformer] Error incrementing an attribute: " + e.toString()); } } break; default: } //end switch } catch (NamingException e) { if (sax_error) { throw new NamingException ("[LDAPTransformer] Failed ldap-connection to directory service: " + e.toString()); } else { transformer.start(error_element, attr); transformer.data("[LDAPTransformer] Failed ldap-connection to directory service."); transformer.end(error_element); transformer.getTheLogger().error("[LDAPTransformer] Failed to connect to " + serverurl + e.toString()); } } try { disconnect(); } catch (NamingException e) { if (sax_error) { throw new NamingException ("[LDAPTransformer] Failed ldap-disconnection from directory service: " + e.toString()); } else { transformer.start(error_element, attr); transformer.data("[LDAPTransformer] Failed ldap-disconnection to directory service."); transformer.end(error_element); transformer.getTheLogger().error("[LDAPTransformer] Failed to disconnect from " + serverurl + e.toString()); } } } protected void addAttrList(String attr) { attrListe.add(attr); } protected void connect() throws NamingException { if (root_dn != null && password != null) { env.put(Context.SECURITY_AUTHENTICATION, authentication); env.put(Context.SECURITY_PRINCIPAL, root_dn); env.put(Context.SECURITY_CREDENTIALS, password); } env.put("java.naming.ldap.version", version ); env.put(Context.INITIAL_CONTEXT_FACTORY, initializer); env.put(Context.PROVIDER_URL, serverurl + ":" + port); try { ctx = new InitialDirContext(env); } catch (NamingException e) { env.clear(); throw new NamingException (e.toString()); } } protected void disconnect() throws NamingException { try { if (ctx != null) ctx.close(); } catch (NamingException e) { ctx = null; env.clear(); throw new NamingException (e.toString()); } ctx = null; env.clear(); } protected void debugPrint() { transformer.getTheLogger().debug("[LDAPTransformer] query_index: " + query_index); transformer.getTheLogger().debug("[LDAPTransformer] current_state: " + current_state); transformer.getTheLogger().debug("[LDAPTransformer] serverurl: " + serverurl); transformer.getTheLogger().debug("[LDAPTransformer] port: " + port); transformer.getTheLogger().debug("[LDAPTransformer] root_dn: " + root_dn); transformer.getTheLogger().debug("[LDAPTransformer] password: " + password); transformer.getTheLogger().debug("[LDAPTransformer] version: " + version); transformer.getTheLogger().debug("[LDAPTransformer] scope: " + scope); transformer.getTheLogger().debug("[LDAPTransformer] authentication: " + authentication); transformer.getTheLogger().debug("[LDAPTransformer] toDo: " + toDo); transformer.getTheLogger().debug("[LDAPTransformer] searchbase: " + searchbase); transformer.getTheLogger().debug("[LDAPTransformer] showAttribute: " + showAttribute); transformer.getTheLogger().debug("[LDAPTransformer] attribute: " + attrListe.toString()); transformer.getTheLogger().debug("[LDAPTransformer] filter: " + filter); transformer.getTheLogger().debug("[LDAPTransformer] doc_element: " + doc_element); transformer.getTheLogger().debug("[LDAPTransformer] row_element: " + row_element); transformer.getTheLogger().debug("[LDAPTransformer] error_element: " + error_element); transformer.getTheLogger().debug("[LDAPTransformer] sax-error: " + sax_error); transformer.getTheLogger().debug("[LDAPTransformer] deref_link: " + deref_link); transformer.getTheLogger().debug("[LDAPTransformer] count_limit: " + count_limit); transformer.getTheLogger().debug("[LDAPTransformer] time_limit: " + time_limit); } } } 1.1 xml-cocoon2/src/blocks/naming/conf/naming.xmap Index: naming.xmap =================================================================== <?xml version="1.0"?> <xmap xpath="/sitemap/components/transformers" unless="transformer[@name='ldap']"> <map:transformer name="ldap" src="org.apache.cocoon.transformation.LDAPTransformer"/> </xmap> 1.1 xml-cocoon2/src/blocks/naming/samples/notyet.txt <<Binary file>>
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]