| // 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 com.cloud.bridge.util; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| |
| /** |
| * 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(); |
| } |
| } |