/*
* Copyright (c) 2016, Huawei Technologies Co., Ltd.
*
* 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.openo.baseservice.roa.util.clientsdk;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Collection;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Http utilities.
*
*
*
*
* @author
* @version SDNO 0.5 28-May-2016
*/
public class HttpUtil {
/**
*
*/
private static final String APPLICATION_JSON = "application/json";
private static final Logger LOGGER = LoggerFactory.getLogger(HttpUtil.class);
private HttpUtil() {
}
/**
* Check if the given array contains the given value (with case-insensitive comparison).
*
*
* @param array The array
* @param value The value to search
* @return true if the array contains the value
* @since SDNO 0.5
*/
public static boolean containsIgnoreCase(final String[] array, final String value) {
for(final String str : array) {
if(value == null && str == null) {
return true;
}
if(value != null && value.equalsIgnoreCase(str)) {
return true;
}
}
return false;
}
/**
* Join an array of strings with the given separator.
*
*
* @param array The array of strings
* @param separator The separator
* @return the resulting string
* @since SDNO 0.5
*/
public static String join(final String[] array, final String separator) {
final int len = array.length;
if(len == 0) {
return "";
}
final StringBuilder out = new StringBuilder();
out.append(array[0]);
for(int i = 1; i < len; i++) {
out.append(separator).append(array[i]);
}
return out.toString();
}
/**
* Format the given parameter object into string.
*
*
* @param param param input
* @return query param string
* @since SDNO 0.5
*/
public static String parameterToString(final Object param) {
if(param == null) {
return "";
} else if(param instanceof Date) {
return Long.toString(((Date)param).getTime());
} else if(param instanceof Collection) {
final StringBuilder b = new StringBuilder();
for(final Object o : (Collection)param) {
if(b.length() > 0) {
b.append(',');
}
b.append(String.valueOf(o));
}
return b.toString();
} else {
return String.valueOf(param);
}
}
/**
* get accept header
*
*
* @param accepts accepts accept types
* @return the accepts string
* @since SDNO 0.5
*/
public static String selectHeaderAccept(final String[] accepts) {
if(accepts.length == 0) {
return null;
}
if(HttpUtil.containsIgnoreCase(accepts, APPLICATION_JSON)) {
return APPLICATION_JSON;
}
return HttpUtil.join(accepts, ",");
}
/**
* select head content type
*
*
* @param contentTypes contentTypes content types
* @return the json string or the first content type
* @since SDNO 0.5
*/
public static String selectHeaderContentType(final String[] contentTypes) {
if(contentTypes.length == 0) {
return APPLICATION_JSON;
}
if(HttpUtil.containsIgnoreCase(contentTypes, APPLICATION_JSON)) {
return APPLICATION_JSON;
}
return contentTypes[0];
}
/**
* Escape the given string to be used as URL query value.
*
* @param str str param str
* @return escape string
* @since SDNO 0.5
*/
public static String escapeString(final String str) {
try {
return URLEncoder.encode(str, "utf8").replaceAll("\\+", "%20");
} catch(final UnsupportedEncodingException e) {
LOGGER.info("UTF8 is not supported", e);
return str;
}
}
}