Move util file in PandacubeUtil
This commit is contained in:
parent
c778304401
commit
e23a19213c
218
src/main/java/fr/pandacube/java/util/TypeConverter.java
Normal file
218
src/main/java/fr/pandacube/java/util/TypeConverter.java
Normal file
@ -0,0 +1,218 @@
|
||||
package fr.pandacube.java.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonElement;
|
||||
|
||||
/**
|
||||
* Utility for conversion of basic Java types and JsonElements types
|
||||
* @author Marc
|
||||
*
|
||||
*/
|
||||
public class TypeConverter {
|
||||
|
||||
|
||||
public static Integer toInteger(Object o) {
|
||||
if (o == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (o instanceof JsonElement) {
|
||||
try {
|
||||
return ((JsonElement)o).getAsInt();
|
||||
} catch(UnsupportedOperationException e) {
|
||||
throw new ConvertionException(e);
|
||||
}
|
||||
}
|
||||
|
||||
if (o instanceof Number) {
|
||||
return ((Number)o).intValue();
|
||||
}
|
||||
if (o instanceof String) {
|
||||
try {
|
||||
return Integer.parseInt((String)o);
|
||||
} catch (NumberFormatException e) {
|
||||
throw new ConvertionException(e);
|
||||
}
|
||||
}
|
||||
if (o instanceof Boolean) {
|
||||
return ((Boolean)o) ? 1 : 0;
|
||||
}
|
||||
|
||||
throw new ConvertionException("No integer convertion available for an instance of "+o.getClass());
|
||||
}
|
||||
|
||||
public static int toPrimInt(Object o) {
|
||||
Integer val = toInteger(o);
|
||||
if (val == null)
|
||||
throw new ConvertionException("null values can't converted to primitive int");
|
||||
return val;
|
||||
}
|
||||
|
||||
public static Double toDouble(Object o) {
|
||||
if (o == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (o instanceof JsonElement) {
|
||||
try {
|
||||
return ((JsonElement)o).getAsDouble();
|
||||
} catch(UnsupportedOperationException e) {
|
||||
throw new ConvertionException(e);
|
||||
}
|
||||
}
|
||||
|
||||
if (o instanceof Number) {
|
||||
return ((Number)o).doubleValue();
|
||||
}
|
||||
if (o instanceof String) {
|
||||
try {
|
||||
return Double.parseDouble((String)o);
|
||||
} catch (NumberFormatException e) {
|
||||
throw new ConvertionException(e);
|
||||
}
|
||||
}
|
||||
if (o instanceof Boolean) {
|
||||
return ((Boolean)o) ? 1d : 0d;
|
||||
}
|
||||
|
||||
throw new ConvertionException("No double convertion available for an instance of "+o.getClass());
|
||||
|
||||
}
|
||||
|
||||
public static double toPrimDouble(Object o) {
|
||||
Double val = toDouble(o);
|
||||
if (val == null)
|
||||
throw new ConvertionException("null values can't converted to primitive int");
|
||||
return val;
|
||||
}
|
||||
|
||||
public static String toString(Object o) {
|
||||
if (o == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (o instanceof JsonElement) {
|
||||
try {
|
||||
return ((JsonElement)o).getAsString();
|
||||
} catch(UnsupportedOperationException e) {
|
||||
throw new ConvertionException(e);
|
||||
}
|
||||
}
|
||||
|
||||
if (o instanceof Number || o instanceof String || o instanceof Boolean || o instanceof Character) {
|
||||
return o.toString();
|
||||
}
|
||||
|
||||
throw new ConvertionException("No string convertion available for an instance of "+o.getClass());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param o the object to convert to good type
|
||||
* @param mapIntKeys if the String key representing an int should be duplicated as integer type,
|
||||
* which map to the same value as the original String key. For example, if a key is "12" and map
|
||||
* to the object <i>o</i>, an integer key 12 will be added and map to the same object
|
||||
* <i>o</i>
|
||||
* @return
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static Map<Object, Object> toMap(Object o, boolean mapIntKeys) {
|
||||
if (o == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (o instanceof JsonElement) {
|
||||
o = new Gson().fromJson((JsonElement)o, Object.class);
|
||||
}
|
||||
|
||||
if (o instanceof Map) {
|
||||
Map<Object, Object> currMap = (Map<Object, Object>) o;
|
||||
if (mapIntKeys) {
|
||||
Map<Integer, Object> newEntries = new HashMap<>();
|
||||
for (Map.Entry<Object, Object> entry : currMap.entrySet()) {
|
||||
if (entry.getKey() instanceof String) {
|
||||
try {
|
||||
int intKey = Integer.parseInt((String)entry.getKey());
|
||||
newEntries.put(intKey, entry.getValue());
|
||||
} catch (NumberFormatException e) { }
|
||||
}
|
||||
}
|
||||
if (!newEntries.isEmpty()) {
|
||||
currMap = new HashMap<>(currMap);
|
||||
currMap.putAll(newEntries);
|
||||
}
|
||||
}
|
||||
return currMap;
|
||||
}
|
||||
|
||||
if (o instanceof List) {
|
||||
List<?> list = (List<?>) o;
|
||||
Map<Object, Object> map = new HashMap<>();
|
||||
for(int i = 0; i < list.size(); i++) {
|
||||
map.put(Integer.toString(i), list.get(i));
|
||||
map.put(i, list.get(i));
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
throw new ConvertionException("No Map convertion available for an instance of "+o.getClass());
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static List<Object> toList(Object o) {
|
||||
if (o == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (o instanceof JsonElement) {
|
||||
o = new Gson().fromJson((JsonElement)o, Object.class);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (o instanceof List) {
|
||||
return (List<Object>) o;
|
||||
}
|
||||
|
||||
if (o instanceof Map) {
|
||||
return new ArrayList<>(((Map<?, ?>)o).values());
|
||||
}
|
||||
|
||||
|
||||
throw new ConvertionException("No Map convertion available for an instance of "+o.getClass());
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static class ConvertionException extends RuntimeException {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public ConvertionException(String m) {
|
||||
super(m);
|
||||
}
|
||||
public ConvertionException(Throwable t) {
|
||||
super(t);
|
||||
}
|
||||
public ConvertionException(String m, Throwable t) {
|
||||
super(m, t);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user