// Copyright 2012 Citrix Systems, Inc. Licensed under the
// Apache License, Version 2.0 (the "License"); you may not use this
// file except in compliance with the License. Citrix Systems, Inc.
// reserves all rights not expressly granted by 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.
//
// Automatically generated by addcopyright.py at 04/03/2012
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 com.cloud.utils.exception.CloudRuntimeException;
public class NumbersUtil {
public static long parseLong(String s, long defaultValue) {
if (s == null) {
return defaultValue;
}
try {
return Long.parseLong(s);
} catch (NumberFormatException e) {
return defaultValue;
}
}
public static int parseInt(String s, int defaultValue) {
if (s == null) {
return defaultValue;
}
try {
return Integer.parseInt(s);
} catch (NumberFormatException e) {
return defaultValue;
}
}
public static float parseFloat(String s, float defaultValue) {
if (s == null) {
return defaultValue;
}
try {
return Float.parseFloat(s);
} catch (NumberFormatException e) {
return defaultValue;
}
}
/**
* Converts bytes to short on input.
*/
public static int bytesToShort(byte b[]) {
return (b[1] & 0xff) | ((b[0] << 8) & 0xff00);
}
public static int bytesToShort(byte b[], int pos) {
return (b[pos + 1] & 0xff) | ((b[pos] << 8) & 0xff00);
}
/**
* Converts bytes to long on input.
*/
public static int bytesToInt(byte b[]) {
return bytesToInt(b, 0);
}
public static int bytesToInt(byte b[], int pos) {
int value = b[pos + 3] & 0xff;
value |= (b[pos + 2] << 8) & 0xff00;
value |= (b[pos + 1] << 16) & 0xff0000;
value |= (b[pos] << 24) & 0xff000000;
return value;
}
/**
* Converts a short to a series of bytes for output. Must be 2 bytes long.
*/
public static byte[] shortToBytes(int n) {
byte b[] = new byte[2];
b[1] = (byte) (n & 0xff);
b[0] = (byte) ((n >> 8) & 0xff);
return b;
}
public static char encodeByte(int b) {
if (b < 10) {
return (char) (b + '0');
} else if (b < 36) {
return (char) (b - 10 + 'A');
} else if (b < 62) {
return (char) (b - 36 + 'a');
} else if (b == 62) {
return '(';
} else if (b == 63) {
return ')';
}
return (char) 255;
}
public static int decodeByte(char b) {
if (b >= 'A' && b <= 'Z') {
return b + 10 - 'A';
} else if (b >= 'a' && b <= 'z') {
return b + 36 - 'a';
} else if (b >= '0' && b <= '9') {
return b - '0';
} else if (b == ')') {
return 63;
} else if (b == '(') {
return 62;
}
return -1;
}
/**
* Converts a long to a series of bytes for output. Must be 4 bytes long.
*/
public static byte[] intToBytes(int n) {
byte b[] = new byte[4];
b[3] = (byte) (n & 0xff);
b[2] = (byte) ((n >> 8) & 0xff);
b[1] = (byte) ((n >> 16) & 0xff);
b[0] = (byte) ((n >> 24) & 0xff);
return b;
}
/**
* Sorry for the bad naming but the longToBytes is already taken. Returns an 8 byte long byte array.
**/
public static byte[] longToBytes(long n) {
byte b[] = new byte[8];
b[7] = (byte) (n & 0xff);
b[6] = (byte) ((n >> 8) & 0xff);
b[5] = (byte) ((n >> 16) & 0xff);
b[4] = (byte) ((n >> 24) & 0xff);
b[3] = (byte) ((n >> 32) & 0xff);
b[2] = (byte) ((n >> 40) & 0xff);
b[1] = (byte) ((n >> 48) & 0xff);
b[0] = (byte) ((n >> 56) & 0xff);
return b;
}
/**
* Converts bytes to long on input.
*/
public static long bytesToLong(byte b[]) {
return bytesToLong(b, 0);
}
public static long bytesToLong(byte b[], int pos) {
ByteBuffer buf = ByteBuffer.wrap(b, pos, 8);
return buf.getLong();
/*
* long value = b[pos + 7] & 0xff;
* value |= (b[pos + 6] << 8) & 0xff00;
* value |= (b[pos + 5] << 16) & 0xff0000;
* value |= (b[pos + 4] << 24) & 0xff000000;
* value |= (b[pos + 3] << 32) & 0xff00000000;
* value |= (b[pos + 2] << 40) & 0xff0000000000;
* value |= (b[pos + 1] << 48) & 0xff000000000000;
* value |= (b[pos + 0] << 56) & 0xff00000000000000;
* return value;
*/
}
/**
* 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";
} else if (bytes <= MB) {
StringBuilder builder = new StringBuilder();
Formatter format = new Formatter(builder);
format.format("%.2f KB", (float)bytes / (float)KB);
return builder.toString();
} else if (bytes <= GB) {
StringBuilder builder = new StringBuilder();
Formatter format = new Formatter(builder);
format.format("%.2f MB", (float)bytes / (float)MB);
return builder.toString();
} else if (bytes <= TB) {
StringBuilder builder = new StringBuilder();
Formatter format = new Formatter(builder);
format.format("%.2f GB", (float)bytes / (float)GB);
return builder.toString();
} else {
StringBuilder builder = new StringBuilder();
Formatter format = new Formatter(builder);
format.format("%.4f TB", (float)bytes / (float)TB);
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) {
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'");
}
Date date;
try {
if (str == null || sdf == null) {
throw new ParseException("String is wrong", 0);
}
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));
}
public static void main(String[] args) {
long interval = parseInterval(args[0], -1);
System.out.println(args[0] + " is " + interval);
}
}