/*
* Copyright (c) 2016 Network New Technologies Inc.
*
* 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.networknt.utility;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.ByteBuffer;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Util {
static final Logger logger = LoggerFactory.getLogger(Util.class);
/**
* Generate UUID across the entire app and it is used for correlationId.
*
* @return String correlationId
*/
public static String getUUID() {
UUID id = UUID.randomUUID();
ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
bb.putLong(id.getMostSignificantBits());
bb.putLong(id.getLeastSignificantBits());
return Base64.encodeBase64URLSafeString(bb.array());
}
/**
* Quote the given string if needed
*
* @param value The value to quote (e.g. bob)
* @return The quoted string (e.g. "bob")
*/
public static String quote(final String value) {
if (value == null) {
return null;
}
String result = value;
if (!result.startsWith("\"")) {
result = "\"" + result;
}
if (!result.endsWith("\"")) {
result = result + "\"";
}
return result;
}
/**
* Get InetAddress
* @return The InetAddress object
*/
public static InetAddress getInetAddress() {
InetAddress inetAddress = null;
try {
inetAddress = InetAddress.getLocalHost();
} catch (IOException ioe) {
logger.error("Error in getting InetAddress", ioe);
}
return inetAddress;
}
public static String getJarVersion() {
String path = Util.class.getProtectionDomain().getCodeSource().getLocation().getPath();
//String path = "/Users/stevehu/project/light-example-4j/petstore/target/swagger-light-server-1.0.0.jar";
logger.debug("path = " + path);
String ver = null;
if(path.endsWith(".jar")) {
int endIndex = path.indexOf(".jar");
int startIndex = path.lastIndexOf("/");
String jarName = path.substring(startIndex + 1, endIndex);
ver = jarName.substring(jarName.lastIndexOf("-") + 1);
}
return ver;
}
public static String getFrameworkVersion() {
// this doesn't work.
// TODO make it work.
Class clazz = Util.class;
URL location = clazz.getResource('/' + clazz.getName().replace('.', '/') + ".class");
System.out.println("location = " + location);
//location = jar:file:/Users/stevehu/project/light-example-4j/petstore/target/swagger-light-server-1.0.0.jar!/com/networknt/utility/Util.class
return location.toString();
}
public static int parseInteger(String intStr) {
if (intStr == null) {
return Constants.DEFAULT_INT_VALUE;
}
try {
return Integer.parseInt(intStr);
} catch (NumberFormatException e) {
return Constants.DEFAULT_INT_VALUE;
}
}
public static String urlEncode(String value) {
if (StringUtils.isEmpty(value)) {
return "";
}
try {
return URLEncoder.encode(value, Constants.DEFAULT_CHARACTER);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
public static String urlDecode(String value) {
if (StringUtils.isBlank(value)) {
return "";
}
try {
return URLDecoder.decode(value, Constants.DEFAULT_CHARACTER);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
public static String substituteVariables(String template, Map<String, String> variables) {
Pattern pattern = Pattern.compile("\\$\\{(.+?)\\}");
Matcher matcher = pattern.matcher(template);
// StringBuilder cannot be used here because Matcher expects StringBuffer
StringBuffer buffer = new StringBuffer();
while (matcher.find()) {
if (variables.containsKey(matcher.group(1))) {
String replacement = variables.get(matcher.group(1));
// quote to work properly with $ and {,} signs
matcher.appendReplacement(buffer, replacement != null ? Matcher.quoteReplacement(replacement) : "null");
}
}
matcher.appendTail(buffer);
return buffer.toString();
}
}