/* JsonJavaMapper.java
*
* Copyright 2010-2011 Johannes Kepler Universit�t Linz,
* Institut f�r Wissensbasierte Mathematische Systeme.
*
* This file is part of pureImage.
*
* pureImage is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 3,
* as published by the Free Software Foundation.
*
* pureImage is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with pureImage. If not, see <http://www.gnu.org/licenses/>.
*/
package pI.generator;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
public class JsonJavaMapper {
public JsonJavaMapper() {
}
public Object convert(JsonElement root) {
return json2Java(root);
}
public Object json2Java(JsonElement elem) {
if(elem.isJsonArray()) {
return jsonArrayAsList(elem.getAsJsonArray());
} else if(elem.isJsonPrimitive()) {
return json2JavaPrimitive(elem.getAsJsonPrimitive());
} else {
return jsonObject2Map(elem.getAsJsonObject());
}
}
@SuppressWarnings({"unchecked" })
public List jsonArrayAsList(JsonArray arr) {
ArrayList list = new ArrayList(arr.size());
for (int j = 0; j < arr.size(); j++) {
list.add(json2Java(arr.get(j)));
}
return list;
}
@SuppressWarnings({"unchecked" })
public Map jsonObject2Map(JsonObject obj) {
LinkedHashMap map = new LinkedHashMap();
for(Entry<String, JsonElement> entry: obj.entrySet()) {
map.put(entry.getKey(), json2Java(entry.getValue()));
}
return map;
}
public Object json2JavaPrimitive(JsonPrimitive prim) {
if(prim.isBoolean()) {
return prim.getAsBoolean();
} else if (prim.isString()) {
return prim.getAsString();
} else if (prim.isNumber()) {
return prim.getAsNumber();
} else {
throw new IllegalStateException();
}
}
}