/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.directory.studio.openldap.config; import java.util.List; import org.apache.directory.api.ldap.model.name.Dn; import org.apache.directory.api.util.Strings; /** * The class is a utility class for the OpenLDAP Configuration Plugin * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class OpenLdapConfigurationPluginUtils { /** * Strips the ordering prefix if the given string contains one. * * @param s the string * @return the string without the ordering prefix */ public static String stripOrderingPrefix( String s ) { if ( hasOrderingPrefix( s ) ) { int indexOfClosingCurlyBracket = s.indexOf( '}' ); if ( indexOfClosingCurlyBracket != -1 ) { return s.substring( indexOfClosingCurlyBracket + 1 ); } } return s; } /** * Strips the ordering postfix if the given string contains one. * * @param s the string * @return the string without the ordering postfix */ public static String stripOrderingPostfix( String s ) { if ( hasOrderingPostfix( s ) ) { int indexOfOpeningCurlyBracket = s.indexOf( '{' ); if ( indexOfOpeningCurlyBracket != -1 ) { return s.substring( 0, indexOfOpeningCurlyBracket ); } } return s; } /** * Indicates if the given string contains an ordering prefix. * * @param s the string * @return <code>true</code> if the given string contains an ordering prefix, * <code>false</code> if not. */ public static boolean hasOrderingPrefix( String s ) { return parseOrderingPrefix( s ) != null; } /** * Indicates if the given string contains an ordering postfix. * * @param s the string * @return <code>true</code> if the given string contains an ordering postfix, * <code>false</code> if not. */ public static boolean hasOrderingPostfix( String s ) { return parseOrderingPostfix( s ) != null; } /** * Fetch the prefix from a String. The prefix must respect the following regexp : * <pre> * ^\{-?\d+\}.*$ * </pre> */ private static Integer parseOrderingPrefix( String prefixString ) { if ( prefixString == null ) { return null; } int pos = 0; if ( !Strings.isCharASCII( prefixString, pos++, '{') ) { return null; } boolean positive = true; int prefix = 0; if ( Strings.isCharASCII( prefixString, pos, '-') ) { positive = false; pos++; } char car; while ( ( car = Strings.charAt( prefixString, pos++ ) ) != '\0' ) { switch ( car ) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': prefix = prefix * 10 + car - '0'; break; case '}' : if ( positive ) { return prefix; } else { return -prefix; } default : return null; } } return null; } /** * Fetch the postfix from a String. The postfix must respect the following regexp : * <pre> * ^.*\{-?\d+\}$ * </pre> */ private static Integer parseOrderingPostfix( String postfixString ) { if ( postfixString == null ) { return null; } int pos = -1; for ( int idx = 0; idx < postfixString.length(); idx++ ) { if ( Strings.isCharASCII( postfixString, idx, '{') ) { pos = idx + 1; break; } } if ( pos == -1 ) { return null; } boolean positive = true; int prefix = 0; if ( Strings.isCharASCII( postfixString, pos, '-') ) { positive = false; } char car; while ( ( car = Strings.charAt( postfixString, pos++ ) ) != '\0' ) { switch ( car ) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': prefix = prefix * 10 + car - '0'; break; case '}' : if ( positive ) { return prefix; } else { return -prefix; } default : return null; } } return null; } /** * Gets the ordering prefix value (or -1 if none is found). The String's prefix * is at the beginning : * <pre> * {n}blah * </pre> * * @param prefixString the string * @return the precedence value (or -1 if none is found). */ public static int getOrderingPrefix( String prefixString ) { Integer orderingPrefix = parseOrderingPrefix( prefixString ); if ( orderingPrefix == null ) { return -1; } else { return orderingPrefix; } } /** * Gets the ordering postfix value (or -1 if none is found). * * @param postfixString the string * @return the precedence value (or -1 if none is found). */ public static int getOrderingPostfix( String postfixString ) { Integer orderingPostfix = parseOrderingPostfix( postfixString ); if ( orderingPostfix == null ) { return -1; } else { return orderingPostfix; } } /** * Gets the first value of the given list of values. * * @param values the list of values * @return the first value if it exists. */ public static String getFirstValueString( List<String> values ) { if ( ( values != null ) && ( values.size() > 0 ) ) { return values.get( 0 ); } return null; } /** * Gets the first value of the given list of values. * * @param values the list of values * @return the first value if it exists. */ public static String getFirstValueDn( List<Dn> values ) { if ( ( values != null ) && ( values.size() > 0 ) ) { return values.get( 0 ).toString(); } return null; } /** * Concatenates a list of string values. * Values are separated by a comma and a space (", "). * * @param list * @return */ public static String concatenate( List<String> list ) { StringBuilder sb = new StringBuilder(); boolean isFirst = true; for ( String string : list ) { if ( isFirst ) { isFirst = false; } else { sb.append( ", " ); } sb.append( string ); } return sb.toString(); } }