Author: akarasulu Date: Thu Dec 2 00:50:23 2004 New Revision: 109482 URL: http://svn.apache.org/viewcvs?view=rev&rev=109482 Log: Changes ...
o added new function to StringTools to strip consecutive instances of a character in a string replacing them with a single instance o added a test case for StringTools o used this function to trim down asterisks within search filters to prevent parser from freaking; these asterisks are superfluous and one is enough Added: incubator/directory/ldap/trunk/common/src/test/org/apache/ldap/common/util/StringToolsTest.java Modified: incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/filter/FilterParserImpl.java incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/util/StringTools.java Modified: incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/filter/FilterParserImpl.java Url: http://svn.apache.org/viewcvs/incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/filter/FilterParserImpl.java?view=diff&rev=109482&p1=incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/filter/FilterParserImpl.java&r1=109481&p2=incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/filter/FilterParserImpl.java&r2=109482 ============================================================================== --- incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/filter/FilterParserImpl.java (original) +++ incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/filter/FilterParserImpl.java Thu Dec 2 00:50:23 2004 @@ -23,6 +23,7 @@ import java.text.ParseException; import antlr.*; +import org.apache.ldap.common.util.StringTools; public class FilterParserImpl implements FilterParser @@ -93,6 +94,11 @@ if ( filter == null || filter.trim().equals( "" ) ) { return null; + } + + if ( filter.indexOf( "**" ) > -1 ) + { + filter = StringTools.trimConsecutiveToOne( filter, '*' ); } this.parserPipe.write( filter.getBytes() ) ; Modified: incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/util/StringTools.java Url: http://svn.apache.org/viewcvs/incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/util/StringTools.java?view=diff&rev=109482&p1=incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/util/StringTools.java&r1=109481&p2=incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/util/StringTools.java&r2=109482 ============================================================================== --- incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/util/StringTools.java (original) +++ incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/util/StringTools.java Thu Dec 2 00:50:23 2004 @@ -1,193 +1,5 @@ /* - * Apache License - * Version 2.0, January 2004 - * http://www.apache.org/licenses/ - * - * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - * - * 1. Definitions. - * - * "License" shall mean the terms and conditions for use, reproduction, - * and distribution as defined by Sections 1 through 9 of this document. - * - * "Licensor" shall mean the copyright owner or entity authorized by - * the copyright owner that is granting the License. - * - * "Legal Entity" shall mean the union of the acting entity and all - * other entities that control, are controlled by, or are under common - * control with that entity. For the purposes of this definition, - * "control" means (i) the power, direct or indirect, to cause the - * direction or management of such entity, whether by contract or - * otherwise, or (ii) ownership of fifty percent (50%) or more of the - * outstanding shares, or (iii) beneficial ownership of such entity. - * - * "You" (or "Your") shall mean an individual or Legal Entity - * exercising permissions granted by this License. - * - * "Source" form shall mean the preferred form for making modifications, - * including but not limited to software source code, documentation - * source, and configuration files. - * - * "Object" form shall mean any form resulting from mechanical - * transformation or translation of a Source form, including but - * not limited to compiled object code, generated documentation, - * and conversions to other media types. - * - * "Work" shall mean the work of authorship, whether in Source or - * Object form, made available under the License, as indicated by a - * copyright notice that is included in or attached to the work - * (an example is provided in the Appendix below). - * - * "Derivative Works" shall mean any work, whether in Source or Object - * form, that is based on (or derived from) the Work and for which the - * editorial revisions, annotations, elaborations, or other modifications - * represent, as a whole, an original work of authorship. For the purposes - * of this License, Derivative Works shall not include works that remain - * separable from, or merely link (or bind by name) to the interfaces of, - * the Work and Derivative Works thereof. - * - * "Contribution" shall mean any work of authorship, including - * the original version of the Work and any modifications or additions - * to that Work or Derivative Works thereof, that is intentionally - * submitted to Licensor for inclusion in the Work by the copyright owner - * or by an individual or Legal Entity authorized to submit on behalf of - * the copyright owner. For the purposes of this definition, "submitted" - * means any form of electronic, verbal, or written communication sent - * to the Licensor or its representatives, including but not limited to - * communication on electronic mailing lists, source code control systems, - * and issue tracking systems that are managed by, or on behalf of, the - * Licensor for the purpose of discussing and improving the Work, but - * excluding communication that is conspicuously marked or otherwise - * designated in writing by the copyright owner as "Not a Contribution." - * - * "Contributor" shall mean Licensor and any individual or Legal Entity - * on behalf of whom a Contribution has been received by Licensor and - * subsequently incorporated within the Work. - * - * 2. Grant of Copyright License. Subject to the terms and conditions of - * this License, each Contributor hereby grants to You a perpetual, - * worldwide, non-exclusive, no-charge, royalty-free, irrevocable - * copyright license to reproduce, prepare Derivative Works of, - * publicly display, publicly perform, sublicense, and distribute the - * Work and such Derivative Works in Source or Object form. - * - * 3. Grant of Patent License. Subject to the terms and conditions of - * this License, each Contributor hereby grants to You a perpetual, - * worldwide, non-exclusive, no-charge, royalty-free, irrevocable - * (except as stated in this section) patent license to make, have made, - * use, offer to sell, sell, import, and otherwise transfer the Work, - * where such license applies only to those patent claims licensable - * by such Contributor that are necessarily infringed by their - * Contribution(s) alone or by combination of their Contribution(s) - * with the Work to which such Contribution(s) was submitted. If You - * institute patent litigation against any entity (including a - * cross-claim or counterclaim in a lawsuit) alleging that the Work - * or a Contribution incorporated within the Work constitutes direct - * or contributory patent infringement, then any patent licenses - * granted to You under this License for that Work shall terminate - * as of the date such litigation is filed. - * - * 4. Redistribution. You may reproduce and distribute copies of the - * Work or Derivative Works thereof in any medium, with or without - * modifications, and in Source or Object form, provided that You - * meet the following conditions: - * - * (a) You must give any other recipients of the Work or - * Derivative Works a copy of this License; and - * - * (b) You must cause any modified files to carry prominent notices - * stating that You changed the files; and - * - * (c) You must retain, in the Source form of any Derivative Works - * that You distribute, all copyright, patent, trademark, and - * attribution notices from the Source form of the Work, - * excluding those notices that do not pertain to any part of - * the Derivative Works; and - * - * (d) If the Work includes a "NOTICE" text file as part of its - * distribution, then any Derivative Works that You distribute must - * include a readable copy of the attribution notices contained - * within such NOTICE file, excluding those notices that do not - * pertain to any part of the Derivative Works, in at least one - * of the following places: within a NOTICE text file distributed - * as part of the Derivative Works; within the Source form or - * documentation, if provided along with the Derivative Works; or, - * within a display generated by the Derivative Works, if and - * wherever such third-party notices normally appear. The contents - * of the NOTICE file are for informational purposes only and - * do not modify the License. You may add Your own attribution - * notices within Derivative Works that You distribute, alongside - * or as an addendum to the NOTICE text from the Work, provided - * that such additional attribution notices cannot be construed - * as modifying the License. - * - * You may add Your own copyright statement to Your modifications and - * may provide additional or different license terms and conditions - * for use, reproduction, or distribution of Your modifications, or - * for any such Derivative Works as a whole, provided Your use, - * reproduction, and distribution of the Work otherwise complies with - * the conditions stated in this License. - * - * 5. Submission of Contributions. Unless You explicitly state otherwise, - * any Contribution intentionally submitted for inclusion in the Work - * by You to the Licensor shall be under the terms and conditions of - * this License, without any additional terms or conditions. - * Notwithstanding the above, nothing herein shall supersede or modify - * the terms of any separate license agreement you may have executed - * with Licensor regarding such Contributions. - * - * 6. Trademarks. This License does not grant permission to use the trade - * names, trademarks, service marks, or product names of the Licensor, - * except as required for reasonable and customary use in describing the - * origin of the Work and reproducing the content of the NOTICE file. - * - * 7. Disclaimer of Warranty. Unless required by applicable law or - * agreed to in writing, Licensor provides the Work (and each - * Contributor provides its Contributions) on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied, including, without limitation, any warranties or conditions - * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - * PARTICULAR PURPOSE. You are solely responsible for determining the - * appropriateness of using or redistributing the Work and assume any - * risks associated with Your exercise of permissions under this License. - * - * 8. Limitation of Liability. In no event and under no legal theory, - * whether in tort (including negligence), contract, or otherwise, - * unless required by applicable law (such as deliberate and grossly - * negligent acts) or agreed to in writing, shall any Contributor be - * liable to You for damages, including any direct, indirect, special, - * incidental, or consequential damages of any character arising as a - * result of this License or out of the use or inability to use the - * Work (including but not limited to damages for loss of goodwill, - * work stoppage, computer failure or malfunction, or any and all - * other commercial damages or losses), even if such Contributor - * has been advised of the possibility of such damages. - * - * 9. Accepting Warranty or Additional Liability. While redistributing - * the Work or Derivative Works thereof, You may choose to offer, - * and charge a fee for, acceptance of support, warranty, indemnity, - * or other liability obligations and/or rights consistent with this - * License. However, in accepting such obligations, You may act only - * on Your own behalf and on Your sole responsibility, not on behalf - * of any other Contributor, and only if You agree to indemnify, - * defend, and hold each Contributor harmless for any liability - * incurred by, or claims asserted against, such Contributor by reason - * of your accepting any such warranty or additional liability. - * - * END OF TERMS AND CONDITIONS - * - * APPENDIX: How to apply the Apache License to your work. - * - * To apply the Apache License to your work, attach the following - * boilerplate notice, with the fields enclosed by brackets "[]" - * replaced with your own identifying information. (Don't include - * the brackets!) The text should be enclosed in the appropriate - * comment syntax for the file format. We also recommend that a - * file or class name and description of purpose be included on the - * same "printed page" as the copyright notice for easier - * identification within third-party archives. - * - * Copyright [yyyy] [name of copyright owner] + * Copyright 2004 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -202,16 +14,6 @@ * limitations under the License. * */ - -/* - * $Id: StringTools.java,v 1.13 2003/08/22 02:13:30 akarasulu Exp $ - * - * -- (c) LDAPd Group -- - * -- Please refer to the LICENSE.txt file in the root directory of -- - * -- any LDAPd project for copyright and distribution information. -- - * - */ - package org.apache.ldap.common.util ; @@ -229,12 +31,38 @@ * string operations: all is done in the same buffer without creating a bunch * of string objects. * - * @author <a href="mailto:[EMAIL PROTECTED]">Alex Karasulu</a> - * @author $Author: akarasulu $ - * @version $Revision: 1.13 $ + * @author <a href="mailto:[EMAIL PROTECTED]">Apache Directory Project</a> + * @version $Rev$ */ public class StringTools { + /** + * Trims several consecutive characters into one. + * + * @param str the string to trim consecutive characters of + * @param ch the character to trim down + * @return the newly trimmed down string + */ + public static String trimConsecutiveToOne( String str, char ch ) + { + StringBuffer buf = new StringBuffer(); + buf.append( str ); + + for ( int ii = 0; ii < buf.length(); ii++ ) + { + if ( buf.charAt( ii ) == ch ) + { + while ( ii+1 < buf.length() && buf.charAt( ii + 1 ) == ch ) + { + buf.deleteCharAt( ii + 1 ); + } + } + } + + return buf.toString(); + } + + /** * A deep trim of a string remove whitespace from the ends as well as * excessive whitespace within the inside of the string between Added: incubator/directory/ldap/trunk/common/src/test/org/apache/ldap/common/util/StringToolsTest.java Url: http://svn.apache.org/viewcvs/incubator/directory/ldap/trunk/common/src/test/org/apache/ldap/common/util/StringToolsTest.java?view=auto&rev=109482 ============================================================================== --- (empty file) +++ incubator/directory/ldap/trunk/common/src/test/org/apache/ldap/common/util/StringToolsTest.java Thu Dec 2 00:50:23 2004 @@ -0,0 +1,61 @@ +/* + * Copyright 2004 The Apache Software Foundation + * + * 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.ldap.common.util; + + +import junit.framework.TestCase; + + +/** + * Tests the StringTools class methods. + * + * @author <a href="mailto:[EMAIL PROTECTED]">Apache Directory Project</a> + * @version $Rev$ + */ +public class StringToolsTest extends TestCase +{ + public void testTrimConsecutiveToOne() + { + String input = null; + String result = null; + + input = "akarasulu**"; + result = StringTools.trimConsecutiveToOne( input, '*' ); + assertEquals( "akarasulu*", result ); + + input = "*****akarasulu**"; + result = StringTools.trimConsecutiveToOne( input, '*' ); + assertEquals( "*akarasulu*", result ); + + input = "**akarasulu"; + result = StringTools.trimConsecutiveToOne( input, '*' ); + assertEquals( "*akarasulu", result ); + + input = "**akar****asulu**"; + result = StringTools.trimConsecutiveToOne( input, '*' ); + assertEquals( "*akar*asulu*", result ); + + input = "akarasulu"; + result = StringTools.trimConsecutiveToOne( input, '*' ); + assertEquals( "akarasulu", result ); + + input = "*a*k*a*r*a*s*u*l*u*"; + result = StringTools.trimConsecutiveToOne( input, '*' ); + assertEquals( "*a*k*a*r*a*s*u*l*u*", result ); + + } +}
