| /* | |
| * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved. | |
| * | |
| * 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 com.cloud.bridge.util; | |
| import java.io.IOException; | |
| import java.io.InputStream; | |
| /** | |
| * @author Kelven, John Zucker | |
| * Provide converters for regexp (case independent tokens) | |
| * Also provide upper case or lower case (default) converters for byte array b[] to hex String | |
| */ | |
| public class StringHelper { | |
| public static final String EMPTY_STRING = ""; | |
| private static final char[] hexCharsUpperCase = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; | |
| private static final char[] hexCharsLowerCase = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' }; | |
| /* Convert byte array b[] into an uppercase hex string | |
| */ | |
| public static String toHexStringUpperCase(byte[] b) { | |
| StringBuffer sb = new StringBuffer(); | |
| for (int i = 0; i < b.length; i++) { | |
| sb.append(hexCharsUpperCase[ (int)(((int)b[i] >> 4) & 0x0f)]); | |
| sb.append(hexCharsUpperCase[ (int)(((int)b[i]) & 0x0f)]); | |
| } | |
| return sb.toString(); | |
| } | |
| /* Convert byte array b[] into a lowercase (default) hex string | |
| */ | |
| public static String toHexString(byte[] b) { | |
| StringBuffer sb = new StringBuffer(); | |
| for (int i = 0; i < b.length; i++) { | |
| sb.append(hexCharsLowerCase[ (int)(((int)b[i] >> 4) & 0x0f)]); | |
| sb.append(hexCharsLowerCase[ (int)(((int)b[i]) & 0x0f)]); | |
| } | |
| return sb.toString(); | |
| } | |
| public static String substringInBetween(String name, | |
| String prefix, String delimiter) { | |
| int startPos = 0; | |
| if(prefix != null) | |
| startPos = prefix.length() + 1; | |
| int endPos = name.indexOf(delimiter, startPos); | |
| if(endPos > 0) | |
| return name.substring(startPos, endPos); | |
| return null; | |
| } | |
| public static String stringFromStream(InputStream is) throws IOException { | |
| StringBuffer sb = new StringBuffer(); | |
| byte[] b = new byte[4096]; | |
| int n; | |
| while((n = is.read(b)) != -1) { | |
| sb.append(new String(b, 0, n)); | |
| } | |
| return sb.toString(); | |
| } | |
| /** | |
| * Convert the string into a regex to allow easy matching. In both S3 and EC2 regex strings | |
| * are used for matching. We must remember to quote all special regex characters that appear | |
| * in the string. | |
| */ | |
| public static String toRegex(String param) | |
| { | |
| StringBuffer regex = new StringBuffer(); | |
| for( int i=0; i < param.length(); i++ ) | |
| { | |
| char next = param.charAt( i ); | |
| if ('*' == next) regex.append( ".+" ); // -> multi-character match wild card | |
| else if ('?' == next) regex.append( "." ); // -> single-character match wild card | |
| else if ('.' == next) regex.append( "\\." ); // all of these are special regex characters we are quoting | |
| else if ('+' == next) regex.append( "\\+" ); | |
| else if ('$' == next) regex.append( "\\$" ); | |
| else if ('\\' == next) regex.append( "\\\\" ); | |
| else if ('[' == next) regex.append( "\\[" ); | |
| else if (']' == next) regex.append( "\\]" ); | |
| else if ('{' == next) regex.append( "\\{" ); | |
| else if ('}' == next) regex.append( "\\}" ); | |
| else if ('(' == next) regex.append( "\\(" ); | |
| else if (')' == next) regex.append( "\\)" ); | |
| else if ('&' == next) regex.append( "\\&" ); | |
| else if ('^' == next) regex.append( "\\^" ); | |
| else if ('-' == next) regex.append( "\\-" ); | |
| else if ('|' == next) regex.append( "\\|" ); | |
| else regex.append( next ); | |
| } | |
| return regex.toString(); | |
| } | |
| } |