| // 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(); |
| } |
| } |