/* * Copyright © 2016 Cask Data, 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 co.cask.cdap.dq.testclasses; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.base.Throwables; import java.util.concurrent.TimeUnit; /** * Utility class for ETL */ public final class ETLUtils { /** * Parses a duration String to its long value. * Frequency string consists of a number followed by an unit, with 's' for seconds, 'm' for minutes, 'h' for hours * and 'd' for days. For example, an input of '5m' means 5 minutes which will be parsed to 300000 milliseconds. * * @param durationStr the duration string (ex: 5m, 5h etc). * @return long which is milliseconds equivalent of the duration string */ public static long parseDuration(String durationStr) { //TODO: replace with TimeMathParser (available only internal to cdap) Preconditions.checkArgument(!Strings.isNullOrEmpty(durationStr)); durationStr = durationStr.toLowerCase(); String value = durationStr.substring(0, durationStr.length() - 1); int parsedValue = 0; try { parsedValue = Integer.parseInt(value); } catch (NumberFormatException nfe) { Throwables.propagate(nfe); } Preconditions.checkArgument(parsedValue >= 0); char lastChar = durationStr.charAt(durationStr.length() - 1); switch (lastChar) { case 's': return TimeUnit.SECONDS.toMillis(parsedValue); case 'm': return TimeUnit.MINUTES.toMillis(parsedValue); case 'h': return TimeUnit.HOURS.toMillis(parsedValue); case 'd': return TimeUnit.DAYS.toMillis(parsedValue); } throw new IllegalArgumentException(String.format("Time unit not supported: %s", lastChar)); } private ETLUtils() { throw new AssertionError("Suppress default constructor for non-instantiability"); } }