blob: 54b8b35aad638de3c11bc67eb5ad0c12b2199e04 [file] [log] [blame]
// Copyright 2016 Twitter. All rights reserved.
//
// 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.twitter.heron.common.basics;
import java.net.URI;
import java.net.URISyntaxException;
import java.time.Duration;
import java.time.temporal.TemporalUnit;
import java.util.ArrayList;
import java.util.List;
public final class TypeUtils {
private TypeUtils() {
}
public static Integer getInteger(Object o) {
if (o instanceof Long) {
return ((Long) o).intValue();
} else if (o instanceof Integer) {
return (Integer) o;
} else if (o instanceof Short) {
return ((Short) o).intValue();
} else {
try {
return Integer.parseInt(o.toString());
} catch (NumberFormatException nfe) {
throw new IllegalArgumentException("Don't know how to convert " + o + " to int");
}
}
}
public static Long getLong(Object o) {
if (o instanceof Long) {
return (Long) o;
} else if (o instanceof Integer) {
return ((Integer) o).longValue();
} else if (o instanceof Short) {
return ((Short) o).longValue();
} else {
try {
return Long.parseLong(o.toString());
} catch (NumberFormatException nfe) {
throw new IllegalArgumentException("Don't know how to convert " + o + " to long");
}
}
}
public static Double getDouble(Object o) {
if (o instanceof Double) {
return (Double) o;
} else if (o instanceof Float) {
return ((Float) o).doubleValue();
} else if (o instanceof Long) {
return ((Long) o).doubleValue();
} else if (o instanceof Integer) {
return ((Integer) o).doubleValue();
} else if (o instanceof Short) {
return ((Short) o).doubleValue();
} else {
try {
return Double.parseDouble(o.toString());
} catch (NumberFormatException nfe) {
throw new IllegalArgumentException("Failed to convert " + o + " to double");
}
}
}
public static Duration getDuration(Object o, TemporalUnit unit) {
if (o != null && o instanceof Duration) {
return (Duration) o;
}
try {
return Duration.of(getLong(o), unit);
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Don't know how to convert " + o + " to Duration", e);
}
}
public static ByteAmount getByteAmount(Object o) {
if (o != null && o instanceof ByteAmount) {
return (ByteAmount) o;
}
try {
return ByteAmount.fromBytes(getLong(o));
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Don't know how to convert " + o + " to ByteAmount", e);
}
}
public static Boolean getBoolean(Object o) {
if (o instanceof Boolean) {
return (Boolean) o;
} else if (o instanceof String) {
return Boolean.valueOf((String) o);
} else {
throw new IllegalArgumentException("Failed to convert " + o + " to boolean");
}
}
public static URI getURI(String spec) {
try {
return new URI(spec);
} catch (URISyntaxException e) {
throw new IllegalArgumentException("Don't know how to convert " + spec + " to URI");
}
}
@SuppressWarnings("unchecked")
public static List<String> getListOfStrings(Object o) {
if (o == null) {
return new ArrayList<>();
} else if (o instanceof List) {
return (List<String>) o;
} else {
throw new IllegalArgumentException("Failed to convert " + o + " to List<String>");
}
}
}