/** * 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 org.apache.tajo.util; import org.apache.commons.lang.SystemUtils; import org.apache.hadoop.util.ShutdownHookManager; import org.apache.hadoop.util.SignalLogger; import java.util.Arrays; public class StringUtils { /** * Priority of the StringUtils shutdown hook. */ public static final int SHUTDOWN_HOOK_PRIORITY = 0; /** * * Given the time in long milliseconds, returns a * String in the format X hrs, Y mins, S sec, M msecs * * @param timeDiff The time difference to format */ public static String formatTime(long timeDiff){ StringBuilder buf = new StringBuilder(); long hours = timeDiff / (60*60*1000); long rem = (timeDiff % (60*60*1000)); long minutes = rem / (60*1000); rem = rem % (60*1000); long seconds = rem / 1000; if (hours != 0){ buf.append(hours); buf.append(" hrs, "); } if (minutes != 0){ buf.append(minutes); buf.append(" mins, "); } if (seconds != 0) { buf.append(seconds); buf.append(" sec"); } if (timeDiff < 1000) { buf.append(timeDiff); buf.append(" msec"); } return buf.toString(); } public static String quote(String str) { return "'" + str + "'"; } public static String doubleQuote(String str) { return "\"" + str + "\""; } public static boolean isPartOfAnsiSQLIdentifier(char character) { return isLowerCaseAlphabet(character) || isUpperCaseAlphabet(character) || isDigit(character) || isUndersscore(character); } public static boolean isUndersscore(char character) { return character == '_'; } public static boolean isLowerCaseAlphabet(char character) { return 'a' <= character && character <= 'z'; } public static boolean isUpperCaseAlphabet(char character) { return 'A' <= character && character <= 'Z'; } public static boolean isDigit(char character) { return '0' <= character && character <= '9'; } private static final String REGEX_SPECIAL_CHARACTERS = "([.*${}?|\\^\\-\\[\\]])"; public static String escapeRegexp(String literal) { return literal.replaceAll(REGEX_SPECIAL_CHARACTERS, "\\\\$1"); } private static final String LIKE_SPECIAL_CHARACTERS = "([_%])"; public static String escapeLike(String literal) { return literal.replaceAll(LIKE_SPECIAL_CHARACTERS, "\\\\$1"); } /** * Return a message for logging. * @param prefix prefix keyword for the message * @param msg content of the message * @return a message for logging */ private static String toStartupShutdownString(String prefix, String [] msg) { StringBuilder b = new StringBuilder(prefix); b.append("\n/************************************************************"); for(String s : msg) b.append("\n" + prefix + s); b.append("\n************************************************************/"); return b.toString(); } /** * Print a log message for starting up and shutting down * @param clazz the class of the server * @param args arguments * @param LOG the target log object */ public static void startupShutdownMessage(Class<?> clazz, String[] args, final org.apache.commons.logging.Log LOG) { final String hostname = org.apache.hadoop.net.NetUtils.getHostname(); final String classname = clazz.getSimpleName(); LOG.info( toStartupShutdownString("STARTUP_MSG: ", new String[] { "Starting " + classname, " host = " + hostname, " args = " + Arrays.asList(args), " version = " + org.apache.tajo.util.VersionInfo.getVersion(), " classpath = " + System.getProperty("java.class.path"), " build = " + org.apache.tajo.util.VersionInfo.getUrl() + " -r " + org.apache.tajo.util.VersionInfo.getRevision() + "; compiled by '" + org.apache.tajo.util.VersionInfo.getUser() + "' on " + org.apache.tajo.util.VersionInfo.getDate(), " java = " + System.getProperty("java.version") } ) ); if (SystemUtils.IS_OS_UNIX) { try { SignalLogger.INSTANCE.register(LOG); } catch (Throwable t) { LOG.warn("failed to register any UNIX signal loggers: ", t); } } ShutdownHookManager.get().addShutdownHook( new Runnable() { @Override public void run() { LOG.info(toStartupShutdownString("SHUTDOWN_MSG: ", new String[]{ "Shutting down " + classname + " at " + hostname})); } }, SHUTDOWN_HOOK_PRIORITY); } }