// // 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.utils; import java.nio.ByteBuffer; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Formatter; import java.util.Locale; import org.apache.commons.lang.math.NumberUtils; import com.cloud.utils.exception.CloudRuntimeException; public class NumbersUtil { public static long parseLong(String s, long defaultValue) { return NumberUtils.toLong(s, defaultValue); } public static int parseInt(String s, int defaultValue) { return NumberUtils.toInt(s, defaultValue); } public static float parseFloat(String s, float defaultValue) { return NumberUtils.toFloat(s, defaultValue); } /** * Converts bytes to long on input. */ public static long bytesToLong(byte b[]) { return bytesToLong(b, 0); } public static long bytesToLong(byte b[], int pos) { return ByteBuffer.wrap(b, pos, 8).getLong(); } /** * Converts a byte array to a hex readable string. **/ public static String bytesToString(byte[] data, int start, int end) { StringBuilder buf = new StringBuilder(); if (end > data.length) { end = data.length; } for (int i = start; i < end; i++) { buf.append(" "); buf.append(Integer.toHexString(data[i] & 0xff)); } return buf.toString(); } protected static final long KB = 1024; protected static final long MB = 1024 * KB; protected static final long GB = 1024 * MB; protected static final long TB = 1024 * GB; public static String toReadableSize(long bytes) { if (bytes < KB && bytes >= 0) { return Long.toString(bytes) + " bytes"; } StringBuilder builder = new StringBuilder(); Formatter format = new Formatter(builder, Locale.getDefault()); if (bytes < MB) { format.format("%.2f KB", (float)bytes / (float)KB); } else if (bytes < GB) { format.format("%.2f MB", (float)bytes / (float)MB); } else if (bytes < TB) { format.format("%.2f GB", (float)bytes / (float)GB); } else { format.format("%.4f TB", (float)bytes / (float)TB); } format.close(); return builder.toString(); } /** * Converts a string of the format 'yy-MM-dd'T'HH:mm:ss.SSS" into ms. * * @param str containing the interval. * @param defaultValue value to return if str doesn't parse. If -1, throws VmopsRuntimeException * @return interval in ms */ public static long parseInterval(String str, long defaultValue) { try { if (str == null) { throw new ParseException("String is wrong", 0); } SimpleDateFormat sdf = null; if (str.contains("D")) { sdf = new SimpleDateFormat("dd'D'HH'h'mm'M'ss'S'SSS'ms'"); } else if (str.contains("h")) { sdf = new SimpleDateFormat("HH'h'mm'M'ss'S'SSS'ms'"); } else if (str.contains("M")) { sdf = new SimpleDateFormat("mm'M'ss'S'SSS'ms'"); } else if (str.contains("S")) { sdf = new SimpleDateFormat("ss'S'SSS'ms'"); } else if (str.contains("ms")) { sdf = new SimpleDateFormat("SSS'ms'"); } if (sdf == null) { throw new ParseException("String is wrong", 0); } Date date = sdf.parse(str); return date.getTime(); } catch (ParseException e) { if (defaultValue != -1) { return defaultValue; } else { throw new CloudRuntimeException("Unable to parse: " + str, e); } } } public static int hash(long value) { return (int)(value ^ (value >>> 32)); } }